From 9811e14665879801028e5ef088aa538cbb8b5f94 Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Tue, 12 Oct 2021 08:59:23 +1100 Subject: Adding newline to param.php to fix the patching error. --- h-source/Application/Include/params.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'h-source/Application') diff --git a/h-source/Application/Include/params.php b/h-source/Application/Include/params.php index 19f1ed7..5ab28df 100644 --- a/h-source/Application/Include/params.php +++ b/h-source/Application/Include/params.php @@ -225,4 +225,4 @@ class Account $result = $mailer->batchSend($message); } -} \ No newline at end of file +} -- cgit v1.2.3 From 07f5140771388c9e0c8a99b0dd2e5d950bdb173b Mon Sep 17 00:00:00 2001 From: Yuchen Pei Date: Thu, 14 Oct 2021 15:16:42 +1100 Subject: moving h-source subdir out. --- .htaccess | 5 + .../Controllers/AcquisitioncardsController.php | 131 + Application/Controllers/BaseController.php | 303 + Application/Controllers/BluetoothController.php | 131 + Application/Controllers/ClientController.php | 55 + Application/Controllers/ContactController.php | 43 + Application/Controllers/CreditsController.php | 43 + Application/Controllers/DownloadController.php | 275 + .../Controllers/EthernetcardsController.php | 131 + Application/Controllers/FaqController.php | 41 + .../Controllers/FingerprintreadersController.php | 131 + Application/Controllers/GenericController.php | 1001 +++ Application/Controllers/HardwareController.php | 43 + Application/Controllers/HelpController.php | 41 + Application/Controllers/HistoryController.php | 650 ++ Application/Controllers/HomeController.php | 47 + .../Controllers/HostcontrollersController.php | 137 + Application/Controllers/ImageController.php | 41 + Application/Controllers/IssuesController.php | 203 + Application/Controllers/MeetController.php | 338 + Application/Controllers/ModemsController.php | 131 + Application/Controllers/MyController.php | 214 + Application/Controllers/NewsController.php | 67 + Application/Controllers/NotebooksController.php | 159 + Application/Controllers/PrintersController.php | 154 + Application/Controllers/ProjectController.php | 42 + Application/Controllers/RaidadaptersController.php | 131 + Application/Controllers/RssController.php | 64 + Application/Controllers/ScannersController.php | 127 + .../Controllers/SdcardreadersController.php | 131 + Application/Controllers/SearchController.php | 267 + Application/Controllers/SoundcardsController.php | 127 + Application/Controllers/SpecialController.php | 216 + Application/Controllers/ThreegcardsController.php | 127 + Application/Controllers/UsersController.php | 352 + Application/Controllers/VideocardsController.php | 127 + Application/Controllers/WebcamsController.php | 127 + Application/Controllers/WifiController.php | 127 + Application/Controllers/WikiController.php | 644 ++ Application/Hooks/AfterInitialization.php | 10 + Application/Hooks/BeforeChecks.php | 20 + Application/Hooks/BeforeInitialization.php | 10 + Application/Hooks/index.html | 1 + Application/Include/distributions.php | 91 + Application/Include/hardware.php | 576 ++ Application/Include/languages.php | 2363 ++++++ Application/Include/license.php | 93 + Application/Include/myFunctions.php | 542 ++ Application/Include/params.php | 228 + Application/Include/vendorTranslations.php | 4247 +++++++++++ Application/Include/vendors.php | 4191 +++++++++++ Application/Include/version.php | 138 + Application/Include/wikiFormatting.php | 356 + Application/Models/AcquisitioncardsModel.php | 68 + Application/Models/BaseModel.php | 43 + Application/Models/BluetoothModel.php | 68 + Application/Models/BoxesModel.php | 42 + Application/Models/DeletionModel.php | 53 + Application/Models/DistrosModel.php | 34 + Application/Models/EthernetcardsModel.php | 68 + Application/Models/FingerprintreadersModel.php | 68 + Application/Models/GenericModel.php | 103 + Application/Models/HardwareModel.php | 348 + Application/Models/HistoryModel.php | 56 + Application/Models/HostcontrollersModel.php | 69 + Application/Models/IssuesModel.php | 116 + Application/Models/MessagesModel.php | 73 + Application/Models/ModemsModel.php | 68 + Application/Models/NewsModel.php | 44 + Application/Models/NotebooksModel.php | 94 + Application/Models/ParamsModel.php | 43 + Application/Models/PrintersModel.php | 70 + Application/Models/ProfileModel.php | 78 + Application/Models/RaidadaptersModel.php | 68 + Application/Models/RevisionsModel.php | 50 + Application/Models/ScannersModel.php | 68 + Application/Models/SdcardreadersModel.php | 68 + Application/Models/SoundcardsModel.php | 68 + Application/Models/TalkModel.php | 116 + Application/Models/ThreegcardsModel.php | 68 + Application/Models/UsersModel.php | 295 + Application/Models/VendorsModel.php | 82 + Application/Models/VideocardsModel.php | 68 + Application/Models/WebcamsModel.php | 72 + Application/Models/WifiModel.php | 68 + Application/Models/WikiModel.php | 319 + Application/Models/WikirevisionsModel.php | 45 + Application/Models/WikitalkModel.php | 112 + Application/Modules/ModBase.php | 41 + Application/Modules/ModImage.php | 45 + Application/Modules/ModLink.php | 18 + Application/Modules/ModLinkimage.php | 18 + Application/Modules/ModRaw.php | 18 + Application/Modules/ModTopLink.php | 32 + Application/Modules/index.html | 1 + Application/Strings/Lang/It/DbCondStrings.php | 34 + Application/Strings/Lang/It/ModelStrings.php | 36 + Application/Strings/Lang/It/UploadStrings.php | 44 + Application/Strings/Lang/It/ValCondStrings.php | 92 + Application/Strings/Lang/It/index.html | 1 + Application/Strings/Lang/index.html | 1 + Application/Strings/index.html | 1 + Application/Views/Desktop/Client/info.php | 30 + Application/Views/Desktop/Client/license.php | 25 + Application/Views/Desktop/Contact/index.php | 39 + Application/Views/Desktop/Contact/index_de.php | 39 + Application/Views/Desktop/Contact/index_es.php | 39 + Application/Views/Desktop/Contact/index_fr.php | 39 + Application/Views/Desktop/Contact/index_gr.php | 39 + Application/Views/Desktop/Contact/index_it.php | 39 + Application/Views/Desktop/Credits/index.php | 65 + Application/Views/Desktop/Credits/index_es.php | 65 + Application/Views/Desktop/Credits/index_fr.php | 63 + Application/Views/Desktop/Credits/index_gr.php | 65 + Application/Views/Desktop/Credits/index_it.php | 66 + Application/Views/Desktop/Download/index.php | 114 + Application/Views/Desktop/Download/xml.php | 22 + Application/Views/Desktop/Hardware/left.php | 92 + Application/Views/Desktop/Help/index.php | 447 ++ Application/Views/Desktop/Help/index_de.php | 443 ++ Application/Views/Desktop/Help/index_es.php | 440 ++ Application/Views/Desktop/Help/index_fr.php | 432 ++ Application/Views/Desktop/Help/index_it.php | 436 ++ Application/Views/Desktop/History/viewall.php | 40 + Application/Views/Desktop/Home/left.php | 85 + Application/Views/Desktop/Home/left_de.php | 86 + Application/Views/Desktop/Home/left_es.php | 85 + Application/Views/Desktop/Home/left_fr.php | 88 + Application/Views/Desktop/Home/left_gr.php | 87 + Application/Views/Desktop/Home/left_it.php | 88 + Application/Views/Desktop/Issues/view.php | 249 + Application/Views/Desktop/Issues/viewall.php | 122 + Application/Views/Desktop/Meet/contributions.php | 79 + Application/Views/Desktop/Meet/hardware.php | 30 + Application/Views/Desktop/Meet/issues.php | 31 + Application/Views/Desktop/Meet/list_template.php | 50 + Application/Views/Desktop/Meet/meet.php | 114 + Application/Views/Desktop/Meet/messages.php | 31 + Application/Views/Desktop/Meet/talk.php | 32 + Application/Views/Desktop/Meet/wiki.php | 29 + Application/Views/Desktop/Meet/wikitalk.php | 31 + Application/Views/Desktop/My/email.php | 33 + Application/Views/Desktop/My/goodbye.php | 63 + Application/Views/Desktop/My/panel.php | 64 + Application/Views/Desktop/My/password.php | 33 + Application/Views/Desktop/My/profile.php | 33 + Application/Views/Desktop/News/index.php | 51 + Application/Views/Desktop/Notebooks/.svn/entries | 96 + .../Notebooks/.svn/text-base/form.php.svn-base | 156 + .../Notebooks/.svn/text-base/page.php.svn-base | 120 + Application/Views/Desktop/Notebooks/form.php | 156 + Application/Views/Desktop/Notebooks/page.php | 120 + Application/Views/Desktop/Project/index.php | 48 + Application/Views/Desktop/Project/index_de.php | 49 + Application/Views/Desktop/Project/index_es.php | 49 + Application/Views/Desktop/Project/index_fr.php | 48 + Application/Views/Desktop/Project/index_gr.php | 48 + Application/Views/Desktop/Project/index_it.php | 48 + Application/Views/Desktop/Rss/modifications.php | 46 + Application/Views/Desktop/Rss/notapproved.php | 41 + Application/Views/Desktop/Search/form.php | 111 + Application/Views/Desktop/Search/lspci_results.php | 89 + Application/Views/Desktop/Search/results.php | 87 + Application/Views/Desktop/Special/modactions.php | 95 + .../Views/Desktop/Special/modifications.php | 45 + .../Views/Desktop/Special/pages_deleted.php | 45 + Application/Views/Desktop/Users/add.php | 72 + Application/Views/Desktop/Users/change.php | 30 + Application/Views/Desktop/Users/confirmation.php | 44 + Application/Views/Desktop/Users/forgot.php | 57 + Application/Views/Desktop/Users/login.php | 67 + Application/Views/Desktop/Users/logout.php | 27 + Application/Views/Desktop/Users/notice.php | 96 + Application/Views/Desktop/Wiki/climb.php | 52 + Application/Views/Desktop/Wiki/differences.php | 64 + Application/Views/Desktop/Wiki/form.php | 105 + Application/Views/Desktop/Wiki/history.php | 74 + Application/Views/Desktop/Wiki/modifications.php | 45 + Application/Views/Desktop/Wiki/not_found.php | 34 + Application/Views/Desktop/Wiki/page.php | 154 + Application/Views/Desktop/Wiki/pages.php | 45 + Application/Views/Desktop/Wiki/talk.php | 173 + Application/Views/Desktop/bottom_left.php | 29 + Application/Views/Desktop/catalogue.php | 131 + Application/Views/Desktop/cleared.php | 28 + Application/Views/Desktop/climb.php | 37 + Application/Views/Desktop/dialog.php | 102 + Application/Views/Desktop/differences.php | 49 + Application/Views/Desktop/footer.php | 45 + Application/Views/Desktop/form.php | 160 + Application/Views/Desktop/header.php | 120 + Application/Views/Desktop/history.php | 63 + Application/Views/Desktop/if_page_deleted.php | 60 + Application/Views/Desktop/license_notice.php | 32 + Application/Views/Desktop/moderator_dialog.php | 69 + .../Views/Desktop/noscript_distributions.php | 33 + Application/Views/Desktop/not_found.php | 34 + Application/Views/Desktop/page.php | 141 + Application/Views/Desktop/right.php | 165 + Application/Views/Desktop/suggest_dialog.php | 43 + Application/Views/Desktop/talk.php | 163 + Application/Views/Desktop/top_left.php | 190 + Application/Views/Desktop/wiki_page.php | 153 + Application/Views/Desktop/xml_response.php | 28 + Application/Views/Mobile/Contact/index.php | 41 + Application/Views/Mobile/Contact/index_de.php | 41 + Application/Views/Mobile/Contact/index_es.php | 41 + Application/Views/Mobile/Contact/index_fr.php | 41 + Application/Views/Mobile/Contact/index_gr.php | 41 + Application/Views/Mobile/Contact/index_it.php | 41 + Application/Views/Mobile/Credits/index.php | 65 + Application/Views/Mobile/Credits/index_es.php | 65 + Application/Views/Mobile/Credits/index_fr.php | 63 + Application/Views/Mobile/Credits/index_gr.php | 65 + Application/Views/Mobile/Credits/index_it.php | 66 + Application/Views/Mobile/Hardware/left.php | 127 + Application/Views/Mobile/Home/left.php | 87 + Application/Views/Mobile/Home/left_de.php | 86 + Application/Views/Mobile/Home/left_es.php | 86 + Application/Views/Mobile/Home/left_fr.php | 88 + Application/Views/Mobile/Home/left_gr.php | 87 + Application/Views/Mobile/Home/left_it.php | 88 + Application/Views/Mobile/Notebooks/page.php | 119 + Application/Views/Mobile/Project/index.php | 50 + Application/Views/Mobile/Project/index_de.php | 51 + Application/Views/Mobile/Project/index_es.php | 51 + Application/Views/Mobile/Project/index_fr.php | 50 + Application/Views/Mobile/Project/index_gr.php | 50 + Application/Views/Mobile/Project/index_it.php | 50 + Application/Views/Mobile/bottom_left.php | 29 + Application/Views/Mobile/catalogue.php | 105 + Application/Views/Mobile/dialog.php | 22 + Application/Views/Mobile/footer.php | 64 + Application/Views/Mobile/header.php | 104 + Application/Views/Mobile/if_page_deleted.php | 60 + Application/Views/Mobile/moderator_dialog.php | 21 + Application/Views/Mobile/page.php | 134 + Application/Views/Mobile/right.php | 22 + Application/Views/Mobile/top_left.php | 43 + Application/index.html | 1 + COPYRIGHT.txt | 24 + Config/Autoload.php | 44 + Config/Config.php | 58 + Config/Reporting.php | 41 + Config/Restricted.php | 94 + Config/Route.php | 280 + Credits.txt | 34 + Css/comune.css | 130 + Css/explorer6.css | 112 + Css/explorer7.css | 25 + Css/files.css | 113 + Css/form.css | 31 + Css/index.html | 1 + Css/login.css | 21 + Css/main.css | 2249 ++++++ Css/mainmenu.css | 78 + Css/mobile.css | 271 + Css/pagelist.css | 29 + Css/panel.css | 74 + Css/popupmenu.css | 49 + Css/scaffold.css | 105 + External/Fonts/FreeFont/AUTHORS | 208 + External/Fonts/FreeFont/COPYING | 674 ++ External/Fonts/FreeFont/CREDITS | 528 ++ External/Fonts/FreeFont/ChangeLog | 4525 ++++++++++++ External/Fonts/FreeFont/FreeMono.ttf | Bin 0 -> 314348 bytes External/Fonts/FreeFont/INSTALL | 86 + External/Fonts/FreeFont/README | 108 + External/swiftmailer/lib/classes/Swift.php | 57 + .../swiftmailer/lib/classes/Swift/Attachment.php | 75 + .../ByteStream/AbstractFilterableInputStream.php | 178 + .../classes/Swift/ByteStream/ArrayByteStream.php | 190 + .../classes/Swift/ByteStream/FileByteStream.php | 177 + .../lib/classes/Swift/CharacterReader.php | 60 + .../CharacterReader/GenericFixedWidthReader.php | 96 + .../Swift/CharacterReader/UsAsciiReader.php | 83 + .../classes/Swift/CharacterReader/Utf8Reader.php | 183 + .../lib/classes/Swift/CharacterReaderFactory.php | 29 + .../SimpleCharacterReaderFactory.php | 119 + .../lib/classes/Swift/CharacterStream.php | 86 + .../Swift/CharacterStream/ArrayCharacterStream.php | 319 + .../Swift/CharacterStream/NgCharacterStream.php | 300 + .../lib/classes/Swift/DependencyContainer.php | 349 + .../lib/classes/Swift/DependencyException.php | 30 + .../swiftmailer/lib/classes/Swift/EmbeddedFile.php | 73 + External/swiftmailer/lib/classes/Swift/Encoder.php | 32 + .../lib/classes/Swift/Encoder/Base64Encoder.php | 63 + .../lib/classes/Swift/Encoder/QpEncoder.php | 263 + .../lib/classes/Swift/Encoder/Rfc2231Encoder.php | 89 + .../swiftmailer/lib/classes/Swift/Encoding.php | 70 + .../lib/classes/Swift/Events/CommandEvent.php | 67 + .../lib/classes/Swift/Events/CommandListener.php | 29 + .../swiftmailer/lib/classes/Swift/Events/Event.php | 39 + .../lib/classes/Swift/Events/EventDispatcher.php | 81 + .../lib/classes/Swift/Events/EventListener.php | 19 + .../lib/classes/Swift/Events/EventObject.php | 65 + .../lib/classes/Swift/Events/ResponseEvent.php | 65 + .../lib/classes/Swift/Events/ResponseListener.php | 29 + .../lib/classes/Swift/Events/SendEvent.php | 127 + .../lib/classes/Swift/Events/SendListener.php | 35 + .../classes/Swift/Events/SimpleEventDispatcher.php | 175 + .../classes/Swift/Events/TransportChangeEvent.php | 31 + .../Swift/Events/TransportChangeListener.php | 53 + .../Swift/Events/TransportExceptionEvent.php | 50 + .../Swift/Events/TransportExceptionListener.php | 30 + .../lib/classes/Swift/FailoverTransport.php | 48 + .../swiftmailer/lib/classes/Swift/FileStream.php | 28 + .../swiftmailer/lib/classes/Swift/Filterable.php | 34 + External/swiftmailer/lib/classes/Swift/Image.php | 62 + .../lib/classes/Swift/InputByteStream.php | 72 + .../swiftmailer/lib/classes/Swift/IoException.php | 30 + .../swiftmailer/lib/classes/Swift/KeyCache.php | 99 + .../lib/classes/Swift/KeyCache/ArrayKeyCache.php | 209 + .../lib/classes/Swift/KeyCache/DiskKeyCache.php | 316 + .../classes/Swift/KeyCache/KeyCacheInputStream.php | 53 + .../lib/classes/Swift/KeyCache/NullKeyCache.php | 110 + .../Swift/KeyCache/SimpleKeyCacheInputStream.php | 131 + .../lib/classes/Swift/LoadBalancedTransport.php | 48 + .../lib/classes/Swift/MailTransport.php | 48 + External/swiftmailer/lib/classes/Swift/Mailer.php | 173 + .../Swift/Mailer/ArrayRecipientIterator.php | 59 + .../lib/classes/Swift/Mailer/RecipientIterator.php | 34 + External/swiftmailer/lib/classes/Swift/Message.php | 82 + .../lib/classes/Swift/Mime/Attachment.php | 143 + .../lib/classes/Swift/Mime/CharsetObserver.php | 26 + .../lib/classes/Swift/Mime/ContentEncoder.php | 41 + .../Mime/ContentEncoder/Base64ContentEncoder.php | 81 + .../Mime/ContentEncoder/PlainContentEncoder.php | 175 + .../Swift/Mime/ContentEncoder/QpContentEncoder.php | 117 + .../lib/classes/Swift/Mime/EmbeddedFile.php | 51 + .../lib/classes/Swift/Mime/EncodingObserver.php | 28 + .../swiftmailer/lib/classes/Swift/Mime/Header.php | 85 + .../lib/classes/Swift/Mime/HeaderEncoder.php | 28 + .../Mime/HeaderEncoder/Base64HeaderEncoder.php | 36 + .../Swift/Mime/HeaderEncoder/QpHeaderEncoder.php | 99 + .../lib/classes/Swift/Mime/HeaderFactory.php | 72 + .../lib/classes/Swift/Mime/HeaderSet.php | 170 + .../classes/Swift/Mime/Headers/AbstractHeader.php | 596 ++ .../lib/classes/Swift/Mime/Headers/DateHeader.php | 118 + .../Swift/Mime/Headers/IdentificationHeader.php | 161 + .../classes/Swift/Mime/Headers/MailboxHeader.php | 316 + .../Swift/Mime/Headers/ParameterizedHeader.php | 274 + .../lib/classes/Swift/Mime/Headers/PathHeader.php | 126 + .../Swift/Mime/Headers/UnstructuredHeader.php | 108 + .../swiftmailer/lib/classes/Swift/Mime/Message.php | 230 + .../lib/classes/Swift/Mime/MimeEntity.php | 108 + .../lib/classes/Swift/Mime/MimePart.php | 196 + .../lib/classes/Swift/Mime/ParameterizedHeader.php | 35 + .../lib/classes/Swift/Mime/SimpleHeaderFactory.php | 187 + .../lib/classes/Swift/Mime/SimpleHeaderSet.php | 396 + .../lib/classes/Swift/Mime/SimpleMessage.php | 609 ++ .../lib/classes/Swift/Mime/SimpleMimeEntity.php | 803 +++ .../swiftmailer/lib/classes/Swift/MimePart.php | 65 + .../lib/classes/Swift/OutputByteStream.php | 41 + .../lib/classes/Swift/Plugins/AntiFloodPlugin.php | 147 + .../Swift/Plugins/BandwidthMonitorPlugin.php | 173 + .../Swift/Plugins/Decorator/Replacements.php | 36 + .../lib/classes/Swift/Plugins/DecoratorPlugin.php | 201 + .../lib/classes/Swift/Plugins/Logger.php | 37 + .../lib/classes/Swift/Plugins/LoggerPlugin.php | 160 + .../classes/Swift/Plugins/Loggers/ArrayLogger.php | 73 + .../classes/Swift/Plugins/Loggers/EchoLogger.php | 64 + .../classes/Swift/Plugins/Pop/Pop3Connection.php | 36 + .../classes/Swift/Plugins/Pop/Pop3Exception.php | 34 + .../classes/Swift/Plugins/PopBeforeSmtpPlugin.php | 288 + .../lib/classes/Swift/Plugins/Reporter.php | 36 + .../lib/classes/Swift/Plugins/ReporterPlugin.php | 82 + .../Swift/Plugins/Reporters/HitReporter.php | 63 + .../Swift/Plugins/Reporters/HtmlReporter.php | 47 + .../lib/classes/Swift/Plugins/Sleeper.php | 26 + .../lib/classes/Swift/Plugins/ThrottlerPlugin.php | 188 + .../lib/classes/Swift/Plugins/Timer.php | 26 + .../swiftmailer/lib/classes/Swift/Preferences.php | 76 + .../lib/classes/Swift/ReplacementFilterFactory.php | 27 + .../lib/classes/Swift/RfcComplianceException.php | 30 + .../lib/classes/Swift/SendmailTransport.php | 48 + .../lib/classes/Swift/SmtpTransport.php | 56 + .../swiftmailer/lib/classes/Swift/StreamFilter.php | 33 + .../StreamFilters/ByteArrayReplacementFilter.php | 188 + .../StreamFilters/StringReplacementFilter.php | 66 + .../StringReplacementFilterFactory.php | 53 + .../lib/classes/Swift/SwiftException.php | 28 + .../swiftmailer/lib/classes/Swift/Transport.php | 60 + .../Swift/Transport/AbstractSmtpTransport.php | 543 ++ .../Transport/Esmtp/Auth/CramMd5Authenticator.php | 88 + .../Transport/Esmtp/Auth/LoginAuthenticator.php | 58 + .../Transport/Esmtp/Auth/PlainAuthenticator.php | 57 + .../classes/Swift/Transport/Esmtp/AuthHandler.php | 262 + .../Swift/Transport/Esmtp/Authenticator.php | 38 + .../lib/classes/Swift/Transport/EsmtpHandler.php | 82 + .../lib/classes/Swift/Transport/EsmtpTransport.php | 340 + .../classes/Swift/Transport/FailoverTransport.php | 97 + .../lib/classes/Swift/Transport/IoBuffer.php | 65 + .../Swift/Transport/LoadBalancedTransport.php | 188 + .../lib/classes/Swift/Transport/MailInvoker.php | 36 + .../lib/classes/Swift/Transport/MailTransport.php | 242 + .../classes/Swift/Transport/SendmailTransport.php | 173 + .../classes/Swift/Transport/SimpleMailInvoker.php | 58 + .../lib/classes/Swift/Transport/SmtpAgent.php | 36 + .../lib/classes/Swift/Transport/StreamBuffer.php | 276 + .../lib/classes/Swift/TransportException.php | 31 + .../swiftmailer/lib/dependency_maps/cache_deps.php | 25 + .../swiftmailer/lib/dependency_maps/mime_deps.php | 97 + .../lib/dependency_maps/transport_deps.php | 62 + External/swiftmailer/lib/mime_types.php | 76 + External/swiftmailer/lib/preferences.php | 20 + External/swiftmailer/lib/swift_init.php | 21 + External/swiftmailer/lib/swift_required.php | 22 + External/swiftmailer/lib/swift_required_pear.php | 22 + Img/Acun/book.png | Bin 0 -> 11591 bytes Img/Acun/document_properties.png | Bin 0 -> 8274 bytes Img/Acun/filenew.png | Bin 0 -> 9174 bytes Img/Acun/go_previous.png | Bin 0 -> 10751 bytes Img/Acun/help_hint.png | Bin 0 -> 13318 bytes Img/Acun/note.png | Bin 0 -> 6045 bytes Img/Crystal/1282042718_hardware.png | Bin 0 -> 20291 bytes Img/Crystal/1282042976_hardware.png | Bin 0 -> 3855 bytes Img/Crystal/agt_forward.png | Bin 0 -> 729 bytes Img/Crystal/button_cancel.png | Bin 0 -> 792 bytes Img/Crystal/button_ok.png | Bin 0 -> 612 bytes Img/Crystal/cam_mount-22.png | Bin 0 -> 4075 bytes Img/Crystal/cam_mount.png | Bin 0 -> 18928 bytes Img/Crystal/clear.png | Bin 0 -> 1120 bytes Img/Crystal/hardware.png | Bin 0 -> 3478 bytes Img/Crystal/home.png | Bin 0 -> 867 bytes Img/Crystal/lock.png | Bin 0 -> 3604 bytes Img/Crystal/modem.png | Bin 0 -> 5434 bytes Img/Crystal/modem_22.png | Bin 0 -> 3744 bytes Img/Crystal/rss.png | Bin 0 -> 2110 bytes Img/Crystal/unlock.png | Bin 0 -> 3995 bytes Img/Crystal/usb.png | Bin 0 -> 8059 bytes Img/Crystal/usb_22.png | Bin 0 -> 1123 bytes Img/Famfamfam/de.png | Bin 0 -> 545 bytes Img/Famfamfam/es.png | Bin 0 -> 469 bytes Img/Famfamfam/fr.png | Bin 0 -> 545 bytes Img/Famfamfam/gb.png | Bin 0 -> 599 bytes Img/Famfamfam/gr.png | Bin 0 -> 487 bytes Img/Famfamfam/it.png | Bin 0 -> 420 bytes Img/Glaze/folder_blue.png | Bin 0 -> 1150 bytes Img/Glaze/folder_blue_open.png | Bin 0 -> 1260 bytes Img/Glaze/viewmag.png | Bin 0 -> 980 bytes Img/H2O/applications-internet.png | Bin 0 -> 8330 bytes Img/H2O/audio-card.png | Bin 0 -> 4588 bytes Img/H2O/audio-card_22.png | Bin 0 -> 1051 bytes Img/H2O/camera-web.png | Bin 0 -> 4956 bytes Img/H2O/camera-web_22.png | Bin 0 -> 1236 bytes Img/H2O/computer-laptop.png | Bin 0 -> 3315 bytes Img/H2O/computer-laptop_22.png | Bin 0 -> 946 bytes Img/H2O/download.png | Bin 0 -> 2445 bytes Img/H2O/download_48.png | Bin 0 -> 4482 bytes Img/H2O/im-ban-user.png | Bin 0 -> 1258 bytes Img/H2O/im-user.png | Bin 0 -> 1109 bytes Img/H2O/media-flash-sd-mmc.png | Bin 0 -> 4272 bytes Img/H2O/media-flash-sd-mmc_22.png | Bin 0 -> 1081 bytes Img/H2O/network-wired.png | Bin 0 -> 2735 bytes Img/H2O/network-wired_22.png | Bin 0 -> 860 bytes Img/H2O/network-wireless.png | Bin 0 -> 6942 bytes Img/H2O/network-wireless_22.png | Bin 0 -> 1331 bytes Img/H2O/preferences-system-bluetooth-22.png | Bin 0 -> 1046 bytes Img/H2O/preferences-system-bluetooth.png | Bin 0 -> 4558 bytes Img/H2O/printer.png | Bin 0 -> 2790 bytes Img/H2O/printer_22.png | Bin 0 -> 877 bytes Img/H2O/scanner.png | Bin 0 -> 7684 bytes Img/H2O/scanner_22.png | Bin 0 -> 856 bytes Img/Icons/back.png | Bin 0 -> 1145 bytes Img/Icons/delete.png | Bin 0 -> 2599 bytes Img/Icons/elementary_2_5/AUTHORS | 28 + Img/Icons/elementary_2_5/CONTRIBUTORS | 3 + Img/Icons/elementary_2_5/COPYING | 340 + Img/Icons/elementary_2_5/ChangeLog | 6 + Img/Icons/elementary_2_5/add.png | Bin 0 -> 717 bytes Img/Icons/elementary_2_5/clear_filter.png | Bin 0 -> 1030 bytes Img/Icons/elementary_2_5/delete.png | Bin 0 -> 1030 bytes Img/Icons/elementary_2_5/down.png | Bin 0 -> 858 bytes Img/Icons/elementary_2_5/edit.png | Bin 0 -> 958 bytes Img/Icons/elementary_2_5/find.png | Bin 0 -> 864 bytes Img/Icons/elementary_2_5/left.png | Bin 0 -> 852 bytes Img/Icons/elementary_2_5/link.png | Bin 0 -> 1127 bytes Img/Icons/elementary_2_5/panel.png | Bin 0 -> 791 bytes Img/Icons/elementary_2_5/up.png | Bin 0 -> 824 bytes Img/Icons/file.png | Bin 0 -> 2963 bytes Img/Icons/folder.png | Bin 0 -> 1545 bytes Img/Icons/image.png | Bin 0 -> 1220 bytes Img/Icons/index.html | 1 + Img/back-60.png | Bin 0 -> 2477 bytes Img/back_last.png | Bin 0 -> 2576 bytes Img/back_wiki.png | Bin 0 -> 2548 bytes Img/discover.png | Bin 0 -> 12231 bytes Img/download.png | Bin 0 -> 10514 bytes Img/download_code.png | Bin 0 -> 12232 bytes Img/download_code_gpl3.png | Bin 0 -> 14218 bytes Img/edit-60.png | Bin 0 -> 2483 bytes Img/fingerprint_icon-22.png | Bin 0 -> 1314 bytes Img/fingerprint_icon.png | Bin 0 -> 5032 bytes Img/fsf_logo.png | Bin 0 -> 5768 bytes Img/history-60.png | Bin 0 -> 3428 bytes Img/link.png | Bin 0 -> 283 bytes Img/mobile.png | Bin 0 -> 8201 bytes Img/new-60.png | Bin 0 -> 2098 bytes Img/popup_back.png | Bin 0 -> 722 bytes Img/rss.png | Bin 0 -> 9114 bytes Img/search_back.png | Bin 0 -> 3404 bytes Img/tab_icon_2.ico | Bin 0 -> 1406 bytes Img/talk-60.png | Bin 0 -> 2163 bytes Img/talk_messages.png | Bin 0 -> 536 bytes Img/title.png | Bin 0 -> 7924 bytes Js/DisplayTag.js | 10 + Js/TinyMCE.js | 34 + Js/functions.js | 189 + Js/index.html | 1 + .../ui-bg_diagonals-small_25_c5ddfc_40x40.png | Bin 0 -> 157 bytes .../ui-bg_diagonals-thick_20_e69700_40x40.png | Bin 0 -> 257 bytes .../ui-bg_diagonals-thick_22_1484e6_40x40.png | Bin 0 -> 259 bytes .../ui-bg_diagonals-thick_26_2293f7_40x40.png | Bin 0 -> 259 bytes .../images/ui-bg_flat_0_e69700_40x100.png | Bin 0 -> 181 bytes .../images/ui-bg_flat_0_e6b900_40x100.png | Bin 0 -> 181 bytes .../ui-bg_highlight-soft_100_f9f9f9_1x100.png | Bin 0 -> 88 bytes .../images/ui-bg_inset-hard_100_eeeeee_1x100.png | Bin 0 -> 91 bytes .../excite-bike/images/ui-icons_0a82eb_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_0b54d5_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_5fa5e3_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_fcdd4a_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../css/excite-bike/jquery-ui-1.8.4.custom.css | 315 + Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js | 87 + Js/jquery/images/ajax-loader.png | Bin 0 -> 503 bytes Js/jquery/images/icon-search-black.png | Bin 0 -> 1245 bytes Js/jquery/images/icons-18-black.png | Bin 0 -> 2064 bytes Js/jquery/images/icons-18-white.png | Bin 0 -> 2200 bytes Js/jquery/images/icons-36-black.png | Bin 0 -> 3403 bytes Js/jquery/images/icons-36-white.png | Bin 0 -> 4020 bytes Js/jquery/jquery-1.7.1.min.js | 4 + Js/jquery/jquery.mobile-1.1.0.css | 2053 ++++++ Js/jquery/jquery.mobile-1.1.0.js | 7551 ++++++++++++++++++++ .../ui-bg_diagonals-small_25_c5ddfc_40x40.png | Bin 0 -> 157 bytes .../ui-bg_diagonals-thick_20_e69700_40x40.png | Bin 0 -> 257 bytes .../ui-bg_diagonals-thick_22_1484e6_40x40.png | Bin 0 -> 259 bytes .../ui-bg_diagonals-thick_26_2293f7_40x40.png | Bin 0 -> 259 bytes .../images/ui-bg_flat_0_e69700_40x100.png | Bin 0 -> 181 bytes .../images/ui-bg_flat_0_e6b900_40x100.png | Bin 0 -> 181 bytes .../ui-bg_highlight-soft_100_f9f9f9_1x100.png | Bin 0 -> 88 bytes .../images/ui-bg_inset-hard_100_eeeeee_1x100.png | Bin 0 -> 91 bytes .../excite-bike/images/ui-icons_0a82eb_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_0b54d5_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_5fa5e3_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_fcdd4a_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../ui/css/excite-bike/jquery-ui-1.8.14.custom.css | 328 + Js/jquery/ui/js/jquery-ui-1.8.21.custom.js | 1937 +++++ Js/markitup/jquery.markitup.js | 559 ++ Js/markitup/sets/bbcode/images/bold.png | Bin 0 -> 304 bytes Js/markitup/sets/bbcode/images/clean.png | Bin 0 -> 667 bytes Js/markitup/sets/bbcode/images/code.png | Bin 0 -> 859 bytes Js/markitup/sets/bbcode/images/fonts.png | Bin 0 -> 567 bytes Js/markitup/sets/bbcode/images/h1.png | Bin 0 -> 276 bytes Js/markitup/sets/bbcode/images/h2.png | Bin 0 -> 304 bytes Js/markitup/sets/bbcode/images/h3.png | Bin 0 -> 306 bytes Js/markitup/sets/bbcode/images/italic.png | Bin 0 -> 223 bytes Js/markitup/sets/bbcode/images/link.png | Bin 0 -> 343 bytes Js/markitup/sets/bbcode/images/list-bullet.png | Bin 0 -> 344 bytes Js/markitup/sets/bbcode/images/list-item.png | Bin 0 -> 248 bytes Js/markitup/sets/bbcode/images/list-numeric.png | Bin 0 -> 357 bytes Js/markitup/sets/bbcode/images/paragraph.png | Bin 0 -> 361 bytes Js/markitup/sets/bbcode/images/picture.png | Bin 0 -> 606 bytes Js/markitup/sets/bbcode/images/preview.png | Bin 0 -> 537 bytes Js/markitup/sets/bbcode/images/quotes.png | Bin 0 -> 743 bytes Js/markitup/sets/bbcode/images/stroke.png | Bin 0 -> 269 bytes Js/markitup/sets/bbcode/images/underline.png | Bin 0 -> 273 bytes Js/markitup/sets/bbcode/readme.txt | 11 + Js/markitup/sets/bbcode/set.js | 32 + Js/markitup/sets/bbcode/style.css | 72 + Js/markitup/skins/simple/images/handle.png | Bin 0 -> 258 bytes Js/markitup/skins/simple/images/menu.png | Bin 0 -> 27151 bytes Js/markitup/skins/simple/images/submenu.png | Bin 0 -> 240 bytes Js/markitup/skins/simple/style.css | 118 + Js/stats.js | 35 + Library/Array/Validate/Base.php | 258 + Library/Array/Validate/Soft.php | 102 + Library/Array/Validate/Strong.php | 197 + Library/Array/Validate/index.html | 1 + Library/Array/index.html | 1 + Library/ArrayExt.php | 80 + Library/Bootstrap.php | 31 + Library/BoxParser.php | 86 + Library/Call.php | 359 + Library/Controller.php | 321 + Library/Db/Mysql.php | 446 ++ Library/Db/Mysqli.php | 452 ++ Library/Db/index.html | 1 + Library/Email.php | 246 + Library/ErrorReporting.php | 45 + Library/Factory/Db.php | 69 + Library/Factory/Strings.php | 38 + Library/Factory/index.html | 1 + Library/Files/Log.php | 114 + Library/Files/Upload.php | 603 ++ Library/Files/index.html | 1 + Library/Form/Checkbox.php | 49 + Library/Form/Entry.php | 112 + Library/Form/File.php | 56 + Library/Form/Form.php | 140 + Library/Form/Hidden.php | 40 + Library/Form/Html.php | 40 + Library/Form/InputText.php | 49 + Library/Form/Password.php | 49 + Library/Form/Radio.php | 49 + Library/Form/Select.php | 49 + Library/Form/Textarea.php | 49 + Library/Form/index.html | 1 + Library/Functions.php | 304 + Library/HeaderObj.php | 45 + Library/Helper/Array.php | 28 + Library/Helper/Html.php | 31 + Library/Helper/List.php | 496 ++ Library/Helper/Menu.php | 109 + Library/Helper/Pages.php | 140 + Library/Helper/Popup.php | 142 + Library/Helper/index.html | 1 + Library/Hooks.php | 38 + Library/Html/Form.php | 211 + Library/Html/index.html | 1 + Library/Image/Gd/Captcha.php | 103 + Library/Image/Gd/Thumbnail.php | 220 + Library/Image/Gd/index.html | 1 + Library/Image/index.html | 1 + Library/Lang/En/DbCondStrings.php | 34 + Library/Lang/En/Generic.php | 64 + Library/Lang/En/ModelStrings.php | 36 + Library/Lang/En/UploadStrings.php | 45 + Library/Lang/En/ValCondStrings.php | 93 + Library/Lang/En/index.html | 1 + Library/Lang/Eng/DbCondStrings.php | 34 + Library/Lang/Eng/Generic.php | 48 + Library/Lang/Eng/ModelStrings.php | 36 + Library/Lang/Eng/UploadStrings.php | 45 + Library/Lang/Eng/ValCondStrings.php | 93 + Library/Lang/Eng/index.html | 1 + Library/Lang/ResultStrings.php | 42 + Library/Lang/index.html | 1 + Library/ModAbstract.php | 42 + Library/Model/#Base.php# | 1273 ++++ Library/Model/Base.php | 1273 ++++ Library/Model/Map.php | 453 ++ Library/Model/Tree.php | 307 + Library/Model/index.html | 1 + Library/Params.php | 66 + Library/Popup.php | 32 + Library/Request.php | 56 + Library/Scaffold.php | 304 + Library/Strings/Functions.php | 47 + Library/Theme.php | 100 + Library/Url.php | 56 + Library/Users/CheckAdmin.php | 386 + Library/Users/index.html | 1 + Library/index.html | 1 + License.txt | 201 + Logs/index.html | 1 + Public/Css/comune.css | 130 + Public/Css/explorer6.css | 112 + Public/Css/explorer7.css | 25 + Public/Css/files.css | 113 + Public/Css/form.css | 31 + Public/Css/index.html | 1 + Public/Css/login.css | 21 + Public/Css/main.css | 2254 ++++++ Public/Css/mainmenu.css | 78 + Public/Css/mobile.css | 271 + Public/Css/pagelist.css | 29 + Public/Css/panel.css | 74 + Public/Css/popupmenu.css | 49 + Public/Css/scaffold.css | 105 + Public/Img/Acun/book.png | Bin 0 -> 11591 bytes Public/Img/Acun/document_properties.png | Bin 0 -> 8274 bytes Public/Img/Acun/filenew.png | Bin 0 -> 9174 bytes Public/Img/Acun/go_previous.png | Bin 0 -> 10751 bytes Public/Img/Acun/help_hint.png | Bin 0 -> 13318 bytes Public/Img/Acun/note.png | Bin 0 -> 6045 bytes Public/Img/Crystal/1282042718_hardware.png | Bin 0 -> 20291 bytes Public/Img/Crystal/1282042976_hardware.png | Bin 0 -> 3855 bytes Public/Img/Crystal/agt_forward.png | Bin 0 -> 729 bytes Public/Img/Crystal/button_cancel.png | Bin 0 -> 792 bytes Public/Img/Crystal/button_ok.png | Bin 0 -> 612 bytes Public/Img/Crystal/cam_mount-22.png | Bin 0 -> 4075 bytes Public/Img/Crystal/cam_mount.png | Bin 0 -> 18928 bytes Public/Img/Crystal/clear.png | Bin 0 -> 1120 bytes Public/Img/Crystal/hardware.png | Bin 0 -> 3478 bytes Public/Img/Crystal/home.png | Bin 0 -> 867 bytes Public/Img/Crystal/lock.png | Bin 0 -> 3604 bytes Public/Img/Crystal/modem.png | Bin 0 -> 5434 bytes Public/Img/Crystal/modem_22.png | Bin 0 -> 3744 bytes Public/Img/Crystal/rss.png | Bin 0 -> 2110 bytes Public/Img/Crystal/unlock.png | Bin 0 -> 3995 bytes Public/Img/Crystal/usb.png | Bin 0 -> 8059 bytes Public/Img/Crystal/usb_22.png | Bin 0 -> 1123 bytes Public/Img/Famfamfam/de.png | Bin 0 -> 545 bytes Public/Img/Famfamfam/es.png | Bin 0 -> 469 bytes Public/Img/Famfamfam/fr.png | Bin 0 -> 545 bytes Public/Img/Famfamfam/gb.png | Bin 0 -> 599 bytes Public/Img/Famfamfam/gr.png | Bin 0 -> 487 bytes Public/Img/Famfamfam/it.png | Bin 0 -> 420 bytes Public/Img/Famfamfam/pt.png | Bin 0 -> 554 bytes Public/Img/Glaze/folder_blue.png | Bin 0 -> 1150 bytes Public/Img/Glaze/folder_blue_open.png | Bin 0 -> 1260 bytes Public/Img/Glaze/viewmag.png | Bin 0 -> 980 bytes Public/Img/H2O/applications-internet.png | Bin 0 -> 8330 bytes Public/Img/H2O/audio-card.png | Bin 0 -> 4588 bytes Public/Img/H2O/audio-card_22.png | Bin 0 -> 1051 bytes Public/Img/H2O/camera-web.png | Bin 0 -> 4956 bytes Public/Img/H2O/camera-web_22.png | Bin 0 -> 1236 bytes Public/Img/H2O/computer-laptop.png | Bin 0 -> 3315 bytes Public/Img/H2O/computer-laptop_22.png | Bin 0 -> 946 bytes Public/Img/H2O/download.png | Bin 0 -> 2445 bytes Public/Img/H2O/download_48.png | Bin 0 -> 4482 bytes Public/Img/H2O/im-ban-user.png | Bin 0 -> 1258 bytes Public/Img/H2O/im-user.png | Bin 0 -> 1109 bytes Public/Img/H2O/media-flash-sd-mmc.png | Bin 0 -> 4272 bytes Public/Img/H2O/media-flash-sd-mmc_22.png | Bin 0 -> 1081 bytes Public/Img/H2O/network-wired.png | Bin 0 -> 2735 bytes Public/Img/H2O/network-wired_22.png | Bin 0 -> 860 bytes Public/Img/H2O/network-wireless.png | Bin 0 -> 6942 bytes Public/Img/H2O/network-wireless_22.png | Bin 0 -> 1331 bytes Public/Img/H2O/preferences-system-bluetooth-22.png | Bin 0 -> 1046 bytes Public/Img/H2O/preferences-system-bluetooth.png | Bin 0 -> 4558 bytes Public/Img/H2O/printer.png | Bin 0 -> 2790 bytes Public/Img/H2O/printer_22.png | Bin 0 -> 877 bytes Public/Img/H2O/scanner.png | Bin 0 -> 7684 bytes Public/Img/H2O/scanner_22.png | Bin 0 -> 856 bytes Public/Img/Icons/back.png | Bin 0 -> 1145 bytes Public/Img/Icons/delete.png | Bin 0 -> 2599 bytes Public/Img/Icons/elementary_2_5/AUTHORS | 28 + Public/Img/Icons/elementary_2_5/CONTRIBUTORS | 3 + Public/Img/Icons/elementary_2_5/COPYING | 340 + Public/Img/Icons/elementary_2_5/ChangeLog | 6 + Public/Img/Icons/elementary_2_5/add.png | Bin 0 -> 717 bytes Public/Img/Icons/elementary_2_5/clear_filter.png | Bin 0 -> 1030 bytes Public/Img/Icons/elementary_2_5/delete.png | Bin 0 -> 1030 bytes Public/Img/Icons/elementary_2_5/down.png | Bin 0 -> 858 bytes Public/Img/Icons/elementary_2_5/edit.png | Bin 0 -> 958 bytes Public/Img/Icons/elementary_2_5/find.png | Bin 0 -> 864 bytes Public/Img/Icons/elementary_2_5/left.png | Bin 0 -> 852 bytes Public/Img/Icons/elementary_2_5/link.png | Bin 0 -> 1127 bytes Public/Img/Icons/elementary_2_5/panel.png | Bin 0 -> 791 bytes Public/Img/Icons/elementary_2_5/up.png | Bin 0 -> 824 bytes Public/Img/Icons/file.png | Bin 0 -> 2963 bytes Public/Img/Icons/folder.png | Bin 0 -> 1545 bytes Public/Img/Icons/image.png | Bin 0 -> 1220 bytes Public/Img/Icons/index.html | 1 + Public/Img/back-60.png | Bin 0 -> 2477 bytes Public/Img/back_last.png | Bin 0 -> 2576 bytes Public/Img/back_wiki.png | Bin 0 -> 2548 bytes Public/Img/discover.png | Bin 0 -> 12231 bytes Public/Img/download.png | Bin 0 -> 10514 bytes Public/Img/download_code.png | Bin 0 -> 12232 bytes Public/Img/download_code_gpl3.png | Bin 0 -> 14218 bytes Public/Img/edit-60.png | Bin 0 -> 2483 bytes Public/Img/fingerprint_icon-22.png | Bin 0 -> 1314 bytes Public/Img/fingerprint_icon.png | Bin 0 -> 5032 bytes Public/Img/fsf_logo.png | Bin 0 -> 5768 bytes Public/Img/history-60.png | Bin 0 -> 3428 bytes Public/Img/link.png | Bin 0 -> 283 bytes Public/Img/mailing.png | Bin 0 -> 7480 bytes Public/Img/mobile.png | Bin 0 -> 8201 bytes Public/Img/new-60.png | Bin 0 -> 2098 bytes Public/Img/popup_back.png | Bin 0 -> 722 bytes Public/Img/rss.png | Bin 0 -> 9114 bytes Public/Img/search_back.png | Bin 0 -> 3404 bytes Public/Img/tab_icon_2.ico | Bin 0 -> 1406 bytes Public/Img/talk-60.png | Bin 0 -> 2163 bytes Public/Img/talk_messages.png | Bin 0 -> 536 bytes Public/Img/title.png | Bin 0 -> 8537 bytes Public/Js/DisplayTag.js | 10 + Public/Js/TinyMCE.js | 34 + Public/Js/functions.js | 189 + Public/Js/index.html | 1 + .../ui-bg_diagonals-small_25_c5ddfc_40x40.png | Bin 0 -> 157 bytes .../ui-bg_diagonals-thick_20_e69700_40x40.png | Bin 0 -> 257 bytes .../ui-bg_diagonals-thick_22_1484e6_40x40.png | Bin 0 -> 259 bytes .../ui-bg_diagonals-thick_26_2293f7_40x40.png | Bin 0 -> 259 bytes .../images/ui-bg_flat_0_e69700_40x100.png | Bin 0 -> 181 bytes .../images/ui-bg_flat_0_e6b900_40x100.png | Bin 0 -> 181 bytes .../ui-bg_highlight-soft_100_f9f9f9_1x100.png | Bin 0 -> 88 bytes .../images/ui-bg_inset-hard_100_eeeeee_1x100.png | Bin 0 -> 91 bytes .../excite-bike/images/ui-icons_0a82eb_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_0b54d5_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_5fa5e3_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_fcdd4a_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../css/excite-bike/jquery-ui-1.8.4.custom.css | 315 + .../jquery/dialog/js/jquery-ui-1.8.4.custom.min.js | 87 + Public/Js/jquery/images/ajax-loader.png | Bin 0 -> 503 bytes Public/Js/jquery/images/icon-search-black.png | Bin 0 -> 1245 bytes Public/Js/jquery/images/icons-18-black.png | Bin 0 -> 2064 bytes Public/Js/jquery/images/icons-18-white.png | Bin 0 -> 2200 bytes Public/Js/jquery/images/icons-36-black.png | Bin 0 -> 3403 bytes Public/Js/jquery/images/icons-36-white.png | Bin 0 -> 4020 bytes Public/Js/jquery/jquery-1.7.1.min.js | 4 + Public/Js/jquery/jquery.mobile-1.1.0.css | 2053 ++++++ Public/Js/jquery/jquery.mobile-1.1.0.js | 7551 ++++++++++++++++++++ .../ui-bg_diagonals-small_25_c5ddfc_40x40.png | Bin 0 -> 157 bytes .../ui-bg_diagonals-thick_20_e69700_40x40.png | Bin 0 -> 257 bytes .../ui-bg_diagonals-thick_22_1484e6_40x40.png | Bin 0 -> 259 bytes .../ui-bg_diagonals-thick_26_2293f7_40x40.png | Bin 0 -> 259 bytes .../images/ui-bg_flat_0_e69700_40x100.png | Bin 0 -> 181 bytes .../images/ui-bg_flat_0_e6b900_40x100.png | Bin 0 -> 181 bytes .../ui-bg_highlight-soft_100_f9f9f9_1x100.png | Bin 0 -> 88 bytes .../images/ui-bg_inset-hard_100_eeeeee_1x100.png | Bin 0 -> 91 bytes .../excite-bike/images/ui-icons_0a82eb_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_0b54d5_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_5fa5e3_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_fcdd4a_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../ui/css/excite-bike/jquery-ui-1.8.14.custom.css | 328 + Public/Js/jquery/ui/js/jquery-ui-1.8.21.custom.js | 1937 +++++ Public/Js/markitup/jquery.markitup.js | 559 ++ Public/Js/markitup/sets/bbcode/images/bold.png | Bin 0 -> 304 bytes Public/Js/markitup/sets/bbcode/images/clean.png | Bin 0 -> 667 bytes Public/Js/markitup/sets/bbcode/images/code.png | Bin 0 -> 859 bytes Public/Js/markitup/sets/bbcode/images/fonts.png | Bin 0 -> 567 bytes Public/Js/markitup/sets/bbcode/images/h1.png | Bin 0 -> 276 bytes Public/Js/markitup/sets/bbcode/images/h2.png | Bin 0 -> 304 bytes Public/Js/markitup/sets/bbcode/images/h3.png | Bin 0 -> 306 bytes Public/Js/markitup/sets/bbcode/images/italic.png | Bin 0 -> 223 bytes Public/Js/markitup/sets/bbcode/images/link.png | Bin 0 -> 343 bytes .../Js/markitup/sets/bbcode/images/list-bullet.png | Bin 0 -> 344 bytes .../Js/markitup/sets/bbcode/images/list-item.png | Bin 0 -> 248 bytes .../markitup/sets/bbcode/images/list-numeric.png | Bin 0 -> 357 bytes .../Js/markitup/sets/bbcode/images/paragraph.png | Bin 0 -> 361 bytes Public/Js/markitup/sets/bbcode/images/picture.png | Bin 0 -> 606 bytes Public/Js/markitup/sets/bbcode/images/preview.png | Bin 0 -> 537 bytes Public/Js/markitup/sets/bbcode/images/quotes.png | Bin 0 -> 743 bytes Public/Js/markitup/sets/bbcode/images/stroke.png | Bin 0 -> 269 bytes .../Js/markitup/sets/bbcode/images/underline.png | Bin 0 -> 273 bytes Public/Js/markitup/sets/bbcode/readme.txt | 11 + Public/Js/markitup/sets/bbcode/set.js | 32 + Public/Js/markitup/sets/bbcode/style.css | 72 + Public/Js/markitup/skins/simple/images/handle.png | Bin 0 -> 258 bytes Public/Js/markitup/skins/simple/images/menu.png | Bin 0 -> 27151 bytes Public/Js/markitup/skins/simple/images/submenu.png | Bin 0 -> 240 bytes Public/Js/markitup/skins/simple/style.css | 118 + Public/Js/stats.js | 35 + Public/index.html | 1 + README.org | 18 + admin/.htaccess | 9 + .../Controllers/AdminboxesController.php | 78 + .../Controllers/AdmindeletionController.php | 66 + .../Controllers/AdminhardwareController.php | 121 + .../Controllers/AdminhistoryController.php | 68 + .../Controllers/AdminissuesController.php | 88 + .../Controllers/AdminmessagesController.php | 86 + .../Controllers/AdminnewsController.php | 78 + .../Controllers/AdminparamsController.php | 68 + .../Controllers/AdminpasswordController.php | 88 + .../Controllers/AdminregusersController.php | 101 + .../Controllers/AdmintalkController.php | 59 + .../Controllers/AdminusersController.php | 200 + admin/Application/Controllers/PanelController.php | 43 + admin/Application/Hooks/AfterInitialization.php | 10 + admin/Application/Hooks/BeforeChecks.php | 16 + admin/Application/Hooks/BeforeInitialization.php | 10 + admin/Application/Hooks/index.html | 1 + admin/Application/Include/distributions.php | 88 + admin/Application/Include/hardware.php | 216 + admin/Application/Include/languages.php | 192 + admin/Application/Include/myFunctions.php | 318 + admin/Application/Include/params.php | 145 + admin/Application/Models/AdminusersModel.php | 37 + admin/Application/Models/BaseModel.php | 68 + admin/Application/Models/BoxesModel.php | 42 + admin/Application/Models/DeletionModel.php | 53 + admin/Application/Models/HardwareModel.php | 200 + admin/Application/Models/HistoryModel.php | 55 + admin/Application/Models/IssuesModel.php | 96 + admin/Application/Models/MessagesModel.php | 58 + admin/Application/Models/NewsModel.php | 44 + admin/Application/Models/NotebooksModel.php | 71 + admin/Application/Models/ParamsModel.php | 48 + admin/Application/Models/PrintersModel.php | 70 + admin/Application/Models/ProfileModel.php | 72 + admin/Application/Models/RevisionsModel.php | 50 + admin/Application/Models/ScannersModel.php | 70 + admin/Application/Models/TalkModel.php | 54 + admin/Application/Models/UsersModel.php | 223 + admin/Application/Models/VideocardsModel.php | 66 + admin/Application/Models/WifiModel.php | 69 + admin/Application/Modules/ModBase.php | 41 + admin/Application/Modules/ModImage.php | 45 + admin/Application/Modules/ModLink.php | 18 + admin/Application/Modules/ModLinkimage.php | 18 + admin/Application/Modules/ModRaw.php | 18 + admin/Application/Modules/index.html | 1 + .../Application/Strings/Lang/It/DbCondStrings.php | 17 + admin/Application/Strings/Lang/It/ModelStrings.php | 19 + .../Application/Strings/Lang/It/UploadStrings.php | 26 + .../Application/Strings/Lang/It/ValCondStrings.php | 69 + admin/Application/Strings/Lang/It/index.html | 1 + admin/Application/Strings/Lang/index.html | 1 + admin/Application/Strings/index.html | 1 + admin/Application/Views/Adminboxes/main.php | 25 + admin/Application/Views/Admindeletion/main.php | 25 + admin/Application/Views/Adminhardware/ask.php | 53 + admin/Application/Views/Adminhardware/main.php | 25 + admin/Application/Views/Adminhistory/main.php | 25 + admin/Application/Views/Adminissues/main.php | 36 + admin/Application/Views/Adminmessages/main.php | 35 + admin/Application/Views/Adminnews/main.php | 35 + admin/Application/Views/Adminparams/form.php | 25 + admin/Application/Views/Adminpassword/form.php | 9 + .../Application/Views/Adminregusers/associate.php | 54 + admin/Application/Views/Adminregusers/main.php | 25 + admin/Application/Views/Admintalk/main.php | 25 + admin/Application/Views/Adminusers/associate.php | 54 + admin/Application/Views/Adminusers/forceout.php | 29 + admin/Application/Views/Adminusers/login.php | 45 + admin/Application/Views/Adminusers/logout.php | 29 + admin/Application/Views/Adminusers/main.php | 25 + admin/Application/Views/footer_back.php | 27 + admin/Application/Views/header_back.php | 94 + admin/Application/Views/panel.php | 55 + admin/Application/index.html | 1 + admin/COPYRIGHT.txt | 24 + admin/Config/Autoload.php | 23 + admin/Config/Config.php | 41 + admin/Config/Reporting.php | 41 + admin/Config/Restricted.php | 94 + admin/Config/Route.php | 50 + admin/External/Fonts/FreeFont/AUTHORS | 208 + admin/External/Fonts/FreeFont/COPYING | 674 ++ admin/External/Fonts/FreeFont/CREDITS | 528 ++ admin/External/Fonts/FreeFont/ChangeLog | 4525 ++++++++++++ admin/External/Fonts/FreeFont/FreeMono.ttf | Bin 0 -> 314348 bytes admin/External/Fonts/FreeFont/INSTALL | 86 + admin/External/Fonts/FreeFont/README | 108 + admin/Library/Array/Validate/Base.php | 241 + admin/Library/Array/Validate/Soft.php | 85 + admin/Library/Array/Validate/Strong.php | 180 + admin/Library/Array/Validate/index.html | 1 + admin/Library/Array/index.html | 1 + admin/Library/ArrayExt.php | 63 + admin/Library/Bootstrap.php | 14 + admin/Library/BoxParser.php | 69 + admin/Library/Call.php | 321 + admin/Library/Controller.php | 291 + admin/Library/Db/Mysql.php | 394 + admin/Library/Db/Mysqli.php | 400 ++ admin/Library/Db/index.html | 1 + admin/Library/Email.php | 229 + admin/Library/ErrorReporting.php | 45 + admin/Library/Factory/Db.php | 52 + admin/Library/Factory/index.html | 1 + admin/Library/Files/Log.php | 97 + admin/Library/Files/Upload.php | 451 ++ admin/Library/Files/index.html | 1 + admin/Library/Form/Checkbox.php | 41 + admin/Library/Form/Entry.php | 45 + admin/Library/Form/Form.php | 116 + admin/Library/Form/Hidden.php | 23 + admin/Library/Form/Html.php | 23 + admin/Library/Form/InputText.php | 30 + admin/Library/Form/Password.php | 30 + admin/Library/Form/Radio.php | 30 + admin/Library/Form/Select.php | 30 + admin/Library/Form/Textarea.php | 30 + admin/Library/Form/index.html | 1 + admin/Library/Functions.php | 279 + admin/Library/HeaderObj.php | 28 + admin/Library/Helper/Array.php | 11 + admin/Library/Helper/Html.php | 14 + admin/Library/Helper/List.php | 278 + admin/Library/Helper/Menu.php | 75 + admin/Library/Helper/Pages.php | 108 + admin/Library/Helper/Popup.php | 87 + admin/Library/Helper/index.html | 1 + admin/Library/Hooks.php | 21 + admin/Library/Html/Form.php | 168 + admin/Library/Html/index.html | 1 + admin/Library/Image/Gd/Captcha.php | 85 + admin/Library/Image/Gd/Thumbnail.php | 151 + admin/Library/Image/Gd/index.html | 1 + admin/Library/Image/index.html | 1 + admin/Library/Lang/Eng/DbCondStrings.php | 17 + admin/Library/Lang/Eng/ModelStrings.php | 19 + admin/Library/Lang/Eng/UploadStrings.php | 27 + admin/Library/Lang/Eng/ValCondStrings.php | 76 + admin/Library/Lang/Eng/index.html | 1 + admin/Library/Lang/ResultStrings.php | 25 + admin/Library/Lang/index.html | 1 + admin/Library/ModAbstract.php | 25 + admin/Library/Model/Base.php | 1140 +++ admin/Library/Model/Map.php | 439 ++ admin/Library/Model/Tree.php | 287 + admin/Library/Model/index.html | 1 + admin/Library/Params.php | 37 + admin/Library/Popup.php | 15 + admin/Library/Request.php | 39 + admin/Library/Scaffold.php | 272 + admin/Library/Strings/Functions.php | 30 + admin/Library/Theme.php | 79 + admin/Library/Url.php | 36 + admin/Library/Users/CheckAdmin.php | 369 + admin/Library/Users/index.html | 1 + admin/Library/index.html | 1 + admin/License.txt | 201 + admin/Logs/index.html | 1 + admin/Public/Css/comune.css | 130 + admin/Public/Css/explorer.css | 91 + admin/Public/Css/files.css | 113 + admin/Public/Css/form.css | 31 + admin/Public/Css/index.html | 1 + admin/Public/Css/login.css | 21 + admin/Public/Css/mainmenu.css | 78 + admin/Public/Css/pagelist.css | 29 + admin/Public/Css/panel.css | 74 + admin/Public/Css/popupmenu.css | 49 + admin/Public/Css/scaffold.css | 105 + admin/Public/Css/website.css | 1414 ++++ admin/Public/Img/Icons/back.png | Bin 0 -> 1145 bytes admin/Public/Img/Icons/delete.png | Bin 0 -> 2599 bytes admin/Public/Img/Icons/file.png | Bin 0 -> 2963 bytes admin/Public/Img/Icons/folder.png | Bin 0 -> 1545 bytes admin/Public/Img/Icons/image.png | Bin 0 -> 1220 bytes admin/Public/Img/Icons/index.html | 1 + admin/Public/Js/DisplayTag.js | 10 + admin/Public/Js/TinyMCE.js | 34 + admin/Public/Js/functions.js | 122 + admin/Public/Js/index.html | 1 + .../ui-bg_diagonals-small_25_c5ddfc_40x40.png | Bin 0 -> 157 bytes .../ui-bg_diagonals-thick_20_e69700_40x40.png | Bin 0 -> 257 bytes .../ui-bg_diagonals-thick_22_1484e6_40x40.png | Bin 0 -> 259 bytes .../ui-bg_diagonals-thick_26_2293f7_40x40.png | Bin 0 -> 259 bytes .../images/ui-bg_flat_0_e69700_40x100.png | Bin 0 -> 181 bytes .../images/ui-bg_flat_0_e6b900_40x100.png | Bin 0 -> 181 bytes .../ui-bg_highlight-soft_100_f9f9f9_1x100.png | Bin 0 -> 88 bytes .../images/ui-bg_inset-hard_100_eeeeee_1x100.png | Bin 0 -> 91 bytes .../excite-bike/images/ui-icons_0a82eb_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_0b54d5_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_5fa5e3_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_fcdd4a_256x240.png | Bin 0 -> 4369 bytes .../excite-bike/images/ui-icons_ffffff_256x240.png | Bin 0 -> 4369 bytes .../css/excite-bike/jquery-ui-1.8.4.custom.css | 315 + .../jquery/dialog/js/jquery-ui-1.8.4.custom.min.js | 87 + admin/Public/Js/jquery/jquery-1.4.2.min.js | 154 + admin/Public/Js/markitup/jquery.markitup.js | 559 ++ .../Public/Js/markitup/sets/bbcode/images/bold.png | Bin 0 -> 304 bytes .../Js/markitup/sets/bbcode/images/clean.png | Bin 0 -> 667 bytes .../Public/Js/markitup/sets/bbcode/images/code.png | Bin 0 -> 859 bytes .../Js/markitup/sets/bbcode/images/fonts.png | Bin 0 -> 567 bytes admin/Public/Js/markitup/sets/bbcode/images/h1.png | Bin 0 -> 276 bytes admin/Public/Js/markitup/sets/bbcode/images/h2.png | Bin 0 -> 304 bytes admin/Public/Js/markitup/sets/bbcode/images/h3.png | Bin 0 -> 306 bytes .../Js/markitup/sets/bbcode/images/italic.png | Bin 0 -> 223 bytes .../Public/Js/markitup/sets/bbcode/images/link.png | Bin 0 -> 343 bytes .../Js/markitup/sets/bbcode/images/list-bullet.png | Bin 0 -> 344 bytes .../Js/markitup/sets/bbcode/images/list-item.png | Bin 0 -> 248 bytes .../markitup/sets/bbcode/images/list-numeric.png | Bin 0 -> 357 bytes .../Js/markitup/sets/bbcode/images/paragraph.png | Bin 0 -> 361 bytes .../Js/markitup/sets/bbcode/images/picture.png | Bin 0 -> 606 bytes .../Js/markitup/sets/bbcode/images/preview.png | Bin 0 -> 537 bytes .../Js/markitup/sets/bbcode/images/quotes.png | Bin 0 -> 743 bytes .../Js/markitup/sets/bbcode/images/stroke.png | Bin 0 -> 269 bytes .../Js/markitup/sets/bbcode/images/underline.png | Bin 0 -> 273 bytes admin/Public/Js/markitup/sets/bbcode/readme.txt | 11 + admin/Public/Js/markitup/sets/bbcode/set.js | 32 + admin/Public/Js/markitup/sets/bbcode/style.css | 72 + .../Js/markitup/skins/simple/images/handle.png | Bin 0 -> 258 bytes .../Js/markitup/skins/simple/images/menu.png | Bin 0 -> 27151 bytes .../Js/markitup/skins/simple/images/submenu.png | Bin 0 -> 240 bytes admin/Public/Js/markitup/skins/simple/style.css | 118 + admin/Public/Js/stats.js | 35 + admin/Public/index.html | 1 + admin/README.txt | 62 + admin/h-admin-copyright.txt | 16 + admin/index.php | 16 + admin/tables.sql | 64 + config.xml | 681 ++ dafare.txt | 12 + h-node-schema-dump.sql | 614 ++ h-source-copyright.txt | 16 + h-source/.htaccess | 5 - .../Controllers/AcquisitioncardsController.php | 131 - .../Application/Controllers/BaseController.php | 303 - .../Controllers/BluetoothController.php | 131 - .../Application/Controllers/ClientController.php | 55 - .../Application/Controllers/ContactController.php | 43 - .../Application/Controllers/CreditsController.php | 43 - .../Application/Controllers/DownloadController.php | 275 - .../Controllers/EthernetcardsController.php | 131 - h-source/Application/Controllers/FaqController.php | 41 - .../Controllers/FingerprintreadersController.php | 131 - .../Application/Controllers/GenericController.php | 1001 --- .../Application/Controllers/HardwareController.php | 43 - .../Application/Controllers/HelpController.php | 41 - .../Application/Controllers/HistoryController.php | 650 -- .../Application/Controllers/HomeController.php | 47 - .../Controllers/HostcontrollersController.php | 137 - .../Application/Controllers/ImageController.php | 41 - .../Application/Controllers/IssuesController.php | 203 - .../Application/Controllers/MeetController.php | 338 - .../Application/Controllers/ModemsController.php | 131 - h-source/Application/Controllers/MyController.php | 214 - .../Application/Controllers/NewsController.php | 67 - .../Controllers/NotebooksController.php | 159 - .../Application/Controllers/PrintersController.php | 154 - .../Application/Controllers/ProjectController.php | 42 - .../Controllers/RaidadaptersController.php | 131 - h-source/Application/Controllers/RssController.php | 64 - .../Application/Controllers/ScannersController.php | 127 - .../Controllers/SdcardreadersController.php | 131 - .../Application/Controllers/SearchController.php | 267 - .../Controllers/SoundcardsController.php | 127 - .../Application/Controllers/SpecialController.php | 216 - .../Controllers/ThreegcardsController.php | 127 - .../Application/Controllers/UsersController.php | 352 - .../Controllers/VideocardsController.php | 127 - .../Application/Controllers/WebcamsController.php | 127 - .../Application/Controllers/WifiController.php | 127 - .../Application/Controllers/WikiController.php | 644 -- h-source/Application/Hooks/AfterInitialization.php | 10 - h-source/Application/Hooks/BeforeChecks.php | 20 - .../Application/Hooks/BeforeInitialization.php | 10 - h-source/Application/Hooks/index.html | 1 - h-source/Application/Include/distributions.php | 91 - h-source/Application/Include/hardware.php | 576 -- h-source/Application/Include/languages.php | 2363 ------ h-source/Application/Include/license.php | 93 - h-source/Application/Include/myFunctions.php | 542 -- h-source/Application/Include/params.php | 228 - .../Application/Include/vendorTranslations.php | 4247 ----------- h-source/Application/Include/vendors.php | 4191 ----------- h-source/Application/Include/version.php | 138 - h-source/Application/Include/wikiFormatting.php | 356 - .../Application/Models/AcquisitioncardsModel.php | 68 - h-source/Application/Models/BaseModel.php | 43 - h-source/Application/Models/BluetoothModel.php | 68 - h-source/Application/Models/BoxesModel.php | 42 - h-source/Application/Models/DeletionModel.php | 53 - h-source/Application/Models/DistrosModel.php | 34 - h-source/Application/Models/EthernetcardsModel.php | 68 - .../Application/Models/FingerprintreadersModel.php | 68 - h-source/Application/Models/GenericModel.php | 103 - h-source/Application/Models/HardwareModel.php | 348 - h-source/Application/Models/HistoryModel.php | 56 - .../Application/Models/HostcontrollersModel.php | 69 - h-source/Application/Models/IssuesModel.php | 116 - h-source/Application/Models/MessagesModel.php | 73 - h-source/Application/Models/ModemsModel.php | 68 - h-source/Application/Models/NewsModel.php | 44 - h-source/Application/Models/NotebooksModel.php | 94 - h-source/Application/Models/ParamsModel.php | 43 - h-source/Application/Models/PrintersModel.php | 70 - h-source/Application/Models/ProfileModel.php | 78 - h-source/Application/Models/RaidadaptersModel.php | 68 - h-source/Application/Models/RevisionsModel.php | 50 - h-source/Application/Models/ScannersModel.php | 68 - h-source/Application/Models/SdcardreadersModel.php | 68 - h-source/Application/Models/SoundcardsModel.php | 68 - h-source/Application/Models/TalkModel.php | 116 - h-source/Application/Models/ThreegcardsModel.php | 68 - h-source/Application/Models/UsersModel.php | 295 - h-source/Application/Models/VendorsModel.php | 82 - h-source/Application/Models/VideocardsModel.php | 68 - h-source/Application/Models/WebcamsModel.php | 72 - h-source/Application/Models/WifiModel.php | 68 - h-source/Application/Models/WikiModel.php | 319 - h-source/Application/Models/WikirevisionsModel.php | 45 - h-source/Application/Models/WikitalkModel.php | 112 - h-source/Application/Modules/ModBase.php | 41 - h-source/Application/Modules/ModImage.php | 45 - h-source/Application/Modules/ModLink.php | 18 - h-source/Application/Modules/ModLinkimage.php | 18 - h-source/Application/Modules/ModRaw.php | 18 - h-source/Application/Modules/ModTopLink.php | 32 - h-source/Application/Modules/index.html | 1 - .../Application/Strings/Lang/It/DbCondStrings.php | 34 - .../Application/Strings/Lang/It/ModelStrings.php | 36 - .../Application/Strings/Lang/It/UploadStrings.php | 44 - .../Application/Strings/Lang/It/ValCondStrings.php | 92 - h-source/Application/Strings/Lang/It/index.html | 1 - h-source/Application/Strings/Lang/index.html | 1 - h-source/Application/Strings/index.html | 1 - h-source/Application/Views/Desktop/Client/info.php | 30 - .../Application/Views/Desktop/Client/license.php | 25 - .../Application/Views/Desktop/Contact/index.php | 39 - .../Application/Views/Desktop/Contact/index_de.php | 39 - .../Application/Views/Desktop/Contact/index_es.php | 39 - .../Application/Views/Desktop/Contact/index_fr.php | 39 - .../Application/Views/Desktop/Contact/index_gr.php | 39 - .../Application/Views/Desktop/Contact/index_it.php | 39 - .../Application/Views/Desktop/Credits/index.php | 65 - .../Application/Views/Desktop/Credits/index_es.php | 65 - .../Application/Views/Desktop/Credits/index_fr.php | 63 - .../Application/Views/Desktop/Credits/index_gr.php | 65 - .../Application/Views/Desktop/Credits/index_it.php | 66 - .../Application/Views/Desktop/Download/index.php | 114 - .../Application/Views/Desktop/Download/xml.php | 22 - .../Application/Views/Desktop/Hardware/left.php | 92 - h-source/Application/Views/Desktop/Help/index.php | 447 -- .../Application/Views/Desktop/Help/index_de.php | 443 -- .../Application/Views/Desktop/Help/index_es.php | 440 -- .../Application/Views/Desktop/Help/index_fr.php | 432 -- .../Application/Views/Desktop/Help/index_it.php | 436 -- .../Application/Views/Desktop/History/viewall.php | 40 - h-source/Application/Views/Desktop/Home/left.php | 85 - .../Application/Views/Desktop/Home/left_de.php | 86 - .../Application/Views/Desktop/Home/left_es.php | 85 - .../Application/Views/Desktop/Home/left_fr.php | 88 - .../Application/Views/Desktop/Home/left_gr.php | 87 - .../Application/Views/Desktop/Home/left_it.php | 88 - h-source/Application/Views/Desktop/Issues/view.php | 249 - .../Application/Views/Desktop/Issues/viewall.php | 122 - .../Views/Desktop/Meet/contributions.php | 79 - .../Application/Views/Desktop/Meet/hardware.php | 30 - h-source/Application/Views/Desktop/Meet/issues.php | 31 - .../Views/Desktop/Meet/list_template.php | 50 - h-source/Application/Views/Desktop/Meet/meet.php | 114 - .../Application/Views/Desktop/Meet/messages.php | 31 - h-source/Application/Views/Desktop/Meet/talk.php | 32 - h-source/Application/Views/Desktop/Meet/wiki.php | 29 - .../Application/Views/Desktop/Meet/wikitalk.php | 31 - h-source/Application/Views/Desktop/My/email.php | 33 - h-source/Application/Views/Desktop/My/goodbye.php | 63 - h-source/Application/Views/Desktop/My/panel.php | 64 - h-source/Application/Views/Desktop/My/password.php | 33 - h-source/Application/Views/Desktop/My/profile.php | 33 - h-source/Application/Views/Desktop/News/index.php | 51 - .../Views/Desktop/Notebooks/.svn/entries | 96 - .../Notebooks/.svn/text-base/form.php.svn-base | 156 - .../Notebooks/.svn/text-base/page.php.svn-base | 120 - .../Application/Views/Desktop/Notebooks/form.php | 156 - .../Application/Views/Desktop/Notebooks/page.php | 120 - .../Application/Views/Desktop/Project/index.php | 48 - .../Application/Views/Desktop/Project/index_de.php | 49 - .../Application/Views/Desktop/Project/index_es.php | 49 - .../Application/Views/Desktop/Project/index_fr.php | 48 - .../Application/Views/Desktop/Project/index_gr.php | 48 - .../Application/Views/Desktop/Project/index_it.php | 48 - .../Views/Desktop/Rss/modifications.php | 46 - .../Application/Views/Desktop/Rss/notapproved.php | 41 - h-source/Application/Views/Desktop/Search/form.php | 111 - .../Views/Desktop/Search/lspci_results.php | 89 - .../Application/Views/Desktop/Search/results.php | 87 - .../Views/Desktop/Special/modactions.php | 95 - .../Views/Desktop/Special/modifications.php | 45 - .../Views/Desktop/Special/pages_deleted.php | 45 - h-source/Application/Views/Desktop/Users/add.php | 72 - .../Application/Views/Desktop/Users/change.php | 30 - .../Views/Desktop/Users/confirmation.php | 44 - .../Application/Views/Desktop/Users/forgot.php | 57 - h-source/Application/Views/Desktop/Users/login.php | 67 - .../Application/Views/Desktop/Users/logout.php | 27 - .../Application/Views/Desktop/Users/notice.php | 96 - h-source/Application/Views/Desktop/Wiki/climb.php | 52 - .../Application/Views/Desktop/Wiki/differences.php | 64 - h-source/Application/Views/Desktop/Wiki/form.php | 105 - .../Application/Views/Desktop/Wiki/history.php | 74 - .../Views/Desktop/Wiki/modifications.php | 45 - .../Application/Views/Desktop/Wiki/not_found.php | 34 - h-source/Application/Views/Desktop/Wiki/page.php | 154 - h-source/Application/Views/Desktop/Wiki/pages.php | 45 - h-source/Application/Views/Desktop/Wiki/talk.php | 173 - h-source/Application/Views/Desktop/bottom_left.php | 29 - h-source/Application/Views/Desktop/catalogue.php | 131 - h-source/Application/Views/Desktop/cleared.php | 28 - h-source/Application/Views/Desktop/climb.php | 37 - h-source/Application/Views/Desktop/dialog.php | 102 - h-source/Application/Views/Desktop/differences.php | 49 - h-source/Application/Views/Desktop/footer.php | 45 - h-source/Application/Views/Desktop/form.php | 160 - h-source/Application/Views/Desktop/header.php | 120 - h-source/Application/Views/Desktop/history.php | 63 - .../Application/Views/Desktop/if_page_deleted.php | 60 - .../Application/Views/Desktop/license_notice.php | 32 - .../Application/Views/Desktop/moderator_dialog.php | 69 - .../Views/Desktop/noscript_distributions.php | 33 - h-source/Application/Views/Desktop/not_found.php | 34 - h-source/Application/Views/Desktop/page.php | 141 - h-source/Application/Views/Desktop/right.php | 165 - .../Application/Views/Desktop/suggest_dialog.php | 43 - h-source/Application/Views/Desktop/talk.php | 163 - h-source/Application/Views/Desktop/top_left.php | 190 - h-source/Application/Views/Desktop/wiki_page.php | 153 - .../Application/Views/Desktop/xml_response.php | 28 - .../Application/Views/Mobile/Contact/index.php | 41 - .../Application/Views/Mobile/Contact/index_de.php | 41 - .../Application/Views/Mobile/Contact/index_es.php | 41 - .../Application/Views/Mobile/Contact/index_fr.php | 41 - .../Application/Views/Mobile/Contact/index_gr.php | 41 - .../Application/Views/Mobile/Contact/index_it.php | 41 - .../Application/Views/Mobile/Credits/index.php | 65 - .../Application/Views/Mobile/Credits/index_es.php | 65 - .../Application/Views/Mobile/Credits/index_fr.php | 63 - .../Application/Views/Mobile/Credits/index_gr.php | 65 - .../Application/Views/Mobile/Credits/index_it.php | 66 - .../Application/Views/Mobile/Hardware/left.php | 127 - h-source/Application/Views/Mobile/Home/left.php | 87 - h-source/Application/Views/Mobile/Home/left_de.php | 86 - h-source/Application/Views/Mobile/Home/left_es.php | 86 - h-source/Application/Views/Mobile/Home/left_fr.php | 88 - h-source/Application/Views/Mobile/Home/left_gr.php | 87 - h-source/Application/Views/Mobile/Home/left_it.php | 88 - .../Application/Views/Mobile/Notebooks/page.php | 119 - .../Application/Views/Mobile/Project/index.php | 50 - .../Application/Views/Mobile/Project/index_de.php | 51 - .../Application/Views/Mobile/Project/index_es.php | 51 - .../Application/Views/Mobile/Project/index_fr.php | 50 - .../Application/Views/Mobile/Project/index_gr.php | 50 - .../Application/Views/Mobile/Project/index_it.php | 50 - h-source/Application/Views/Mobile/bottom_left.php | 29 - h-source/Application/Views/Mobile/catalogue.php | 105 - h-source/Application/Views/Mobile/dialog.php | 22 - h-source/Application/Views/Mobile/footer.php | 64 - h-source/Application/Views/Mobile/header.php | 104 - .../Application/Views/Mobile/if_page_deleted.php | 60 - .../Application/Views/Mobile/moderator_dialog.php | 21 - h-source/Application/Views/Mobile/page.php | 134 - h-source/Application/Views/Mobile/right.php | 22 - h-source/Application/Views/Mobile/top_left.php | 43 - h-source/Application/index.html | 1 - h-source/COPYRIGHT.txt | 24 - h-source/Config/Autoload.php | 44 - h-source/Config/Config.php | 58 - h-source/Config/Reporting.php | 41 - h-source/Config/Restricted.php | 94 - h-source/Config/Route.php | 280 - h-source/Credits.txt | 34 - h-source/Css/comune.css | 130 - h-source/Css/explorer6.css | 112 - h-source/Css/explorer7.css | 25 - h-source/Css/files.css | 113 - h-source/Css/form.css | 31 - h-source/Css/index.html | 1 - h-source/Css/login.css | 21 - h-source/Css/main.css | 2249 ------ h-source/Css/mainmenu.css | 78 - h-source/Css/mobile.css | 271 - h-source/Css/pagelist.css | 29 - h-source/Css/panel.css | 74 - h-source/Css/popupmenu.css | 49 - h-source/Css/scaffold.css | 105 - h-source/External/Fonts/FreeFont/AUTHORS | 208 - h-source/External/Fonts/FreeFont/COPYING | 674 -- h-source/External/Fonts/FreeFont/CREDITS | 528 -- h-source/External/Fonts/FreeFont/ChangeLog | 4525 ------------ h-source/External/Fonts/FreeFont/FreeMono.ttf | Bin 314348 -> 0 bytes h-source/External/Fonts/FreeFont/INSTALL | 86 - h-source/External/Fonts/FreeFont/README | 108 - .../External/swiftmailer/lib/classes/Swift.php | 57 - .../swiftmailer/lib/classes/Swift/Attachment.php | 75 - .../ByteStream/AbstractFilterableInputStream.php | 178 - .../classes/Swift/ByteStream/ArrayByteStream.php | 190 - .../classes/Swift/ByteStream/FileByteStream.php | 177 - .../lib/classes/Swift/CharacterReader.php | 60 - .../CharacterReader/GenericFixedWidthReader.php | 96 - .../Swift/CharacterReader/UsAsciiReader.php | 83 - .../classes/Swift/CharacterReader/Utf8Reader.php | 183 - .../lib/classes/Swift/CharacterReaderFactory.php | 29 - .../SimpleCharacterReaderFactory.php | 119 - .../lib/classes/Swift/CharacterStream.php | 86 - .../Swift/CharacterStream/ArrayCharacterStream.php | 319 - .../Swift/CharacterStream/NgCharacterStream.php | 300 - .../lib/classes/Swift/DependencyContainer.php | 349 - .../lib/classes/Swift/DependencyException.php | 30 - .../swiftmailer/lib/classes/Swift/EmbeddedFile.php | 73 - .../swiftmailer/lib/classes/Swift/Encoder.php | 32 - .../lib/classes/Swift/Encoder/Base64Encoder.php | 63 - .../lib/classes/Swift/Encoder/QpEncoder.php | 263 - .../lib/classes/Swift/Encoder/Rfc2231Encoder.php | 89 - .../swiftmailer/lib/classes/Swift/Encoding.php | 70 - .../lib/classes/Swift/Events/CommandEvent.php | 67 - .../lib/classes/Swift/Events/CommandListener.php | 29 - .../swiftmailer/lib/classes/Swift/Events/Event.php | 39 - .../lib/classes/Swift/Events/EventDispatcher.php | 81 - .../lib/classes/Swift/Events/EventListener.php | 19 - .../lib/classes/Swift/Events/EventObject.php | 65 - .../lib/classes/Swift/Events/ResponseEvent.php | 65 - .../lib/classes/Swift/Events/ResponseListener.php | 29 - .../lib/classes/Swift/Events/SendEvent.php | 127 - .../lib/classes/Swift/Events/SendListener.php | 35 - .../classes/Swift/Events/SimpleEventDispatcher.php | 175 - .../classes/Swift/Events/TransportChangeEvent.php | 31 - .../Swift/Events/TransportChangeListener.php | 53 - .../Swift/Events/TransportExceptionEvent.php | 50 - .../Swift/Events/TransportExceptionListener.php | 30 - .../lib/classes/Swift/FailoverTransport.php | 48 - .../swiftmailer/lib/classes/Swift/FileStream.php | 28 - .../swiftmailer/lib/classes/Swift/Filterable.php | 34 - .../swiftmailer/lib/classes/Swift/Image.php | 62 - .../lib/classes/Swift/InputByteStream.php | 72 - .../swiftmailer/lib/classes/Swift/IoException.php | 30 - .../swiftmailer/lib/classes/Swift/KeyCache.php | 99 - .../lib/classes/Swift/KeyCache/ArrayKeyCache.php | 209 - .../lib/classes/Swift/KeyCache/DiskKeyCache.php | 316 - .../classes/Swift/KeyCache/KeyCacheInputStream.php | 53 - .../lib/classes/Swift/KeyCache/NullKeyCache.php | 110 - .../Swift/KeyCache/SimpleKeyCacheInputStream.php | 131 - .../lib/classes/Swift/LoadBalancedTransport.php | 48 - .../lib/classes/Swift/MailTransport.php | 48 - .../swiftmailer/lib/classes/Swift/Mailer.php | 173 - .../Swift/Mailer/ArrayRecipientIterator.php | 59 - .../lib/classes/Swift/Mailer/RecipientIterator.php | 34 - .../swiftmailer/lib/classes/Swift/Message.php | 82 - .../lib/classes/Swift/Mime/Attachment.php | 143 - .../lib/classes/Swift/Mime/CharsetObserver.php | 26 - .../lib/classes/Swift/Mime/ContentEncoder.php | 41 - .../Mime/ContentEncoder/Base64ContentEncoder.php | 81 - .../Mime/ContentEncoder/PlainContentEncoder.php | 175 - .../Swift/Mime/ContentEncoder/QpContentEncoder.php | 117 - .../lib/classes/Swift/Mime/EmbeddedFile.php | 51 - .../lib/classes/Swift/Mime/EncodingObserver.php | 28 - .../swiftmailer/lib/classes/Swift/Mime/Header.php | 85 - .../lib/classes/Swift/Mime/HeaderEncoder.php | 28 - .../Mime/HeaderEncoder/Base64HeaderEncoder.php | 36 - .../Swift/Mime/HeaderEncoder/QpHeaderEncoder.php | 99 - .../lib/classes/Swift/Mime/HeaderFactory.php | 72 - .../lib/classes/Swift/Mime/HeaderSet.php | 170 - .../classes/Swift/Mime/Headers/AbstractHeader.php | 596 -- .../lib/classes/Swift/Mime/Headers/DateHeader.php | 118 - .../Swift/Mime/Headers/IdentificationHeader.php | 161 - .../classes/Swift/Mime/Headers/MailboxHeader.php | 316 - .../Swift/Mime/Headers/ParameterizedHeader.php | 274 - .../lib/classes/Swift/Mime/Headers/PathHeader.php | 126 - .../Swift/Mime/Headers/UnstructuredHeader.php | 108 - .../swiftmailer/lib/classes/Swift/Mime/Message.php | 230 - .../lib/classes/Swift/Mime/MimeEntity.php | 108 - .../lib/classes/Swift/Mime/MimePart.php | 196 - .../lib/classes/Swift/Mime/ParameterizedHeader.php | 35 - .../lib/classes/Swift/Mime/SimpleHeaderFactory.php | 187 - .../lib/classes/Swift/Mime/SimpleHeaderSet.php | 396 - .../lib/classes/Swift/Mime/SimpleMessage.php | 609 -- .../lib/classes/Swift/Mime/SimpleMimeEntity.php | 803 --- .../swiftmailer/lib/classes/Swift/MimePart.php | 65 - .../lib/classes/Swift/OutputByteStream.php | 41 - .../lib/classes/Swift/Plugins/AntiFloodPlugin.php | 147 - .../Swift/Plugins/BandwidthMonitorPlugin.php | 173 - .../Swift/Plugins/Decorator/Replacements.php | 36 - .../lib/classes/Swift/Plugins/DecoratorPlugin.php | 201 - .../lib/classes/Swift/Plugins/Logger.php | 37 - .../lib/classes/Swift/Plugins/LoggerPlugin.php | 160 - .../classes/Swift/Plugins/Loggers/ArrayLogger.php | 73 - .../classes/Swift/Plugins/Loggers/EchoLogger.php | 64 - .../classes/Swift/Plugins/Pop/Pop3Connection.php | 36 - .../classes/Swift/Plugins/Pop/Pop3Exception.php | 34 - .../classes/Swift/Plugins/PopBeforeSmtpPlugin.php | 288 - .../lib/classes/Swift/Plugins/Reporter.php | 36 - .../lib/classes/Swift/Plugins/ReporterPlugin.php | 82 - .../Swift/Plugins/Reporters/HitReporter.php | 63 - .../Swift/Plugins/Reporters/HtmlReporter.php | 47 - .../lib/classes/Swift/Plugins/Sleeper.php | 26 - .../lib/classes/Swift/Plugins/ThrottlerPlugin.php | 188 - .../lib/classes/Swift/Plugins/Timer.php | 26 - .../swiftmailer/lib/classes/Swift/Preferences.php | 76 - .../lib/classes/Swift/ReplacementFilterFactory.php | 27 - .../lib/classes/Swift/RfcComplianceException.php | 30 - .../lib/classes/Swift/SendmailTransport.php | 48 - .../lib/classes/Swift/SmtpTransport.php | 56 - .../swiftmailer/lib/classes/Swift/StreamFilter.php | 33 - .../StreamFilters/ByteArrayReplacementFilter.php | 188 - .../StreamFilters/StringReplacementFilter.php | 66 - .../StringReplacementFilterFactory.php | 53 - .../lib/classes/Swift/SwiftException.php | 28 - .../swiftmailer/lib/classes/Swift/Transport.php | 60 - .../Swift/Transport/AbstractSmtpTransport.php | 543 -- .../Transport/Esmtp/Auth/CramMd5Authenticator.php | 88 - .../Transport/Esmtp/Auth/LoginAuthenticator.php | 58 - .../Transport/Esmtp/Auth/PlainAuthenticator.php | 57 - .../classes/Swift/Transport/Esmtp/AuthHandler.php | 262 - .../Swift/Transport/Esmtp/Authenticator.php | 38 - .../lib/classes/Swift/Transport/EsmtpHandler.php | 82 - .../lib/classes/Swift/Transport/EsmtpTransport.php | 340 - .../classes/Swift/Transport/FailoverTransport.php | 97 - .../lib/classes/Swift/Transport/IoBuffer.php | 65 - .../Swift/Transport/LoadBalancedTransport.php | 188 - .../lib/classes/Swift/Transport/MailInvoker.php | 36 - .../lib/classes/Swift/Transport/MailTransport.php | 242 - .../classes/Swift/Transport/SendmailTransport.php | 173 - .../classes/Swift/Transport/SimpleMailInvoker.php | 58 - .../lib/classes/Swift/Transport/SmtpAgent.php | 36 - .../lib/classes/Swift/Transport/StreamBuffer.php | 276 - .../lib/classes/Swift/TransportException.php | 31 - .../swiftmailer/lib/dependency_maps/cache_deps.php | 25 - .../swiftmailer/lib/dependency_maps/mime_deps.php | 97 - .../lib/dependency_maps/transport_deps.php | 62 - h-source/External/swiftmailer/lib/mime_types.php | 76 - h-source/External/swiftmailer/lib/preferences.php | 20 - h-source/External/swiftmailer/lib/swift_init.php | 21 - .../External/swiftmailer/lib/swift_required.php | 22 - .../swiftmailer/lib/swift_required_pear.php | 22 - h-source/Img/Acun/book.png | Bin 11591 -> 0 bytes h-source/Img/Acun/document_properties.png | Bin 8274 -> 0 bytes h-source/Img/Acun/filenew.png | Bin 9174 -> 0 bytes h-source/Img/Acun/go_previous.png | Bin 10751 -> 0 bytes h-source/Img/Acun/help_hint.png | Bin 13318 -> 0 bytes h-source/Img/Acun/note.png | Bin 6045 -> 0 bytes h-source/Img/Crystal/1282042718_hardware.png | Bin 20291 -> 0 bytes h-source/Img/Crystal/1282042976_hardware.png | Bin 3855 -> 0 bytes h-source/Img/Crystal/agt_forward.png | Bin 729 -> 0 bytes h-source/Img/Crystal/button_cancel.png | Bin 792 -> 0 bytes h-source/Img/Crystal/button_ok.png | Bin 612 -> 0 bytes h-source/Img/Crystal/cam_mount-22.png | Bin 4075 -> 0 bytes h-source/Img/Crystal/cam_mount.png | Bin 18928 -> 0 bytes h-source/Img/Crystal/clear.png | Bin 1120 -> 0 bytes h-source/Img/Crystal/hardware.png | Bin 3478 -> 0 bytes h-source/Img/Crystal/home.png | Bin 867 -> 0 bytes h-source/Img/Crystal/lock.png | Bin 3604 -> 0 bytes h-source/Img/Crystal/modem.png | Bin 5434 -> 0 bytes h-source/Img/Crystal/modem_22.png | Bin 3744 -> 0 bytes h-source/Img/Crystal/rss.png | Bin 2110 -> 0 bytes h-source/Img/Crystal/unlock.png | Bin 3995 -> 0 bytes h-source/Img/Crystal/usb.png | Bin 8059 -> 0 bytes h-source/Img/Crystal/usb_22.png | Bin 1123 -> 0 bytes h-source/Img/Famfamfam/de.png | Bin 545 -> 0 bytes h-source/Img/Famfamfam/es.png | Bin 469 -> 0 bytes h-source/Img/Famfamfam/fr.png | Bin 545 -> 0 bytes h-source/Img/Famfamfam/gb.png | Bin 599 -> 0 bytes h-source/Img/Famfamfam/gr.png | Bin 487 -> 0 bytes h-source/Img/Famfamfam/it.png | Bin 420 -> 0 bytes h-source/Img/Glaze/folder_blue.png | Bin 1150 -> 0 bytes h-source/Img/Glaze/folder_blue_open.png | Bin 1260 -> 0 bytes h-source/Img/Glaze/viewmag.png | Bin 980 -> 0 bytes h-source/Img/H2O/applications-internet.png | Bin 8330 -> 0 bytes h-source/Img/H2O/audio-card.png | Bin 4588 -> 0 bytes h-source/Img/H2O/audio-card_22.png | Bin 1051 -> 0 bytes h-source/Img/H2O/camera-web.png | Bin 4956 -> 0 bytes h-source/Img/H2O/camera-web_22.png | Bin 1236 -> 0 bytes h-source/Img/H2O/computer-laptop.png | Bin 3315 -> 0 bytes h-source/Img/H2O/computer-laptop_22.png | Bin 946 -> 0 bytes h-source/Img/H2O/download.png | Bin 2445 -> 0 bytes h-source/Img/H2O/download_48.png | Bin 4482 -> 0 bytes h-source/Img/H2O/im-ban-user.png | Bin 1258 -> 0 bytes h-source/Img/H2O/im-user.png | Bin 1109 -> 0 bytes h-source/Img/H2O/media-flash-sd-mmc.png | Bin 4272 -> 0 bytes h-source/Img/H2O/media-flash-sd-mmc_22.png | Bin 1081 -> 0 bytes h-source/Img/H2O/network-wired.png | Bin 2735 -> 0 bytes h-source/Img/H2O/network-wired_22.png | Bin 860 -> 0 bytes h-source/Img/H2O/network-wireless.png | Bin 6942 -> 0 bytes h-source/Img/H2O/network-wireless_22.png | Bin 1331 -> 0 bytes .../Img/H2O/preferences-system-bluetooth-22.png | Bin 1046 -> 0 bytes h-source/Img/H2O/preferences-system-bluetooth.png | Bin 4558 -> 0 bytes h-source/Img/H2O/printer.png | Bin 2790 -> 0 bytes h-source/Img/H2O/printer_22.png | Bin 877 -> 0 bytes h-source/Img/H2O/scanner.png | Bin 7684 -> 0 bytes h-source/Img/H2O/scanner_22.png | Bin 856 -> 0 bytes h-source/Img/Icons/back.png | Bin 1145 -> 0 bytes h-source/Img/Icons/delete.png | Bin 2599 -> 0 bytes h-source/Img/Icons/elementary_2_5/AUTHORS | 28 - h-source/Img/Icons/elementary_2_5/CONTRIBUTORS | 3 - h-source/Img/Icons/elementary_2_5/COPYING | 340 - h-source/Img/Icons/elementary_2_5/ChangeLog | 6 - h-source/Img/Icons/elementary_2_5/add.png | Bin 717 -> 0 bytes h-source/Img/Icons/elementary_2_5/clear_filter.png | Bin 1030 -> 0 bytes h-source/Img/Icons/elementary_2_5/delete.png | Bin 1030 -> 0 bytes h-source/Img/Icons/elementary_2_5/down.png | Bin 858 -> 0 bytes h-source/Img/Icons/elementary_2_5/edit.png | Bin 958 -> 0 bytes h-source/Img/Icons/elementary_2_5/find.png | Bin 864 -> 0 bytes h-source/Img/Icons/elementary_2_5/left.png | Bin 852 -> 0 bytes h-source/Img/Icons/elementary_2_5/link.png | Bin 1127 -> 0 bytes h-source/Img/Icons/elementary_2_5/panel.png | Bin 791 -> 0 bytes h-source/Img/Icons/elementary_2_5/up.png | Bin 824 -> 0 bytes h-source/Img/Icons/file.png | Bin 2963 -> 0 bytes h-source/Img/Icons/folder.png | Bin 1545 -> 0 bytes h-source/Img/Icons/image.png | Bin 1220 -> 0 bytes h-source/Img/Icons/index.html | 1 - h-source/Img/back-60.png | Bin 2477 -> 0 bytes h-source/Img/back_last.png | Bin 2576 -> 0 bytes h-source/Img/back_wiki.png | Bin 2548 -> 0 bytes h-source/Img/discover.png | Bin 12231 -> 0 bytes h-source/Img/download.png | Bin 10514 -> 0 bytes h-source/Img/download_code.png | Bin 12232 -> 0 bytes h-source/Img/download_code_gpl3.png | Bin 14218 -> 0 bytes h-source/Img/edit-60.png | Bin 2483 -> 0 bytes h-source/Img/fingerprint_icon-22.png | Bin 1314 -> 0 bytes h-source/Img/fingerprint_icon.png | Bin 5032 -> 0 bytes h-source/Img/fsf_logo.png | Bin 5768 -> 0 bytes h-source/Img/history-60.png | Bin 3428 -> 0 bytes h-source/Img/link.png | Bin 283 -> 0 bytes h-source/Img/mobile.png | Bin 8201 -> 0 bytes h-source/Img/new-60.png | Bin 2098 -> 0 bytes h-source/Img/popup_back.png | Bin 722 -> 0 bytes h-source/Img/rss.png | Bin 9114 -> 0 bytes h-source/Img/search_back.png | Bin 3404 -> 0 bytes h-source/Img/tab_icon_2.ico | Bin 1406 -> 0 bytes h-source/Img/talk-60.png | Bin 2163 -> 0 bytes h-source/Img/talk_messages.png | Bin 536 -> 0 bytes h-source/Img/title.png | Bin 7924 -> 0 bytes h-source/Js/DisplayTag.js | 10 - h-source/Js/TinyMCE.js | 34 - h-source/Js/functions.js | 189 - h-source/Js/index.html | 1 - .../ui-bg_diagonals-small_25_c5ddfc_40x40.png | Bin 157 -> 0 bytes .../ui-bg_diagonals-thick_20_e69700_40x40.png | Bin 257 -> 0 bytes .../ui-bg_diagonals-thick_22_1484e6_40x40.png | Bin 259 -> 0 bytes .../ui-bg_diagonals-thick_26_2293f7_40x40.png | Bin 259 -> 0 bytes .../images/ui-bg_flat_0_e69700_40x100.png | Bin 181 -> 0 bytes .../images/ui-bg_flat_0_e6b900_40x100.png | Bin 181 -> 0 bytes .../ui-bg_highlight-soft_100_f9f9f9_1x100.png | Bin 88 -> 0 bytes .../images/ui-bg_inset-hard_100_eeeeee_1x100.png | Bin 91 -> 0 bytes .../excite-bike/images/ui-icons_0a82eb_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_0b54d5_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_5fa5e3_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_fcdd4a_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_ffffff_256x240.png | Bin 4369 -> 0 bytes .../css/excite-bike/jquery-ui-1.8.4.custom.css | 315 - .../jquery/dialog/js/jquery-ui-1.8.4.custom.min.js | 87 - h-source/Js/jquery/images/ajax-loader.png | Bin 503 -> 0 bytes h-source/Js/jquery/images/icon-search-black.png | Bin 1245 -> 0 bytes h-source/Js/jquery/images/icons-18-black.png | Bin 2064 -> 0 bytes h-source/Js/jquery/images/icons-18-white.png | Bin 2200 -> 0 bytes h-source/Js/jquery/images/icons-36-black.png | Bin 3403 -> 0 bytes h-source/Js/jquery/images/icons-36-white.png | Bin 4020 -> 0 bytes h-source/Js/jquery/jquery-1.7.1.min.js | 4 - h-source/Js/jquery/jquery.mobile-1.1.0.css | 2053 ------ h-source/Js/jquery/jquery.mobile-1.1.0.js | 7551 -------------------- .../ui-bg_diagonals-small_25_c5ddfc_40x40.png | Bin 157 -> 0 bytes .../ui-bg_diagonals-thick_20_e69700_40x40.png | Bin 257 -> 0 bytes .../ui-bg_diagonals-thick_22_1484e6_40x40.png | Bin 259 -> 0 bytes .../ui-bg_diagonals-thick_26_2293f7_40x40.png | Bin 259 -> 0 bytes .../images/ui-bg_flat_0_e69700_40x100.png | Bin 181 -> 0 bytes .../images/ui-bg_flat_0_e6b900_40x100.png | Bin 181 -> 0 bytes .../ui-bg_highlight-soft_100_f9f9f9_1x100.png | Bin 88 -> 0 bytes .../images/ui-bg_inset-hard_100_eeeeee_1x100.png | Bin 91 -> 0 bytes .../excite-bike/images/ui-icons_0a82eb_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_0b54d5_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_5fa5e3_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_fcdd4a_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_ffffff_256x240.png | Bin 4369 -> 0 bytes .../ui/css/excite-bike/jquery-ui-1.8.14.custom.css | 328 - .../Js/jquery/ui/js/jquery-ui-1.8.21.custom.js | 1937 ----- h-source/Js/markitup/jquery.markitup.js | 559 -- h-source/Js/markitup/sets/bbcode/images/bold.png | Bin 304 -> 0 bytes h-source/Js/markitup/sets/bbcode/images/clean.png | Bin 667 -> 0 bytes h-source/Js/markitup/sets/bbcode/images/code.png | Bin 859 -> 0 bytes h-source/Js/markitup/sets/bbcode/images/fonts.png | Bin 567 -> 0 bytes h-source/Js/markitup/sets/bbcode/images/h1.png | Bin 276 -> 0 bytes h-source/Js/markitup/sets/bbcode/images/h2.png | Bin 304 -> 0 bytes h-source/Js/markitup/sets/bbcode/images/h3.png | Bin 306 -> 0 bytes h-source/Js/markitup/sets/bbcode/images/italic.png | Bin 223 -> 0 bytes h-source/Js/markitup/sets/bbcode/images/link.png | Bin 343 -> 0 bytes .../Js/markitup/sets/bbcode/images/list-bullet.png | Bin 344 -> 0 bytes .../Js/markitup/sets/bbcode/images/list-item.png | Bin 248 -> 0 bytes .../markitup/sets/bbcode/images/list-numeric.png | Bin 357 -> 0 bytes .../Js/markitup/sets/bbcode/images/paragraph.png | Bin 361 -> 0 bytes .../Js/markitup/sets/bbcode/images/picture.png | Bin 606 -> 0 bytes .../Js/markitup/sets/bbcode/images/preview.png | Bin 537 -> 0 bytes h-source/Js/markitup/sets/bbcode/images/quotes.png | Bin 743 -> 0 bytes h-source/Js/markitup/sets/bbcode/images/stroke.png | Bin 269 -> 0 bytes .../Js/markitup/sets/bbcode/images/underline.png | Bin 273 -> 0 bytes h-source/Js/markitup/sets/bbcode/readme.txt | 11 - h-source/Js/markitup/sets/bbcode/set.js | 32 - h-source/Js/markitup/sets/bbcode/style.css | 72 - .../Js/markitup/skins/simple/images/handle.png | Bin 258 -> 0 bytes h-source/Js/markitup/skins/simple/images/menu.png | Bin 27151 -> 0 bytes .../Js/markitup/skins/simple/images/submenu.png | Bin 240 -> 0 bytes h-source/Js/markitup/skins/simple/style.css | 118 - h-source/Js/stats.js | 35 - h-source/Library/Array/Validate/Base.php | 258 - h-source/Library/Array/Validate/Soft.php | 102 - h-source/Library/Array/Validate/Strong.php | 197 - h-source/Library/Array/Validate/index.html | 1 - h-source/Library/Array/index.html | 1 - h-source/Library/ArrayExt.php | 80 - h-source/Library/Bootstrap.php | 31 - h-source/Library/BoxParser.php | 86 - h-source/Library/Call.php | 359 - h-source/Library/Controller.php | 321 - h-source/Library/Db/Mysql.php | 446 -- h-source/Library/Db/Mysqli.php | 452 -- h-source/Library/Db/index.html | 1 - h-source/Library/Email.php | 246 - h-source/Library/ErrorReporting.php | 45 - h-source/Library/Factory/Db.php | 69 - h-source/Library/Factory/Strings.php | 38 - h-source/Library/Factory/index.html | 1 - h-source/Library/Files/Log.php | 114 - h-source/Library/Files/Upload.php | 603 -- h-source/Library/Files/index.html | 1 - h-source/Library/Form/Checkbox.php | 49 - h-source/Library/Form/Entry.php | 112 - h-source/Library/Form/File.php | 56 - h-source/Library/Form/Form.php | 140 - h-source/Library/Form/Hidden.php | 40 - h-source/Library/Form/Html.php | 40 - h-source/Library/Form/InputText.php | 49 - h-source/Library/Form/Password.php | 49 - h-source/Library/Form/Radio.php | 49 - h-source/Library/Form/Select.php | 49 - h-source/Library/Form/Textarea.php | 49 - h-source/Library/Form/index.html | 1 - h-source/Library/Functions.php | 304 - h-source/Library/HeaderObj.php | 45 - h-source/Library/Helper/Array.php | 28 - h-source/Library/Helper/Html.php | 31 - h-source/Library/Helper/List.php | 496 -- h-source/Library/Helper/Menu.php | 109 - h-source/Library/Helper/Pages.php | 140 - h-source/Library/Helper/Popup.php | 142 - h-source/Library/Helper/index.html | 1 - h-source/Library/Hooks.php | 38 - h-source/Library/Html/Form.php | 211 - h-source/Library/Html/index.html | 1 - h-source/Library/Image/Gd/Captcha.php | 103 - h-source/Library/Image/Gd/Thumbnail.php | 220 - h-source/Library/Image/Gd/index.html | 1 - h-source/Library/Image/index.html | 1 - h-source/Library/Lang/En/DbCondStrings.php | 34 - h-source/Library/Lang/En/Generic.php | 64 - h-source/Library/Lang/En/ModelStrings.php | 36 - h-source/Library/Lang/En/UploadStrings.php | 45 - h-source/Library/Lang/En/ValCondStrings.php | 93 - h-source/Library/Lang/En/index.html | 1 - h-source/Library/Lang/Eng/DbCondStrings.php | 34 - h-source/Library/Lang/Eng/Generic.php | 48 - h-source/Library/Lang/Eng/ModelStrings.php | 36 - h-source/Library/Lang/Eng/UploadStrings.php | 45 - h-source/Library/Lang/Eng/ValCondStrings.php | 93 - h-source/Library/Lang/Eng/index.html | 1 - h-source/Library/Lang/ResultStrings.php | 42 - h-source/Library/Lang/index.html | 1 - h-source/Library/ModAbstract.php | 42 - h-source/Library/Model/#Base.php# | 1273 ---- h-source/Library/Model/Base.php | 1273 ---- h-source/Library/Model/Map.php | 453 -- h-source/Library/Model/Tree.php | 307 - h-source/Library/Model/index.html | 1 - h-source/Library/Params.php | 66 - h-source/Library/Popup.php | 32 - h-source/Library/Request.php | 56 - h-source/Library/Scaffold.php | 304 - h-source/Library/Strings/Functions.php | 47 - h-source/Library/Theme.php | 100 - h-source/Library/Url.php | 56 - h-source/Library/Users/CheckAdmin.php | 386 - h-source/Library/Users/index.html | 1 - h-source/Library/index.html | 1 - h-source/License.txt | 201 - h-source/Logs/index.html | 1 - h-source/Public/Css/comune.css | 130 - h-source/Public/Css/explorer6.css | 112 - h-source/Public/Css/explorer7.css | 25 - h-source/Public/Css/files.css | 113 - h-source/Public/Css/form.css | 31 - h-source/Public/Css/index.html | 1 - h-source/Public/Css/login.css | 21 - h-source/Public/Css/main.css | 2254 ------ h-source/Public/Css/mainmenu.css | 78 - h-source/Public/Css/mobile.css | 271 - h-source/Public/Css/pagelist.css | 29 - h-source/Public/Css/panel.css | 74 - h-source/Public/Css/popupmenu.css | 49 - h-source/Public/Css/scaffold.css | 105 - h-source/Public/Img/Acun/book.png | Bin 11591 -> 0 bytes h-source/Public/Img/Acun/document_properties.png | Bin 8274 -> 0 bytes h-source/Public/Img/Acun/filenew.png | Bin 9174 -> 0 bytes h-source/Public/Img/Acun/go_previous.png | Bin 10751 -> 0 bytes h-source/Public/Img/Acun/help_hint.png | Bin 13318 -> 0 bytes h-source/Public/Img/Acun/note.png | Bin 6045 -> 0 bytes .../Public/Img/Crystal/1282042718_hardware.png | Bin 20291 -> 0 bytes .../Public/Img/Crystal/1282042976_hardware.png | Bin 3855 -> 0 bytes h-source/Public/Img/Crystal/agt_forward.png | Bin 729 -> 0 bytes h-source/Public/Img/Crystal/button_cancel.png | Bin 792 -> 0 bytes h-source/Public/Img/Crystal/button_ok.png | Bin 612 -> 0 bytes h-source/Public/Img/Crystal/cam_mount-22.png | Bin 4075 -> 0 bytes h-source/Public/Img/Crystal/cam_mount.png | Bin 18928 -> 0 bytes h-source/Public/Img/Crystal/clear.png | Bin 1120 -> 0 bytes h-source/Public/Img/Crystal/hardware.png | Bin 3478 -> 0 bytes h-source/Public/Img/Crystal/home.png | Bin 867 -> 0 bytes h-source/Public/Img/Crystal/lock.png | Bin 3604 -> 0 bytes h-source/Public/Img/Crystal/modem.png | Bin 5434 -> 0 bytes h-source/Public/Img/Crystal/modem_22.png | Bin 3744 -> 0 bytes h-source/Public/Img/Crystal/rss.png | Bin 2110 -> 0 bytes h-source/Public/Img/Crystal/unlock.png | Bin 3995 -> 0 bytes h-source/Public/Img/Crystal/usb.png | Bin 8059 -> 0 bytes h-source/Public/Img/Crystal/usb_22.png | Bin 1123 -> 0 bytes h-source/Public/Img/Famfamfam/de.png | Bin 545 -> 0 bytes h-source/Public/Img/Famfamfam/es.png | Bin 469 -> 0 bytes h-source/Public/Img/Famfamfam/fr.png | Bin 545 -> 0 bytes h-source/Public/Img/Famfamfam/gb.png | Bin 599 -> 0 bytes h-source/Public/Img/Famfamfam/gr.png | Bin 487 -> 0 bytes h-source/Public/Img/Famfamfam/it.png | Bin 420 -> 0 bytes h-source/Public/Img/Famfamfam/pt.png | Bin 554 -> 0 bytes h-source/Public/Img/Glaze/folder_blue.png | Bin 1150 -> 0 bytes h-source/Public/Img/Glaze/folder_blue_open.png | Bin 1260 -> 0 bytes h-source/Public/Img/Glaze/viewmag.png | Bin 980 -> 0 bytes h-source/Public/Img/H2O/applications-internet.png | Bin 8330 -> 0 bytes h-source/Public/Img/H2O/audio-card.png | Bin 4588 -> 0 bytes h-source/Public/Img/H2O/audio-card_22.png | Bin 1051 -> 0 bytes h-source/Public/Img/H2O/camera-web.png | Bin 4956 -> 0 bytes h-source/Public/Img/H2O/camera-web_22.png | Bin 1236 -> 0 bytes h-source/Public/Img/H2O/computer-laptop.png | Bin 3315 -> 0 bytes h-source/Public/Img/H2O/computer-laptop_22.png | Bin 946 -> 0 bytes h-source/Public/Img/H2O/download.png | Bin 2445 -> 0 bytes h-source/Public/Img/H2O/download_48.png | Bin 4482 -> 0 bytes h-source/Public/Img/H2O/im-ban-user.png | Bin 1258 -> 0 bytes h-source/Public/Img/H2O/im-user.png | Bin 1109 -> 0 bytes h-source/Public/Img/H2O/media-flash-sd-mmc.png | Bin 4272 -> 0 bytes h-source/Public/Img/H2O/media-flash-sd-mmc_22.png | Bin 1081 -> 0 bytes h-source/Public/Img/H2O/network-wired.png | Bin 2735 -> 0 bytes h-source/Public/Img/H2O/network-wired_22.png | Bin 860 -> 0 bytes h-source/Public/Img/H2O/network-wireless.png | Bin 6942 -> 0 bytes h-source/Public/Img/H2O/network-wireless_22.png | Bin 1331 -> 0 bytes .../Img/H2O/preferences-system-bluetooth-22.png | Bin 1046 -> 0 bytes .../Img/H2O/preferences-system-bluetooth.png | Bin 4558 -> 0 bytes h-source/Public/Img/H2O/printer.png | Bin 2790 -> 0 bytes h-source/Public/Img/H2O/printer_22.png | Bin 877 -> 0 bytes h-source/Public/Img/H2O/scanner.png | Bin 7684 -> 0 bytes h-source/Public/Img/H2O/scanner_22.png | Bin 856 -> 0 bytes h-source/Public/Img/Icons/back.png | Bin 1145 -> 0 bytes h-source/Public/Img/Icons/delete.png | Bin 2599 -> 0 bytes h-source/Public/Img/Icons/elementary_2_5/AUTHORS | 28 - .../Public/Img/Icons/elementary_2_5/CONTRIBUTORS | 3 - h-source/Public/Img/Icons/elementary_2_5/COPYING | 340 - h-source/Public/Img/Icons/elementary_2_5/ChangeLog | 6 - h-source/Public/Img/Icons/elementary_2_5/add.png | Bin 717 -> 0 bytes .../Img/Icons/elementary_2_5/clear_filter.png | Bin 1030 -> 0 bytes .../Public/Img/Icons/elementary_2_5/delete.png | Bin 1030 -> 0 bytes h-source/Public/Img/Icons/elementary_2_5/down.png | Bin 858 -> 0 bytes h-source/Public/Img/Icons/elementary_2_5/edit.png | Bin 958 -> 0 bytes h-source/Public/Img/Icons/elementary_2_5/find.png | Bin 864 -> 0 bytes h-source/Public/Img/Icons/elementary_2_5/left.png | Bin 852 -> 0 bytes h-source/Public/Img/Icons/elementary_2_5/link.png | Bin 1127 -> 0 bytes h-source/Public/Img/Icons/elementary_2_5/panel.png | Bin 791 -> 0 bytes h-source/Public/Img/Icons/elementary_2_5/up.png | Bin 824 -> 0 bytes h-source/Public/Img/Icons/file.png | Bin 2963 -> 0 bytes h-source/Public/Img/Icons/folder.png | Bin 1545 -> 0 bytes h-source/Public/Img/Icons/image.png | Bin 1220 -> 0 bytes h-source/Public/Img/Icons/index.html | 1 - h-source/Public/Img/back-60.png | Bin 2477 -> 0 bytes h-source/Public/Img/back_last.png | Bin 2576 -> 0 bytes h-source/Public/Img/back_wiki.png | Bin 2548 -> 0 bytes h-source/Public/Img/discover.png | Bin 12231 -> 0 bytes h-source/Public/Img/download.png | Bin 10514 -> 0 bytes h-source/Public/Img/download_code.png | Bin 12232 -> 0 bytes h-source/Public/Img/download_code_gpl3.png | Bin 14218 -> 0 bytes h-source/Public/Img/edit-60.png | Bin 2483 -> 0 bytes h-source/Public/Img/fingerprint_icon-22.png | Bin 1314 -> 0 bytes h-source/Public/Img/fingerprint_icon.png | Bin 5032 -> 0 bytes h-source/Public/Img/fsf_logo.png | Bin 5768 -> 0 bytes h-source/Public/Img/history-60.png | Bin 3428 -> 0 bytes h-source/Public/Img/link.png | Bin 283 -> 0 bytes h-source/Public/Img/mailing.png | Bin 7480 -> 0 bytes h-source/Public/Img/mobile.png | Bin 8201 -> 0 bytes h-source/Public/Img/new-60.png | Bin 2098 -> 0 bytes h-source/Public/Img/popup_back.png | Bin 722 -> 0 bytes h-source/Public/Img/rss.png | Bin 9114 -> 0 bytes h-source/Public/Img/search_back.png | Bin 3404 -> 0 bytes h-source/Public/Img/tab_icon_2.ico | Bin 1406 -> 0 bytes h-source/Public/Img/talk-60.png | Bin 2163 -> 0 bytes h-source/Public/Img/talk_messages.png | Bin 536 -> 0 bytes h-source/Public/Img/title.png | Bin 8537 -> 0 bytes h-source/Public/Js/DisplayTag.js | 10 - h-source/Public/Js/TinyMCE.js | 34 - h-source/Public/Js/functions.js | 189 - h-source/Public/Js/index.html | 1 - .../ui-bg_diagonals-small_25_c5ddfc_40x40.png | Bin 157 -> 0 bytes .../ui-bg_diagonals-thick_20_e69700_40x40.png | Bin 257 -> 0 bytes .../ui-bg_diagonals-thick_22_1484e6_40x40.png | Bin 259 -> 0 bytes .../ui-bg_diagonals-thick_26_2293f7_40x40.png | Bin 259 -> 0 bytes .../images/ui-bg_flat_0_e69700_40x100.png | Bin 181 -> 0 bytes .../images/ui-bg_flat_0_e6b900_40x100.png | Bin 181 -> 0 bytes .../ui-bg_highlight-soft_100_f9f9f9_1x100.png | Bin 88 -> 0 bytes .../images/ui-bg_inset-hard_100_eeeeee_1x100.png | Bin 91 -> 0 bytes .../excite-bike/images/ui-icons_0a82eb_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_0b54d5_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_5fa5e3_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_fcdd4a_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_ffffff_256x240.png | Bin 4369 -> 0 bytes .../css/excite-bike/jquery-ui-1.8.4.custom.css | 315 - .../jquery/dialog/js/jquery-ui-1.8.4.custom.min.js | 87 - h-source/Public/Js/jquery/images/ajax-loader.png | Bin 503 -> 0 bytes .../Public/Js/jquery/images/icon-search-black.png | Bin 1245 -> 0 bytes .../Public/Js/jquery/images/icons-18-black.png | Bin 2064 -> 0 bytes .../Public/Js/jquery/images/icons-18-white.png | Bin 2200 -> 0 bytes .../Public/Js/jquery/images/icons-36-black.png | Bin 3403 -> 0 bytes .../Public/Js/jquery/images/icons-36-white.png | Bin 4020 -> 0 bytes h-source/Public/Js/jquery/jquery-1.7.1.min.js | 4 - h-source/Public/Js/jquery/jquery.mobile-1.1.0.css | 2053 ------ h-source/Public/Js/jquery/jquery.mobile-1.1.0.js | 7551 -------------------- .../ui-bg_diagonals-small_25_c5ddfc_40x40.png | Bin 157 -> 0 bytes .../ui-bg_diagonals-thick_20_e69700_40x40.png | Bin 257 -> 0 bytes .../ui-bg_diagonals-thick_22_1484e6_40x40.png | Bin 259 -> 0 bytes .../ui-bg_diagonals-thick_26_2293f7_40x40.png | Bin 259 -> 0 bytes .../images/ui-bg_flat_0_e69700_40x100.png | Bin 181 -> 0 bytes .../images/ui-bg_flat_0_e6b900_40x100.png | Bin 181 -> 0 bytes .../ui-bg_highlight-soft_100_f9f9f9_1x100.png | Bin 88 -> 0 bytes .../images/ui-bg_inset-hard_100_eeeeee_1x100.png | Bin 91 -> 0 bytes .../excite-bike/images/ui-icons_0a82eb_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_0b54d5_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_5fa5e3_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_fcdd4a_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_ffffff_256x240.png | Bin 4369 -> 0 bytes .../ui/css/excite-bike/jquery-ui-1.8.14.custom.css | 328 - .../Js/jquery/ui/js/jquery-ui-1.8.21.custom.js | 1937 ----- h-source/Public/Js/markitup/jquery.markitup.js | 559 -- .../Public/Js/markitup/sets/bbcode/images/bold.png | Bin 304 -> 0 bytes .../Js/markitup/sets/bbcode/images/clean.png | Bin 667 -> 0 bytes .../Public/Js/markitup/sets/bbcode/images/code.png | Bin 859 -> 0 bytes .../Js/markitup/sets/bbcode/images/fonts.png | Bin 567 -> 0 bytes .../Public/Js/markitup/sets/bbcode/images/h1.png | Bin 276 -> 0 bytes .../Public/Js/markitup/sets/bbcode/images/h2.png | Bin 304 -> 0 bytes .../Public/Js/markitup/sets/bbcode/images/h3.png | Bin 306 -> 0 bytes .../Js/markitup/sets/bbcode/images/italic.png | Bin 223 -> 0 bytes .../Public/Js/markitup/sets/bbcode/images/link.png | Bin 343 -> 0 bytes .../Js/markitup/sets/bbcode/images/list-bullet.png | Bin 344 -> 0 bytes .../Js/markitup/sets/bbcode/images/list-item.png | Bin 248 -> 0 bytes .../markitup/sets/bbcode/images/list-numeric.png | Bin 357 -> 0 bytes .../Js/markitup/sets/bbcode/images/paragraph.png | Bin 361 -> 0 bytes .../Js/markitup/sets/bbcode/images/picture.png | Bin 606 -> 0 bytes .../Js/markitup/sets/bbcode/images/preview.png | Bin 537 -> 0 bytes .../Js/markitup/sets/bbcode/images/quotes.png | Bin 743 -> 0 bytes .../Js/markitup/sets/bbcode/images/stroke.png | Bin 269 -> 0 bytes .../Js/markitup/sets/bbcode/images/underline.png | Bin 273 -> 0 bytes h-source/Public/Js/markitup/sets/bbcode/readme.txt | 11 - h-source/Public/Js/markitup/sets/bbcode/set.js | 32 - h-source/Public/Js/markitup/sets/bbcode/style.css | 72 - .../Js/markitup/skins/simple/images/handle.png | Bin 258 -> 0 bytes .../Js/markitup/skins/simple/images/menu.png | Bin 27151 -> 0 bytes .../Js/markitup/skins/simple/images/submenu.png | Bin 240 -> 0 bytes h-source/Public/Js/markitup/skins/simple/style.css | 118 - h-source/Public/Js/stats.js | 35 - h-source/Public/index.html | 1 - h-source/README.org | 18 - h-source/admin/.htaccess | 9 - .../Controllers/AdminboxesController.php | 78 - .../Controllers/AdmindeletionController.php | 66 - .../Controllers/AdminhardwareController.php | 121 - .../Controllers/AdminhistoryController.php | 68 - .../Controllers/AdminissuesController.php | 88 - .../Controllers/AdminmessagesController.php | 86 - .../Controllers/AdminnewsController.php | 78 - .../Controllers/AdminparamsController.php | 68 - .../Controllers/AdminpasswordController.php | 88 - .../Controllers/AdminregusersController.php | 101 - .../Controllers/AdmintalkController.php | 59 - .../Controllers/AdminusersController.php | 200 - .../Application/Controllers/PanelController.php | 43 - .../Application/Hooks/AfterInitialization.php | 10 - h-source/admin/Application/Hooks/BeforeChecks.php | 16 - .../Application/Hooks/BeforeInitialization.php | 10 - h-source/admin/Application/Hooks/index.html | 1 - .../admin/Application/Include/distributions.php | 88 - h-source/admin/Application/Include/hardware.php | 216 - h-source/admin/Application/Include/languages.php | 192 - h-source/admin/Application/Include/myFunctions.php | 318 - h-source/admin/Application/Include/params.php | 145 - .../admin/Application/Models/AdminusersModel.php | 37 - h-source/admin/Application/Models/BaseModel.php | 68 - h-source/admin/Application/Models/BoxesModel.php | 42 - .../admin/Application/Models/DeletionModel.php | 53 - .../admin/Application/Models/HardwareModel.php | 200 - h-source/admin/Application/Models/HistoryModel.php | 55 - h-source/admin/Application/Models/IssuesModel.php | 96 - .../admin/Application/Models/MessagesModel.php | 58 - h-source/admin/Application/Models/NewsModel.php | 44 - .../admin/Application/Models/NotebooksModel.php | 71 - h-source/admin/Application/Models/ParamsModel.php | 48 - .../admin/Application/Models/PrintersModel.php | 70 - h-source/admin/Application/Models/ProfileModel.php | 72 - .../admin/Application/Models/RevisionsModel.php | 50 - .../admin/Application/Models/ScannersModel.php | 70 - h-source/admin/Application/Models/TalkModel.php | 54 - h-source/admin/Application/Models/UsersModel.php | 223 - .../admin/Application/Models/VideocardsModel.php | 66 - h-source/admin/Application/Models/WifiModel.php | 69 - h-source/admin/Application/Modules/ModBase.php | 41 - h-source/admin/Application/Modules/ModImage.php | 45 - h-source/admin/Application/Modules/ModLink.php | 18 - .../admin/Application/Modules/ModLinkimage.php | 18 - h-source/admin/Application/Modules/ModRaw.php | 18 - h-source/admin/Application/Modules/index.html | 1 - .../Application/Strings/Lang/It/DbCondStrings.php | 17 - .../Application/Strings/Lang/It/ModelStrings.php | 19 - .../Application/Strings/Lang/It/UploadStrings.php | 26 - .../Application/Strings/Lang/It/ValCondStrings.php | 69 - .../admin/Application/Strings/Lang/It/index.html | 1 - h-source/admin/Application/Strings/Lang/index.html | 1 - h-source/admin/Application/Strings/index.html | 1 - .../admin/Application/Views/Adminboxes/main.php | 25 - .../admin/Application/Views/Admindeletion/main.php | 25 - .../admin/Application/Views/Adminhardware/ask.php | 53 - .../admin/Application/Views/Adminhardware/main.php | 25 - .../admin/Application/Views/Adminhistory/main.php | 25 - .../admin/Application/Views/Adminissues/main.php | 36 - .../admin/Application/Views/Adminmessages/main.php | 35 - .../admin/Application/Views/Adminnews/main.php | 35 - .../admin/Application/Views/Adminparams/form.php | 25 - .../admin/Application/Views/Adminpassword/form.php | 9 - .../Application/Views/Adminregusers/associate.php | 54 - .../admin/Application/Views/Adminregusers/main.php | 25 - .../admin/Application/Views/Admintalk/main.php | 25 - .../Application/Views/Adminusers/associate.php | 54 - .../Application/Views/Adminusers/forceout.php | 29 - .../admin/Application/Views/Adminusers/login.php | 45 - .../admin/Application/Views/Adminusers/logout.php | 29 - .../admin/Application/Views/Adminusers/main.php | 25 - h-source/admin/Application/Views/footer_back.php | 27 - h-source/admin/Application/Views/header_back.php | 94 - h-source/admin/Application/Views/panel.php | 55 - h-source/admin/Application/index.html | 1 - h-source/admin/COPYRIGHT.txt | 24 - h-source/admin/Config/Autoload.php | 23 - h-source/admin/Config/Config.php | 41 - h-source/admin/Config/Reporting.php | 41 - h-source/admin/Config/Restricted.php | 94 - h-source/admin/Config/Route.php | 50 - h-source/admin/External/Fonts/FreeFont/AUTHORS | 208 - h-source/admin/External/Fonts/FreeFont/COPYING | 674 -- h-source/admin/External/Fonts/FreeFont/CREDITS | 528 -- h-source/admin/External/Fonts/FreeFont/ChangeLog | 4525 ------------ .../admin/External/Fonts/FreeFont/FreeMono.ttf | Bin 314348 -> 0 bytes h-source/admin/External/Fonts/FreeFont/INSTALL | 86 - h-source/admin/External/Fonts/FreeFont/README | 108 - h-source/admin/Library/Array/Validate/Base.php | 241 - h-source/admin/Library/Array/Validate/Soft.php | 85 - h-source/admin/Library/Array/Validate/Strong.php | 180 - h-source/admin/Library/Array/Validate/index.html | 1 - h-source/admin/Library/Array/index.html | 1 - h-source/admin/Library/ArrayExt.php | 63 - h-source/admin/Library/Bootstrap.php | 14 - h-source/admin/Library/BoxParser.php | 69 - h-source/admin/Library/Call.php | 321 - h-source/admin/Library/Controller.php | 291 - h-source/admin/Library/Db/Mysql.php | 394 - h-source/admin/Library/Db/Mysqli.php | 400 -- h-source/admin/Library/Db/index.html | 1 - h-source/admin/Library/Email.php | 229 - h-source/admin/Library/ErrorReporting.php | 45 - h-source/admin/Library/Factory/Db.php | 52 - h-source/admin/Library/Factory/index.html | 1 - h-source/admin/Library/Files/Log.php | 97 - h-source/admin/Library/Files/Upload.php | 451 -- h-source/admin/Library/Files/index.html | 1 - h-source/admin/Library/Form/Checkbox.php | 41 - h-source/admin/Library/Form/Entry.php | 45 - h-source/admin/Library/Form/Form.php | 116 - h-source/admin/Library/Form/Hidden.php | 23 - h-source/admin/Library/Form/Html.php | 23 - h-source/admin/Library/Form/InputText.php | 30 - h-source/admin/Library/Form/Password.php | 30 - h-source/admin/Library/Form/Radio.php | 30 - h-source/admin/Library/Form/Select.php | 30 - h-source/admin/Library/Form/Textarea.php | 30 - h-source/admin/Library/Form/index.html | 1 - h-source/admin/Library/Functions.php | 279 - h-source/admin/Library/HeaderObj.php | 28 - h-source/admin/Library/Helper/Array.php | 11 - h-source/admin/Library/Helper/Html.php | 14 - h-source/admin/Library/Helper/List.php | 278 - h-source/admin/Library/Helper/Menu.php | 75 - h-source/admin/Library/Helper/Pages.php | 108 - h-source/admin/Library/Helper/Popup.php | 87 - h-source/admin/Library/Helper/index.html | 1 - h-source/admin/Library/Hooks.php | 21 - h-source/admin/Library/Html/Form.php | 168 - h-source/admin/Library/Html/index.html | 1 - h-source/admin/Library/Image/Gd/Captcha.php | 85 - h-source/admin/Library/Image/Gd/Thumbnail.php | 151 - h-source/admin/Library/Image/Gd/index.html | 1 - h-source/admin/Library/Image/index.html | 1 - h-source/admin/Library/Lang/Eng/DbCondStrings.php | 17 - h-source/admin/Library/Lang/Eng/ModelStrings.php | 19 - h-source/admin/Library/Lang/Eng/UploadStrings.php | 27 - h-source/admin/Library/Lang/Eng/ValCondStrings.php | 76 - h-source/admin/Library/Lang/Eng/index.html | 1 - h-source/admin/Library/Lang/ResultStrings.php | 25 - h-source/admin/Library/Lang/index.html | 1 - h-source/admin/Library/ModAbstract.php | 25 - h-source/admin/Library/Model/Base.php | 1140 --- h-source/admin/Library/Model/Map.php | 439 -- h-source/admin/Library/Model/Tree.php | 287 - h-source/admin/Library/Model/index.html | 1 - h-source/admin/Library/Params.php | 37 - h-source/admin/Library/Popup.php | 15 - h-source/admin/Library/Request.php | 39 - h-source/admin/Library/Scaffold.php | 272 - h-source/admin/Library/Strings/Functions.php | 30 - h-source/admin/Library/Theme.php | 79 - h-source/admin/Library/Url.php | 36 - h-source/admin/Library/Users/CheckAdmin.php | 369 - h-source/admin/Library/Users/index.html | 1 - h-source/admin/Library/index.html | 1 - h-source/admin/License.txt | 201 - h-source/admin/Logs/index.html | 1 - h-source/admin/Public/Css/comune.css | 130 - h-source/admin/Public/Css/explorer.css | 91 - h-source/admin/Public/Css/files.css | 113 - h-source/admin/Public/Css/form.css | 31 - h-source/admin/Public/Css/index.html | 1 - h-source/admin/Public/Css/login.css | 21 - h-source/admin/Public/Css/mainmenu.css | 78 - h-source/admin/Public/Css/pagelist.css | 29 - h-source/admin/Public/Css/panel.css | 74 - h-source/admin/Public/Css/popupmenu.css | 49 - h-source/admin/Public/Css/scaffold.css | 105 - h-source/admin/Public/Css/website.css | 1414 ---- h-source/admin/Public/Img/Icons/back.png | Bin 1145 -> 0 bytes h-source/admin/Public/Img/Icons/delete.png | Bin 2599 -> 0 bytes h-source/admin/Public/Img/Icons/file.png | Bin 2963 -> 0 bytes h-source/admin/Public/Img/Icons/folder.png | Bin 1545 -> 0 bytes h-source/admin/Public/Img/Icons/image.png | Bin 1220 -> 0 bytes h-source/admin/Public/Img/Icons/index.html | 1 - h-source/admin/Public/Js/DisplayTag.js | 10 - h-source/admin/Public/Js/TinyMCE.js | 34 - h-source/admin/Public/Js/functions.js | 122 - h-source/admin/Public/Js/index.html | 1 - .../ui-bg_diagonals-small_25_c5ddfc_40x40.png | Bin 157 -> 0 bytes .../ui-bg_diagonals-thick_20_e69700_40x40.png | Bin 257 -> 0 bytes .../ui-bg_diagonals-thick_22_1484e6_40x40.png | Bin 259 -> 0 bytes .../ui-bg_diagonals-thick_26_2293f7_40x40.png | Bin 259 -> 0 bytes .../images/ui-bg_flat_0_e69700_40x100.png | Bin 181 -> 0 bytes .../images/ui-bg_flat_0_e6b900_40x100.png | Bin 181 -> 0 bytes .../ui-bg_highlight-soft_100_f9f9f9_1x100.png | Bin 88 -> 0 bytes .../images/ui-bg_inset-hard_100_eeeeee_1x100.png | Bin 91 -> 0 bytes .../excite-bike/images/ui-icons_0a82eb_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_0b54d5_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_5fa5e3_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_fcdd4a_256x240.png | Bin 4369 -> 0 bytes .../excite-bike/images/ui-icons_ffffff_256x240.png | Bin 4369 -> 0 bytes .../css/excite-bike/jquery-ui-1.8.4.custom.css | 315 - .../jquery/dialog/js/jquery-ui-1.8.4.custom.min.js | 87 - .../admin/Public/Js/jquery/jquery-1.4.2.min.js | 154 - .../admin/Public/Js/markitup/jquery.markitup.js | 559 -- .../Public/Js/markitup/sets/bbcode/images/bold.png | Bin 304 -> 0 bytes .../Js/markitup/sets/bbcode/images/clean.png | Bin 667 -> 0 bytes .../Public/Js/markitup/sets/bbcode/images/code.png | Bin 859 -> 0 bytes .../Js/markitup/sets/bbcode/images/fonts.png | Bin 567 -> 0 bytes .../Public/Js/markitup/sets/bbcode/images/h1.png | Bin 276 -> 0 bytes .../Public/Js/markitup/sets/bbcode/images/h2.png | Bin 304 -> 0 bytes .../Public/Js/markitup/sets/bbcode/images/h3.png | Bin 306 -> 0 bytes .../Js/markitup/sets/bbcode/images/italic.png | Bin 223 -> 0 bytes .../Public/Js/markitup/sets/bbcode/images/link.png | Bin 343 -> 0 bytes .../Js/markitup/sets/bbcode/images/list-bullet.png | Bin 344 -> 0 bytes .../Js/markitup/sets/bbcode/images/list-item.png | Bin 248 -> 0 bytes .../markitup/sets/bbcode/images/list-numeric.png | Bin 357 -> 0 bytes .../Js/markitup/sets/bbcode/images/paragraph.png | Bin 361 -> 0 bytes .../Js/markitup/sets/bbcode/images/picture.png | Bin 606 -> 0 bytes .../Js/markitup/sets/bbcode/images/preview.png | Bin 537 -> 0 bytes .../Js/markitup/sets/bbcode/images/quotes.png | Bin 743 -> 0 bytes .../Js/markitup/sets/bbcode/images/stroke.png | Bin 269 -> 0 bytes .../Js/markitup/sets/bbcode/images/underline.png | Bin 273 -> 0 bytes .../Public/Js/markitup/sets/bbcode/readme.txt | 11 - .../admin/Public/Js/markitup/sets/bbcode/set.js | 32 - .../admin/Public/Js/markitup/sets/bbcode/style.css | 72 - .../Js/markitup/skins/simple/images/handle.png | Bin 258 -> 0 bytes .../Js/markitup/skins/simple/images/menu.png | Bin 27151 -> 0 bytes .../Js/markitup/skins/simple/images/submenu.png | Bin 240 -> 0 bytes .../Public/Js/markitup/skins/simple/style.css | 118 - h-source/admin/Public/Js/stats.js | 35 - h-source/admin/Public/index.html | 1 - h-source/admin/README.txt | 62 - h-source/admin/h-admin-copyright.txt | 16 - h-source/admin/index.php | 16 - h-source/admin/tables.sql | 64 - h-source/config.xml | 681 -- h-source/dafare.txt | 12 - h-source/h-node-schema-dump.sql | 614 -- h-source/h-source-copyright.txt | 16 - h-source/index.php | 16 - h-source/mark-staging.patch | 76 - h-source/modifiche.txt | 17 - h-source/source/h-admin_0_2.tar.gz | Bin 402071 -> 0 bytes h-source/source/ht/ismyhwok_25thSep2010-1.tar.gz | Bin 354350 -> 0 bytes h-source/source/notes_0.2.html | 19 - h-source/static/en/cancelled.html | 46 - h-source/static/en/donations.html | 55 - h-source/static/en/thanks.html | 46 - h-source/static/licenses.html | 64 - h-source/tabelle.txt | 160 - h-source/tables.sql | 616 -- index.php | 16 + mark-staging.patch | 76 + modifiche.txt | 17 + source/h-admin_0_2.tar.gz | Bin 0 -> 402071 bytes source/ht/ismyhwok_25thSep2010-1.tar.gz | Bin 0 -> 354350 bytes source/notes_0.2.html | 19 + static/en/cancelled.html | 46 + static/en/donations.html | 55 + static/en/thanks.html | 46 + static/licenses.html | 64 + tabelle.txt | 160 + tables.sql | 616 ++ 2178 files changed, 128351 insertions(+), 128351 deletions(-) create mode 100755 .htaccess create mode 100644 Application/Controllers/AcquisitioncardsController.php create mode 100644 Application/Controllers/BaseController.php create mode 100644 Application/Controllers/BluetoothController.php create mode 100644 Application/Controllers/ClientController.php create mode 100644 Application/Controllers/ContactController.php create mode 100644 Application/Controllers/CreditsController.php create mode 100644 Application/Controllers/DownloadController.php create mode 100644 Application/Controllers/EthernetcardsController.php create mode 100644 Application/Controllers/FaqController.php create mode 100644 Application/Controllers/FingerprintreadersController.php create mode 100644 Application/Controllers/GenericController.php create mode 100644 Application/Controllers/HardwareController.php create mode 100644 Application/Controllers/HelpController.php create mode 100644 Application/Controllers/HistoryController.php create mode 100644 Application/Controllers/HomeController.php create mode 100644 Application/Controllers/HostcontrollersController.php create mode 100644 Application/Controllers/ImageController.php create mode 100644 Application/Controllers/IssuesController.php create mode 100644 Application/Controllers/MeetController.php create mode 100644 Application/Controllers/ModemsController.php create mode 100644 Application/Controllers/MyController.php create mode 100644 Application/Controllers/NewsController.php create mode 100644 Application/Controllers/NotebooksController.php create mode 100644 Application/Controllers/PrintersController.php create mode 100644 Application/Controllers/ProjectController.php create mode 100644 Application/Controllers/RaidadaptersController.php create mode 100644 Application/Controllers/RssController.php create mode 100644 Application/Controllers/ScannersController.php create mode 100644 Application/Controllers/SdcardreadersController.php create mode 100644 Application/Controllers/SearchController.php create mode 100644 Application/Controllers/SoundcardsController.php create mode 100644 Application/Controllers/SpecialController.php create mode 100644 Application/Controllers/ThreegcardsController.php create mode 100644 Application/Controllers/UsersController.php create mode 100644 Application/Controllers/VideocardsController.php create mode 100644 Application/Controllers/WebcamsController.php create mode 100644 Application/Controllers/WifiController.php create mode 100644 Application/Controllers/WikiController.php create mode 100755 Application/Hooks/AfterInitialization.php create mode 100755 Application/Hooks/BeforeChecks.php create mode 100755 Application/Hooks/BeforeInitialization.php create mode 100755 Application/Hooks/index.html create mode 100644 Application/Include/distributions.php create mode 100644 Application/Include/hardware.php create mode 100644 Application/Include/languages.php create mode 100644 Application/Include/license.php create mode 100644 Application/Include/myFunctions.php create mode 100644 Application/Include/params.php create mode 100644 Application/Include/vendorTranslations.php create mode 100644 Application/Include/vendors.php create mode 100644 Application/Include/version.php create mode 100644 Application/Include/wikiFormatting.php create mode 100644 Application/Models/AcquisitioncardsModel.php create mode 100644 Application/Models/BaseModel.php create mode 100644 Application/Models/BluetoothModel.php create mode 100644 Application/Models/BoxesModel.php create mode 100644 Application/Models/DeletionModel.php create mode 100644 Application/Models/DistrosModel.php create mode 100644 Application/Models/EthernetcardsModel.php create mode 100644 Application/Models/FingerprintreadersModel.php create mode 100644 Application/Models/GenericModel.php create mode 100644 Application/Models/HardwareModel.php create mode 100644 Application/Models/HistoryModel.php create mode 100644 Application/Models/HostcontrollersModel.php create mode 100644 Application/Models/IssuesModel.php create mode 100644 Application/Models/MessagesModel.php create mode 100644 Application/Models/ModemsModel.php create mode 100644 Application/Models/NewsModel.php create mode 100644 Application/Models/NotebooksModel.php create mode 100644 Application/Models/ParamsModel.php create mode 100644 Application/Models/PrintersModel.php create mode 100644 Application/Models/ProfileModel.php create mode 100644 Application/Models/RaidadaptersModel.php create mode 100644 Application/Models/RevisionsModel.php create mode 100644 Application/Models/ScannersModel.php create mode 100644 Application/Models/SdcardreadersModel.php create mode 100644 Application/Models/SoundcardsModel.php create mode 100644 Application/Models/TalkModel.php create mode 100644 Application/Models/ThreegcardsModel.php create mode 100755 Application/Models/UsersModel.php create mode 100644 Application/Models/VendorsModel.php create mode 100644 Application/Models/VideocardsModel.php create mode 100644 Application/Models/WebcamsModel.php create mode 100644 Application/Models/WifiModel.php create mode 100644 Application/Models/WikiModel.php create mode 100644 Application/Models/WikirevisionsModel.php create mode 100644 Application/Models/WikitalkModel.php create mode 100644 Application/Modules/ModBase.php create mode 100644 Application/Modules/ModImage.php create mode 100644 Application/Modules/ModLink.php create mode 100644 Application/Modules/ModLinkimage.php create mode 100644 Application/Modules/ModRaw.php create mode 100644 Application/Modules/ModTopLink.php create mode 100644 Application/Modules/index.html create mode 100644 Application/Strings/Lang/It/DbCondStrings.php create mode 100644 Application/Strings/Lang/It/ModelStrings.php create mode 100644 Application/Strings/Lang/It/UploadStrings.php create mode 100644 Application/Strings/Lang/It/ValCondStrings.php create mode 100644 Application/Strings/Lang/It/index.html create mode 100644 Application/Strings/Lang/index.html create mode 100644 Application/Strings/index.html create mode 100644 Application/Views/Desktop/Client/info.php create mode 100644 Application/Views/Desktop/Client/license.php create mode 100644 Application/Views/Desktop/Contact/index.php create mode 100644 Application/Views/Desktop/Contact/index_de.php create mode 100644 Application/Views/Desktop/Contact/index_es.php create mode 100644 Application/Views/Desktop/Contact/index_fr.php create mode 100644 Application/Views/Desktop/Contact/index_gr.php create mode 100644 Application/Views/Desktop/Contact/index_it.php create mode 100644 Application/Views/Desktop/Credits/index.php create mode 100644 Application/Views/Desktop/Credits/index_es.php create mode 100644 Application/Views/Desktop/Credits/index_fr.php create mode 100644 Application/Views/Desktop/Credits/index_gr.php create mode 100644 Application/Views/Desktop/Credits/index_it.php create mode 100644 Application/Views/Desktop/Download/index.php create mode 100644 Application/Views/Desktop/Download/xml.php create mode 100644 Application/Views/Desktop/Hardware/left.php create mode 100644 Application/Views/Desktop/Help/index.php create mode 100644 Application/Views/Desktop/Help/index_de.php create mode 100644 Application/Views/Desktop/Help/index_es.php create mode 100644 Application/Views/Desktop/Help/index_fr.php create mode 100644 Application/Views/Desktop/Help/index_it.php create mode 100644 Application/Views/Desktop/History/viewall.php create mode 100644 Application/Views/Desktop/Home/left.php create mode 100644 Application/Views/Desktop/Home/left_de.php create mode 100644 Application/Views/Desktop/Home/left_es.php create mode 100644 Application/Views/Desktop/Home/left_fr.php create mode 100644 Application/Views/Desktop/Home/left_gr.php create mode 100644 Application/Views/Desktop/Home/left_it.php create mode 100644 Application/Views/Desktop/Issues/view.php create mode 100644 Application/Views/Desktop/Issues/viewall.php create mode 100644 Application/Views/Desktop/Meet/contributions.php create mode 100644 Application/Views/Desktop/Meet/hardware.php create mode 100644 Application/Views/Desktop/Meet/issues.php create mode 100644 Application/Views/Desktop/Meet/list_template.php create mode 100644 Application/Views/Desktop/Meet/meet.php create mode 100644 Application/Views/Desktop/Meet/messages.php create mode 100644 Application/Views/Desktop/Meet/talk.php create mode 100644 Application/Views/Desktop/Meet/wiki.php create mode 100644 Application/Views/Desktop/Meet/wikitalk.php create mode 100644 Application/Views/Desktop/My/email.php create mode 100644 Application/Views/Desktop/My/goodbye.php create mode 100644 Application/Views/Desktop/My/panel.php create mode 100644 Application/Views/Desktop/My/password.php create mode 100644 Application/Views/Desktop/My/profile.php create mode 100644 Application/Views/Desktop/News/index.php create mode 100644 Application/Views/Desktop/Notebooks/.svn/entries create mode 100644 Application/Views/Desktop/Notebooks/.svn/text-base/form.php.svn-base create mode 100644 Application/Views/Desktop/Notebooks/.svn/text-base/page.php.svn-base create mode 100644 Application/Views/Desktop/Notebooks/form.php create mode 100644 Application/Views/Desktop/Notebooks/page.php create mode 100644 Application/Views/Desktop/Project/index.php create mode 100644 Application/Views/Desktop/Project/index_de.php create mode 100644 Application/Views/Desktop/Project/index_es.php create mode 100644 Application/Views/Desktop/Project/index_fr.php create mode 100644 Application/Views/Desktop/Project/index_gr.php create mode 100644 Application/Views/Desktop/Project/index_it.php create mode 100644 Application/Views/Desktop/Rss/modifications.php create mode 100644 Application/Views/Desktop/Rss/notapproved.php create mode 100644 Application/Views/Desktop/Search/form.php create mode 100644 Application/Views/Desktop/Search/lspci_results.php create mode 100644 Application/Views/Desktop/Search/results.php create mode 100644 Application/Views/Desktop/Special/modactions.php create mode 100644 Application/Views/Desktop/Special/modifications.php create mode 100644 Application/Views/Desktop/Special/pages_deleted.php create mode 100755 Application/Views/Desktop/Users/add.php create mode 100644 Application/Views/Desktop/Users/change.php create mode 100644 Application/Views/Desktop/Users/confirmation.php create mode 100644 Application/Views/Desktop/Users/forgot.php create mode 100755 Application/Views/Desktop/Users/login.php create mode 100755 Application/Views/Desktop/Users/logout.php create mode 100644 Application/Views/Desktop/Users/notice.php create mode 100644 Application/Views/Desktop/Wiki/climb.php create mode 100644 Application/Views/Desktop/Wiki/differences.php create mode 100644 Application/Views/Desktop/Wiki/form.php create mode 100644 Application/Views/Desktop/Wiki/history.php create mode 100644 Application/Views/Desktop/Wiki/modifications.php create mode 100644 Application/Views/Desktop/Wiki/not_found.php create mode 100644 Application/Views/Desktop/Wiki/page.php create mode 100644 Application/Views/Desktop/Wiki/pages.php create mode 100644 Application/Views/Desktop/Wiki/talk.php create mode 100644 Application/Views/Desktop/bottom_left.php create mode 100644 Application/Views/Desktop/catalogue.php create mode 100644 Application/Views/Desktop/cleared.php create mode 100644 Application/Views/Desktop/climb.php create mode 100644 Application/Views/Desktop/dialog.php create mode 100644 Application/Views/Desktop/differences.php create mode 100644 Application/Views/Desktop/footer.php create mode 100644 Application/Views/Desktop/form.php create mode 100644 Application/Views/Desktop/header.php create mode 100644 Application/Views/Desktop/history.php create mode 100644 Application/Views/Desktop/if_page_deleted.php create mode 100644 Application/Views/Desktop/license_notice.php create mode 100644 Application/Views/Desktop/moderator_dialog.php create mode 100644 Application/Views/Desktop/noscript_distributions.php create mode 100644 Application/Views/Desktop/not_found.php create mode 100644 Application/Views/Desktop/page.php create mode 100644 Application/Views/Desktop/right.php create mode 100644 Application/Views/Desktop/suggest_dialog.php create mode 100644 Application/Views/Desktop/talk.php create mode 100644 Application/Views/Desktop/top_left.php create mode 100644 Application/Views/Desktop/wiki_page.php create mode 100644 Application/Views/Desktop/xml_response.php create mode 100644 Application/Views/Mobile/Contact/index.php create mode 100644 Application/Views/Mobile/Contact/index_de.php create mode 100644 Application/Views/Mobile/Contact/index_es.php create mode 100644 Application/Views/Mobile/Contact/index_fr.php create mode 100644 Application/Views/Mobile/Contact/index_gr.php create mode 100644 Application/Views/Mobile/Contact/index_it.php create mode 100644 Application/Views/Mobile/Credits/index.php create mode 100644 Application/Views/Mobile/Credits/index_es.php create mode 100644 Application/Views/Mobile/Credits/index_fr.php create mode 100644 Application/Views/Mobile/Credits/index_gr.php create mode 100644 Application/Views/Mobile/Credits/index_it.php create mode 100644 Application/Views/Mobile/Hardware/left.php create mode 100644 Application/Views/Mobile/Home/left.php create mode 100644 Application/Views/Mobile/Home/left_de.php create mode 100644 Application/Views/Mobile/Home/left_es.php create mode 100644 Application/Views/Mobile/Home/left_fr.php create mode 100644 Application/Views/Mobile/Home/left_gr.php create mode 100644 Application/Views/Mobile/Home/left_it.php create mode 100644 Application/Views/Mobile/Notebooks/page.php create mode 100644 Application/Views/Mobile/Project/index.php create mode 100644 Application/Views/Mobile/Project/index_de.php create mode 100644 Application/Views/Mobile/Project/index_es.php create mode 100644 Application/Views/Mobile/Project/index_fr.php create mode 100644 Application/Views/Mobile/Project/index_gr.php create mode 100644 Application/Views/Mobile/Project/index_it.php create mode 100644 Application/Views/Mobile/bottom_left.php create mode 100644 Application/Views/Mobile/catalogue.php create mode 100644 Application/Views/Mobile/dialog.php create mode 100644 Application/Views/Mobile/footer.php create mode 100644 Application/Views/Mobile/header.php create mode 100644 Application/Views/Mobile/if_page_deleted.php create mode 100644 Application/Views/Mobile/moderator_dialog.php create mode 100644 Application/Views/Mobile/page.php create mode 100644 Application/Views/Mobile/right.php create mode 100644 Application/Views/Mobile/top_left.php create mode 100755 Application/index.html create mode 100755 COPYRIGHT.txt create mode 100644 Config/Autoload.php create mode 100755 Config/Config.php create mode 100755 Config/Reporting.php create mode 100755 Config/Restricted.php create mode 100644 Config/Route.php create mode 100755 Credits.txt create mode 100644 Css/comune.css create mode 100755 Css/explorer6.css create mode 100644 Css/explorer7.css create mode 100644 Css/files.css create mode 100755 Css/form.css create mode 100644 Css/index.html create mode 100644 Css/login.css create mode 100644 Css/main.css create mode 100755 Css/mainmenu.css create mode 100644 Css/mobile.css create mode 100644 Css/pagelist.css create mode 100644 Css/panel.css create mode 100755 Css/popupmenu.css create mode 100755 Css/scaffold.css create mode 100755 External/Fonts/FreeFont/AUTHORS create mode 100755 External/Fonts/FreeFont/COPYING create mode 100755 External/Fonts/FreeFont/CREDITS create mode 100755 External/Fonts/FreeFont/ChangeLog create mode 100755 External/Fonts/FreeFont/FreeMono.ttf create mode 100755 External/Fonts/FreeFont/INSTALL create mode 100755 External/Fonts/FreeFont/README create mode 100755 External/swiftmailer/lib/classes/Swift.php create mode 100755 External/swiftmailer/lib/classes/Swift/Attachment.php create mode 100755 External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php create mode 100755 External/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php create mode 100755 External/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php create mode 100755 External/swiftmailer/lib/classes/Swift/CharacterReader.php create mode 100755 External/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php create mode 100755 External/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php create mode 100755 External/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php create mode 100755 External/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php create mode 100755 External/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php create mode 100755 External/swiftmailer/lib/classes/Swift/CharacterStream.php create mode 100755 External/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php create mode 100755 External/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php create mode 100755 External/swiftmailer/lib/classes/Swift/DependencyContainer.php create mode 100755 External/swiftmailer/lib/classes/Swift/DependencyException.php create mode 100755 External/swiftmailer/lib/classes/Swift/EmbeddedFile.php create mode 100755 External/swiftmailer/lib/classes/Swift/Encoder.php create mode 100755 External/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php create mode 100755 External/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php create mode 100755 External/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php create mode 100755 External/swiftmailer/lib/classes/Swift/Encoding.php create mode 100755 External/swiftmailer/lib/classes/Swift/Events/CommandEvent.php create mode 100755 External/swiftmailer/lib/classes/Swift/Events/CommandListener.php create mode 100755 External/swiftmailer/lib/classes/Swift/Events/Event.php create mode 100755 External/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php create mode 100755 External/swiftmailer/lib/classes/Swift/Events/EventListener.php create mode 100755 External/swiftmailer/lib/classes/Swift/Events/EventObject.php create mode 100755 External/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php create mode 100755 External/swiftmailer/lib/classes/Swift/Events/ResponseListener.php create mode 100755 External/swiftmailer/lib/classes/Swift/Events/SendEvent.php create mode 100755 External/swiftmailer/lib/classes/Swift/Events/SendListener.php create mode 100755 External/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php create mode 100755 External/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php create mode 100755 External/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php create mode 100755 External/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php create mode 100755 External/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php create mode 100755 External/swiftmailer/lib/classes/Swift/FailoverTransport.php create mode 100755 External/swiftmailer/lib/classes/Swift/FileStream.php create mode 100755 External/swiftmailer/lib/classes/Swift/Filterable.php create mode 100755 External/swiftmailer/lib/classes/Swift/Image.php create mode 100755 External/swiftmailer/lib/classes/Swift/InputByteStream.php create mode 100755 External/swiftmailer/lib/classes/Swift/IoException.php create mode 100755 External/swiftmailer/lib/classes/Swift/KeyCache.php create mode 100755 External/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php create mode 100755 External/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php create mode 100755 External/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php create mode 100755 External/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php create mode 100755 External/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php create mode 100755 External/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php create mode 100755 External/swiftmailer/lib/classes/Swift/MailTransport.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mailer.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php create mode 100755 External/swiftmailer/lib/classes/Swift/Message.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/Attachment.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/Header.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/HeaderFactory.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/HeaderSet.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/Message.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/MimePart.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php create mode 100755 External/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php create mode 100755 External/swiftmailer/lib/classes/Swift/MimePart.php create mode 100755 External/swiftmailer/lib/classes/Swift/OutputByteStream.php create mode 100755 External/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php create mode 100755 External/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php create mode 100755 External/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php create mode 100755 External/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php create mode 100755 External/swiftmailer/lib/classes/Swift/Plugins/Logger.php create mode 100755 External/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php create mode 100755 External/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php create mode 100755 External/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php create mode 100755 External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php create mode 100755 External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Exception.php create mode 100755 External/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php create mode 100755 External/swiftmailer/lib/classes/Swift/Plugins/Reporter.php create mode 100755 External/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php create mode 100755 External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php create mode 100755 External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php create mode 100755 External/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php create mode 100755 External/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php create mode 100755 External/swiftmailer/lib/classes/Swift/Plugins/Timer.php create mode 100755 External/swiftmailer/lib/classes/Swift/Preferences.php create mode 100755 External/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php create mode 100755 External/swiftmailer/lib/classes/Swift/RfcComplianceException.php create mode 100755 External/swiftmailer/lib/classes/Swift/SendmailTransport.php create mode 100755 External/swiftmailer/lib/classes/Swift/SmtpTransport.php create mode 100755 External/swiftmailer/lib/classes/Swift/StreamFilter.php create mode 100755 External/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php create mode 100755 External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php create mode 100755 External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php create mode 100755 External/swiftmailer/lib/classes/Swift/SwiftException.php create mode 100755 External/swiftmailer/lib/classes/Swift/Transport.php create mode 100755 External/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php create mode 100755 External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php create mode 100755 External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php create mode 100755 External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php create mode 100755 External/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php create mode 100755 External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php create mode 100755 External/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php create mode 100755 External/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php create mode 100755 External/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php create mode 100755 External/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php create mode 100755 External/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php create mode 100755 External/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php create mode 100755 External/swiftmailer/lib/classes/Swift/Transport/MailTransport.php create mode 100755 External/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php create mode 100755 External/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php create mode 100755 External/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php create mode 100755 External/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php create mode 100755 External/swiftmailer/lib/classes/Swift/TransportException.php create mode 100755 External/swiftmailer/lib/dependency_maps/cache_deps.php create mode 100755 External/swiftmailer/lib/dependency_maps/mime_deps.php create mode 100755 External/swiftmailer/lib/dependency_maps/transport_deps.php create mode 100755 External/swiftmailer/lib/mime_types.php create mode 100755 External/swiftmailer/lib/preferences.php create mode 100755 External/swiftmailer/lib/swift_init.php create mode 100755 External/swiftmailer/lib/swift_required.php create mode 100755 External/swiftmailer/lib/swift_required_pear.php create mode 100755 Img/Acun/book.png create mode 100755 Img/Acun/document_properties.png create mode 100755 Img/Acun/filenew.png create mode 100755 Img/Acun/go_previous.png create mode 100644 Img/Acun/help_hint.png create mode 100755 Img/Acun/note.png create mode 100644 Img/Crystal/1282042718_hardware.png create mode 100644 Img/Crystal/1282042976_hardware.png create mode 100755 Img/Crystal/agt_forward.png create mode 100755 Img/Crystal/button_cancel.png create mode 100755 Img/Crystal/button_ok.png create mode 100755 Img/Crystal/cam_mount-22.png create mode 100755 Img/Crystal/cam_mount.png create mode 100755 Img/Crystal/clear.png create mode 100755 Img/Crystal/hardware.png create mode 100755 Img/Crystal/home.png create mode 100755 Img/Crystal/lock.png create mode 100755 Img/Crystal/modem.png create mode 100755 Img/Crystal/modem_22.png create mode 100755 Img/Crystal/rss.png create mode 100755 Img/Crystal/unlock.png create mode 100755 Img/Crystal/usb.png create mode 100755 Img/Crystal/usb_22.png create mode 100755 Img/Famfamfam/de.png create mode 100755 Img/Famfamfam/es.png create mode 100755 Img/Famfamfam/fr.png create mode 100644 Img/Famfamfam/gb.png create mode 100755 Img/Famfamfam/gr.png create mode 100755 Img/Famfamfam/it.png create mode 100755 Img/Glaze/folder_blue.png create mode 100755 Img/Glaze/folder_blue_open.png create mode 100755 Img/Glaze/viewmag.png create mode 100755 Img/H2O/applications-internet.png create mode 100755 Img/H2O/audio-card.png create mode 100755 Img/H2O/audio-card_22.png create mode 100755 Img/H2O/camera-web.png create mode 100755 Img/H2O/camera-web_22.png create mode 100755 Img/H2O/computer-laptop.png create mode 100755 Img/H2O/computer-laptop_22.png create mode 100755 Img/H2O/download.png create mode 100755 Img/H2O/download_48.png create mode 100755 Img/H2O/im-ban-user.png create mode 100755 Img/H2O/im-user.png create mode 100755 Img/H2O/media-flash-sd-mmc.png create mode 100755 Img/H2O/media-flash-sd-mmc_22.png create mode 100755 Img/H2O/network-wired.png create mode 100755 Img/H2O/network-wired_22.png create mode 100755 Img/H2O/network-wireless.png create mode 100755 Img/H2O/network-wireless_22.png create mode 100755 Img/H2O/preferences-system-bluetooth-22.png create mode 100755 Img/H2O/preferences-system-bluetooth.png create mode 100755 Img/H2O/printer.png create mode 100755 Img/H2O/printer_22.png create mode 100755 Img/H2O/scanner.png create mode 100755 Img/H2O/scanner_22.png create mode 100644 Img/Icons/back.png create mode 100644 Img/Icons/delete.png create mode 100755 Img/Icons/elementary_2_5/AUTHORS create mode 100755 Img/Icons/elementary_2_5/CONTRIBUTORS create mode 100755 Img/Icons/elementary_2_5/COPYING create mode 100755 Img/Icons/elementary_2_5/ChangeLog create mode 100755 Img/Icons/elementary_2_5/add.png create mode 100755 Img/Icons/elementary_2_5/clear_filter.png create mode 100755 Img/Icons/elementary_2_5/delete.png create mode 100755 Img/Icons/elementary_2_5/down.png create mode 100755 Img/Icons/elementary_2_5/edit.png create mode 100755 Img/Icons/elementary_2_5/find.png create mode 100755 Img/Icons/elementary_2_5/left.png create mode 100755 Img/Icons/elementary_2_5/link.png create mode 100755 Img/Icons/elementary_2_5/panel.png create mode 100755 Img/Icons/elementary_2_5/up.png create mode 100644 Img/Icons/file.png create mode 100644 Img/Icons/folder.png create mode 100644 Img/Icons/image.png create mode 100644 Img/Icons/index.html create mode 100644 Img/back-60.png create mode 100644 Img/back_last.png create mode 100644 Img/back_wiki.png create mode 100644 Img/discover.png create mode 100644 Img/download.png create mode 100755 Img/download_code.png create mode 100644 Img/download_code_gpl3.png create mode 100644 Img/edit-60.png create mode 100644 Img/fingerprint_icon-22.png create mode 100644 Img/fingerprint_icon.png create mode 100755 Img/fsf_logo.png create mode 100644 Img/history-60.png create mode 100644 Img/link.png create mode 100644 Img/mobile.png create mode 100644 Img/new-60.png create mode 100644 Img/popup_back.png create mode 100644 Img/rss.png create mode 100644 Img/search_back.png create mode 100644 Img/tab_icon_2.ico create mode 100644 Img/talk-60.png create mode 100644 Img/talk_messages.png create mode 100644 Img/title.png create mode 100755 Js/DisplayTag.js create mode 100755 Js/TinyMCE.js create mode 100644 Js/functions.js create mode 100644 Js/index.html create mode 100755 Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png create mode 100755 Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png create mode 100755 Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png create mode 100755 Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png create mode 100755 Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png create mode 100755 Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png create mode 100755 Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png create mode 100755 Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png create mode 100755 Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png create mode 100755 Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png create mode 100755 Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png create mode 100755 Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png create mode 100755 Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png create mode 100755 Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css create mode 100755 Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js create mode 100644 Js/jquery/images/ajax-loader.png create mode 100644 Js/jquery/images/icon-search-black.png create mode 100644 Js/jquery/images/icons-18-black.png create mode 100644 Js/jquery/images/icons-18-white.png create mode 100644 Js/jquery/images/icons-36-black.png create mode 100644 Js/jquery/images/icons-36-white.png create mode 100644 Js/jquery/jquery-1.7.1.min.js create mode 100644 Js/jquery/jquery.mobile-1.1.0.css create mode 100644 Js/jquery/jquery.mobile-1.1.0.js create mode 100755 Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png create mode 100755 Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png create mode 100755 Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png create mode 100755 Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png create mode 100755 Js/jquery/ui/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png create mode 100755 Js/jquery/ui/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png create mode 100755 Js/jquery/ui/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png create mode 100755 Js/jquery/ui/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png create mode 100755 Js/jquery/ui/css/excite-bike/images/ui-icons_0a82eb_256x240.png create mode 100755 Js/jquery/ui/css/excite-bike/images/ui-icons_0b54d5_256x240.png create mode 100755 Js/jquery/ui/css/excite-bike/images/ui-icons_5fa5e3_256x240.png create mode 100755 Js/jquery/ui/css/excite-bike/images/ui-icons_fcdd4a_256x240.png create mode 100755 Js/jquery/ui/css/excite-bike/images/ui-icons_ffffff_256x240.png create mode 100644 Js/jquery/ui/css/excite-bike/jquery-ui-1.8.14.custom.css create mode 100644 Js/jquery/ui/js/jquery-ui-1.8.21.custom.js create mode 100644 Js/markitup/jquery.markitup.js create mode 100644 Js/markitup/sets/bbcode/images/bold.png create mode 100644 Js/markitup/sets/bbcode/images/clean.png create mode 100644 Js/markitup/sets/bbcode/images/code.png create mode 100644 Js/markitup/sets/bbcode/images/fonts.png create mode 100644 Js/markitup/sets/bbcode/images/h1.png create mode 100644 Js/markitup/sets/bbcode/images/h2.png create mode 100644 Js/markitup/sets/bbcode/images/h3.png create mode 100644 Js/markitup/sets/bbcode/images/italic.png create mode 100644 Js/markitup/sets/bbcode/images/link.png create mode 100644 Js/markitup/sets/bbcode/images/list-bullet.png create mode 100644 Js/markitup/sets/bbcode/images/list-item.png create mode 100644 Js/markitup/sets/bbcode/images/list-numeric.png create mode 100644 Js/markitup/sets/bbcode/images/paragraph.png create mode 100644 Js/markitup/sets/bbcode/images/picture.png create mode 100644 Js/markitup/sets/bbcode/images/preview.png create mode 100644 Js/markitup/sets/bbcode/images/quotes.png create mode 100644 Js/markitup/sets/bbcode/images/stroke.png create mode 100644 Js/markitup/sets/bbcode/images/underline.png create mode 100644 Js/markitup/sets/bbcode/readme.txt create mode 100644 Js/markitup/sets/bbcode/set.js create mode 100644 Js/markitup/sets/bbcode/style.css create mode 100644 Js/markitup/skins/simple/images/handle.png create mode 100644 Js/markitup/skins/simple/images/menu.png create mode 100644 Js/markitup/skins/simple/images/submenu.png create mode 100644 Js/markitup/skins/simple/style.css create mode 100644 Js/stats.js create mode 100644 Library/Array/Validate/Base.php create mode 100644 Library/Array/Validate/Soft.php create mode 100644 Library/Array/Validate/Strong.php create mode 100644 Library/Array/Validate/index.html create mode 100644 Library/Array/index.html create mode 100755 Library/ArrayExt.php create mode 100755 Library/Bootstrap.php create mode 100644 Library/BoxParser.php create mode 100755 Library/Call.php create mode 100755 Library/Controller.php create mode 100755 Library/Db/Mysql.php create mode 100644 Library/Db/Mysqli.php create mode 100644 Library/Db/index.html create mode 100644 Library/Email.php create mode 100644 Library/ErrorReporting.php create mode 100755 Library/Factory/Db.php create mode 100644 Library/Factory/Strings.php create mode 100644 Library/Factory/index.html create mode 100644 Library/Files/Log.php create mode 100755 Library/Files/Upload.php create mode 100644 Library/Files/index.html create mode 100755 Library/Form/Checkbox.php create mode 100755 Library/Form/Entry.php create mode 100644 Library/Form/File.php create mode 100755 Library/Form/Form.php create mode 100755 Library/Form/Hidden.php create mode 100644 Library/Form/Html.php create mode 100755 Library/Form/InputText.php create mode 100644 Library/Form/Password.php create mode 100755 Library/Form/Radio.php create mode 100755 Library/Form/Select.php create mode 100755 Library/Form/Textarea.php create mode 100644 Library/Form/index.html create mode 100755 Library/Functions.php create mode 100644 Library/HeaderObj.php create mode 100755 Library/Helper/Array.php create mode 100755 Library/Helper/Html.php create mode 100755 Library/Helper/List.php create mode 100755 Library/Helper/Menu.php create mode 100755 Library/Helper/Pages.php create mode 100755 Library/Helper/Popup.php create mode 100644 Library/Helper/index.html create mode 100644 Library/Hooks.php create mode 100644 Library/Html/Form.php create mode 100644 Library/Html/index.html create mode 100644 Library/Image/Gd/Captcha.php create mode 100644 Library/Image/Gd/Thumbnail.php create mode 100644 Library/Image/Gd/index.html create mode 100644 Library/Image/index.html create mode 100644 Library/Lang/En/DbCondStrings.php create mode 100644 Library/Lang/En/Generic.php create mode 100644 Library/Lang/En/ModelStrings.php create mode 100644 Library/Lang/En/UploadStrings.php create mode 100644 Library/Lang/En/ValCondStrings.php create mode 100644 Library/Lang/En/index.html create mode 100644 Library/Lang/Eng/DbCondStrings.php create mode 100644 Library/Lang/Eng/Generic.php create mode 100644 Library/Lang/Eng/ModelStrings.php create mode 100644 Library/Lang/Eng/UploadStrings.php create mode 100644 Library/Lang/Eng/ValCondStrings.php create mode 100644 Library/Lang/Eng/index.html create mode 100644 Library/Lang/ResultStrings.php create mode 100644 Library/Lang/index.html create mode 100644 Library/ModAbstract.php create mode 100755 Library/Model/#Base.php# create mode 100755 Library/Model/Base.php create mode 100755 Library/Model/Map.php create mode 100755 Library/Model/Tree.php create mode 100644 Library/Model/index.html create mode 100644 Library/Params.php create mode 100755 Library/Popup.php create mode 100644 Library/Request.php create mode 100755 Library/Scaffold.php create mode 100644 Library/Strings/Functions.php create mode 100755 Library/Theme.php create mode 100755 Library/Url.php create mode 100755 Library/Users/CheckAdmin.php create mode 100644 Library/Users/index.html create mode 100644 Library/index.html create mode 100755 License.txt create mode 100755 Logs/index.html create mode 100644 Public/Css/comune.css create mode 100755 Public/Css/explorer6.css create mode 100644 Public/Css/explorer7.css create mode 100644 Public/Css/files.css create mode 100755 Public/Css/form.css create mode 100644 Public/Css/index.html create mode 100644 Public/Css/login.css create mode 100644 Public/Css/main.css create mode 100755 Public/Css/mainmenu.css create mode 100644 Public/Css/mobile.css create mode 100644 Public/Css/pagelist.css create mode 100644 Public/Css/panel.css create mode 100755 Public/Css/popupmenu.css create mode 100755 Public/Css/scaffold.css create mode 100755 Public/Img/Acun/book.png create mode 100755 Public/Img/Acun/document_properties.png create mode 100755 Public/Img/Acun/filenew.png create mode 100755 Public/Img/Acun/go_previous.png create mode 100644 Public/Img/Acun/help_hint.png create mode 100755 Public/Img/Acun/note.png create mode 100644 Public/Img/Crystal/1282042718_hardware.png create mode 100644 Public/Img/Crystal/1282042976_hardware.png create mode 100755 Public/Img/Crystal/agt_forward.png create mode 100755 Public/Img/Crystal/button_cancel.png create mode 100755 Public/Img/Crystal/button_ok.png create mode 100755 Public/Img/Crystal/cam_mount-22.png create mode 100755 Public/Img/Crystal/cam_mount.png create mode 100755 Public/Img/Crystal/clear.png create mode 100755 Public/Img/Crystal/hardware.png create mode 100755 Public/Img/Crystal/home.png create mode 100755 Public/Img/Crystal/lock.png create mode 100755 Public/Img/Crystal/modem.png create mode 100755 Public/Img/Crystal/modem_22.png create mode 100755 Public/Img/Crystal/rss.png create mode 100755 Public/Img/Crystal/unlock.png create mode 100755 Public/Img/Crystal/usb.png create mode 100755 Public/Img/Crystal/usb_22.png create mode 100755 Public/Img/Famfamfam/de.png create mode 100755 Public/Img/Famfamfam/es.png create mode 100755 Public/Img/Famfamfam/fr.png create mode 100644 Public/Img/Famfamfam/gb.png create mode 100755 Public/Img/Famfamfam/gr.png create mode 100755 Public/Img/Famfamfam/it.png create mode 100644 Public/Img/Famfamfam/pt.png create mode 100755 Public/Img/Glaze/folder_blue.png create mode 100755 Public/Img/Glaze/folder_blue_open.png create mode 100755 Public/Img/Glaze/viewmag.png create mode 100755 Public/Img/H2O/applications-internet.png create mode 100755 Public/Img/H2O/audio-card.png create mode 100755 Public/Img/H2O/audio-card_22.png create mode 100755 Public/Img/H2O/camera-web.png create mode 100755 Public/Img/H2O/camera-web_22.png create mode 100755 Public/Img/H2O/computer-laptop.png create mode 100755 Public/Img/H2O/computer-laptop_22.png create mode 100755 Public/Img/H2O/download.png create mode 100755 Public/Img/H2O/download_48.png create mode 100755 Public/Img/H2O/im-ban-user.png create mode 100755 Public/Img/H2O/im-user.png create mode 100755 Public/Img/H2O/media-flash-sd-mmc.png create mode 100755 Public/Img/H2O/media-flash-sd-mmc_22.png create mode 100755 Public/Img/H2O/network-wired.png create mode 100755 Public/Img/H2O/network-wired_22.png create mode 100755 Public/Img/H2O/network-wireless.png create mode 100755 Public/Img/H2O/network-wireless_22.png create mode 100755 Public/Img/H2O/preferences-system-bluetooth-22.png create mode 100755 Public/Img/H2O/preferences-system-bluetooth.png create mode 100755 Public/Img/H2O/printer.png create mode 100755 Public/Img/H2O/printer_22.png create mode 100755 Public/Img/H2O/scanner.png create mode 100755 Public/Img/H2O/scanner_22.png create mode 100644 Public/Img/Icons/back.png create mode 100644 Public/Img/Icons/delete.png create mode 100755 Public/Img/Icons/elementary_2_5/AUTHORS create mode 100755 Public/Img/Icons/elementary_2_5/CONTRIBUTORS create mode 100755 Public/Img/Icons/elementary_2_5/COPYING create mode 100755 Public/Img/Icons/elementary_2_5/ChangeLog create mode 100755 Public/Img/Icons/elementary_2_5/add.png create mode 100755 Public/Img/Icons/elementary_2_5/clear_filter.png create mode 100755 Public/Img/Icons/elementary_2_5/delete.png create mode 100755 Public/Img/Icons/elementary_2_5/down.png create mode 100755 Public/Img/Icons/elementary_2_5/edit.png create mode 100755 Public/Img/Icons/elementary_2_5/find.png create mode 100755 Public/Img/Icons/elementary_2_5/left.png create mode 100755 Public/Img/Icons/elementary_2_5/link.png create mode 100755 Public/Img/Icons/elementary_2_5/panel.png create mode 100755 Public/Img/Icons/elementary_2_5/up.png create mode 100644 Public/Img/Icons/file.png create mode 100644 Public/Img/Icons/folder.png create mode 100644 Public/Img/Icons/image.png create mode 100644 Public/Img/Icons/index.html create mode 100644 Public/Img/back-60.png create mode 100644 Public/Img/back_last.png create mode 100644 Public/Img/back_wiki.png create mode 100644 Public/Img/discover.png create mode 100644 Public/Img/download.png create mode 100755 Public/Img/download_code.png create mode 100644 Public/Img/download_code_gpl3.png create mode 100644 Public/Img/edit-60.png create mode 100644 Public/Img/fingerprint_icon-22.png create mode 100644 Public/Img/fingerprint_icon.png create mode 100755 Public/Img/fsf_logo.png create mode 100644 Public/Img/history-60.png create mode 100644 Public/Img/link.png create mode 100644 Public/Img/mailing.png create mode 100644 Public/Img/mobile.png create mode 100644 Public/Img/new-60.png create mode 100644 Public/Img/popup_back.png create mode 100644 Public/Img/rss.png create mode 100644 Public/Img/search_back.png create mode 100644 Public/Img/tab_icon_2.ico create mode 100644 Public/Img/talk-60.png create mode 100644 Public/Img/talk_messages.png create mode 100644 Public/Img/title.png create mode 100755 Public/Js/DisplayTag.js create mode 100755 Public/Js/TinyMCE.js create mode 100644 Public/Js/functions.js create mode 100644 Public/Js/index.html create mode 100755 Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png create mode 100755 Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png create mode 100755 Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png create mode 100755 Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png create mode 100755 Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png create mode 100755 Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png create mode 100755 Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png create mode 100755 Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png create mode 100755 Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png create mode 100755 Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png create mode 100755 Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png create mode 100755 Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png create mode 100755 Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png create mode 100755 Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css create mode 100755 Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js create mode 100644 Public/Js/jquery/images/ajax-loader.png create mode 100644 Public/Js/jquery/images/icon-search-black.png create mode 100644 Public/Js/jquery/images/icons-18-black.png create mode 100644 Public/Js/jquery/images/icons-18-white.png create mode 100644 Public/Js/jquery/images/icons-36-black.png create mode 100644 Public/Js/jquery/images/icons-36-white.png create mode 100644 Public/Js/jquery/jquery-1.7.1.min.js create mode 100644 Public/Js/jquery/jquery.mobile-1.1.0.css create mode 100644 Public/Js/jquery/jquery.mobile-1.1.0.js create mode 100755 Public/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png create mode 100755 Public/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png create mode 100755 Public/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png create mode 100755 Public/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png create mode 100755 Public/Js/jquery/ui/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png create mode 100755 Public/Js/jquery/ui/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png create mode 100755 Public/Js/jquery/ui/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png create mode 100755 Public/Js/jquery/ui/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png create mode 100755 Public/Js/jquery/ui/css/excite-bike/images/ui-icons_0a82eb_256x240.png create mode 100755 Public/Js/jquery/ui/css/excite-bike/images/ui-icons_0b54d5_256x240.png create mode 100755 Public/Js/jquery/ui/css/excite-bike/images/ui-icons_5fa5e3_256x240.png create mode 100755 Public/Js/jquery/ui/css/excite-bike/images/ui-icons_fcdd4a_256x240.png create mode 100755 Public/Js/jquery/ui/css/excite-bike/images/ui-icons_ffffff_256x240.png create mode 100644 Public/Js/jquery/ui/css/excite-bike/jquery-ui-1.8.14.custom.css create mode 100644 Public/Js/jquery/ui/js/jquery-ui-1.8.21.custom.js create mode 100644 Public/Js/markitup/jquery.markitup.js create mode 100644 Public/Js/markitup/sets/bbcode/images/bold.png create mode 100644 Public/Js/markitup/sets/bbcode/images/clean.png create mode 100644 Public/Js/markitup/sets/bbcode/images/code.png create mode 100644 Public/Js/markitup/sets/bbcode/images/fonts.png create mode 100644 Public/Js/markitup/sets/bbcode/images/h1.png create mode 100644 Public/Js/markitup/sets/bbcode/images/h2.png create mode 100644 Public/Js/markitup/sets/bbcode/images/h3.png create mode 100644 Public/Js/markitup/sets/bbcode/images/italic.png create mode 100644 Public/Js/markitup/sets/bbcode/images/link.png create mode 100644 Public/Js/markitup/sets/bbcode/images/list-bullet.png create mode 100644 Public/Js/markitup/sets/bbcode/images/list-item.png create mode 100644 Public/Js/markitup/sets/bbcode/images/list-numeric.png create mode 100644 Public/Js/markitup/sets/bbcode/images/paragraph.png create mode 100644 Public/Js/markitup/sets/bbcode/images/picture.png create mode 100644 Public/Js/markitup/sets/bbcode/images/preview.png create mode 100644 Public/Js/markitup/sets/bbcode/images/quotes.png create mode 100644 Public/Js/markitup/sets/bbcode/images/stroke.png create mode 100644 Public/Js/markitup/sets/bbcode/images/underline.png create mode 100644 Public/Js/markitup/sets/bbcode/readme.txt create mode 100644 Public/Js/markitup/sets/bbcode/set.js create mode 100644 Public/Js/markitup/sets/bbcode/style.css create mode 100644 Public/Js/markitup/skins/simple/images/handle.png create mode 100644 Public/Js/markitup/skins/simple/images/menu.png create mode 100644 Public/Js/markitup/skins/simple/images/submenu.png create mode 100644 Public/Js/markitup/skins/simple/style.css create mode 100644 Public/Js/stats.js create mode 100644 Public/index.html create mode 100644 README.org create mode 100755 admin/.htaccess create mode 100644 admin/Application/Controllers/AdminboxesController.php create mode 100644 admin/Application/Controllers/AdmindeletionController.php create mode 100644 admin/Application/Controllers/AdminhardwareController.php create mode 100644 admin/Application/Controllers/AdminhistoryController.php create mode 100644 admin/Application/Controllers/AdminissuesController.php create mode 100644 admin/Application/Controllers/AdminmessagesController.php create mode 100644 admin/Application/Controllers/AdminnewsController.php create mode 100644 admin/Application/Controllers/AdminparamsController.php create mode 100644 admin/Application/Controllers/AdminpasswordController.php create mode 100644 admin/Application/Controllers/AdminregusersController.php create mode 100644 admin/Application/Controllers/AdmintalkController.php create mode 100644 admin/Application/Controllers/AdminusersController.php create mode 100755 admin/Application/Controllers/PanelController.php create mode 100644 admin/Application/Hooks/AfterInitialization.php create mode 100644 admin/Application/Hooks/BeforeChecks.php create mode 100644 admin/Application/Hooks/BeforeInitialization.php create mode 100644 admin/Application/Hooks/index.html create mode 100644 admin/Application/Include/distributions.php create mode 100644 admin/Application/Include/hardware.php create mode 100644 admin/Application/Include/languages.php create mode 100644 admin/Application/Include/myFunctions.php create mode 100644 admin/Application/Include/params.php create mode 100755 admin/Application/Models/AdminusersModel.php create mode 100644 admin/Application/Models/BaseModel.php create mode 100644 admin/Application/Models/BoxesModel.php create mode 100644 admin/Application/Models/DeletionModel.php create mode 100644 admin/Application/Models/HardwareModel.php create mode 100644 admin/Application/Models/HistoryModel.php create mode 100644 admin/Application/Models/IssuesModel.php create mode 100644 admin/Application/Models/MessagesModel.php create mode 100644 admin/Application/Models/NewsModel.php create mode 100644 admin/Application/Models/NotebooksModel.php create mode 100644 admin/Application/Models/ParamsModel.php create mode 100644 admin/Application/Models/PrintersModel.php create mode 100644 admin/Application/Models/ProfileModel.php create mode 100644 admin/Application/Models/RevisionsModel.php create mode 100644 admin/Application/Models/ScannersModel.php create mode 100644 admin/Application/Models/TalkModel.php create mode 100755 admin/Application/Models/UsersModel.php create mode 100644 admin/Application/Models/VideocardsModel.php create mode 100644 admin/Application/Models/WifiModel.php create mode 100644 admin/Application/Modules/ModBase.php create mode 100644 admin/Application/Modules/ModImage.php create mode 100644 admin/Application/Modules/ModLink.php create mode 100644 admin/Application/Modules/ModLinkimage.php create mode 100644 admin/Application/Modules/ModRaw.php create mode 100644 admin/Application/Modules/index.html create mode 100644 admin/Application/Strings/Lang/It/DbCondStrings.php create mode 100644 admin/Application/Strings/Lang/It/ModelStrings.php create mode 100644 admin/Application/Strings/Lang/It/UploadStrings.php create mode 100644 admin/Application/Strings/Lang/It/ValCondStrings.php create mode 100644 admin/Application/Strings/Lang/It/index.html create mode 100644 admin/Application/Strings/Lang/index.html create mode 100644 admin/Application/Strings/index.html create mode 100644 admin/Application/Views/Adminboxes/main.php create mode 100644 admin/Application/Views/Admindeletion/main.php create mode 100644 admin/Application/Views/Adminhardware/ask.php create mode 100644 admin/Application/Views/Adminhardware/main.php create mode 100644 admin/Application/Views/Adminhistory/main.php create mode 100644 admin/Application/Views/Adminissues/main.php create mode 100644 admin/Application/Views/Adminmessages/main.php create mode 100644 admin/Application/Views/Adminnews/main.php create mode 100755 admin/Application/Views/Adminparams/form.php create mode 100755 admin/Application/Views/Adminpassword/form.php create mode 100644 admin/Application/Views/Adminregusers/associate.php create mode 100644 admin/Application/Views/Adminregusers/main.php create mode 100644 admin/Application/Views/Admintalk/main.php create mode 100644 admin/Application/Views/Adminusers/associate.php create mode 100755 admin/Application/Views/Adminusers/forceout.php create mode 100755 admin/Application/Views/Adminusers/login.php create mode 100755 admin/Application/Views/Adminusers/logout.php create mode 100644 admin/Application/Views/Adminusers/main.php create mode 100755 admin/Application/Views/footer_back.php create mode 100755 admin/Application/Views/header_back.php create mode 100755 admin/Application/Views/panel.php create mode 100644 admin/Application/index.html create mode 100755 admin/COPYRIGHT.txt create mode 100644 admin/Config/Autoload.php create mode 100755 admin/Config/Config.php create mode 100755 admin/Config/Reporting.php create mode 100755 admin/Config/Restricted.php create mode 100644 admin/Config/Route.php create mode 100644 admin/External/Fonts/FreeFont/AUTHORS create mode 100644 admin/External/Fonts/FreeFont/COPYING create mode 100644 admin/External/Fonts/FreeFont/CREDITS create mode 100644 admin/External/Fonts/FreeFont/ChangeLog create mode 100644 admin/External/Fonts/FreeFont/FreeMono.ttf create mode 100644 admin/External/Fonts/FreeFont/INSTALL create mode 100644 admin/External/Fonts/FreeFont/README create mode 100644 admin/Library/Array/Validate/Base.php create mode 100644 admin/Library/Array/Validate/Soft.php create mode 100644 admin/Library/Array/Validate/Strong.php create mode 100644 admin/Library/Array/Validate/index.html create mode 100644 admin/Library/Array/index.html create mode 100755 admin/Library/ArrayExt.php create mode 100755 admin/Library/Bootstrap.php create mode 100644 admin/Library/BoxParser.php create mode 100755 admin/Library/Call.php create mode 100755 admin/Library/Controller.php create mode 100755 admin/Library/Db/Mysql.php create mode 100644 admin/Library/Db/Mysqli.php create mode 100644 admin/Library/Db/index.html create mode 100644 admin/Library/Email.php create mode 100644 admin/Library/ErrorReporting.php create mode 100755 admin/Library/Factory/Db.php create mode 100644 admin/Library/Factory/index.html create mode 100644 admin/Library/Files/Log.php create mode 100755 admin/Library/Files/Upload.php create mode 100644 admin/Library/Files/index.html create mode 100755 admin/Library/Form/Checkbox.php create mode 100755 admin/Library/Form/Entry.php create mode 100755 admin/Library/Form/Form.php create mode 100755 admin/Library/Form/Hidden.php create mode 100644 admin/Library/Form/Html.php create mode 100755 admin/Library/Form/InputText.php create mode 100644 admin/Library/Form/Password.php create mode 100755 admin/Library/Form/Radio.php create mode 100755 admin/Library/Form/Select.php create mode 100755 admin/Library/Form/Textarea.php create mode 100644 admin/Library/Form/index.html create mode 100755 admin/Library/Functions.php create mode 100644 admin/Library/HeaderObj.php create mode 100755 admin/Library/Helper/Array.php create mode 100755 admin/Library/Helper/Html.php create mode 100755 admin/Library/Helper/List.php create mode 100755 admin/Library/Helper/Menu.php create mode 100755 admin/Library/Helper/Pages.php create mode 100755 admin/Library/Helper/Popup.php create mode 100644 admin/Library/Helper/index.html create mode 100644 admin/Library/Hooks.php create mode 100644 admin/Library/Html/Form.php create mode 100644 admin/Library/Html/index.html create mode 100644 admin/Library/Image/Gd/Captcha.php create mode 100644 admin/Library/Image/Gd/Thumbnail.php create mode 100644 admin/Library/Image/Gd/index.html create mode 100644 admin/Library/Image/index.html create mode 100644 admin/Library/Lang/Eng/DbCondStrings.php create mode 100644 admin/Library/Lang/Eng/ModelStrings.php create mode 100644 admin/Library/Lang/Eng/UploadStrings.php create mode 100644 admin/Library/Lang/Eng/ValCondStrings.php create mode 100644 admin/Library/Lang/Eng/index.html create mode 100644 admin/Library/Lang/ResultStrings.php create mode 100644 admin/Library/Lang/index.html create mode 100644 admin/Library/ModAbstract.php create mode 100755 admin/Library/Model/Base.php create mode 100755 admin/Library/Model/Map.php create mode 100755 admin/Library/Model/Tree.php create mode 100644 admin/Library/Model/index.html create mode 100644 admin/Library/Params.php create mode 100755 admin/Library/Popup.php create mode 100644 admin/Library/Request.php create mode 100755 admin/Library/Scaffold.php create mode 100644 admin/Library/Strings/Functions.php create mode 100755 admin/Library/Theme.php create mode 100755 admin/Library/Url.php create mode 100755 admin/Library/Users/CheckAdmin.php create mode 100644 admin/Library/Users/index.html create mode 100644 admin/Library/index.html create mode 100755 admin/License.txt create mode 100644 admin/Logs/index.html create mode 100644 admin/Public/Css/comune.css create mode 100644 admin/Public/Css/explorer.css create mode 100644 admin/Public/Css/files.css create mode 100755 admin/Public/Css/form.css create mode 100644 admin/Public/Css/index.html create mode 100644 admin/Public/Css/login.css create mode 100755 admin/Public/Css/mainmenu.css create mode 100644 admin/Public/Css/pagelist.css create mode 100644 admin/Public/Css/panel.css create mode 100755 admin/Public/Css/popupmenu.css create mode 100755 admin/Public/Css/scaffold.css create mode 100755 admin/Public/Css/website.css create mode 100644 admin/Public/Img/Icons/back.png create mode 100644 admin/Public/Img/Icons/delete.png create mode 100644 admin/Public/Img/Icons/file.png create mode 100644 admin/Public/Img/Icons/folder.png create mode 100644 admin/Public/Img/Icons/image.png create mode 100644 admin/Public/Img/Icons/index.html create mode 100755 admin/Public/Js/DisplayTag.js create mode 100755 admin/Public/Js/TinyMCE.js create mode 100644 admin/Public/Js/functions.js create mode 100644 admin/Public/Js/index.html create mode 100755 admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png create mode 100755 admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png create mode 100755 admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png create mode 100755 admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png create mode 100755 admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png create mode 100755 admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png create mode 100755 admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png create mode 100755 admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png create mode 100755 admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png create mode 100755 admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png create mode 100755 admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png create mode 100755 admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png create mode 100755 admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png create mode 100755 admin/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css create mode 100755 admin/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js create mode 100644 admin/Public/Js/jquery/jquery-1.4.2.min.js create mode 100644 admin/Public/Js/markitup/jquery.markitup.js create mode 100644 admin/Public/Js/markitup/sets/bbcode/images/bold.png create mode 100644 admin/Public/Js/markitup/sets/bbcode/images/clean.png create mode 100644 admin/Public/Js/markitup/sets/bbcode/images/code.png create mode 100644 admin/Public/Js/markitup/sets/bbcode/images/fonts.png create mode 100644 admin/Public/Js/markitup/sets/bbcode/images/h1.png create mode 100644 admin/Public/Js/markitup/sets/bbcode/images/h2.png create mode 100644 admin/Public/Js/markitup/sets/bbcode/images/h3.png create mode 100644 admin/Public/Js/markitup/sets/bbcode/images/italic.png create mode 100644 admin/Public/Js/markitup/sets/bbcode/images/link.png create mode 100644 admin/Public/Js/markitup/sets/bbcode/images/list-bullet.png create mode 100644 admin/Public/Js/markitup/sets/bbcode/images/list-item.png create mode 100644 admin/Public/Js/markitup/sets/bbcode/images/list-numeric.png create mode 100644 admin/Public/Js/markitup/sets/bbcode/images/paragraph.png create mode 100644 admin/Public/Js/markitup/sets/bbcode/images/picture.png create mode 100644 admin/Public/Js/markitup/sets/bbcode/images/preview.png create mode 100644 admin/Public/Js/markitup/sets/bbcode/images/quotes.png create mode 100644 admin/Public/Js/markitup/sets/bbcode/images/stroke.png create mode 100644 admin/Public/Js/markitup/sets/bbcode/images/underline.png create mode 100644 admin/Public/Js/markitup/sets/bbcode/readme.txt create mode 100644 admin/Public/Js/markitup/sets/bbcode/set.js create mode 100644 admin/Public/Js/markitup/sets/bbcode/style.css create mode 100644 admin/Public/Js/markitup/skins/simple/images/handle.png create mode 100644 admin/Public/Js/markitup/skins/simple/images/menu.png create mode 100644 admin/Public/Js/markitup/skins/simple/images/submenu.png create mode 100644 admin/Public/Js/markitup/skins/simple/style.css create mode 100644 admin/Public/Js/stats.js create mode 100644 admin/Public/index.html create mode 100644 admin/README.txt create mode 100644 admin/h-admin-copyright.txt create mode 100755 admin/index.php create mode 100644 admin/tables.sql create mode 100644 config.xml create mode 100755 dafare.txt create mode 100644 h-node-schema-dump.sql create mode 100755 h-source-copyright.txt delete mode 100755 h-source/.htaccess delete mode 100644 h-source/Application/Controllers/AcquisitioncardsController.php delete mode 100644 h-source/Application/Controllers/BaseController.php delete mode 100644 h-source/Application/Controllers/BluetoothController.php delete mode 100644 h-source/Application/Controllers/ClientController.php delete mode 100644 h-source/Application/Controllers/ContactController.php delete mode 100644 h-source/Application/Controllers/CreditsController.php delete mode 100644 h-source/Application/Controllers/DownloadController.php delete mode 100644 h-source/Application/Controllers/EthernetcardsController.php delete mode 100644 h-source/Application/Controllers/FaqController.php delete mode 100644 h-source/Application/Controllers/FingerprintreadersController.php delete mode 100644 h-source/Application/Controllers/GenericController.php delete mode 100644 h-source/Application/Controllers/HardwareController.php delete mode 100644 h-source/Application/Controllers/HelpController.php delete mode 100644 h-source/Application/Controllers/HistoryController.php delete mode 100644 h-source/Application/Controllers/HomeController.php delete mode 100644 h-source/Application/Controllers/HostcontrollersController.php delete mode 100644 h-source/Application/Controllers/ImageController.php delete mode 100644 h-source/Application/Controllers/IssuesController.php delete mode 100644 h-source/Application/Controllers/MeetController.php delete mode 100644 h-source/Application/Controllers/ModemsController.php delete mode 100644 h-source/Application/Controllers/MyController.php delete mode 100644 h-source/Application/Controllers/NewsController.php delete mode 100644 h-source/Application/Controllers/NotebooksController.php delete mode 100644 h-source/Application/Controllers/PrintersController.php delete mode 100644 h-source/Application/Controllers/ProjectController.php delete mode 100644 h-source/Application/Controllers/RaidadaptersController.php delete mode 100644 h-source/Application/Controllers/RssController.php delete mode 100644 h-source/Application/Controllers/ScannersController.php delete mode 100644 h-source/Application/Controllers/SdcardreadersController.php delete mode 100644 h-source/Application/Controllers/SearchController.php delete mode 100644 h-source/Application/Controllers/SoundcardsController.php delete mode 100644 h-source/Application/Controllers/SpecialController.php delete mode 100644 h-source/Application/Controllers/ThreegcardsController.php delete mode 100644 h-source/Application/Controllers/UsersController.php delete mode 100644 h-source/Application/Controllers/VideocardsController.php delete mode 100644 h-source/Application/Controllers/WebcamsController.php delete mode 100644 h-source/Application/Controllers/WifiController.php delete mode 100644 h-source/Application/Controllers/WikiController.php delete mode 100755 h-source/Application/Hooks/AfterInitialization.php delete mode 100755 h-source/Application/Hooks/BeforeChecks.php delete mode 100755 h-source/Application/Hooks/BeforeInitialization.php delete mode 100755 h-source/Application/Hooks/index.html delete mode 100644 h-source/Application/Include/distributions.php delete mode 100644 h-source/Application/Include/hardware.php delete mode 100644 h-source/Application/Include/languages.php delete mode 100644 h-source/Application/Include/license.php delete mode 100644 h-source/Application/Include/myFunctions.php delete mode 100644 h-source/Application/Include/params.php delete mode 100644 h-source/Application/Include/vendorTranslations.php delete mode 100644 h-source/Application/Include/vendors.php delete mode 100644 h-source/Application/Include/version.php delete mode 100644 h-source/Application/Include/wikiFormatting.php delete mode 100644 h-source/Application/Models/AcquisitioncardsModel.php delete mode 100644 h-source/Application/Models/BaseModel.php delete mode 100644 h-source/Application/Models/BluetoothModel.php delete mode 100644 h-source/Application/Models/BoxesModel.php delete mode 100644 h-source/Application/Models/DeletionModel.php delete mode 100644 h-source/Application/Models/DistrosModel.php delete mode 100644 h-source/Application/Models/EthernetcardsModel.php delete mode 100644 h-source/Application/Models/FingerprintreadersModel.php delete mode 100644 h-source/Application/Models/GenericModel.php delete mode 100644 h-source/Application/Models/HardwareModel.php delete mode 100644 h-source/Application/Models/HistoryModel.php delete mode 100644 h-source/Application/Models/HostcontrollersModel.php delete mode 100644 h-source/Application/Models/IssuesModel.php delete mode 100644 h-source/Application/Models/MessagesModel.php delete mode 100644 h-source/Application/Models/ModemsModel.php delete mode 100644 h-source/Application/Models/NewsModel.php delete mode 100644 h-source/Application/Models/NotebooksModel.php delete mode 100644 h-source/Application/Models/ParamsModel.php delete mode 100644 h-source/Application/Models/PrintersModel.php delete mode 100644 h-source/Application/Models/ProfileModel.php delete mode 100644 h-source/Application/Models/RaidadaptersModel.php delete mode 100644 h-source/Application/Models/RevisionsModel.php delete mode 100644 h-source/Application/Models/ScannersModel.php delete mode 100644 h-source/Application/Models/SdcardreadersModel.php delete mode 100644 h-source/Application/Models/SoundcardsModel.php delete mode 100644 h-source/Application/Models/TalkModel.php delete mode 100644 h-source/Application/Models/ThreegcardsModel.php delete mode 100755 h-source/Application/Models/UsersModel.php delete mode 100644 h-source/Application/Models/VendorsModel.php delete mode 100644 h-source/Application/Models/VideocardsModel.php delete mode 100644 h-source/Application/Models/WebcamsModel.php delete mode 100644 h-source/Application/Models/WifiModel.php delete mode 100644 h-source/Application/Models/WikiModel.php delete mode 100644 h-source/Application/Models/WikirevisionsModel.php delete mode 100644 h-source/Application/Models/WikitalkModel.php delete mode 100644 h-source/Application/Modules/ModBase.php delete mode 100644 h-source/Application/Modules/ModImage.php delete mode 100644 h-source/Application/Modules/ModLink.php delete mode 100644 h-source/Application/Modules/ModLinkimage.php delete mode 100644 h-source/Application/Modules/ModRaw.php delete mode 100644 h-source/Application/Modules/ModTopLink.php delete mode 100644 h-source/Application/Modules/index.html delete mode 100644 h-source/Application/Strings/Lang/It/DbCondStrings.php delete mode 100644 h-source/Application/Strings/Lang/It/ModelStrings.php delete mode 100644 h-source/Application/Strings/Lang/It/UploadStrings.php delete mode 100644 h-source/Application/Strings/Lang/It/ValCondStrings.php delete mode 100644 h-source/Application/Strings/Lang/It/index.html delete mode 100644 h-source/Application/Strings/Lang/index.html delete mode 100644 h-source/Application/Strings/index.html delete mode 100644 h-source/Application/Views/Desktop/Client/info.php delete mode 100644 h-source/Application/Views/Desktop/Client/license.php delete mode 100644 h-source/Application/Views/Desktop/Contact/index.php delete mode 100644 h-source/Application/Views/Desktop/Contact/index_de.php delete mode 100644 h-source/Application/Views/Desktop/Contact/index_es.php delete mode 100644 h-source/Application/Views/Desktop/Contact/index_fr.php delete mode 100644 h-source/Application/Views/Desktop/Contact/index_gr.php delete mode 100644 h-source/Application/Views/Desktop/Contact/index_it.php delete mode 100644 h-source/Application/Views/Desktop/Credits/index.php delete mode 100644 h-source/Application/Views/Desktop/Credits/index_es.php delete mode 100644 h-source/Application/Views/Desktop/Credits/index_fr.php delete mode 100644 h-source/Application/Views/Desktop/Credits/index_gr.php delete mode 100644 h-source/Application/Views/Desktop/Credits/index_it.php delete mode 100644 h-source/Application/Views/Desktop/Download/index.php delete mode 100644 h-source/Application/Views/Desktop/Download/xml.php delete mode 100644 h-source/Application/Views/Desktop/Hardware/left.php delete mode 100644 h-source/Application/Views/Desktop/Help/index.php delete mode 100644 h-source/Application/Views/Desktop/Help/index_de.php delete mode 100644 h-source/Application/Views/Desktop/Help/index_es.php delete mode 100644 h-source/Application/Views/Desktop/Help/index_fr.php delete mode 100644 h-source/Application/Views/Desktop/Help/index_it.php delete mode 100644 h-source/Application/Views/Desktop/History/viewall.php delete mode 100644 h-source/Application/Views/Desktop/Home/left.php delete mode 100644 h-source/Application/Views/Desktop/Home/left_de.php delete mode 100644 h-source/Application/Views/Desktop/Home/left_es.php delete mode 100644 h-source/Application/Views/Desktop/Home/left_fr.php delete mode 100644 h-source/Application/Views/Desktop/Home/left_gr.php delete mode 100644 h-source/Application/Views/Desktop/Home/left_it.php delete mode 100644 h-source/Application/Views/Desktop/Issues/view.php delete mode 100644 h-source/Application/Views/Desktop/Issues/viewall.php delete mode 100644 h-source/Application/Views/Desktop/Meet/contributions.php delete mode 100644 h-source/Application/Views/Desktop/Meet/hardware.php delete mode 100644 h-source/Application/Views/Desktop/Meet/issues.php delete mode 100644 h-source/Application/Views/Desktop/Meet/list_template.php delete mode 100644 h-source/Application/Views/Desktop/Meet/meet.php delete mode 100644 h-source/Application/Views/Desktop/Meet/messages.php delete mode 100644 h-source/Application/Views/Desktop/Meet/talk.php delete mode 100644 h-source/Application/Views/Desktop/Meet/wiki.php delete mode 100644 h-source/Application/Views/Desktop/Meet/wikitalk.php delete mode 100644 h-source/Application/Views/Desktop/My/email.php delete mode 100644 h-source/Application/Views/Desktop/My/goodbye.php delete mode 100644 h-source/Application/Views/Desktop/My/panel.php delete mode 100644 h-source/Application/Views/Desktop/My/password.php delete mode 100644 h-source/Application/Views/Desktop/My/profile.php delete mode 100644 h-source/Application/Views/Desktop/News/index.php delete mode 100644 h-source/Application/Views/Desktop/Notebooks/.svn/entries delete mode 100644 h-source/Application/Views/Desktop/Notebooks/.svn/text-base/form.php.svn-base delete mode 100644 h-source/Application/Views/Desktop/Notebooks/.svn/text-base/page.php.svn-base delete mode 100644 h-source/Application/Views/Desktop/Notebooks/form.php delete mode 100644 h-source/Application/Views/Desktop/Notebooks/page.php delete mode 100644 h-source/Application/Views/Desktop/Project/index.php delete mode 100644 h-source/Application/Views/Desktop/Project/index_de.php delete mode 100644 h-source/Application/Views/Desktop/Project/index_es.php delete mode 100644 h-source/Application/Views/Desktop/Project/index_fr.php delete mode 100644 h-source/Application/Views/Desktop/Project/index_gr.php delete mode 100644 h-source/Application/Views/Desktop/Project/index_it.php delete mode 100644 h-source/Application/Views/Desktop/Rss/modifications.php delete mode 100644 h-source/Application/Views/Desktop/Rss/notapproved.php delete mode 100644 h-source/Application/Views/Desktop/Search/form.php delete mode 100644 h-source/Application/Views/Desktop/Search/lspci_results.php delete mode 100644 h-source/Application/Views/Desktop/Search/results.php delete mode 100644 h-source/Application/Views/Desktop/Special/modactions.php delete mode 100644 h-source/Application/Views/Desktop/Special/modifications.php delete mode 100644 h-source/Application/Views/Desktop/Special/pages_deleted.php delete mode 100755 h-source/Application/Views/Desktop/Users/add.php delete mode 100644 h-source/Application/Views/Desktop/Users/change.php delete mode 100644 h-source/Application/Views/Desktop/Users/confirmation.php delete mode 100644 h-source/Application/Views/Desktop/Users/forgot.php delete mode 100755 h-source/Application/Views/Desktop/Users/login.php delete mode 100755 h-source/Application/Views/Desktop/Users/logout.php delete mode 100644 h-source/Application/Views/Desktop/Users/notice.php delete mode 100644 h-source/Application/Views/Desktop/Wiki/climb.php delete mode 100644 h-source/Application/Views/Desktop/Wiki/differences.php delete mode 100644 h-source/Application/Views/Desktop/Wiki/form.php delete mode 100644 h-source/Application/Views/Desktop/Wiki/history.php delete mode 100644 h-source/Application/Views/Desktop/Wiki/modifications.php delete mode 100644 h-source/Application/Views/Desktop/Wiki/not_found.php delete mode 100644 h-source/Application/Views/Desktop/Wiki/page.php delete mode 100644 h-source/Application/Views/Desktop/Wiki/pages.php delete mode 100644 h-source/Application/Views/Desktop/Wiki/talk.php delete mode 100644 h-source/Application/Views/Desktop/bottom_left.php delete mode 100644 h-source/Application/Views/Desktop/catalogue.php delete mode 100644 h-source/Application/Views/Desktop/cleared.php delete mode 100644 h-source/Application/Views/Desktop/climb.php delete mode 100644 h-source/Application/Views/Desktop/dialog.php delete mode 100644 h-source/Application/Views/Desktop/differences.php delete mode 100644 h-source/Application/Views/Desktop/footer.php delete mode 100644 h-source/Application/Views/Desktop/form.php delete mode 100644 h-source/Application/Views/Desktop/header.php delete mode 100644 h-source/Application/Views/Desktop/history.php delete mode 100644 h-source/Application/Views/Desktop/if_page_deleted.php delete mode 100644 h-source/Application/Views/Desktop/license_notice.php delete mode 100644 h-source/Application/Views/Desktop/moderator_dialog.php delete mode 100644 h-source/Application/Views/Desktop/noscript_distributions.php delete mode 100644 h-source/Application/Views/Desktop/not_found.php delete mode 100644 h-source/Application/Views/Desktop/page.php delete mode 100644 h-source/Application/Views/Desktop/right.php delete mode 100644 h-source/Application/Views/Desktop/suggest_dialog.php delete mode 100644 h-source/Application/Views/Desktop/talk.php delete mode 100644 h-source/Application/Views/Desktop/top_left.php delete mode 100644 h-source/Application/Views/Desktop/wiki_page.php delete mode 100644 h-source/Application/Views/Desktop/xml_response.php delete mode 100644 h-source/Application/Views/Mobile/Contact/index.php delete mode 100644 h-source/Application/Views/Mobile/Contact/index_de.php delete mode 100644 h-source/Application/Views/Mobile/Contact/index_es.php delete mode 100644 h-source/Application/Views/Mobile/Contact/index_fr.php delete mode 100644 h-source/Application/Views/Mobile/Contact/index_gr.php delete mode 100644 h-source/Application/Views/Mobile/Contact/index_it.php delete mode 100644 h-source/Application/Views/Mobile/Credits/index.php delete mode 100644 h-source/Application/Views/Mobile/Credits/index_es.php delete mode 100644 h-source/Application/Views/Mobile/Credits/index_fr.php delete mode 100644 h-source/Application/Views/Mobile/Credits/index_gr.php delete mode 100644 h-source/Application/Views/Mobile/Credits/index_it.php delete mode 100644 h-source/Application/Views/Mobile/Hardware/left.php delete mode 100644 h-source/Application/Views/Mobile/Home/left.php delete mode 100644 h-source/Application/Views/Mobile/Home/left_de.php delete mode 100644 h-source/Application/Views/Mobile/Home/left_es.php delete mode 100644 h-source/Application/Views/Mobile/Home/left_fr.php delete mode 100644 h-source/Application/Views/Mobile/Home/left_gr.php delete mode 100644 h-source/Application/Views/Mobile/Home/left_it.php delete mode 100644 h-source/Application/Views/Mobile/Notebooks/page.php delete mode 100644 h-source/Application/Views/Mobile/Project/index.php delete mode 100644 h-source/Application/Views/Mobile/Project/index_de.php delete mode 100644 h-source/Application/Views/Mobile/Project/index_es.php delete mode 100644 h-source/Application/Views/Mobile/Project/index_fr.php delete mode 100644 h-source/Application/Views/Mobile/Project/index_gr.php delete mode 100644 h-source/Application/Views/Mobile/Project/index_it.php delete mode 100644 h-source/Application/Views/Mobile/bottom_left.php delete mode 100644 h-source/Application/Views/Mobile/catalogue.php delete mode 100644 h-source/Application/Views/Mobile/dialog.php delete mode 100644 h-source/Application/Views/Mobile/footer.php delete mode 100644 h-source/Application/Views/Mobile/header.php delete mode 100644 h-source/Application/Views/Mobile/if_page_deleted.php delete mode 100644 h-source/Application/Views/Mobile/moderator_dialog.php delete mode 100644 h-source/Application/Views/Mobile/page.php delete mode 100644 h-source/Application/Views/Mobile/right.php delete mode 100644 h-source/Application/Views/Mobile/top_left.php delete mode 100755 h-source/Application/index.html delete mode 100755 h-source/COPYRIGHT.txt delete mode 100644 h-source/Config/Autoload.php delete mode 100755 h-source/Config/Config.php delete mode 100755 h-source/Config/Reporting.php delete mode 100755 h-source/Config/Restricted.php delete mode 100644 h-source/Config/Route.php delete mode 100755 h-source/Credits.txt delete mode 100644 h-source/Css/comune.css delete mode 100755 h-source/Css/explorer6.css delete mode 100644 h-source/Css/explorer7.css delete mode 100644 h-source/Css/files.css delete mode 100755 h-source/Css/form.css delete mode 100644 h-source/Css/index.html delete mode 100644 h-source/Css/login.css delete mode 100644 h-source/Css/main.css delete mode 100755 h-source/Css/mainmenu.css delete mode 100644 h-source/Css/mobile.css delete mode 100644 h-source/Css/pagelist.css delete mode 100644 h-source/Css/panel.css delete mode 100755 h-source/Css/popupmenu.css delete mode 100755 h-source/Css/scaffold.css delete mode 100755 h-source/External/Fonts/FreeFont/AUTHORS delete mode 100755 h-source/External/Fonts/FreeFont/COPYING delete mode 100755 h-source/External/Fonts/FreeFont/CREDITS delete mode 100755 h-source/External/Fonts/FreeFont/ChangeLog delete mode 100755 h-source/External/Fonts/FreeFont/FreeMono.ttf delete mode 100755 h-source/External/Fonts/FreeFont/INSTALL delete mode 100755 h-source/External/Fonts/FreeFont/README delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Attachment.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/CharacterReader.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/CharacterReaderFactory/SimpleCharacterReaderFactory.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/CharacterStream.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/CharacterStream/ArrayCharacterStream.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/DependencyContainer.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/DependencyException.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/EmbeddedFile.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Encoder.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Encoder/Base64Encoder.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Encoding.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Events/CommandEvent.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Events/CommandListener.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Events/Event.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Events/EventDispatcher.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Events/EventListener.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Events/EventObject.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Events/ResponseListener.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Events/SendEvent.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Events/SendListener.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Events/SimpleEventDispatcher.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Events/TransportExceptionEvent.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/FailoverTransport.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/FileStream.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Filterable.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Image.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/InputByteStream.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/IoException.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/KeyCache.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/KeyCache/ArrayKeyCache.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/KeyCache/NullKeyCache.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/KeyCache/SimpleKeyCacheInputStream.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/MailTransport.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mailer.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Message.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/Attachment.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/Base64ContentEncoder.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/Header.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/Base64HeaderEncoder.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderEncoder/QpHeaderEncoder.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderFactory.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/HeaderSet.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/AbstractHeader.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/Message.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/MimePart.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderFactory.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/MimePart.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/OutputByteStream.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Plugins/AntiFloodPlugin.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Plugins/DecoratorPlugin.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Plugins/Logger.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Plugins/LoggerPlugin.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Exception.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Plugins/PopBeforeSmtpPlugin.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporter.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Plugins/ReporterPlugin.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Plugins/ThrottlerPlugin.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Plugins/Timer.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Preferences.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/RfcComplianceException.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/SendmailTransport.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/SmtpTransport.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/StreamFilter.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/ByteArrayReplacementFilter.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/SwiftException.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Transport.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Transport/AbstractSmtpTransport.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Transport/EsmtpHandler.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Transport/LoadBalancedTransport.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Transport/MailTransport.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/Transport/StreamBuffer.php delete mode 100755 h-source/External/swiftmailer/lib/classes/Swift/TransportException.php delete mode 100755 h-source/External/swiftmailer/lib/dependency_maps/cache_deps.php delete mode 100755 h-source/External/swiftmailer/lib/dependency_maps/mime_deps.php delete mode 100755 h-source/External/swiftmailer/lib/dependency_maps/transport_deps.php delete mode 100755 h-source/External/swiftmailer/lib/mime_types.php delete mode 100755 h-source/External/swiftmailer/lib/preferences.php delete mode 100755 h-source/External/swiftmailer/lib/swift_init.php delete mode 100755 h-source/External/swiftmailer/lib/swift_required.php delete mode 100755 h-source/External/swiftmailer/lib/swift_required_pear.php delete mode 100755 h-source/Img/Acun/book.png delete mode 100755 h-source/Img/Acun/document_properties.png delete mode 100755 h-source/Img/Acun/filenew.png delete mode 100755 h-source/Img/Acun/go_previous.png delete mode 100644 h-source/Img/Acun/help_hint.png delete mode 100755 h-source/Img/Acun/note.png delete mode 100644 h-source/Img/Crystal/1282042718_hardware.png delete mode 100644 h-source/Img/Crystal/1282042976_hardware.png delete mode 100755 h-source/Img/Crystal/agt_forward.png delete mode 100755 h-source/Img/Crystal/button_cancel.png delete mode 100755 h-source/Img/Crystal/button_ok.png delete mode 100755 h-source/Img/Crystal/cam_mount-22.png delete mode 100755 h-source/Img/Crystal/cam_mount.png delete mode 100755 h-source/Img/Crystal/clear.png delete mode 100755 h-source/Img/Crystal/hardware.png delete mode 100755 h-source/Img/Crystal/home.png delete mode 100755 h-source/Img/Crystal/lock.png delete mode 100755 h-source/Img/Crystal/modem.png delete mode 100755 h-source/Img/Crystal/modem_22.png delete mode 100755 h-source/Img/Crystal/rss.png delete mode 100755 h-source/Img/Crystal/unlock.png delete mode 100755 h-source/Img/Crystal/usb.png delete mode 100755 h-source/Img/Crystal/usb_22.png delete mode 100755 h-source/Img/Famfamfam/de.png delete mode 100755 h-source/Img/Famfamfam/es.png delete mode 100755 h-source/Img/Famfamfam/fr.png delete mode 100644 h-source/Img/Famfamfam/gb.png delete mode 100755 h-source/Img/Famfamfam/gr.png delete mode 100755 h-source/Img/Famfamfam/it.png delete mode 100755 h-source/Img/Glaze/folder_blue.png delete mode 100755 h-source/Img/Glaze/folder_blue_open.png delete mode 100755 h-source/Img/Glaze/viewmag.png delete mode 100755 h-source/Img/H2O/applications-internet.png delete mode 100755 h-source/Img/H2O/audio-card.png delete mode 100755 h-source/Img/H2O/audio-card_22.png delete mode 100755 h-source/Img/H2O/camera-web.png delete mode 100755 h-source/Img/H2O/camera-web_22.png delete mode 100755 h-source/Img/H2O/computer-laptop.png delete mode 100755 h-source/Img/H2O/computer-laptop_22.png delete mode 100755 h-source/Img/H2O/download.png delete mode 100755 h-source/Img/H2O/download_48.png delete mode 100755 h-source/Img/H2O/im-ban-user.png delete mode 100755 h-source/Img/H2O/im-user.png delete mode 100755 h-source/Img/H2O/media-flash-sd-mmc.png delete mode 100755 h-source/Img/H2O/media-flash-sd-mmc_22.png delete mode 100755 h-source/Img/H2O/network-wired.png delete mode 100755 h-source/Img/H2O/network-wired_22.png delete mode 100755 h-source/Img/H2O/network-wireless.png delete mode 100755 h-source/Img/H2O/network-wireless_22.png delete mode 100755 h-source/Img/H2O/preferences-system-bluetooth-22.png delete mode 100755 h-source/Img/H2O/preferences-system-bluetooth.png delete mode 100755 h-source/Img/H2O/printer.png delete mode 100755 h-source/Img/H2O/printer_22.png delete mode 100755 h-source/Img/H2O/scanner.png delete mode 100755 h-source/Img/H2O/scanner_22.png delete mode 100644 h-source/Img/Icons/back.png delete mode 100644 h-source/Img/Icons/delete.png delete mode 100755 h-source/Img/Icons/elementary_2_5/AUTHORS delete mode 100755 h-source/Img/Icons/elementary_2_5/CONTRIBUTORS delete mode 100755 h-source/Img/Icons/elementary_2_5/COPYING delete mode 100755 h-source/Img/Icons/elementary_2_5/ChangeLog delete mode 100755 h-source/Img/Icons/elementary_2_5/add.png delete mode 100755 h-source/Img/Icons/elementary_2_5/clear_filter.png delete mode 100755 h-source/Img/Icons/elementary_2_5/delete.png delete mode 100755 h-source/Img/Icons/elementary_2_5/down.png delete mode 100755 h-source/Img/Icons/elementary_2_5/edit.png delete mode 100755 h-source/Img/Icons/elementary_2_5/find.png delete mode 100755 h-source/Img/Icons/elementary_2_5/left.png delete mode 100755 h-source/Img/Icons/elementary_2_5/link.png delete mode 100755 h-source/Img/Icons/elementary_2_5/panel.png delete mode 100755 h-source/Img/Icons/elementary_2_5/up.png delete mode 100644 h-source/Img/Icons/file.png delete mode 100644 h-source/Img/Icons/folder.png delete mode 100644 h-source/Img/Icons/image.png delete mode 100644 h-source/Img/Icons/index.html delete mode 100644 h-source/Img/back-60.png delete mode 100644 h-source/Img/back_last.png delete mode 100644 h-source/Img/back_wiki.png delete mode 100644 h-source/Img/discover.png delete mode 100644 h-source/Img/download.png delete mode 100755 h-source/Img/download_code.png delete mode 100644 h-source/Img/download_code_gpl3.png delete mode 100644 h-source/Img/edit-60.png delete mode 100644 h-source/Img/fingerprint_icon-22.png delete mode 100644 h-source/Img/fingerprint_icon.png delete mode 100755 h-source/Img/fsf_logo.png delete mode 100644 h-source/Img/history-60.png delete mode 100644 h-source/Img/link.png delete mode 100644 h-source/Img/mobile.png delete mode 100644 h-source/Img/new-60.png delete mode 100644 h-source/Img/popup_back.png delete mode 100644 h-source/Img/rss.png delete mode 100644 h-source/Img/search_back.png delete mode 100644 h-source/Img/tab_icon_2.ico delete mode 100644 h-source/Img/talk-60.png delete mode 100644 h-source/Img/talk_messages.png delete mode 100644 h-source/Img/title.png delete mode 100755 h-source/Js/DisplayTag.js delete mode 100755 h-source/Js/TinyMCE.js delete mode 100644 h-source/Js/functions.js delete mode 100644 h-source/Js/index.html delete mode 100755 h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png delete mode 100755 h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png delete mode 100755 h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png delete mode 100755 h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png delete mode 100755 h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png delete mode 100755 h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png delete mode 100755 h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png delete mode 100755 h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png delete mode 100755 h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png delete mode 100755 h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png delete mode 100755 h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png delete mode 100755 h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png delete mode 100755 h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png delete mode 100755 h-source/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css delete mode 100755 h-source/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js delete mode 100644 h-source/Js/jquery/images/ajax-loader.png delete mode 100644 h-source/Js/jquery/images/icon-search-black.png delete mode 100644 h-source/Js/jquery/images/icons-18-black.png delete mode 100644 h-source/Js/jquery/images/icons-18-white.png delete mode 100644 h-source/Js/jquery/images/icons-36-black.png delete mode 100644 h-source/Js/jquery/images/icons-36-white.png delete mode 100644 h-source/Js/jquery/jquery-1.7.1.min.js delete mode 100644 h-source/Js/jquery/jquery.mobile-1.1.0.css delete mode 100644 h-source/Js/jquery/jquery.mobile-1.1.0.js delete mode 100755 h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png delete mode 100755 h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png delete mode 100755 h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png delete mode 100755 h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png delete mode 100755 h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png delete mode 100755 h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png delete mode 100755 h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png delete mode 100755 h-source/Js/jquery/ui/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png delete mode 100755 h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_0a82eb_256x240.png delete mode 100755 h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_0b54d5_256x240.png delete mode 100755 h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_5fa5e3_256x240.png delete mode 100755 h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_fcdd4a_256x240.png delete mode 100755 h-source/Js/jquery/ui/css/excite-bike/images/ui-icons_ffffff_256x240.png delete mode 100644 h-source/Js/jquery/ui/css/excite-bike/jquery-ui-1.8.14.custom.css delete mode 100644 h-source/Js/jquery/ui/js/jquery-ui-1.8.21.custom.js delete mode 100644 h-source/Js/markitup/jquery.markitup.js delete mode 100644 h-source/Js/markitup/sets/bbcode/images/bold.png delete mode 100644 h-source/Js/markitup/sets/bbcode/images/clean.png delete mode 100644 h-source/Js/markitup/sets/bbcode/images/code.png delete mode 100644 h-source/Js/markitup/sets/bbcode/images/fonts.png delete mode 100644 h-source/Js/markitup/sets/bbcode/images/h1.png delete mode 100644 h-source/Js/markitup/sets/bbcode/images/h2.png delete mode 100644 h-source/Js/markitup/sets/bbcode/images/h3.png delete mode 100644 h-source/Js/markitup/sets/bbcode/images/italic.png delete mode 100644 h-source/Js/markitup/sets/bbcode/images/link.png delete mode 100644 h-source/Js/markitup/sets/bbcode/images/list-bullet.png delete mode 100644 h-source/Js/markitup/sets/bbcode/images/list-item.png delete mode 100644 h-source/Js/markitup/sets/bbcode/images/list-numeric.png delete mode 100644 h-source/Js/markitup/sets/bbcode/images/paragraph.png delete mode 100644 h-source/Js/markitup/sets/bbcode/images/picture.png delete mode 100644 h-source/Js/markitup/sets/bbcode/images/preview.png delete mode 100644 h-source/Js/markitup/sets/bbcode/images/quotes.png delete mode 100644 h-source/Js/markitup/sets/bbcode/images/stroke.png delete mode 100644 h-source/Js/markitup/sets/bbcode/images/underline.png delete mode 100644 h-source/Js/markitup/sets/bbcode/readme.txt delete mode 100644 h-source/Js/markitup/sets/bbcode/set.js delete mode 100644 h-source/Js/markitup/sets/bbcode/style.css delete mode 100644 h-source/Js/markitup/skins/simple/images/handle.png delete mode 100644 h-source/Js/markitup/skins/simple/images/menu.png delete mode 100644 h-source/Js/markitup/skins/simple/images/submenu.png delete mode 100644 h-source/Js/markitup/skins/simple/style.css delete mode 100644 h-source/Js/stats.js delete mode 100644 h-source/Library/Array/Validate/Base.php delete mode 100644 h-source/Library/Array/Validate/Soft.php delete mode 100644 h-source/Library/Array/Validate/Strong.php delete mode 100644 h-source/Library/Array/Validate/index.html delete mode 100644 h-source/Library/Array/index.html delete mode 100755 h-source/Library/ArrayExt.php delete mode 100755 h-source/Library/Bootstrap.php delete mode 100644 h-source/Library/BoxParser.php delete mode 100755 h-source/Library/Call.php delete mode 100755 h-source/Library/Controller.php delete mode 100755 h-source/Library/Db/Mysql.php delete mode 100644 h-source/Library/Db/Mysqli.php delete mode 100644 h-source/Library/Db/index.html delete mode 100644 h-source/Library/Email.php delete mode 100644 h-source/Library/ErrorReporting.php delete mode 100755 h-source/Library/Factory/Db.php delete mode 100644 h-source/Library/Factory/Strings.php delete mode 100644 h-source/Library/Factory/index.html delete mode 100644 h-source/Library/Files/Log.php delete mode 100755 h-source/Library/Files/Upload.php delete mode 100644 h-source/Library/Files/index.html delete mode 100755 h-source/Library/Form/Checkbox.php delete mode 100755 h-source/Library/Form/Entry.php delete mode 100644 h-source/Library/Form/File.php delete mode 100755 h-source/Library/Form/Form.php delete mode 100755 h-source/Library/Form/Hidden.php delete mode 100644 h-source/Library/Form/Html.php delete mode 100755 h-source/Library/Form/InputText.php delete mode 100644 h-source/Library/Form/Password.php delete mode 100755 h-source/Library/Form/Radio.php delete mode 100755 h-source/Library/Form/Select.php delete mode 100755 h-source/Library/Form/Textarea.php delete mode 100644 h-source/Library/Form/index.html delete mode 100755 h-source/Library/Functions.php delete mode 100644 h-source/Library/HeaderObj.php delete mode 100755 h-source/Library/Helper/Array.php delete mode 100755 h-source/Library/Helper/Html.php delete mode 100755 h-source/Library/Helper/List.php delete mode 100755 h-source/Library/Helper/Menu.php delete mode 100755 h-source/Library/Helper/Pages.php delete mode 100755 h-source/Library/Helper/Popup.php delete mode 100644 h-source/Library/Helper/index.html delete mode 100644 h-source/Library/Hooks.php delete mode 100644 h-source/Library/Html/Form.php delete mode 100644 h-source/Library/Html/index.html delete mode 100644 h-source/Library/Image/Gd/Captcha.php delete mode 100644 h-source/Library/Image/Gd/Thumbnail.php delete mode 100644 h-source/Library/Image/Gd/index.html delete mode 100644 h-source/Library/Image/index.html delete mode 100644 h-source/Library/Lang/En/DbCondStrings.php delete mode 100644 h-source/Library/Lang/En/Generic.php delete mode 100644 h-source/Library/Lang/En/ModelStrings.php delete mode 100644 h-source/Library/Lang/En/UploadStrings.php delete mode 100644 h-source/Library/Lang/En/ValCondStrings.php delete mode 100644 h-source/Library/Lang/En/index.html delete mode 100644 h-source/Library/Lang/Eng/DbCondStrings.php delete mode 100644 h-source/Library/Lang/Eng/Generic.php delete mode 100644 h-source/Library/Lang/Eng/ModelStrings.php delete mode 100644 h-source/Library/Lang/Eng/UploadStrings.php delete mode 100644 h-source/Library/Lang/Eng/ValCondStrings.php delete mode 100644 h-source/Library/Lang/Eng/index.html delete mode 100644 h-source/Library/Lang/ResultStrings.php delete mode 100644 h-source/Library/Lang/index.html delete mode 100644 h-source/Library/ModAbstract.php delete mode 100755 h-source/Library/Model/#Base.php# delete mode 100755 h-source/Library/Model/Base.php delete mode 100755 h-source/Library/Model/Map.php delete mode 100755 h-source/Library/Model/Tree.php delete mode 100644 h-source/Library/Model/index.html delete mode 100644 h-source/Library/Params.php delete mode 100755 h-source/Library/Popup.php delete mode 100644 h-source/Library/Request.php delete mode 100755 h-source/Library/Scaffold.php delete mode 100644 h-source/Library/Strings/Functions.php delete mode 100755 h-source/Library/Theme.php delete mode 100755 h-source/Library/Url.php delete mode 100755 h-source/Library/Users/CheckAdmin.php delete mode 100644 h-source/Library/Users/index.html delete mode 100644 h-source/Library/index.html delete mode 100755 h-source/License.txt delete mode 100755 h-source/Logs/index.html delete mode 100644 h-source/Public/Css/comune.css delete mode 100755 h-source/Public/Css/explorer6.css delete mode 100644 h-source/Public/Css/explorer7.css delete mode 100644 h-source/Public/Css/files.css delete mode 100755 h-source/Public/Css/form.css delete mode 100644 h-source/Public/Css/index.html delete mode 100644 h-source/Public/Css/login.css delete mode 100644 h-source/Public/Css/main.css delete mode 100755 h-source/Public/Css/mainmenu.css delete mode 100644 h-source/Public/Css/mobile.css delete mode 100644 h-source/Public/Css/pagelist.css delete mode 100644 h-source/Public/Css/panel.css delete mode 100755 h-source/Public/Css/popupmenu.css delete mode 100755 h-source/Public/Css/scaffold.css delete mode 100755 h-source/Public/Img/Acun/book.png delete mode 100755 h-source/Public/Img/Acun/document_properties.png delete mode 100755 h-source/Public/Img/Acun/filenew.png delete mode 100755 h-source/Public/Img/Acun/go_previous.png delete mode 100644 h-source/Public/Img/Acun/help_hint.png delete mode 100755 h-source/Public/Img/Acun/note.png delete mode 100644 h-source/Public/Img/Crystal/1282042718_hardware.png delete mode 100644 h-source/Public/Img/Crystal/1282042976_hardware.png delete mode 100755 h-source/Public/Img/Crystal/agt_forward.png delete mode 100755 h-source/Public/Img/Crystal/button_cancel.png delete mode 100755 h-source/Public/Img/Crystal/button_ok.png delete mode 100755 h-source/Public/Img/Crystal/cam_mount-22.png delete mode 100755 h-source/Public/Img/Crystal/cam_mount.png delete mode 100755 h-source/Public/Img/Crystal/clear.png delete mode 100755 h-source/Public/Img/Crystal/hardware.png delete mode 100755 h-source/Public/Img/Crystal/home.png delete mode 100755 h-source/Public/Img/Crystal/lock.png delete mode 100755 h-source/Public/Img/Crystal/modem.png delete mode 100755 h-source/Public/Img/Crystal/modem_22.png delete mode 100755 h-source/Public/Img/Crystal/rss.png delete mode 100755 h-source/Public/Img/Crystal/unlock.png delete mode 100755 h-source/Public/Img/Crystal/usb.png delete mode 100755 h-source/Public/Img/Crystal/usb_22.png delete mode 100755 h-source/Public/Img/Famfamfam/de.png delete mode 100755 h-source/Public/Img/Famfamfam/es.png delete mode 100755 h-source/Public/Img/Famfamfam/fr.png delete mode 100644 h-source/Public/Img/Famfamfam/gb.png delete mode 100755 h-source/Public/Img/Famfamfam/gr.png delete mode 100755 h-source/Public/Img/Famfamfam/it.png delete mode 100644 h-source/Public/Img/Famfamfam/pt.png delete mode 100755 h-source/Public/Img/Glaze/folder_blue.png delete mode 100755 h-source/Public/Img/Glaze/folder_blue_open.png delete mode 100755 h-source/Public/Img/Glaze/viewmag.png delete mode 100755 h-source/Public/Img/H2O/applications-internet.png delete mode 100755 h-source/Public/Img/H2O/audio-card.png delete mode 100755 h-source/Public/Img/H2O/audio-card_22.png delete mode 100755 h-source/Public/Img/H2O/camera-web.png delete mode 100755 h-source/Public/Img/H2O/camera-web_22.png delete mode 100755 h-source/Public/Img/H2O/computer-laptop.png delete mode 100755 h-source/Public/Img/H2O/computer-laptop_22.png delete mode 100755 h-source/Public/Img/H2O/download.png delete mode 100755 h-source/Public/Img/H2O/download_48.png delete mode 100755 h-source/Public/Img/H2O/im-ban-user.png delete mode 100755 h-source/Public/Img/H2O/im-user.png delete mode 100755 h-source/Public/Img/H2O/media-flash-sd-mmc.png delete mode 100755 h-source/Public/Img/H2O/media-flash-sd-mmc_22.png delete mode 100755 h-source/Public/Img/H2O/network-wired.png delete mode 100755 h-source/Public/Img/H2O/network-wired_22.png delete mode 100755 h-source/Public/Img/H2O/network-wireless.png delete mode 100755 h-source/Public/Img/H2O/network-wireless_22.png delete mode 100755 h-source/Public/Img/H2O/preferences-system-bluetooth-22.png delete mode 100755 h-source/Public/Img/H2O/preferences-system-bluetooth.png delete mode 100755 h-source/Public/Img/H2O/printer.png delete mode 100755 h-source/Public/Img/H2O/printer_22.png delete mode 100755 h-source/Public/Img/H2O/scanner.png delete mode 100755 h-source/Public/Img/H2O/scanner_22.png delete mode 100644 h-source/Public/Img/Icons/back.png delete mode 100644 h-source/Public/Img/Icons/delete.png delete mode 100755 h-source/Public/Img/Icons/elementary_2_5/AUTHORS delete mode 100755 h-source/Public/Img/Icons/elementary_2_5/CONTRIBUTORS delete mode 100755 h-source/Public/Img/Icons/elementary_2_5/COPYING delete mode 100755 h-source/Public/Img/Icons/elementary_2_5/ChangeLog delete mode 100755 h-source/Public/Img/Icons/elementary_2_5/add.png delete mode 100755 h-source/Public/Img/Icons/elementary_2_5/clear_filter.png delete mode 100755 h-source/Public/Img/Icons/elementary_2_5/delete.png delete mode 100755 h-source/Public/Img/Icons/elementary_2_5/down.png delete mode 100755 h-source/Public/Img/Icons/elementary_2_5/edit.png delete mode 100755 h-source/Public/Img/Icons/elementary_2_5/find.png delete mode 100755 h-source/Public/Img/Icons/elementary_2_5/left.png delete mode 100755 h-source/Public/Img/Icons/elementary_2_5/link.png delete mode 100755 h-source/Public/Img/Icons/elementary_2_5/panel.png delete mode 100755 h-source/Public/Img/Icons/elementary_2_5/up.png delete mode 100644 h-source/Public/Img/Icons/file.png delete mode 100644 h-source/Public/Img/Icons/folder.png delete mode 100644 h-source/Public/Img/Icons/image.png delete mode 100644 h-source/Public/Img/Icons/index.html delete mode 100644 h-source/Public/Img/back-60.png delete mode 100644 h-source/Public/Img/back_last.png delete mode 100644 h-source/Public/Img/back_wiki.png delete mode 100644 h-source/Public/Img/discover.png delete mode 100644 h-source/Public/Img/download.png delete mode 100755 h-source/Public/Img/download_code.png delete mode 100644 h-source/Public/Img/download_code_gpl3.png delete mode 100644 h-source/Public/Img/edit-60.png delete mode 100644 h-source/Public/Img/fingerprint_icon-22.png delete mode 100644 h-source/Public/Img/fingerprint_icon.png delete mode 100755 h-source/Public/Img/fsf_logo.png delete mode 100644 h-source/Public/Img/history-60.png delete mode 100644 h-source/Public/Img/link.png delete mode 100644 h-source/Public/Img/mailing.png delete mode 100644 h-source/Public/Img/mobile.png delete mode 100644 h-source/Public/Img/new-60.png delete mode 100644 h-source/Public/Img/popup_back.png delete mode 100644 h-source/Public/Img/rss.png delete mode 100644 h-source/Public/Img/search_back.png delete mode 100644 h-source/Public/Img/tab_icon_2.ico delete mode 100644 h-source/Public/Img/talk-60.png delete mode 100644 h-source/Public/Img/talk_messages.png delete mode 100644 h-source/Public/Img/title.png delete mode 100755 h-source/Public/Js/DisplayTag.js delete mode 100755 h-source/Public/Js/TinyMCE.js delete mode 100644 h-source/Public/Js/functions.js delete mode 100644 h-source/Public/Js/index.html delete mode 100755 h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png delete mode 100755 h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png delete mode 100755 h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png delete mode 100755 h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png delete mode 100755 h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png delete mode 100755 h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png delete mode 100755 h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png delete mode 100755 h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png delete mode 100755 h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png delete mode 100755 h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png delete mode 100755 h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png delete mode 100755 h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png delete mode 100755 h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png delete mode 100755 h-source/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css delete mode 100755 h-source/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js delete mode 100644 h-source/Public/Js/jquery/images/ajax-loader.png delete mode 100644 h-source/Public/Js/jquery/images/icon-search-black.png delete mode 100644 h-source/Public/Js/jquery/images/icons-18-black.png delete mode 100644 h-source/Public/Js/jquery/images/icons-18-white.png delete mode 100644 h-source/Public/Js/jquery/images/icons-36-black.png delete mode 100644 h-source/Public/Js/jquery/images/icons-36-white.png delete mode 100644 h-source/Public/Js/jquery/jquery-1.7.1.min.js delete mode 100644 h-source/Public/Js/jquery/jquery.mobile-1.1.0.css delete mode 100644 h-source/Public/Js/jquery/jquery.mobile-1.1.0.js delete mode 100755 h-source/Public/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png delete mode 100755 h-source/Public/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png delete mode 100755 h-source/Public/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png delete mode 100755 h-source/Public/Js/jquery/ui/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png delete mode 100755 h-source/Public/Js/jquery/ui/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png delete mode 100755 h-source/Public/Js/jquery/ui/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png delete mode 100755 h-source/Public/Js/jquery/ui/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png delete mode 100755 h-source/Public/Js/jquery/ui/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png delete mode 100755 h-source/Public/Js/jquery/ui/css/excite-bike/images/ui-icons_0a82eb_256x240.png delete mode 100755 h-source/Public/Js/jquery/ui/css/excite-bike/images/ui-icons_0b54d5_256x240.png delete mode 100755 h-source/Public/Js/jquery/ui/css/excite-bike/images/ui-icons_5fa5e3_256x240.png delete mode 100755 h-source/Public/Js/jquery/ui/css/excite-bike/images/ui-icons_fcdd4a_256x240.png delete mode 100755 h-source/Public/Js/jquery/ui/css/excite-bike/images/ui-icons_ffffff_256x240.png delete mode 100644 h-source/Public/Js/jquery/ui/css/excite-bike/jquery-ui-1.8.14.custom.css delete mode 100644 h-source/Public/Js/jquery/ui/js/jquery-ui-1.8.21.custom.js delete mode 100644 h-source/Public/Js/markitup/jquery.markitup.js delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/images/bold.png delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/images/clean.png delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/images/code.png delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/images/fonts.png delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/images/h1.png delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/images/h2.png delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/images/h3.png delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/images/italic.png delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/images/link.png delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/images/list-bullet.png delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/images/list-item.png delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/images/list-numeric.png delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/images/paragraph.png delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/images/picture.png delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/images/preview.png delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/images/quotes.png delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/images/stroke.png delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/images/underline.png delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/readme.txt delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/set.js delete mode 100644 h-source/Public/Js/markitup/sets/bbcode/style.css delete mode 100644 h-source/Public/Js/markitup/skins/simple/images/handle.png delete mode 100644 h-source/Public/Js/markitup/skins/simple/images/menu.png delete mode 100644 h-source/Public/Js/markitup/skins/simple/images/submenu.png delete mode 100644 h-source/Public/Js/markitup/skins/simple/style.css delete mode 100644 h-source/Public/Js/stats.js delete mode 100644 h-source/Public/index.html delete mode 100644 h-source/README.org delete mode 100755 h-source/admin/.htaccess delete mode 100644 h-source/admin/Application/Controllers/AdminboxesController.php delete mode 100644 h-source/admin/Application/Controllers/AdmindeletionController.php delete mode 100644 h-source/admin/Application/Controllers/AdminhardwareController.php delete mode 100644 h-source/admin/Application/Controllers/AdminhistoryController.php delete mode 100644 h-source/admin/Application/Controllers/AdminissuesController.php delete mode 100644 h-source/admin/Application/Controllers/AdminmessagesController.php delete mode 100644 h-source/admin/Application/Controllers/AdminnewsController.php delete mode 100644 h-source/admin/Application/Controllers/AdminparamsController.php delete mode 100644 h-source/admin/Application/Controllers/AdminpasswordController.php delete mode 100644 h-source/admin/Application/Controllers/AdminregusersController.php delete mode 100644 h-source/admin/Application/Controllers/AdmintalkController.php delete mode 100644 h-source/admin/Application/Controllers/AdminusersController.php delete mode 100755 h-source/admin/Application/Controllers/PanelController.php delete mode 100644 h-source/admin/Application/Hooks/AfterInitialization.php delete mode 100644 h-source/admin/Application/Hooks/BeforeChecks.php delete mode 100644 h-source/admin/Application/Hooks/BeforeInitialization.php delete mode 100644 h-source/admin/Application/Hooks/index.html delete mode 100644 h-source/admin/Application/Include/distributions.php delete mode 100644 h-source/admin/Application/Include/hardware.php delete mode 100644 h-source/admin/Application/Include/languages.php delete mode 100644 h-source/admin/Application/Include/myFunctions.php delete mode 100644 h-source/admin/Application/Include/params.php delete mode 100755 h-source/admin/Application/Models/AdminusersModel.php delete mode 100644 h-source/admin/Application/Models/BaseModel.php delete mode 100644 h-source/admin/Application/Models/BoxesModel.php delete mode 100644 h-source/admin/Application/Models/DeletionModel.php delete mode 100644 h-source/admin/Application/Models/HardwareModel.php delete mode 100644 h-source/admin/Application/Models/HistoryModel.php delete mode 100644 h-source/admin/Application/Models/IssuesModel.php delete mode 100644 h-source/admin/Application/Models/MessagesModel.php delete mode 100644 h-source/admin/Application/Models/NewsModel.php delete mode 100644 h-source/admin/Application/Models/NotebooksModel.php delete mode 100644 h-source/admin/Application/Models/ParamsModel.php delete mode 100644 h-source/admin/Application/Models/PrintersModel.php delete mode 100644 h-source/admin/Application/Models/ProfileModel.php delete mode 100644 h-source/admin/Application/Models/RevisionsModel.php delete mode 100644 h-source/admin/Application/Models/ScannersModel.php delete mode 100644 h-source/admin/Application/Models/TalkModel.php delete mode 100755 h-source/admin/Application/Models/UsersModel.php delete mode 100644 h-source/admin/Application/Models/VideocardsModel.php delete mode 100644 h-source/admin/Application/Models/WifiModel.php delete mode 100644 h-source/admin/Application/Modules/ModBase.php delete mode 100644 h-source/admin/Application/Modules/ModImage.php delete mode 100644 h-source/admin/Application/Modules/ModLink.php delete mode 100644 h-source/admin/Application/Modules/ModLinkimage.php delete mode 100644 h-source/admin/Application/Modules/ModRaw.php delete mode 100644 h-source/admin/Application/Modules/index.html delete mode 100644 h-source/admin/Application/Strings/Lang/It/DbCondStrings.php delete mode 100644 h-source/admin/Application/Strings/Lang/It/ModelStrings.php delete mode 100644 h-source/admin/Application/Strings/Lang/It/UploadStrings.php delete mode 100644 h-source/admin/Application/Strings/Lang/It/ValCondStrings.php delete mode 100644 h-source/admin/Application/Strings/Lang/It/index.html delete mode 100644 h-source/admin/Application/Strings/Lang/index.html delete mode 100644 h-source/admin/Application/Strings/index.html delete mode 100644 h-source/admin/Application/Views/Adminboxes/main.php delete mode 100644 h-source/admin/Application/Views/Admindeletion/main.php delete mode 100644 h-source/admin/Application/Views/Adminhardware/ask.php delete mode 100644 h-source/admin/Application/Views/Adminhardware/main.php delete mode 100644 h-source/admin/Application/Views/Adminhistory/main.php delete mode 100644 h-source/admin/Application/Views/Adminissues/main.php delete mode 100644 h-source/admin/Application/Views/Adminmessages/main.php delete mode 100644 h-source/admin/Application/Views/Adminnews/main.php delete mode 100755 h-source/admin/Application/Views/Adminparams/form.php delete mode 100755 h-source/admin/Application/Views/Adminpassword/form.php delete mode 100644 h-source/admin/Application/Views/Adminregusers/associate.php delete mode 100644 h-source/admin/Application/Views/Adminregusers/main.php delete mode 100644 h-source/admin/Application/Views/Admintalk/main.php delete mode 100644 h-source/admin/Application/Views/Adminusers/associate.php delete mode 100755 h-source/admin/Application/Views/Adminusers/forceout.php delete mode 100755 h-source/admin/Application/Views/Adminusers/login.php delete mode 100755 h-source/admin/Application/Views/Adminusers/logout.php delete mode 100644 h-source/admin/Application/Views/Adminusers/main.php delete mode 100755 h-source/admin/Application/Views/footer_back.php delete mode 100755 h-source/admin/Application/Views/header_back.php delete mode 100755 h-source/admin/Application/Views/panel.php delete mode 100644 h-source/admin/Application/index.html delete mode 100755 h-source/admin/COPYRIGHT.txt delete mode 100644 h-source/admin/Config/Autoload.php delete mode 100755 h-source/admin/Config/Config.php delete mode 100755 h-source/admin/Config/Reporting.php delete mode 100755 h-source/admin/Config/Restricted.php delete mode 100644 h-source/admin/Config/Route.php delete mode 100644 h-source/admin/External/Fonts/FreeFont/AUTHORS delete mode 100644 h-source/admin/External/Fonts/FreeFont/COPYING delete mode 100644 h-source/admin/External/Fonts/FreeFont/CREDITS delete mode 100644 h-source/admin/External/Fonts/FreeFont/ChangeLog delete mode 100644 h-source/admin/External/Fonts/FreeFont/FreeMono.ttf delete mode 100644 h-source/admin/External/Fonts/FreeFont/INSTALL delete mode 100644 h-source/admin/External/Fonts/FreeFont/README delete mode 100644 h-source/admin/Library/Array/Validate/Base.php delete mode 100644 h-source/admin/Library/Array/Validate/Soft.php delete mode 100644 h-source/admin/Library/Array/Validate/Strong.php delete mode 100644 h-source/admin/Library/Array/Validate/index.html delete mode 100644 h-source/admin/Library/Array/index.html delete mode 100755 h-source/admin/Library/ArrayExt.php delete mode 100755 h-source/admin/Library/Bootstrap.php delete mode 100644 h-source/admin/Library/BoxParser.php delete mode 100755 h-source/admin/Library/Call.php delete mode 100755 h-source/admin/Library/Controller.php delete mode 100755 h-source/admin/Library/Db/Mysql.php delete mode 100644 h-source/admin/Library/Db/Mysqli.php delete mode 100644 h-source/admin/Library/Db/index.html delete mode 100644 h-source/admin/Library/Email.php delete mode 100644 h-source/admin/Library/ErrorReporting.php delete mode 100755 h-source/admin/Library/Factory/Db.php delete mode 100644 h-source/admin/Library/Factory/index.html delete mode 100644 h-source/admin/Library/Files/Log.php delete mode 100755 h-source/admin/Library/Files/Upload.php delete mode 100644 h-source/admin/Library/Files/index.html delete mode 100755 h-source/admin/Library/Form/Checkbox.php delete mode 100755 h-source/admin/Library/Form/Entry.php delete mode 100755 h-source/admin/Library/Form/Form.php delete mode 100755 h-source/admin/Library/Form/Hidden.php delete mode 100644 h-source/admin/Library/Form/Html.php delete mode 100755 h-source/admin/Library/Form/InputText.php delete mode 100644 h-source/admin/Library/Form/Password.php delete mode 100755 h-source/admin/Library/Form/Radio.php delete mode 100755 h-source/admin/Library/Form/Select.php delete mode 100755 h-source/admin/Library/Form/Textarea.php delete mode 100644 h-source/admin/Library/Form/index.html delete mode 100755 h-source/admin/Library/Functions.php delete mode 100644 h-source/admin/Library/HeaderObj.php delete mode 100755 h-source/admin/Library/Helper/Array.php delete mode 100755 h-source/admin/Library/Helper/Html.php delete mode 100755 h-source/admin/Library/Helper/List.php delete mode 100755 h-source/admin/Library/Helper/Menu.php delete mode 100755 h-source/admin/Library/Helper/Pages.php delete mode 100755 h-source/admin/Library/Helper/Popup.php delete mode 100644 h-source/admin/Library/Helper/index.html delete mode 100644 h-source/admin/Library/Hooks.php delete mode 100644 h-source/admin/Library/Html/Form.php delete mode 100644 h-source/admin/Library/Html/index.html delete mode 100644 h-source/admin/Library/Image/Gd/Captcha.php delete mode 100644 h-source/admin/Library/Image/Gd/Thumbnail.php delete mode 100644 h-source/admin/Library/Image/Gd/index.html delete mode 100644 h-source/admin/Library/Image/index.html delete mode 100644 h-source/admin/Library/Lang/Eng/DbCondStrings.php delete mode 100644 h-source/admin/Library/Lang/Eng/ModelStrings.php delete mode 100644 h-source/admin/Library/Lang/Eng/UploadStrings.php delete mode 100644 h-source/admin/Library/Lang/Eng/ValCondStrings.php delete mode 100644 h-source/admin/Library/Lang/Eng/index.html delete mode 100644 h-source/admin/Library/Lang/ResultStrings.php delete mode 100644 h-source/admin/Library/Lang/index.html delete mode 100644 h-source/admin/Library/ModAbstract.php delete mode 100755 h-source/admin/Library/Model/Base.php delete mode 100755 h-source/admin/Library/Model/Map.php delete mode 100755 h-source/admin/Library/Model/Tree.php delete mode 100644 h-source/admin/Library/Model/index.html delete mode 100644 h-source/admin/Library/Params.php delete mode 100755 h-source/admin/Library/Popup.php delete mode 100644 h-source/admin/Library/Request.php delete mode 100755 h-source/admin/Library/Scaffold.php delete mode 100644 h-source/admin/Library/Strings/Functions.php delete mode 100755 h-source/admin/Library/Theme.php delete mode 100755 h-source/admin/Library/Url.php delete mode 100755 h-source/admin/Library/Users/CheckAdmin.php delete mode 100644 h-source/admin/Library/Users/index.html delete mode 100644 h-source/admin/Library/index.html delete mode 100755 h-source/admin/License.txt delete mode 100644 h-source/admin/Logs/index.html delete mode 100644 h-source/admin/Public/Css/comune.css delete mode 100644 h-source/admin/Public/Css/explorer.css delete mode 100644 h-source/admin/Public/Css/files.css delete mode 100755 h-source/admin/Public/Css/form.css delete mode 100644 h-source/admin/Public/Css/index.html delete mode 100644 h-source/admin/Public/Css/login.css delete mode 100755 h-source/admin/Public/Css/mainmenu.css delete mode 100644 h-source/admin/Public/Css/pagelist.css delete mode 100644 h-source/admin/Public/Css/panel.css delete mode 100755 h-source/admin/Public/Css/popupmenu.css delete mode 100755 h-source/admin/Public/Css/scaffold.css delete mode 100755 h-source/admin/Public/Css/website.css delete mode 100644 h-source/admin/Public/Img/Icons/back.png delete mode 100644 h-source/admin/Public/Img/Icons/delete.png delete mode 100644 h-source/admin/Public/Img/Icons/file.png delete mode 100644 h-source/admin/Public/Img/Icons/folder.png delete mode 100644 h-source/admin/Public/Img/Icons/image.png delete mode 100644 h-source/admin/Public/Img/Icons/index.html delete mode 100755 h-source/admin/Public/Js/DisplayTag.js delete mode 100755 h-source/admin/Public/Js/TinyMCE.js delete mode 100644 h-source/admin/Public/Js/functions.js delete mode 100644 h-source/admin/Public/Js/index.html delete mode 100755 h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png delete mode 100755 h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png delete mode 100755 h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png delete mode 100755 h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png delete mode 100755 h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png delete mode 100755 h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png delete mode 100755 h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png delete mode 100755 h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png delete mode 100755 h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png delete mode 100755 h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png delete mode 100755 h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png delete mode 100755 h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png delete mode 100755 h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png delete mode 100755 h-source/admin/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css delete mode 100755 h-source/admin/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js delete mode 100644 h-source/admin/Public/Js/jquery/jquery-1.4.2.min.js delete mode 100644 h-source/admin/Public/Js/markitup/jquery.markitup.js delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/images/bold.png delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/images/clean.png delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/images/code.png delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/images/fonts.png delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/images/h1.png delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/images/h2.png delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/images/h3.png delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/images/italic.png delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/images/link.png delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/images/list-bullet.png delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/images/list-item.png delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/images/list-numeric.png delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/images/paragraph.png delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/images/picture.png delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/images/preview.png delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/images/quotes.png delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/images/stroke.png delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/images/underline.png delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/readme.txt delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/set.js delete mode 100644 h-source/admin/Public/Js/markitup/sets/bbcode/style.css delete mode 100644 h-source/admin/Public/Js/markitup/skins/simple/images/handle.png delete mode 100644 h-source/admin/Public/Js/markitup/skins/simple/images/menu.png delete mode 100644 h-source/admin/Public/Js/markitup/skins/simple/images/submenu.png delete mode 100644 h-source/admin/Public/Js/markitup/skins/simple/style.css delete mode 100644 h-source/admin/Public/Js/stats.js delete mode 100644 h-source/admin/Public/index.html delete mode 100644 h-source/admin/README.txt delete mode 100644 h-source/admin/h-admin-copyright.txt delete mode 100755 h-source/admin/index.php delete mode 100644 h-source/admin/tables.sql delete mode 100644 h-source/config.xml delete mode 100755 h-source/dafare.txt delete mode 100644 h-source/h-node-schema-dump.sql delete mode 100755 h-source/h-source-copyright.txt delete mode 100755 h-source/index.php delete mode 100644 h-source/mark-staging.patch delete mode 100755 h-source/modifiche.txt delete mode 100644 h-source/source/h-admin_0_2.tar.gz delete mode 100644 h-source/source/ht/ismyhwok_25thSep2010-1.tar.gz delete mode 100644 h-source/source/notes_0.2.html delete mode 100755 h-source/static/en/cancelled.html delete mode 100755 h-source/static/en/donations.html delete mode 100755 h-source/static/en/thanks.html delete mode 100644 h-source/static/licenses.html delete mode 100755 h-source/tabelle.txt delete mode 100644 h-source/tables.sql create mode 100755 index.php create mode 100644 mark-staging.patch create mode 100755 modifiche.txt create mode 100644 source/h-admin_0_2.tar.gz create mode 100644 source/ht/ismyhwok_25thSep2010-1.tar.gz create mode 100644 source/notes_0.2.html create mode 100755 static/en/cancelled.html create mode 100755 static/en/donations.html create mode 100755 static/en/thanks.html create mode 100644 static/licenses.html create mode 100755 tabelle.txt create mode 100644 tables.sql (limited to 'h-source/Application') diff --git a/.htaccess b/.htaccess new file mode 100755 index 0000000..95ab62f --- /dev/null +++ b/.htaccess @@ -0,0 +1,5 @@ +RewriteEngine On + +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] diff --git a/Application/Controllers/AcquisitioncardsController.php b/Application/Controllers/AcquisitioncardsController.php new file mode 100644 index 0000000..e373682 --- /dev/null +++ b/Application/Controllers/AcquisitioncardsController.php @@ -0,0 +1,131 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class AcquisitioncardsController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + $worksOptions = Acquisitioncards::$select; + $worksField = 'compatibility'; + $interfaceOptions = Acquisitioncards::$interface; + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('AcquisitioncardsModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['AcquisitioncardsModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'acquisition-card'; + + $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,compatibility,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'compatibility:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'compatibility-desc', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Acquisition cards'; + + $data['intefaceOptions'] = $interfaceOptions; + $data['worksOptions'] = $worksOptions; + $data['worksField'] = $worksField; + + $data['notFoundString'] = "No acquisition card found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'compatibility' => $this->viewArgs['compatibility'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/BaseController.php b/Application/Controllers/BaseController.php new file mode 100644 index 0000000..ac2be1f --- /dev/null +++ b/Application/Controllers/BaseController.php @@ -0,0 +1,303 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class BaseController extends Controller +{ + + protected $lang; + protected $islogged = 'no'; + protected $ismoderator = false; + protected $isadmin = false; + protected $querySanitized = true; + protected $token = 'token'; + protected $_updating = 'no'; + + protected $_configXml = null; + + protected $_topMenuClasses = array( + "home" => null, + "hardware" => null, + "credits" => null, + "issues" => null, + "contact" => null, + "search" => null, + "news" => null, + "download" => null, + "help" => null, + "wiki" => null, + "faq" => null, + "project" => null, + ); + + public function __construct($model, $controller, $queryString) { + parent::__construct($model, $controller, $queryString); + + header("Cache-Control: no-cache"); + + $this->model('BoxesModel'); + $this->model('HistoryModel'); + $this->model('ParamsModel'); + $this->model('UsersModel'); + + $this->load('header'); + $this->load('footer','last'); + + $this->session('registered'); + $this->s['registered']->checkStatus(); + + $data['username'] = null; + $data['user_groups'] = null; + $data['islogged'] = 'no'; + $data['token'] = 'token'; + $data['ismoderator'] = false; + $data['isadmin'] = false; + + if ($this->s['registered']->status['status'] === 'logged') + { + $data['username'] = $this->s['registered']->status['user']; + $groups = $this->s['registered']->status['groups']; + $groups[] = 'registered'; + $data['user_groups'] = implode(',',$groups); + + $data['islogged'] = 'yes'; + $this->islogged = $data['islogged']; + + $data['token'] = $this->s['registered']->status['token']; + $this->token = $data['token']; + + $data['ismoderator'] = in_array('moderator',$this->s['registered']->status['groups']) ? true : false; + $this->ismoderator = $data['ismoderator']; + + $data['isadmin'] = in_array('admin',$this->s['registered']->status['groups']) ? true : false; + $this->isadmin = $data['isadmin']; + } + + $data['lang'] = 'en'; + $this->lang = 'en'; + + if (isset($this->_queryString[0])) + { + $lang = (strcmp($this->_queryString[0],'') !== 0) ? $this->_queryString[0] : 'en'; + $data['lang'] = Lang::sanitize($lang); + $this->lang = $data['lang']; + Lang::$current = $data['lang']; + } + + $data['langIcon'] = Lang::getIcon(Lang::$current); + $data['langLabel'] = Lang::getLabel(Lang::$current); + + //set desktop or mobile version + Version::set(); + //subfolder of the Views folder where to look for view files + Params::$viewSubfolder = Version::getViewSubfolder(); + + $data['tm'] = $this->_topMenuClasses; + + $this->_queryString = $this->sanitizeQueryString($this->_queryString); + + $data['querySanitized'] = $this->querySanitized; + $data['queryString'] = Url::createUrl($this->_queryString); + + //check ft they are updating the website + $updating = $this->m['ParamsModel']->select('updating')->where(array('id_par'=>1))->toList('updating')->send(); + + $data['updating_flag'] = 'no'; + if (count($updating)>0) + { + $data['updating_flag'] = $updating[0]; + $this->_updating = $data['updating_flag']; + } + + //get the configuration xml + $xmlRes = $this->m['ParamsModel']->select('boxes_xml')->where(array('id_par'=>1))->toList('boxes_xml')->send(); + if (count($xmlRes)>0) + { + $configXml = htmlspecialchars_decode($xmlRes[0],ENT_QUOTES); + + if (Website::$useXmlConfigFile) + { + $xmlConfigFile = rtrim(Website::$xmlConfigFileFolder,'/') . '/config.xml'; + if (@simplexml_load_file($xmlConfigFile)) + { + $this->_configXml = simplexml_load_file($xmlConfigFile); + } + } + else + { + if (@simplexml_load_string($configXml)) + { + $this->_configXml = simplexml_load_string($configXml); + } + } + } + + //elements of the top menu from the config.xml file + //help link + $mod = new BoxParser($this->getBox(array("top_menu","help_page_link"))); + $data["topMenuHelpLink"] = $mod->modules[0]->render($this->_topMenuClasses["help"]); + //faq link + $mod = new BoxParser($this->getBox(array("top_menu","faq_link"))); + $data["topMenuFaqLink"] = $mod->modules[0]->render($this->_topMenuClasses["faq"]); + + //link to the "discover your hardware" wiki page + $data['discoverYourHardwareLink'] = $this->getModule(array('right_column','discover_your_hardware')); + + Distributions::setAllowedList(); + + $this->append($data); + } + + //get the right box from the configuration xml + protected function getBox($xmlPath,$xmlString = null) + { + if (!isset($xmlString)) + { + $xmlString = $this->_configXml; + } + + if (is_array($xmlPath)) + { + if (isset($xmlString)) + { + $tempXml = $xmlString->{$xmlPath[0]}; + if (count($xmlPath) === 1) + { + if (isset($tempXml->{$this->lang})) + { + return $tempXml->{$this->lang}->asXml(); + } + else if (isset($tempXml->{"en"})) + { + return $tempXml->{"en"}->asXml(); + } + else + { + return null; + } + } + else + { + array_shift($xmlPath); + return $this->getBox($xmlPath,$tempXml); + } + } + } + return null; + } + +// get the HTML of a module from the xml configuration string +// $xmlPath: array conitaining the path + protected function getModule($xmlPath) + { + $tracksHelpLabel = null; + $xml = $this->getBox($xmlPath); + if ($xml) + { + $box_news = new BoxParser($xml); + $tracksHelpLabel = $box_news->render(); + } + return $tracksHelpLabel; + } + + protected function right($lang = 'en') + { + $hard = new HardwareModel(); + + $data['stat'] = $hard->clear()->select('type,count(*) AS numb')->where(array('-deleted'=>'no','cleared'=>'no'))->groupBy('type')->toList('type','aggregate.numb')->send(); + + $logged = $this->s['registered']->getUsersLogged(); + + $data['numbLogged'] = count($logged); + + //render the boxes inside the right column + $data['htmlRightBox'] = $this->getModule(array('right_column')); + + $data['language_links'] = $this->buildLanguageLinks($this->lang); + + $data['lastModif'] = $this->m['HistoryModel'] + ->clear()->select() + ->inner('hardware') + ->on('hardware.id_hard=history.id') + ->where(array('type'=>'hardware','gr'=>'registered','deleted'=>'no','cleared'=>'no',)) + ->orderBy('id_history desc') + ->limit(5) + ->send(); + + $this->append($data); + $this->load('right'); + } + + protected function sanitizeQueryString($queryArray) + { + $resArray = array(); + foreach ($queryArray as $item) + { + if (preg_match('/^[a-zA-Z0-9\-\_\.\+\s]+$/',$item)) + { + $resArray[] = sanitizeAll($item); + } + else + { + $this->querySanitized = false; + return array('en'); + } + } + return $resArray; + } + + protected function buildLanguageLinks($lang) + { + $status = $this->_queryString; + $cPage = $this->querySanitized ? $this->currPage : $this->baseUrl."/home/index"; + + $mobileDataRole = Version::get() === "mobile" ? "data-role='listview'" : null; + + $link = "\n"; + return $link; + } + + protected function cleverLoad($file) + { + $fileInt = $file."_".$this->lang; + if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . Params::$viewSubfolder . DS . ucwords($this->controller) . DS . $fileInt . '.php')) + { + $this->load($fileInt); + } + else + { + $this->load($file); + } + } + +} diff --git a/Application/Controllers/BluetoothController.php b/Application/Controllers/BluetoothController.php new file mode 100644 index 0000000..eae4b74 --- /dev/null +++ b/Application/Controllers/BluetoothController.php @@ -0,0 +1,131 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class BluetoothController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + $worksOptions = Bluetooth::$select; + $worksField = 'bluetooth_works'; + $interfaceOptions = Bluetooth::$interface; + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('BluetoothModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['BluetoothModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'bluetooth'; + + $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,bluetooth_works,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'bluetooth_works:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'bluetooth-works', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Bluetooth'; + + $data['intefaceOptions'] = $interfaceOptions; + $data['worksOptions'] = $worksOptions; + $data['worksField'] = $worksField; + + $data['notFoundString'] = "No bluetooth devices found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'bluetooth_works' => $this->viewArgs['bluetooth_works'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/ClientController.php b/Application/Controllers/ClientController.php new file mode 100644 index 0000000..51966c9 --- /dev/null +++ b/Application/Controllers/ClientController.php @@ -0,0 +1,55 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ClientController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + parent::__construct($model, $controller, $queryString); + } + + public function licenseinfo($lang = 'en') + { + header ("Content-Type:text/xml"); + + $data["xml"] = "\n"; + + $this->append($data); + $this->clean(); + $this->load("license"); + } + + public function userinfo($lang = 'en') + { + header ("Content-Type:text/xml"); + + $this->s['registered']->checkStatus(); + + $data['user_status'] = strcmp($this->islogged,'yes') === 0 ? 'logged' : 'not-logged'; + + $this->append($data); + $this->clean(); + $this->load('info'); + } + +} \ No newline at end of file diff --git a/Application/Controllers/ContactController.php b/Application/Controllers/ContactController.php new file mode 100644 index 0000000..197ec9a --- /dev/null +++ b/Application/Controllers/ContactController.php @@ -0,0 +1,43 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ContactController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + + $this->_topMenuClasses['contact'] = " class='currentitem ui-btn-active'"; + + parent::__construct($model, $controller, $queryString); + + $data['title'] = 'contact - '.Website::$generalName; + $this->append($data); + } + + public function index($lang = 'en') + { + $this->cleverLoad('index'); + $this->right(); + } + +} \ No newline at end of file diff --git a/Application/Controllers/CreditsController.php b/Application/Controllers/CreditsController.php new file mode 100644 index 0000000..4dbcc4a --- /dev/null +++ b/Application/Controllers/CreditsController.php @@ -0,0 +1,43 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class CreditsController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + + $this->_topMenuClasses['credits'] = " class='currentitem ui-btn-active'"; + + parent::__construct($model, $controller, $queryString); + + $data['title'] = 'credits - '.Website::$generalName; + $this->append($data); + } + + public function index($lang = 'en') + { + $this->cleverLoad('index'); + $this->right(); + } + +} \ No newline at end of file diff --git a/Application/Controllers/DownloadController.php b/Application/Controllers/DownloadController.php new file mode 100644 index 0000000..b221095 --- /dev/null +++ b/Application/Controllers/DownloadController.php @@ -0,0 +1,275 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class DownloadController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + + $this->_topMenuClasses['download'] = " class='currentitem'"; + + parent::__construct($model, $controller, $queryString); + + $this->model('HardwareModel'); + + $data['title'] = 'download - '.Website::$generalName; + $this->append($data); + } + + public function index($lang = 'en') + { + $this->cleverLoad('index'); + $this->right($lang); + } + + //get the xml of the archive + private function getXml($res) + { + $xml = null; + $xml = "\n"; + $xml .= "\n"; + $xml .= "\t\n"; + $xml .= "\t\th-node project\n"; + $xml .= "\t\t".Website::$generalName."\n"; + $xml .= "\t\t".date("Y-m-d H:i:s")."\n"; + $xml .= "\t\t".License::getInsideXml()."\n"; + $xml .= "\t\n"; + + foreach ($res as $row) + { + $type = $row['hardware']['type']; + $xml .= "\t\n"; + + $xml .= "\t\t".$row['hardware']['id_hard']."\n"; + $xml .= "\t\t".$row['hardware']['type']."\n"; + + if ($type === 'notebook' or $type === 'printer' or $type === 'host-controller' ) + { + $xml .= "\t\t".$row['hardware']['subtype']."\n"; + } + if ($type === 'notebook') + { + $xml .= "\t\t".translate($row['hardware']['architecture'])."\n"; + $xml .= "\t\t".$row['hardware']['bios']."\n"; + $xml .= "\t\t".$row['hardware']['can_free_systems_be_installed']."\n"; + $xml .= "\t\t".$row['hardware']['prevent_wifi']."\n"; + } + + $xml .= "\t\t".$row['hardware']['model']."\n"; + + if ($type !== 'notebook') + { + $xml .= "\t\t\n"; + $xml .= "\t\t".$row['hardware']['pci_id']."\n"; + } + + $xml .= "\t\t".$row['hardware']['vendor']."\n"; + $xml .= "\t\t".$row['hardware']['kernel']."\n"; + $xml .= "\t\t".$row['hardware']['distribution']."\n"; + $xml .= "\t\t".$row['hardware']['comm_year']."\n"; + + if ($type !== 'notebook') + { + $xml .= "\t\t".$row['hardware']['interface']."\n"; + } + + if ($type === 'notebook' or $type === 'printer' or $type === 'scanner') + { + $xml .= "\t\t".$row['hardware']['compatibility']."\n"; + } + else if ($type === '3G-card' or $type === 'wifi') + { + $xml .= "\t\t".$row['hardware']['wifi_works']."\n"; + } + else if ($type === 'soundcard') + { + $xml .= "\t\t".$row['hardware']['sound_card_works']."\n"; + } + else if ($type === 'bluetooth') + { + $xml .= "\t\t".$row['hardware']['bluetooth_works']."\n"; + } + else if ($type === 'webcam') + { + $xml .= "\t\t".$row['hardware']['webcam_works']."\n"; + } + else if ($type === 'videocard') + { + $xml .= "\t\t".$row['hardware']['video_card_works']."\n"; + } + else if ($type === 'acquisition-card' or $type === 'modem' or $type === 'RAID-adapter' or $type === 'host-controller') + { + $xml .= "\t\t".$row['hardware']['compatibility']."\n"; + } + else if ($type === 'fingerprint-reader') + { + $xml .= "\t\t".$row['hardware']['fingerprint_works']."\n"; + } + else if ($type === 'ethernet-card') + { + $xml .= "\t\t".$row['hardware']['ethernet_card_works']."\n"; + } + else if ($type === 'sd-card-reader') + { + $xml .= "\t\t".$row['hardware']['sd_card_works']."\n"; + } + + if ($type === 'printer') + { + $xml .= "\t\t".$row['hardware']['it_tracks_users']."\n"; + } + + if ($type === 'notebook') + { + $xml .= "\t\t".$row['hardware']['wifi_type']."\n"; + $xml .= "\t\t".$row['hardware']['video_card_type']."\n"; + $xml .= "\t\t".$row['hardware']['webcam_type']."\n"; + $xml .= "\t\t".$row['hardware']['wifi_works']."\n"; + $xml .= "\t\t".$row['hardware']['video_card_works']."\n"; + $xml .= "\t\t".$row['hardware']['webcam_works']."\n"; + } + + if ($type !== "notebook") + { + $xml .= "\t\t".$row['hardware']['driver']."\n"; + } + + $xml .= "\t\t\n"; + + $xml .= "\t\t".$this->baseUrl."/".Hardware::getControllerFromType($type)."/view/".$this->lang."/".$row['hardware']['id_hard']."/".encodeUrl($row['hardware']['model'])."\n"; + $xml .= "\t\t".$this->baseUrl."/".Hardware::getControllerFromType($type)."/view/".$this->lang."/".$row['hardware']['id_hard']."\n"; + $xml .= "\t\t".$this->baseUrl."/".Hardware::getControllerFromType($type)."/history/".$this->lang."/".$row['hardware']['id_hard']."\n"; + + $xml .= "\t\n"; + } + + $xml .= "\n"; + + return $xml; + } + + protected function printXml($lang = 'en', $whereArray) + { + header ("Content-Type:text/xml"); + +// header("Content-Type: application/force-download"); +// header("Content-Type: application/octet-stream"); +// header("Content-Type: application/download"); + + $filename = array_key_exists('type',$whereArray) ? $whereArray['type'] : "all"; + header("Content-Disposition: attachment; filename=h-node-".$filename.".xml;"); + + $res = $this->m['HardwareModel']->clear()->select()->where($whereArray)->aWhere(array("cleared"=>"no"))->orderBy("type,hardware.id_hard")->send(); + + $data['xml'] = $this->getXml($res); + + $this->append($data); + $this->clean(); + $this->load('xml'); + } + + public function all($lang = 'en') + { + $this->printXml($lang, array('-deleted'=>'no')); + } + + public function notebooks($lang = 'en') + { + $this->printXml($lang, array('type'=>'notebook','-deleted'=>'no')); + } + + public function wifi($lang = 'en') + { + $this->printXml($lang, array('type'=>'wifi','-deleted'=>'no')); + } + + public function videocards($lang = 'en') + { + $this->printXml($lang, array('type'=>'videocard','-deleted'=>'no')); + } + + public function printers($lang = 'en') + { + $this->printXml($lang, array('type'=>'printer','-deleted'=>'no')); + } + + public function scanners($lang = 'en') + { + $this->printXml($lang, array('type'=>'scanner','-deleted'=>'no')); + } + + public function threegcards($lang = 'en') + { + $this->printXml($lang, array('type'=>'3G-card','-deleted'=>'no')); + } + + public function soundcards($lang = 'en') + { + $this->printXml($lang, array('type'=>'soundcard','-deleted'=>'no')); + } + + public function webcams($lang = 'en') + { + $this->printXml($lang, array('type'=>'webcam','-deleted'=>'no')); + } + + public function bluetooth($lang = 'en') + { + $this->printXml($lang, array('type'=>'bluetooth','-deleted'=>'no')); + } + + public function acquisitioncards($lang = 'en') + { + $this->printXml($lang, array('type'=>'acquisition-card','-deleted'=>'no')); + } + + public function fingerprintreaders($lang = 'en') + { + $this->printXml($lang, array('type'=>'fingerprint-reader','-deleted'=>'no')); + } + + public function ethernetcards($lang = 'en') + { + $this->printXml($lang, array('type'=>'ethernet-card','-deleted'=>'no')); + } + + public function sdcardreaders($lang = 'en') + { + $this->printXml($lang, array('type'=>'sd-card-reader','-deleted'=>'no')); + } + + public function modems($lang = 'en') + { + $this->printXml($lang, array('type'=>'modem','-deleted'=>'no')); + } + + public function raidadapters($lang = 'en') + { + $this->printXml($lang, array('type'=>'RAID-adapter','-deleted'=>'no')); + } + + public function hostcontrollers($lang = 'en') + { + $this->printXml($lang, array('type'=>'host-controller','-deleted'=>'no')); + } +} diff --git a/Application/Controllers/EthernetcardsController.php b/Application/Controllers/EthernetcardsController.php new file mode 100644 index 0000000..0425122 --- /dev/null +++ b/Application/Controllers/EthernetcardsController.php @@ -0,0 +1,131 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class EthernetcardsController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + $worksOptions = Ethernetcards::$select; + $worksField = 'ethernet_card_works'; + $interfaceOptions = Ethernetcards::$interface; + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('EthernetcardsModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['EthernetcardsModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'ethernet-card'; + + $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,ethernet_card_works,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'ethernet_card_works:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'ethernet-works', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Ethernet cards'; + + $data['intefaceOptions'] = $interfaceOptions; + $data['worksOptions'] = $worksOptions; + $data['worksField'] = $worksField; + + $data['notFoundString'] = "No ethernet devices found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'ethernet_card_works' => $this->viewArgs['ethernet_card_works'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/FaqController.php b/Application/Controllers/FaqController.php new file mode 100644 index 0000000..45ebab2 --- /dev/null +++ b/Application/Controllers/FaqController.php @@ -0,0 +1,41 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class FaqController extends WikiController +{ + + public function __construct($model, $controller, $queryString) + { + $this->_topMenuClasses['faq'] = " class='currentitem'"; + + parent::__construct($model, $controller, $queryString); + + $this->_topMenuClasses['wiki'] = null; + + $data['tm'] = $this->_topMenuClasses; + + $data['title'] = 'FAQ page - '.Website::$generalName; + + $this->append($data); + } + +} \ No newline at end of file diff --git a/Application/Controllers/FingerprintreadersController.php b/Application/Controllers/FingerprintreadersController.php new file mode 100644 index 0000000..c3de0d7 --- /dev/null +++ b/Application/Controllers/FingerprintreadersController.php @@ -0,0 +1,131 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class FingerprintreadersController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + $worksOptions = Fingerprintreaders::$select; + $worksField = 'fingerprint_works'; + $interfaceOptions = Fingerprintreaders::$interface; + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('FingerprintreadersModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['FingerprintreadersModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'fingerprint-reader'; + + $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,fingerprint_works,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'fingerprint_works:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'fingerprint-works', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Fingerprint reader'; + + $data['intefaceOptions'] = $interfaceOptions; + $data['worksOptions'] = $worksOptions; + $data['worksField'] = $worksField; + + $data['notFoundString'] = "No fingerprint readers found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'fingerprint_works' => $this->viewArgs['fingerprint_works'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/GenericController.php b/Application/Controllers/GenericController.php new file mode 100644 index 0000000..00848c3 --- /dev/null +++ b/Application/Controllers/GenericController.php @@ -0,0 +1,1001 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class GenericController extends BaseController +{ + + protected $_controllerName = null; //as in the URL + + public $orderPopup; + + public function __construct($model, $controller, $queryString) { + + $this->_topMenuClasses['hardware'] = " class='currentitem ui-btn-active'"; + + parent::__construct($model, $controller, $queryString); + + $this->model('VendorsModel'); + + $popup = new Popup(); + $popup->name = gtext('sort by'); + + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('compatibility')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','compatibility'); + + switch ($this->controller) + { + case 'printers': + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'notebooks': + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'scanners': + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'wifi': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('wifi works')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','wifi-works'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'videocards': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('video card works')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','video-card-works'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'threegcards': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('wifi works')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','wifi-works'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'soundcards': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('sound card works')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','sound-card-works'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'webcams': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('webcam works')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','webcam-works'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'bluetooth': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('bluetooth works')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','bluetooth-works'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'acquisitioncards': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('compatibility desc')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','compatibility-desc'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'fingerprintreaders': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('fingerprint works')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','fingerprint-works'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'ethernetcards': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('ethernet works')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','ethernet-works'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'sdcardreaders': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('sdcard works')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','sdcard-works'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'modems': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('compatibility desc')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','compatibility-desc'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'raidadapters': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('compatibility desc')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','compatibility-desc'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + case 'hostcontrollers': + $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('compatibility desc')); + $popValues = array('last-inserted','alphabetically','alphabetically-desc','compatibility-desc'); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + default: + array_pop($popNames); + array_pop($popValues); + $popup->itemsName = $popNames; + $popup->itemsValue = $popValues; + break; + } + + $this->orderPopup = $popup; + +// $data['howToCompileLabel'] = null; + $data['isApproved'] = true; + + $data['tracksHelpLabel'] = $this->getModule(array('devices',$this->controller,'form','it_tracks_users')); + $data['howToCompileLabel'] = $this->getModule(array('devices','all','form','how_to_compile')); + $data['modelNameLabel'] = $this->getModule(array('devices','all','form','model_name_entry_help_label')); + $data['vendoridProductidLabel'] = $this->getModule(array('devices','not_notebook','form','vendorid_productid_label')); + $data['descriptionLabel'] = $this->getModule(array('devices','all','form','description_entry_help_label')); + $data['preventWifiLabel'] = $this->getModule(array('devices','notebook','form','prevent_wifi_label')); + + $this->append($data); + } + + protected function insert($lang = 'en', $token = '') + { + $this->shift(2); + + if ( strcmp($this->_updating,'no') !== 0 ) $this->redirect('users/login/'.$this->lang,0); + + $clean['token'] = sanitizeAlphanum($token); + + $data['descriptionPreview'] = null; //contains the HTML of the preview of the description entry + + $data['notice'] = null; + $data['submission_response'] = 'error'; + + $data['tree'] = $this->getSpecHardLink() . " » " . " ".gtext("Insert").""; + + $this->s['registered']->checkStatus(); + + if ($this->s['registered']->status['status'] === 'logged' or Website::$allowAnonymousSubmission === "yes") + { +// if (!$this->s['registered']->checkCsrf($clean['token'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'wrong token..'); + +// if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + if (isset($_POST['insertAction'])) + { + if ($this->checkDist()) + { + $pci_id = $this->request->post('pci_id','','sanitizeAll'); + $interface = $this->request->post('interface','not-defined','sanitizeAll'); + + if ($this->checkVendorId($interface)) + { + if (strcmp($this->m['HardwareModel']->type,'notebook') !== 0) + { + $this->m['HardwareModel']->values['vendor'] = sanitizeAll($this->m['VendorsModel']->getName($pci_id,$interface)); + + $this->m['HardwareModel']->databaseConditions['insert']['+checkUnique'] = 'pci_id|VendorID:ProductID is already present in the database. This means that the device you are trying to insert is already in the database. See here: '.$this->getAlreadyExixtsLink($pci_id); + } + + //insert the new device + $this->m['HardwareModel']->updateTable('insert'); + + if ($this->m['HardwareModel']->queryResult) + { + if (strcmp($this->controller,'notebooks') === 0) + { + @session_start(); + $_SESSION['notebook_inserted'] = 'yes'; + } + + $data['submission_response'] = 'executed'; + } + + $this->viewRedirect($this->m['HardwareModel']->lastId); + + } + } + } + + $data['descriptionPreview'] = $this->getPreview(); + + $data['notice'] = $this->m['HardwareModel']->notice; + + $data['submitName'] = "insertAction"; + $data['hiddenInput'] = null; + + $data['values'] = $this->m['HardwareModel']->getFormValues('insert','sanitizeHtml'); + $this->append($data); + + if (!isset($_POST['from_client'])) + { + $this->load('top_left'); + $this->load('license_notice'); + $this->load('form'); + $this->load('bottom_left'); + $this->right(); + } + else + { + header ("Content-Type:text/xml"); + $this->clean(); + $this->load('xml_response'); + } + } + else + { + $this->redirect("users/login/".$this->lang."?redirect=".$this->controller."/catalogue/".$this->lang,0); + } + } + + public function del($lang = 'en', $token = '') + { + header('Content-type: text/html; charset=UTF-8'); + + $this->shift(2); + + $this->clean(); + + $clean['token'] = sanitizeAlphanum($token); + + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($clean['token'])) die("wrong token"); + + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) die("your account has been blocked"); + + $clean['id_user'] = (int)$this->s['registered']->status['id_user']; + $clean['id_hard'] = $this->request->post('id_hard',0,'forceInt'); + + $this->model("DeletionModel"); + + $numb = $this->m['DeletionModel']->where(array("id_hard"=>$clean['id_hard'],"created_by"=>$clean['id_user']))->rowNumber(); + + if ($numb === 0) + { + $id_dup = $this->request->post('id_duplicate',0,'forceInt'); + $object = $this->request->post('object','','sanitizeAll'); + + if ($id_dup === 0 and strcmp($object,'duplication') === 0) + { + echo "you have no specified the device duplicated by this model"; + } + else + { + $this->m['DeletionModel']->setFields('id_hard:forceInt,object,message,id_duplicate:forceInt','sanitizeAll'); + $this->m['DeletionModel']->values['created_by'] = $clean['id_user']; + + $this->m['DeletionModel']->updateTable('insert'); + if ($this->m['DeletionModel']->queryResult) + { + $hard = new HardwareModel(); + $c = $hard->where(array('id_hard'=>$clean['id_hard'],'ask_for_del'=>'yes'))->rowNumber(); + if ($c < 1) + { + $hard->db->update('hardware','ask_for_del',array('yes'),'id_hard='.$clean['id_hard']); + } + echo "operation executed"; + } + else + { + echo "one error occurred, please try later"; + } + } + } + else + { + echo "you have already asked for the deletion of this device"; + } + } + } + + protected function update($lang = 'en', $token = '') + { + $this->shift(2); + + $clean['token'] = sanitizeAlphanum($token); + + $data['descriptionPreview'] = null; //contains the HTML of the preview of the description entry + + $data['notice'] = null; + $data['submission_response'] = 'error'; + + $this->s['registered']->checkStatus(); + + if (isset($_POST['id_hard'])) + { + //get the id + $clean['id_hard'] = isset($_POST['id_hard']) ? (int)$_POST['id_hard'] : 0; + + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($clean['token'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'wrong token..'); + + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + if ($this->m['HardwareModel']->isCleared($clean['id_hard'])) $this->redirect('generic/cleared/'.$this->lang,0); + + $deleted = $this->m['HardwareModel']->select("hardware.deleted")->where(array("id_hard"=>$clean['id_hard']))->limit(1)->toList('deleted')->send(); + + if (strcmp($deleted[0],'no') === 0) + { + $ne_name = $this->m['HardwareModel']->getTheModelName($clean['id_hard']); + $name = encodeUrl($ne_name); + $data['name'] = $name; + $data['ne_name'] = $ne_name; + $data['tree'] = $this->getSpecHardLink() . " » " . $this->getViewLink($clean['id_hard'],$ne_name) . " » ".gtext("Edit").""; + + if (isset($_POST['updateAction'])) + { + if ($this->checkDist()) + { + $pci_id = $this->request->post('pci_id','','sanitizeAll'); + $interface = $this->request->post('interface','not-defined','sanitizeAll'); + + if ($this->checkVendorId($interface)) + { + if (strcmp($this->m['HardwareModel']->type,'notebook') !== 0) + { + $this->m['HardwareModel']->values['vendor'] = sanitizeAll($this->m['VendorsModel']->getName($pci_id,$interface)); + + $this->m['HardwareModel']->databaseConditions['update']['+checkUniqueCompl'] = 'pci_id|VendorID:ProductID is already present in the database. This means that the device you are trying to insert is already in the database. See here: '.$this->getAlreadyExixtsLink($pci_id); + } + + //carry out the update database action + $this->m['HardwareModel']->updateTable('update'); + + if ($this->m['HardwareModel']->queryResult) + { + $data['submission_response'] = 'executed'; + } + $this->viewRedirect($this->m['HardwareModel']->lastId); + } + } + } + + $data['descriptionPreview'] = $this->getPreview(); + + $data['notice'] = $this->m['HardwareModel']->notice; + + $data['id_hard'] = $clean['id_hard']; + $data['submitName'] = "updateAction"; + // echo $this->m['HardwareModel']->fields; + $data['values'] = $this->m['HardwareModel']->getFormValues('update','sanitizeHtml'); + $data['hiddenInput'] = "\n"; + + $this->append($data); + + if (!isset($_POST['from_client'])) + { + $this->load('top_left'); + $this->load('license_notice'); + $this->load('form'); + $this->load('bottom_left'); + $this->right(); + } + else + { + header ("Content-Type:text/xml"); + $this->clean(); + $this->load('xml_response'); + } + } + else + { + $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'deleted..'); + } + } + else + { + $this->redirect("users/login/".$this->lang."?redirect=".$this->controller."/view/".$this->lang."/".$clean['id_hard'],0); + } + } + else + { + $this->redirect($this->controller.'/catalogue/'.$this->lang); + } + } + + //get the preview of the description entry + protected function getPreview() + { + if (isset($_POST['previewAction'])) + { + $this->m['HardwareModel']->result = false; + return $this->request->post('description','','sanitizeHtml'); + } + return null; + } + + protected function checkVendorId($interface) + { + if (strcmp($this->m['HardwareModel']->type,'notebook') === 0) return true; + + if (array_key_exists('pci_id',$_POST)) + { + if (strcmp($_POST['pci_id'],"") !== 0) + { + if (preg_match('/^[a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}$/',$_POST['pci_id'])) + { + if ($this->m['VendorsModel']->check($_POST['pci_id'],$interface)) + { + return true; + } + else + { + $this->m['HardwareModel']->result = false; + $this->m['HardwareModel']->notice = "
Your vendor has not been found.

Your vendorid code is not present in the list. If it is a USB device, please choose the right interface (USB), otherwise the system will check inside the PCI ID vendors' list. If it is not a USB device, and you are not sure about the right interface, choose not-defined, and it should work fine (the system will check inside the PCI ID vendors' list if you choose an interface other than USB).

If your vendor has not been found yet, please open an issue here in order to ask the insertion of your vendor.

If your vendor has not been found you could also send your PCI ID or USB ID to the PCI ID repository (http://pciids.sourceforge.net/) or to the USB ID repository (http://www.linux-usb.org/usb-ids.html).
\n"; + return false; + } + } + else + { + $this->m['HardwareModel']->result = false; + $this->m['HardwareModel']->notice = "
VendorID:ProductID has to have the following format: [a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}
"; + } + } + else + { + $this->m['HardwareModel']->result = false; + $this->m['HardwareModel']->notice = "
Vendorid:Productid code not defined..
\n"; + return false; + } + } + $this->m['HardwareModel']->result = false; + return false; + } + + protected function checkDist() + { + if (array_key_exists('distribution',$_POST)) + { + if (strcmp($_POST['distribution'],"") !== 0) + { + if (Distributions::check($_POST['distribution'])) + { + return true; + } + else + { + $this->m['HardwareModel']->result = false; + $this->m['HardwareModel']->notice = "
Distribution not allowed..
\n"; + return false; + } + } + else + { + $this->m['HardwareModel']->result = false; + $this->m['HardwareModel']->notice = "
Distribution not defined..
\n"; + return false; + } + } + $this->m['HardwareModel']->result = false; + return false; + } + + protected function viewRedirect($id) + { + $clean['id'] = (int)$id; + + if ($this->m['HardwareModel']->queryResult) + { + if (!isset($_POST['from_client'])) + { + $name = encodeUrl($this->m['HardwareModel']->getTheModelName($clean['id'])); + $this->redirect($this->controller.'/view/'.$this->lang.'/'.$clean['id'].'/'.$name.$this->viewStatus); + } + } + } + + //load the view files + protected function loadViewAll($viewName = null) + { + $this->load('top_left'); + $viewArray = explode(',',$viewName); + foreach ($viewArray as $viewFile) + { + $this->load($viewFile); + } + $this->load('bottom_left'); + $this->right(); + } + + protected function catalogue($lang = 'en') + { + $data['title'] = $this->controller.' - '.Website::$generalName; + + Params::$nullQueryValue = 'undef'; + + $data['tree'] = plural($this->controller); + + //look for a string in the model name or in the other_names if the string is different from undef + if (strcmp($this->viewArgs['search_string'],"undef") !== 0) + { + $nWhere = array( + 'OR' => array( + 'model' => "like '%".$this->viewArgs['search_string']."%'", + 'other_names' => "like '%".$this->viewArgs['search_string']."%'", + ), + ); + $this->mod->aWhere($nWhere); + } + + $this->mod->aWhere(array("deleted"=>"no","cleared"=>"no")); + + $this->mod->popupBuild(); + $popup = $this->mod->popupArray; + $popup['sort-by'] = $this->orderPopup; + + $this->helper('Popup',$this->controller.'/catalogue/'.$this->lang,$popup,'inclusive','page'); + + $this->h['Popup']->allString = gtext("All"); + + //create the HTML of the popup + $data['popup'] = $this->h['Popup']->render(); + + if (strcmp($this->controller,'notebooks') === 0) + { + $this->mod->popupArray = array(); + $this->mod->morePopups(); + $this->mod->popupBuild(); + $this->h['Popup']->popupArray = $this->mod->popupArray; + $data['popupMore'] = $this->h['Popup']->render(); + } + + $this->mod->orderBy = getOrderByClause($this->viewArgs['sort-by']); + $recordNumber = $this->mod->rowNumber(); + + $data['recordNumber'] = $recordNumber; + + //load the Pages helper + $this->helper('Pages',$this->controller.'/catalogue/'.$this->lang,'page'); + $page = $this->viewArgs['page']; + //set the limit clause + $this->mod->limit = $this->h['Pages']->getLimit($page,$recordNumber,10); + + $data['table'] = $this->mod->getAll(); +// echo $this->mod->getQuery(); + + $data['pageList'] = $this->h['Pages']->render($page-3,7); + $data['numberOfPages'] = $this->h['Pages']->getNumbOfPages(); + + $data['topNotice'] = $this->getModule(array('devices',$this->controller,'catalogue')); + + $data['popupLabel'] = $this->mod->getPopupLabel($this->viewArgs); + + $data["search_string_form_value"] = strcmp($this->viewArgs['search_string'],Params::$nullQueryValue) === 0 ? "" : $this->viewArgs['search_string']; + + //set search_string to undef to clean the model name filter + $temp = $this->viewArgs; + $temp['page'] = 1; + $temp['search_string'] = "undef"; + $data['clearViewStatus'] = Url::createUrl($temp); + + $this->append($data); + + $this->loadViewAll('catalogue'); + } + + protected function passWhoAskedForDeletion($id_hard) + { + $clean['id_hard'] = (int)$id_hard; + + $deletion = new DeletionModel(); + $data['deletion'] = $deletion->select()->where(array('id_hard'=>$clean['id_hard']))->send(); + $data['deletionUsers'] = $deletion->getList($data['deletion'],'created_by'); + + $this->append($data); + } + + public function cleared($lang = 'en') + { + $data['title'] = 'page permanently deleted - '.Website::$generalName; + + $data['tree'] = "device page permanently deleted"; + + $this->append($data); + + $this->loadViewAll('cleared'); + } + + protected function view($lang = 'en', $id_hard = 0, $name = null) + { + $this->shift(3); + + //set the history_page to 1 in the viewStatus + $this->viewArgs['history_page'] = 1; + $this->buildStatus(); + + $clean['id_hard'] = (int)$id_hard; + $data['id_hard'] = $clean['id_hard']; + $data['ne_name'] = null; + $data['name'] = null; + $data['tree'] = null; + $data['isDeleted'] = false; + + $data['md_javascript'] = "moderator_dialog(\"devicehide\",\"device\");moderator_dialog(\"deviceshow\",\"device\");moderator_dialog(\"deviceapprove\",\"device_app\");moderator_dialog(\"deviceclear\",\"device_cl\");"; + + if ($this->m['HardwareModel']->isCleared($clean['id_hard'])) $this->redirect('generic/cleared/'.$this->lang,0); + + if ($this->mod->checkType($clean['id_hard'])) + { + $this->mod->setWhereQueryClause(array("id_hard" => $clean['id_hard'])); + $data['table'] = $this->mod->getAll(); + + if (count($data['table']) > 0) + { + + $data['talk_number'] = $this->m['TalkModel']->select('count(*) as numb,id_hard')->where(array('id_hard'=>$clean['id_hard'],'deleted'=>'no'))->rowNumber(); + + $data['ne_name'] = $data['table'][0]['hardware']['model']; + $data['name'] = encodeUrl($data['ne_name']); + $data['title'] = $data['ne_name'].' - '.Website::$generalName; + $data['tree'] = $this->getSpecHardLink() . " » ".$data['ne_name'].""; + $data['isDeleted'] = $this->m['HardwareModel']->isDeleted($clean['id_hard']); + $data['isApproved'] = strcmp($data['table'][0]['hardware']['approved'],'yes') === 0 ? true : false; + + $data['tracksHelpTop'] = $this->getModule(array('devices',$this->controller,'page','it_tracks_users')); + $data['tracksHelpLabel'] = $this->getModule(array('devices',$this->controller,'form','it_tracks_users')); + + $this->passWhoAskedForDeletion($clean['id_hard']); + } + + $this->append($data); + + @session_start(); + if ( isset($_SESSION['notebook_inserted']) and strcmp($this->controller,'notebooks') === 0 ) + { + $viewFilesList = 'suggest_dialog,dialog,page,if_page_deleted,moderator_dialog'; + unset($_SESSION['notebook_inserted']); + } + else + { + $viewFilesList = 'dialog,page,if_page_deleted,moderator_dialog'; + } + + $this->loadViewAll($viewFilesList); + } + else + { +// $this->redirect($this->_controller.'/'.); + } + } + + protected function history($lang = 'en', $id = 0) + { + $this->shift(2); + $clean['id'] = (int)$id; + $data['id'] = $clean['id']; + $data['ne_name'] = $this->m['HardwareModel']->getTheModelName($clean['id']); + $data['name'] = encodeUrl($data['ne_name']); + $data['tree'] = $this->getSpecHardLink() . " » " . $this->getViewLink($clean['id'],$data['ne_name'])." » ".gtext("History").""; + + $data['title'] = 'history - '.Website::$generalName; + + $data['isDeleted'] = $this->m['HardwareModel']->isDeleted($clean['id']); + + if ($this->m['HardwareModel']->isCleared($clean['id'])) $this->redirect('generic/cleared/'.$this->lang,0); + + //get the first revision + $res = $this->m['RevisionsModel']->db->select('revisions','id_rev','id_hard='.$clean['id'],null,'id_rev',1); + if (count($res) > 0) + { + $data['firstRev'] = $res[0]['revisions']['id_rev']; + } + + $res1 = $this->m['HardwareModel']->db->select('hardware','update_date,updated_by','id_hard='.$clean['id']); + + $this->m['RevisionsModel']->setWhereQueryClause(array('id_hard' => $clean['id'])); + + //load the Pages helper + $this->helper('Pages',$this->controller.'/history/'.$this->lang.'/'.$clean['id'],'history_page'); + //get the number of records + $recordNumber = $this->m['RevisionsModel']->rowNumber(); + $page = $this->viewArgs['history_page']; + //set the limit clause + $this->m['RevisionsModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,20); + $res2 = $this->m['RevisionsModel']->getFields('update_date,updated_by,id_rev'); + + $data['pageList'] = $this->h['Pages']->render($page-3,7); + + + $data['rev1'] = $res1; + $data['rev2'] = $res2; + + $this->passWhoAskedForDeletion($clean['id']); + + $this->append($data); + $this->loadViewAll('history,if_page_deleted'); + } + + protected function revision($lang = 'en', $id_rev = 0) + { + $this->shift(2); + $clean['id_rev'] = (int)$id_rev; + + $this->m['RevisionsModel']->setWhereQueryClause(array("id_rev" => $clean['id_rev'])); + $data['table'] = $this->m['RevisionsModel']->getAll(); + + $data['id_hard'] = 0; + $data['updated_by'] = null; + $data['update_date'] = null; + $data['name'] = null; + $data['ne_name'] = null; + $data['tree'] = null; + $data['isDeleted'] = false; + $data['title'] = 'revision - '.Website::$generalName; + + if (count($data['table']) > 0) + { + $data['id_hard'] = (int)$data['table'][0]['revisions']['id_hard']; + + if ($this->m['HardwareModel']->isCleared($data['id_hard'])) $this->redirect('generic/cleared/'.$this->lang,0); + + $data['ne_name'] = $this->m['HardwareModel']->getTheModelName($data['id_hard']); + $data['name'] = encodeUrl($data['ne_name']); + $data['tree'] = $this->getSpecHardLink() . " » " . $this->getViewLink($data['id_hard'],$data['ne_name'])." » " . $this->getHistoryLink($data['id_hard']) . " » ".gtext("Revision").""; + + $data['updated_by'] = $data['table'][0]['revisions']['updated_by']; + $data['update_date'] = $data['table'][0]['revisions']['update_date']; + + $data['isDeleted'] = $this->m['HardwareModel']->isDeleted($data['id_hard']); + } + + $this->append($data); + $this->loadViewAll('page'); + } + + protected function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + $this->shift(3); + + $data['title'] = 'differences - '.Website::$generalName; + + $clean['id_hard'] = (int)$id_hard; + $clean['id_rev'] = (int)$id_rev; + + $data['id_hard'] = $clean['id_hard']; + $ne_name = $this->m['HardwareModel']->getTheModelName((int)$data['id_hard']); + $data['name'] = encodeUrl($ne_name); + $data['tree'] = $this->getSpecHardLink() . " » " . $this->getViewLink($data['id_hard'],$ne_name)." » " . $this->getHistoryLink($clean['id_hard']) . " » ".gtext("Differences").""; + + $data['isDeleted'] = $this->m['HardwareModel']->isDeleted($clean['id_hard']); + $data['showDiff'] = false; + + $diffArray = array(); + + if ($this->m['HardwareModel']->isCleared($clean['id_hard'])) $this->redirect('generic/cleared/'.$this->lang,0); + + if (strcmp($clean['id_hard'],0) !== 0 and strcmp($clean['id_rev'],0) !== 0) + { + $this->m['RevisionsModel']->setWhereQueryClause(array('id_hard' => $clean['id_hard'],'id_rev' => '<='.$clean['id_rev'])); + $this->m['RevisionsModel']->limit = 2; + $res = $this->m['RevisionsModel']->getAll(); + if (count($res) > 1) + { + $newArray = $res[0]['revisions']; + $oldArray = $res[1]['revisions']; + + $data['update_new'] = $newArray['update_date']; + $data['update_old'] = $oldArray['update_date']; + $data['updated_by'] = $newArray['updated_by']; + + $diffArray = $this->mod->getDiffArray($oldArray, $newArray); + + $data['showDiff'] = true; + } + } + else if (strcmp($clean['id_hard'],0) !== 0 and strcmp($clean['id_rev'],0) === 0) + { + $this->mod->setWhereQueryClause(array('id_hard' => $clean['id_hard'])); + $lastRes = $this->mod->getAll(); + + if (count($lastRes) > 0) + { + $this->m['RevisionsModel']->setWhereQueryClause(array('id_hard' => $clean['id_hard'])); + $this->m['RevisionsModel']->limit = 1; + $revRes = $this->m['RevisionsModel']->getAll(); + + if (count($revRes) > 0) + { + $newArray = $lastRes[0]['hardware']; + $oldArray = $revRes[0]['revisions']; + + $data['update_new'] = $newArray['update_date']; + $data['update_old'] = $oldArray['update_date']; + $data['updated_by'] = $newArray['updated_by']; + + $diffArray = $this->mod->getDiffArray($oldArray, $newArray); + + $data['showDiff'] = true; + } + } + + } + + $data['fieldsWithBreaks'] = $this->mod->fieldsWithBreaks; + $data['diffArray'] = $diffArray; + + $this->append($data); + $this->loadViewAll('differences'); + } + + protected function climb($lang = 'en', $id_rev = 0, $token = '') + { + $this->shift(3); + + $data['title'] = 'make current - '.Website::$generalName; + + $clean['token'] = sanitizeAlphanum($token); + + $clean['id_rev'] = (int)$id_rev; + $clean['id_hard'] = (int)$this->m['RevisionsModel']->getIdHard($clean['id_rev']); + + if ($this->m['HardwareModel']->isCleared($clean['id_hard'])) $this->redirect('generic/cleared/'.$this->lang,0); + + if ($clean['id_hard'] !== 0) + { + $deleted = $this->m['HardwareModel']->select("hardware.deleted")->where(array("id_hard"=>$clean['id_hard']))->limit(1)->toList('deleted')->send(); + + $data['isDeleted'] = $this->m['HardwareModel']->isDeleted($clean['id_hard']); + + $data['id_rev'] = $clean['id_rev']; + $data['id_hard'] = $clean['id_hard']; + $data['ne_name'] = $this->m['HardwareModel']->getTheModelName($clean['id_hard']); + $data['name'] = encodeUrl($data['ne_name']); + $data['tree'] = $this->getSpecHardLink() . " » " . $this->getViewLink($data['id_hard'],$data['ne_name'])." » " . $this->getHistoryLink($clean['id_hard']) . " » make current"; + + $data['notice'] = null; + $this->s['registered']->checkStatus(); + + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($clean['token'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'wrong token..'); + + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + if ($this->m['HardwareModel']->isDeleted($clean['id_hard'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'this device page has been deleted..'); + + if (isset($_POST['confirmAction'])) + { + $this->m['HardwareModel']->makeCurrent($clean['id_rev']); + + $this->viewRedirect($this->m['HardwareModel']->lastId); + + $data['notice'] = $this->m['HardwareModel']->notice; + } + + $this->append($data); + $this->loadViewAll('climb'); + } + else + { + $this->redirect("users/login/".$this->lang."?redirect=".$this->controller."/view/".$this->lang."/".$clean['id_hard'],0); + } + } + } + + protected function talk($lang = 'en', $id_hard = 0, $token = 'token') + { + $this->shift(3); + + $this->m['TalkModel']->setFields('title,message','sanitizeAll'); + + $data['title'] = 'talk - '.Website::$generalName; + + $clean['token'] = sanitizeAlphanum($token); + $clean['id_hard'] = (int)$id_hard; + $data['id_hard'] = $clean['id_hard']; + $data['ne_name'] = $this->m['HardwareModel']->getTheModelName($clean['id_hard']); + $data['name'] = encodeUrl($data['ne_name']); + $data['tree'] = $this->getSpecHardLink() . " » " . $this->getViewLink($clean['id_hard'],$data['ne_name'])." » ".gtext("Talk").""; + + $data['isDeleted'] = $this->m['HardwareModel']->isDeleted($clean['id_hard']); + + if ($this->m['HardwareModel']->isCleared($clean['id_hard'])) $this->redirect('generic/cleared/'.$this->lang,0); + + if (isset($_POST['insertAction'])) + { + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($clean['token'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'wrong token..'); + + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + if ($this->m['HardwareModel']->isDeleted($clean['id_hard'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'this device page has been deleted..'); + + $this->m['TalkModel']->values['created_by'] = $this->s['registered']->status['id_user']; + $this->m['TalkModel']->values['id_hard'] = $clean['id_hard']; + + $this->m['TalkModel']->updateTable('insert'); + } + } + + //if preview + if (isset($_POST['previewAction'])) + { + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($clean['token'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'wrong token..'); + + $data['preview_message'] = $this->request->post('message','','sanitizeHtml'); + $this->m['TalkModel']->result = false; + } + } + + $data['table'] = $this->m['TalkModel']->select()->where(array('id_hard'=>$clean['id_hard']))->orderBy('id_talk')->send(); + + $data['values'] = $this->m['TalkModel']->getFormValues('insert','sanitizeHtml'); + $data['notice'] = $this->m['TalkModel']->notice; + +// javascript for moderator + $data['md_javascript'] = "moderator_dialog(\"hide\",\"talk\");moderator_dialog(\"show\",\"talk\");"; + $data['go_to'] = $this->currPage."/".$this->lang."/".$clean['id_hard']; + + $this->passWhoAskedForDeletion($clean['id_hard']); + + $this->append($data); + $this->loadViewAll('talk,if_page_deleted,moderator_dialog'); + } + + //get the link to the device page from vendorid:productid code + protected function getAlreadyExixtsLink($code) + { + $hw = new HardwareModel(); + $info = $hw->getModelByCode($code); + + if ($info) + { + return $this->getViewLink($info['id_hard'],$info['model'],Hardware::getControllerFromType($info['type'])); + } + return ''; + } + + protected function getViewLink($id,$ne_name,$controller = null) + { + $contr = isset($controller) ? $controller : $this->controller; + + return "lang.'/'.$id.'/'.encodeUrl($ne_name).$this->viewStatus."'>".$ne_name.""; + } + + protected function getHistoryLink($id) + { + return "controller.'/history/'.$this->lang.'/'.$id.'/'.$this->viewStatus."'>".gtext("History").""; + } + + protected function getSpecHardLink() + { + return "controller.'/catalogue/'.$this->lang.$this->viewStatus."'>".plural($this->controller).""; + } + + protected function goToLoginForm() + { + if ($this->querySanitized) + { + $this->redirect("users/login/".$this->lang."?redirect=".$this->controller."/".$this->action.Url::createUrl($this->_queryString)); + } + else + { + $this->redirect("users/login/".$this->lang."?redirect=home/index".Url::createUrl($this->_queryString)); + } + } + +} diff --git a/Application/Controllers/HardwareController.php b/Application/Controllers/HardwareController.php new file mode 100644 index 0000000..a75c4fe --- /dev/null +++ b/Application/Controllers/HardwareController.php @@ -0,0 +1,43 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class HardwareController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + + $this->_topMenuClasses['hardware'] = " class='currentitem ui-btn-active'"; + + parent::__construct($model, $controller, $queryString); + + $data['title'] = 'hardware - '.Website::$generalName; + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->load('left'); + $this->right(); + } + +} \ No newline at end of file diff --git a/Application/Controllers/HelpController.php b/Application/Controllers/HelpController.php new file mode 100644 index 0000000..658b547 --- /dev/null +++ b/Application/Controllers/HelpController.php @@ -0,0 +1,41 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class HelpController extends WikiController +{ + + public function __construct($model, $controller, $queryString) + { + $this->_topMenuClasses['help'] = " class='currentitem'"; + + parent::__construct($model, $controller, $queryString); + + $this->_topMenuClasses['wiki'] = null; + + $data['tm'] = $this->_topMenuClasses; + + $data['title'] = 'help page - '.Website::$generalName; + + $this->append($data); + } + +} \ No newline at end of file diff --git a/Application/Controllers/HistoryController.php b/Application/Controllers/HistoryController.php new file mode 100644 index 0000000..e50b7e1 --- /dev/null +++ b/Application/Controllers/HistoryController.php @@ -0,0 +1,650 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class HistoryController extends BaseController +{ + + public static $typeTable = array( + 'message' => 'message', + 'talk' => 'talk', + 'user' => 'user', + 'issue' => 'issue', + 'wiki_talk' => 'wiki talk', + 'page' => 'wiki page', + 'page_del' => 'wiki page', + 'device' => 'device page', + 'device_app' => 'device page', + 'device_cl' => 'device page', + 'issue_del' => 'issue', //registered + 'issue_ins' => 'issue', //registered + 'message_ins' => 'message', //registered + 'talk_ins' => 'talk', //registered + 'wiki_talk_ins' => 'wiki talk',//registered + 'hardware' => 'hardware', //registered + 'wiki' => 'wiki', //registered + ); + + public static $actionTable = array( + 'hide' => 'hide', + 'show' => 'show', + 'block' => 'block', + 'unblock' => 'unblock', + 'open' => 'open', + 'close' => 'close', + 'pageblock' => 'block', + 'pageunblock' => 'unblock', + 'pagehide' => 'hide', + 'pageshow' => 'show', + 'devicehide' => 'hide', + 'deviceshow' => 'show', + 'deviceapprove' => 'approve', + 'deviceclear' => 'perm deleted', + 'issuehide' => 'hide', + 'issueshow' => 'show', + 'insert' => 'insert', //registered + 'update' => 'update', //registered + ); + + protected $strings = array( + + 'hide' => array( + + 'action' => 'hide', + 'check_status' => 'no', + 'to_status' => 'yes', + 'exec_string' => 'The message has been hidden. Just reload the page', + 'error_string' => 'Error: the message is already hidden', + + ), + + 'show' => array( + + 'action' => 'show', + 'check_status' => 'yes', + 'to_status' => 'no', + 'exec_string' => 'The message is no more hidden. Just reload the page', + 'error_string' => 'Error: the message is already visible', + + ), + + 'block' => array( + + 'action' => 'block', + 'check_status' => 'no', + 'to_status' => 'yes', + 'exec_string' => 'The user has been blocked. Just reload the page', + 'error_string' => 'Error: the user is already blocked', + + ), + + 'unblock' => array( + + 'action' => 'unblock', + 'check_status' => 'yes', + 'to_status' => 'no', + 'exec_string' => 'The user is no more blocked. Just reload the page', + 'error_string' => 'Error: the user is already un-blocked', + + ), + + 'open' => array( + + 'action' => 'open', + 'check_status' => 'closed', + 'to_status' => 'opened', + 'exec_string' => 'The issue has been opened. Just reload the page', + 'error_string' => 'Error: the issue is already opened', + + ), + + 'close' => array( + + 'action' => 'close', + 'check_status' => 'opened', + 'to_status' => 'closed', + 'exec_string' => 'The issue has been closed. Just reload the page', + 'error_string' => 'Error: the issue is already closed', + + ), + + 'pageblock' => array( + + 'action' => 'pageblock', + 'check_status' => 'no', + 'to_status' => 'yes', + 'exec_string' => 'The wiki page has been blocked. Just reload the page', + 'error_string' => 'Error: the wiki page is already blocked', + + ), + + 'pageunblock' => array( + + 'action' => 'pageunblock', + 'check_status' => 'yes', + 'to_status' => 'no', + 'exec_string' => 'The wiki page is no more blocked. Just reload the page', + 'error_string' => 'Error: the wiki page is already un-blocked', + + ), + + 'pagehide' => array( + + 'action' => 'pagehide', + 'check_status' => 'no', + 'to_status' => 'yes', + 'exec_string' => 'The wiki page has been hidden. Just reload the page', + 'error_string' => 'Error: the wiki page is already hidden', + + ), + + 'pageshow' => array( + + 'action' => 'pageshow', + 'check_status' => 'yes', + 'to_status' => 'no', + 'exec_string' => 'The wiki page is no more hidden. Just reload the page', + 'error_string' => 'Error: the wiki page is already visible', + + ), + + 'issuehide' => array( + + 'action' => 'issuehide', + 'check_status' => 'no', + 'to_status' => 'yes', + 'exec_string' => 'The issue has been hidden. Just reload the page', + 'error_string' => 'Error: the issue is already hidden', + + ), + + 'issueshow' => array( + + 'action' => 'issueshow', + 'check_status' => 'yes', + 'to_status' => 'no', + 'exec_string' => 'The issue is no more hidden. Just reload the page', + 'error_string' => 'Error: the issue is already visible', + + ), + + 'devicehide' => array( + + 'action' => 'devicehide', + 'check_status' => 'no', + 'to_status' => 'yes', + 'exec_string' => 'The device page has been hidden. Just reload the page', + 'error_string' => 'Error: the device page is already hidden', + 'allowed_only_if' => array('cleared'=>'no'), + + ), + + 'deviceshow' => array( + + 'action' => 'deviceshow', + 'check_status' => 'yes', + 'to_status' => 'no', + 'exec_string' => 'The device page is no more hidden. Just reload the page', + 'error_string' => 'Error: the device page is already visible', + 'allowed_only_if' => array('cleared'=>'no'), + + ), + + 'deviceapprove' => array( + + 'action' => 'deviceapprove', + 'check_status' => 'no', + 'to_status' => 'yes', + 'exec_string' => 'The device page has been approved. Just reload the page', + 'error_string' => 'Error: the device page is already approved', + 'allowed_only_if' => array('cleared'=>'no'), + + ), + + 'deviceclear' => array( + + 'action' => 'deviceclear', + 'check_status' => 'no', + 'to_status' => 'yes', + 'exec_string' => 'The device page has been permanently deleted. Just reload the page', + 'error_string' => 'Error: the device page has already been permanently deleted', + 'method' => 'permanentlyDelete', + + ), + ); + + protected $types = array( + + 'message' => array( + + 'clean_type' => 'message', + 'model_name' => 'MessagesModel', + 'id_name' => 'id_mes', + 'field_name' => 'deleted', + 'actions' => array('hide','show'), + 'group' => 'moderator', + + ), + + 'talk' => array( + + 'clean_type' => 'talk', + 'model_name' => 'TalkModel', + 'id_name' => 'id_talk', + 'field_name' => 'deleted', + 'actions' => array('hide','show'), + 'group' => 'moderator', + + ), + + 'user' => array( + + 'clean_type' => 'user', + 'model_name' => 'UsersModel', + 'id_name' => 'id_user', + 'field_name' => 'blocked', + 'actions' => array('block','unblock'), + 'group' => 'admin', + + ), + + 'issue' => array( + + 'clean_type' => 'issue', + 'model_name' => 'IssuesModel', + 'id_name' => 'id_issue', + 'field_name' => 'status', + 'actions' => array('open','close'), + 'group' => 'moderator', + 'types_to_show' => 'issue,issue_del', + + ), + + 'wiki_talk' => array( + + 'clean_type' => 'wiki_talk', + 'model_name' => 'WikitalkModel', + 'id_name' => 'id_talk', + 'field_name' => 'deleted', + 'actions' => array('hide','show'), + 'group' => 'moderator', + + ), + + //page blocked or not + 'page' => array( + + 'clean_type' => 'page', + 'model_name' => 'WikiModel', + 'id_name' => 'id_wiki', + 'field_name' => 'blocked', + 'actions' => array('pageblock','pageunblock'), + 'group' => 'admin', + 'types_to_show' => 'page,page_del', + + ), + + //page hidden or not + 'page_del' => array( + + 'clean_type' => 'page_del', + 'model_name' => 'WikiModel', + 'id_name' => 'id_wiki', + 'field_name' => '-deleted', + 'actions' => array('pagehide','pageshow'), + 'group' => 'admin', + + ), + + //issue hidden or not + 'issue_del' => array( + + 'clean_type' => 'issue_del', + 'model_name' => 'IssuesModel', + 'id_name' => 'id_issue', + 'field_name' => 'deleted', + 'actions' => array('issuehide','issueshow'), + 'group' => 'moderator', + + ), + + //device page blocked or not + 'device' => array( + + 'clean_type' => 'device', + 'model_name' => 'HardwareModel', + 'id_name' => 'id_hard', + 'field_name' => '-deleted', + 'actions' => array('devicehide','deviceshow'), + 'group' => 'admin', + 'types_to_show' => 'device_app,device,device_cl', + + ), + + //device page approved + 'device_app' => array( + + 'clean_type' => 'device_app', + 'model_name' => 'HardwareModel', + 'id_name' => 'id_hard', + 'field_name' => 'approved', + 'actions' => array('deviceapprove'), + 'group' => 'admin', + + ), + + //device page cleared + 'device_cl' => array( + + 'clean_type' => 'device_cl', + 'model_name' => 'HardwareModel', + 'id_name' => 'id_hard', + 'field_name' => 'cleared', + 'actions' => array('deviceclear'), + 'group' => 'admin', + + ), + ); + + public function __construct($model, $controller, $queryString) + { + parent::__construct($model, $controller, $queryString); + + $this->model('HistoryModel'); + $this->model('UsersModel'); + + } + + public function hide($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'hide'); + } + + public function show($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'show'); + } + + public function block($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'block'); + } + + public function unblock($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'unblock'); + } + + public function open($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'open'); + } + + public function close($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'close'); + } + + public function pageblock($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'pageblock'); + } + + public function pageunblock($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'pageunblock'); + } + + public function pagehide($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'pagehide'); + } + + public function pageshow($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'pageshow'); + } + + public function devicehide($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'devicehide'); + } + + public function deviceshow($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'deviceshow'); + } + + public function deviceapprove($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'deviceapprove'); + } + + public function deviceclear($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'deviceclear'); + } + + public function issuehide($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'issuehide'); + } + + public function issueshow($lang = 'en', $token = '') + { + $this->generic($lang, $token, 'issueshow'); + } + + protected function generic($lang = 'en', $token = '', $action = 'hide') + { + header('Content-type: text/html; charset=UTF-8'); + + $this->shift(2); + + $this->clean(); + + $clean['token'] = sanitizeAlphanum($token); + + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($clean['token'])) die("wrong token"); + + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) die("your account has been blocked"); + + $clean['id_user'] = (int)$this->s['registered']->status['id_user']; + $clean['id'] = $this->request->post('id',0,'forceInt'); + $type = $this->request->post('type','','sanitizeAll'); + $message = $this->request->post('message',''); + + $modelName = 'error'; + + if (array_key_exists($type,$this->types)) + { + if (in_array($action,$this->types[$type]['actions'])) + { + $clean['group'] = $this->types[$type]['group']; + if (in_array($clean['group'],$this->s['registered']->status['groups'])) + { + $modelName = $this->types[$type]['model_name']; + $clean['type'] = $this->types[$type]['clean_type']; + $clean['id_name'] = $this->types[$type]['id_name']; + $clean['field_name'] = $this->types[$type]['field_name']; + + //load the right model + $this->model($modelName); + $model = $this->m[$modelName]; + + $model->select()->where(array($clean['id_name'] => $clean['id'],$clean['field_name'] => $this->strings[$action]['check_status'])); + + if (isset($this->strings[$action]['allowed_only_if']) and is_array($this->strings[$action]['allowed_only_if'])) + { + $model->aWhere($this->strings[$action]['allowed_only_if']); + } + + $count = $model->rowNumber(); + + if ($count > 0) + { + if (eg_strlen($message) < 500) + { + //drop the - char if present + $clean['field_name'] = str_replace('-',null,$clean['field_name']); + + //hide the message + $model->values = array($clean['field_name'] => $this->strings[$action]['to_status']); + + if (isset($this->strings[$action]['method'])) + { + call_user_func(array($model, $this->strings[$action]['method']),$clean['id']); + } + else + { + $model->pUpdate($clean['id']); + } + + if ($model->queryResult) + { + $this->m['HistoryModel']->setFields('id:forceInt,type,message','sanitizeAll'); + $this->m['HistoryModel']->values['created_by'] = $clean['id_user']; + $this->m['HistoryModel']->values['gr'] = $clean['group']; + $this->m['HistoryModel']->values['action'] = $this->strings[$action]['action']; + $this->m['HistoryModel']->updateTable('insert'); + + echo $this->strings[$action]['exec_string']; + } + else + { + echo "error: one error occurred, please retry later"; + } + } + else + { + echo "error: the message has too many characters or wrong type"; + } + } + else + { + echo $this->strings[$action]['error_string']; + } + } + } + } + } + } + + public function viewall($lang = 'en', $type = 'message', $id = 0) + { + header('Content-type: text/html; charset=UTF-8'); + + $this->shift(3); + + $this->clean(); + + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) + { + $clean['id'] = (int)$id; + if (array_key_exists($type,$this->types)) + { + $clean['group'] = $this->types[$type]['group']; + if (in_array($clean['group'],$this->s['registered']->status['groups'])) + { + $clean['type'] = $this->types[$type]['clean_type']; + $clean['typeInWhereClause'] = "'".$clean['type']."'"; + + if (array_key_exists('types_to_show',$this->types[$type])) + { + $clean['typeInWhereClause'] = "'".implode("','",explode(',',$this->types[$type]['types_to_show']))."'"; + } + + switch ($clean['type']) + { + case 'user': + $data['object'] = 'user'; + $data['box_class'] = 'details_of_actions_inner_user'; + break; + case 'page': + $data['object'] = 'wiki page'; + $data['box_class'] = 'details_of_actions_inner_user'; + break; + case 'device': + $data['object'] = 'device page'; + $data['box_class'] = 'details_of_actions_inner_user'; + break; + case 'device_app': + $data['object'] = 'device page'; + $data['box_class'] = 'details_of_actions_inner_user'; + break; + case 'page_del': + $data['object'] = 'wiki page'; + $data['box_class'] = 'details_of_actions_inner_user'; + break; + case 'issue': + $data['object'] = 'issue'; + $data['box_class'] = 'details_of_actions_inner_user'; + break; + default: + $data['object'] = 'message'; + $data['box_class'] = 'details_of_actions_inner'; + break; + } + + $data['res'] = $this->m['HistoryModel'] + ->select() + ->where( + array + ( + 'id'=>$clean['id'], + 'type'=>"in(".$clean['typeInWhereClause'].")", + 'gr'=>$clean['group']) + ) + ->send(); +// echo $this->m['HistoryModel']->getQuery(); + + $data['md_action'] = array( + 'hide' => 'hidden', + 'show' => 'restored', + 'block' => 'blocked', + 'unblock' => 'un-blocked', + 'open' => 'opened again', + 'close' => 'closed', + 'pageblock' => 'blocked', + 'pageunblock' => 'un-blocked', + 'pagehide' => 'hidden', + 'pageshow' => 'restored', + 'devicehide' => 'hidden', + 'deviceshow' => 'restored', + 'deviceapprove' => 'approved', + 'deviceclear' => 'permanently deleted', + 'issuehide' => 'hidden', + 'issueshow' => 'restored', + ); + + $this->append($data); + $this->load('viewall'); + } + } + } + } + } + +} \ No newline at end of file diff --git a/Application/Controllers/HomeController.php b/Application/Controllers/HomeController.php new file mode 100644 index 0000000..3c47547 --- /dev/null +++ b/Application/Controllers/HomeController.php @@ -0,0 +1,47 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class HomeController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + + $this->_topMenuClasses['home'] = " class='currentitem ui-btn-active'"; + + parent::__construct($model, $controller, $queryString); + + $data['title'] = 'home - '.Website::$generalName; + $this->append($data); + } + + public function index($lang = 'en') + { +// get the news container + $data['htmlNewsBox'] = $this->getModule(array('top_news')); + + $this->append($data); + $this->cleverLoad('left'); + $this->right($lang); + } + +} \ No newline at end of file diff --git a/Application/Controllers/HostcontrollersController.php b/Application/Controllers/HostcontrollersController.php new file mode 100644 index 0000000..3655aa1 --- /dev/null +++ b/Application/Controllers/HostcontrollersController.php @@ -0,0 +1,137 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class HostcontrollersController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + $worksOptions = Hostcontrollers::$select; + $worksField = 'compatibility'; + $interfaceOptions = Hostcontrollers::$interface; + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('HostcontrollersModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['HostcontrollersModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'host-controller'; + + $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); + + $this->m['HardwareModel']->strongConditions['insert']["+++++checkIsStrings|".Hostcontrollers::subtypeList()] = "subtype"; + + $this->m['HardwareModel']->strongConditions['update'] = $this->m['HardwareModel']->strongConditions['insert']; + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,compatibility,pci_id,interface,driver,subtype,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'compatibility:sanitizeString' => 'undef', + 'subtype:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'compatibility-desc', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Host controller'; + + $data['intefaceOptions'] = $interfaceOptions; + $data['worksOptions'] = $worksOptions; + $data['worksField'] = $worksField; + + $data['notFoundString'] = "No Host Controller found"; + + $data['subtypeHelpLabel'] = "PCMCIA, USB, Firewire, HECI"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'compatibility' => $this->viewArgs['compatibility'], + 'subtype' => $this->viewArgs['subtype'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/ImageController.php b/Application/Controllers/ImageController.php new file mode 100644 index 0000000..6774b4a --- /dev/null +++ b/Application/Controllers/ImageController.php @@ -0,0 +1,41 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ImageController extends Controller { + + public function captcha() + { + session_start(); + + $params = array( + 'fontPath' => ROOT.'/External/Fonts/FreeFont/FreeMono.ttf', + 'boxHeight' => 100, + 'boxWidth' => 200, + 'undulation'=> true, + 'align' => false + ); + + $captcha = new Image_Gd_Captcha($params); + $captcha->render(); + } + +} \ No newline at end of file diff --git a/Application/Controllers/IssuesController.php b/Application/Controllers/IssuesController.php new file mode 100644 index 0000000..6f7b74b --- /dev/null +++ b/Application/Controllers/IssuesController.php @@ -0,0 +1,203 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class IssuesController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + + $this->_topMenuClasses['issues'] = " class='currentitem'"; + + parent::__construct($model, $controller, $queryString); + + $this->model('IssuesModel'); + $this->model('MessagesModel'); + $this->model('UsersModel'); + + $argKeys = array( + 'page:forceNat' => 1, + 'token:sanitizeAlphanum' => $this->token, + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'issues - '.Website::$generalName; + $this->append($data); + } + + public function viewall($lang = 'en') + { + $this->shift(1); + + $this->m['IssuesModel']->setFields('title,topic,priority,message','sanitizeAll'); + + $data['preview_message'] = null; + + if (isset($_POST['insertAction'])) + { + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect('home/index/'.$this->lang,2,'wrong token..'); + + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + //set the page to 1 in the viewStatus + $this->viewArgs['page'] = 1; + $this->buildStatus(); + + $clean['id_user'] = (int)$this->s['registered']->status['id_user']; + + $this->m['IssuesModel']->values['created_by'] = $clean['id_user']; + $this->m['IssuesModel']->values['status'] = 'opened'; + $this->m['IssuesModel']->values['update_date'] = date('Y-m-d H:i:s'); + $this->m['IssuesModel']->updateTable('insert'); + + } + } + + //if preview + if (isset($_POST['previewAction'])) + { + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect('home/index/'.$this->lang,2,'wrong token..'); + + $data['preview_message'] = $this->request->post('message','','sanitizeHtml'); + $this->m['IssuesModel']->result = false; + } + } + + $data['notice'] = $this->m['IssuesModel']->notice; + + $this->viewArgs['token'] = $this->token; + $this->buildStatus(); + + $this->m['IssuesModel']->setForm('issues/viewall/'.$this->lang.$this->viewStatus."#form",array('previewAction'=>'preview','insertAction'=>'submit')); + + $values = $this->m['IssuesModel']->getFormValues('insert','sanitizeHtml'); + + $data['form'] = $this->m['IssuesModel']->form->render($values); + + //load the Pages helper + $this->helper('Pages',$this->controller.'/viewall/'.$this->lang,'page'); + //get the number of records + $this->m['IssuesModel']->from('issues')->left('messages')->using('id_issue')->groupBy('issues.id_issue')->orderBy('issues.update_date desc'); + + if ($this->islogged === "no") + { + $this->m['IssuesModel']->where(array("n!issues.deleted"=>"no")); + } + + $recordNumber = $this->m['IssuesModel']->rowNumber(); + $page = $this->viewArgs['page']; + //set the limit clause + $this->m['IssuesModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); + $data['table'] = $this->m['IssuesModel']->select('issues.*,messages.message,count(*) as numb_mess')->send(); + + $data['pageList'] = $this->h['Pages']->render($page-4,10); + + $this->append($data); + $this->load('viewall'); + $this->right(); + } + + public function view($lang = 'en', $id_issue = 0) + { + $this->m['MessagesModel']->setFields('message','sanitizeAll'); + + $this->shift(2); + + $clean['id_issue'] = (int)$id_issue; + $data['id_issue'] = $clean['id_issue']; + $data['preview_message'] = null; + + //if submit + if (isset($_POST['insertAction'])) + { + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect('home/index/'.$this->lang,2,'wrong token..'); + + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + $clean['id_user'] = (int)$this->s['registered']->status['id_user']; + + $this->m['MessagesModel']->values['created_by'] = $clean['id_user']; + $this->m['MessagesModel']->values['id_issue'] = $clean['id_issue']; + $this->m['MessagesModel']->updateTable('insert'); + + if ($this->m['MessagesModel']->queryResult) + { + $this->m['IssuesModel']->values = array('update_date' => date('Y-m-d H:i:s')); + $this->m['IssuesModel']->update($clean['id_issue']); + + $domainName = rtrim(Url::getRoot(),"/"); + header('Refresh: 0;url='.$domainName.$_SERVER['REQUEST_URI']); + exit; + } + } + } + + //if preview + if (isset($_POST['previewAction'])) + { + if ($this->s['registered']->status['status'] === 'logged') + { + if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect('home/index/'.$this->lang,2,'wrong token..'); + + $data['preview_message'] = $this->request->post('message','','sanitizeHtml'); + $this->m['MessagesModel']->result = false; + } + } + + $data['notice'] = $this->m['MessagesModel']->notice; + + $this->viewArgs['token'] = $this->token; + $this->buildStatus(); + + //create the form + $this->m['MessagesModel']->setForm('issues/view/'.$this->lang."/".$clean['id_issue'].$this->viewStatus."#form",array('previewAction'=>'preview','insertAction'=>'submit')); + + $values = $this->m['MessagesModel']->getFormValues('insert','sanitizeHtml'); + + $data['form'] = $this->m['MessagesModel']->form->render($values); + + //retrieve the values from the table + $data['table'] = $this->m['IssuesModel']->select()->where(array('id_issue'=>$clean['id_issue']))->send(); + +// javascript for moderator + $data['md_javascript'] = "moderator_dialog(\"hide\",\"message\");moderator_dialog(\"show\",\"message\");moderator_dialog(\"open\",\"issue\");moderator_dialog(\"close\",\"issue\");moderator_dialog(\"issuehide\",\"issue_del\");moderator_dialog(\"issueshow\",\"issue_del\");"; + $data['go_to'] = $this->currPage."/".$this->lang."/".$clean['id_issue']; + + if (count($data['table']) > 0) + { + $data['messages'] = $this->m['MessagesModel']->select()->where(array('id_issue'=>$clean['id_issue']))->send(); + + $this->append($data); + $this->load('view'); + $this->load('moderator_dialog'); + $this->right(); + } + } + +} diff --git a/Application/Controllers/MeetController.php b/Application/Controllers/MeetController.php new file mode 100644 index 0000000..808b951 --- /dev/null +++ b/Application/Controllers/MeetController.php @@ -0,0 +1,338 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class MeetController extends BaseController +{ + private $whereArray = array( + 'has_confirmed' => 0, + 'deleted' => 'no', + ); + + public function __construct($model, $controller, $queryString) + { + parent::__construct($model, $controller, $queryString); + + $this->model('ProfileModel'); + $this->model('HardwareModel'); + $this->model('IssuesModel'); + $this->model('MessagesModel'); + $this->model('TalkModel'); + $this->model('WikiModel'); + $this->model('WikitalkModel'); + + $argKeys = array( + 'page:forceNat' => 1, + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'meet - '.Website::$generalName; + $this->append($data); + } + + //public page of the user + public function user($lang = 'en', $user = '') + { + $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; + $data['title'] = "meet ".$clean['user']." - ".Website::$generalName; + + $this->shift(2); + + if ($this->m['UsersModel']->userExists($clean['user'])) + { + $clean['id_user'] = (int)$this->m['UsersModel']->getUserId($clean['user']); + $data['meet_id_user'] = $clean['id_user']; + + $data['isBlocked'] = $this->m['UsersModel']->isBlocked($clean['id_user']); + + $this->whereArray['username'] = $clean['user']; + + $data['table'] = $this->m['ProfileModel']->select('regusers.e_mail,regusers.username,profile.*')->from('regusers inner join profile')->on('regusers.id_user = profile.created_by')->where($this->whereArray)->send(); + + $data['meet_username'] = $clean['user']; + +// javascript for moderator + $data['md_javascript'] = "moderator_dialog(\"block\",\"user\");moderator_dialog(\"unblock\",\"user\");"; + + $this->append($data); + $this->load('meet'); + $this->load('moderator_dialog'); + $this->right(); + } + + } + + //contributions menu + public function contributions($lang = 'en', $user = '') + { + $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; + $data['title'] = $clean['user']." contributions - ".Website::$generalName; + + $this->shift(2); + + if ($this->m['UsersModel']->userExists($clean['user'])) + { + $clean['id_user'] = (int)$this->m['UsersModel']->getUserId($clean['user']); + + $this->whereArray['username'] = $clean['user']; + + $data['meet_username'] = $clean['user']; + + $hardNumb = $this->m['HardwareModel']->select()->where($this->whereArray)->rowNumber(); + + $issuesNumb = $this->m['IssuesModel']->select('id_issue')->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->rowNumber(); + + $messNumb = $this->m['MessagesModel']->select('id_mes,messages.id_issue,messages.creation_date')->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->rowNumber(); + + $talkNumb = $this->m['TalkModel']->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->rowNumber(); + + $wikiNumb = $this->m['WikiModel']->where($this->whereArray)->rowNumber(); + + $wikiTalkNumb = $this->m['WikitalkModel']->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->rowNumber(); + + $data['hasHardware'] = $hardNumb > 0 ? true : false; + $data['hasIssues'] = $issuesNumb > 0 ? true : false; + $data['hasMessages'] = $messNumb > 0 ? true : false; + $data['hasTalk'] = $talkNumb > 0 ? true : false; + $data['hasWiki'] = $wikiNumb > 0 ? true : false; + $data['hasWikiTalk'] = $wikiTalkNumb > 0 ? true : false; + + $this->append($data); + $this->load('contributions'); + $this->right(); + } + + } + + //hardware contributions + public function hardware($lang = 'en', $user = '') + { + $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; + $data['title'] = "hardware contributions - ".Website::$generalName; + + $this->shift(2); + + if ($this->m['UsersModel']->userExists($clean['user'])) + { + $this->whereArray['username'] = $clean['user']; + + $data['table'] = $this->m['HardwareModel']->select('hardware.*,regusers.username')->where($this->whereArray)->send(); + + $data['meet_username'] = $clean['user']; + + $data['tree_last_string'] = "hardware contributions"; + $data['page_explanation_title'] = "hardware contributions of"; + + $this->append($data); + $this->load('list_template'); + $this->right(); + } + + } + + //issues opened + public function issues($lang = 'en', $user = '') + { + $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; + $data['title'] = "issues submitted - ".Website::$generalName; + + $this->shift(2); + + if ($this->m['UsersModel']->userExists($clean['user'])) + { + //load the Pages helper + $this->helper('Pages','meet/issues/'.$this->lang.'/'.$clean['user'],'page'); + + $clean['id_user'] = (int)$this->m['UsersModel']->getUserId($clean['user']); + + $this->m['IssuesModel']->select('id_issue')->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->orderBy('id_issue desc'); + + $recordNumber = $this->m['IssuesModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['IssuesModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,20); + + $data['table'] = $this->m['IssuesModel']->select('id_issue,creation_date,title')->send(); + + $data['pageList'] = $this->h['Pages']->render($page-3,7); + + $data['meet_username'] = $clean['user']; + + $data['tree_last_string'] = "issues opened"; + $data['page_explanation_title'] = "issues opened by"; + + $this->append($data); + $this->load('list_template'); + $this->right(); + } + + } + + //messages submitted + public function messages($lang = 'en', $user = '') + { + $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; + $data['title'] = "messages submitted - ".Website::$generalName; + + $this->shift(2); + + if ($this->m['UsersModel']->userExists($clean['user'])) + { + //load the Pages helper + $this->helper('Pages','meet/messages/'.$this->lang.'/'.$clean['user'],'page'); + + $clean['id_user'] = (int)$this->m['UsersModel']->getUserId($clean['user']); + + $this->m['MessagesModel']->from('messages inner join issues')->on('messages.id_issue=issues.id_issue')->select('id_mes,messages.id_issue,messages.creation_date,title')->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->orderBy('id_mes desc'); + + $recordNumber = $this->m['MessagesModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['MessagesModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,20); + + $data['table'] = $this->m['MessagesModel']->send(); + + $data['meet_username'] = $clean['user']; + + $data['tree_last_string'] = "messages submitted"; + $data['page_explanation_title'] = "messages submitted by"; + + $data['pageList'] = $this->h['Pages']->render($page-3,7); + + $this->append($data); + $this->load('list_template'); + $this->right(); + } + } + + //messages in the talk page of the devices + public function talk($lang = 'en', $user = '') + { + $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; + $data['title'] = "talk messages submitted - ".Website::$generalName; + + $this->shift(2); + + if ($this->m['UsersModel']->userExists($clean['user'])) + { + //load the Pages helper + $this->helper('Pages','meet/talk/'.$this->lang.'/'.$clean['user'],'page'); + + $clean['id_user'] = (int)$this->m['UsersModel']->getUserId($clean['user']); + + $this->m['TalkModel']->inner('hardware')->using('id_hard')->select('talk.*,hardware.*')->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->orderBy('id_talk desc'); + + $recordNumber = $this->m['TalkModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['TalkModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,20); + + $data['table'] = $this->m['TalkModel']->send(); + + $data['meet_username'] = $clean['user']; + + $data['tree_last_string'] = "talk messages (hardware pages)"; + $data['page_explanation_title'] = "talk messages (hardware pages) submitted by"; + + $data['pageList'] = $this->h['Pages']->render($page-3,7); + + $this->append($data); + $this->load('list_template'); + $this->right(); + } + } + + //hardware contributions + public function wiki($lang = 'en', $user = '') + { + $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; + $data['title'] = "wiki contributions - ".Website::$generalName; + + $this->shift(2); + + if ($this->m['UsersModel']->userExists($clean['user'])) + { + //load the Pages helper + $this->helper('Pages','meet/wiki/'.$this->lang.'/'.$clean['user'],'page'); + + $this->whereArray['username'] = $clean['user']; + + $data['table'] = $this->m['WikiModel']->select('wiki.*,regusers.username')->where($this->whereArray)->orderBy('wiki.id_wiki desc'); + + $recordNumber = $this->m['WikiModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['WikiModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); + + $data['table'] = $this->m['WikiModel']->send(); + + $data['meet_username'] = $clean['user']; + + $data['tree_last_string'] = "wiki contributions"; + $data['page_explanation_title'] = "wiki contributions of"; + + $data['pageList'] = $this->h['Pages']->render($page-5,11); + + $this->append($data); + $this->load('list_template'); + $this->right(); + } + + } + + //messages in the talk page of the wiki pages + public function wikitalk($lang = 'en', $user = '') + { + $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; + $data['title'] = "talk messages submitted - ".Website::$generalName; + + $this->shift(2); + + if ($this->m['UsersModel']->userExists($clean['user'])) + { + //load the Pages helper + $this->helper('Pages','meet/wikitalk/'.$this->lang.'/'.$clean['user'],'page'); + + $clean['id_user'] = (int)$this->m['UsersModel']->getUserId($clean['user']); + + $this->m['WikitalkModel']->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->orderBy('id_talk desc'); + + $recordNumber = $this->m['WikitalkModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['WikitalkModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,20); + + $data['table'] = $this->m['WikitalkModel']->send(); + + $data['meet_username'] = $clean['user']; + + $data['tree_last_string'] = "talk messages (wiki pages)"; + $data['page_explanation_title'] = "talk messages (wiki pages) submitted by"; + + $data['pageList'] = $this->h['Pages']->render($page-3,7); + + $this->append($data); + $this->load('list_template'); + $this->right(); + } + } +} \ No newline at end of file diff --git a/Application/Controllers/ModemsController.php b/Application/Controllers/ModemsController.php new file mode 100644 index 0000000..2b308b6 --- /dev/null +++ b/Application/Controllers/ModemsController.php @@ -0,0 +1,131 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ModemsController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + $worksOptions = Modems::$select; + $worksField = 'compatibility'; + $interfaceOptions = Modems::$interface; + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('ModemsModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['ModemsModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'modem'; + + $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,compatibility,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'compatibility:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'compatibility-desc', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Modems'; + + $data['intefaceOptions'] = $interfaceOptions; + $data['worksOptions'] = $worksOptions; + $data['worksField'] = $worksField; + + $data['notFoundString'] = "No modems found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'compatibility' => $this->viewArgs['compatibility'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/MyController.php b/Application/Controllers/MyController.php new file mode 100644 index 0000000..69b8da7 --- /dev/null +++ b/Application/Controllers/MyController.php @@ -0,0 +1,214 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class MyController extends BaseController +{ + + public function __construct($model, $controller, $queryString) { + parent::__construct($model, $controller, $queryString); + + $this->model('UsersModel'); + $this->model('ProfileModel'); + + $argKeys = array( + 'token:sanitizeAlphanum' => 'token' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'my panel'; + $this->append($data); + } + + public function home($lang = 'en') + { + $this->shift(1); + + $data['title'] = 'my panel - '.Website::$generalName; + + $this->s['registered']->check(); + + $clean['id_user'] = (int)$this->s['registered']->status['id_user']; + $data['username'] = $this->m['UsersModel']->getUser($clean['id_user']); + + $data['userBlocked'] = $this->m['UsersModel']->isBlocked($clean['id_user']); + + $this->append($data); + $this->load('panel'); + $this->right($this->lang); + } + + public function password($lang = 'en') + { + $this->shift(1); + + $data['title'] = 'password - '.Website::$generalName; + + $this->s['registered']->check(); + + if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect($this->controller.'/home/'.$this->lang,2,'wrong token..'); + + $this->m['UsersModel']->setFields('password:sha1','none'); + + $this->m['UsersModel']->strongConditions['update'] = array('checkEqual'=>'password,confirmation'); + + $data['notice'] = null; + + $clean['id_user'] = (int)$this->s['registered']->status['id_user']; + + if (isset($_POST['updateAction'])) { + $pass = $this->s['registered']->getPassword(); + if (sha1($_POST['old']) === $pass) + { + $this->m['UsersModel']->updateTable('update',$clean['id_user']); + $data['notice'] = $this->m['UsersModel']->notice; + if ($this->m['UsersModel']->queryResult) + { + $this->s['registered']->logout(); + $this->redirect('home/index/'.$this->lang,2,'logout'); + } + } + else + { + $data['notice'] = "
The old password is wrong
\n"; + } + } + + $values = $this->m['UsersModel']->selectId($clean['id_user']); + $values['old'] = ''; + $values['confirmation'] = ''; + + $action = array('updateAction'=>'save'); + $form = new Form_Form('my/password/'.$this->lang.$this->viewStatus,$action); + $form->setEntry('old','Password'); + $form->entry['old']->labelString = 'old password:'; + $form->setEntry('password','Password'); + $form->setEntry('confirmation','Password'); + $data['form'] = $form->render($values,'old,password,confirmation'); + + $this->append($data); + + $this->load('password'); + $this->right(); + } + + public function email($lang = 'en') + { + $this->shift(1); + + $data['title'] = 'email - '.Website::$generalName; + + $this->s['registered']->check(); + + if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect($this->controller.'/home/'.$this->lang,2,'wrong token..'); + + $this->m['UsersModel']->setFields('e_mail','sanitizeAll'); + + $this->m['UsersModel']->strongConditions['update'] = array('checkMail'=>'e_mail'); + + $this->m['UsersModel']->databaseConditions['update'] = array('checkUniqueCompl'=>'e_mail'); + + $data['notice'] = null; + + $clean['id_user'] = (int)$this->s['registered']->status['id_user']; + + $this->m['UsersModel']->updateTable('update',$clean['id_user']); + $data['notice'] = $this->m['UsersModel']->notice; + + $values = $this->m['UsersModel']->selectId($clean['id_user']); + + $action = array('updateAction'=>'save'); + $form = new Form_Form('my/email/'.$this->lang.$this->viewStatus,$action); + $form->setEntry('e_mail','InputText'); + $form->entry['e_mail']->labelString = 'your e-mail address:'; + $data['form'] = $form->render($values,'e_mail'); + + $this->append($data); + + $this->load('email'); + $this->right(); + } + + public function profile($lang = 'en') + { + $this->shift(1); + + $data['title'] = 'profile - '.Website::$generalName; + + $this->s['registered']->check(); + + if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect($this->controller.'/home/'.$this->lang,2,'wrong token..'); + + $this->m['ProfileModel']->setFields('real_name,website,where_you_are,birth_date,fav_distro,projects,publish_mail,send_notification,description','sanitizeAll'); + + $clean['id_user'] = (int)$this->s['registered']->status['id_user']; + + $res = $this->m['ProfileModel']->db->select('profile','id_prof','created_by='.$clean['id_user']); + $clean['id_prof'] = (int)$res[0]['profile']['id_prof']; + + $this->m['ProfileModel']->values['update_date'] = date('Y-m-d H:i:s'); + $this->m['ProfileModel']->updateTable('update',$clean['id_prof']); + $data['notice'] = $this->m['ProfileModel']->notice; + + $values = $this->m['ProfileModel']->getFormValues('update','sanitizeHtml',$clean['id_prof']); + + $this->m['ProfileModel']->setForm('my/profile/'.$this->lang.$this->viewStatus,array('updateAction'=>'save'),'POST'); + $data['form'] = $this->m['ProfileModel']->form->render($values); + + $this->append($data); + + $this->load('profile'); + $this->right(); + } + + public function goodbye($lang = 'en') + { + $data['title'] = 'delete - '.Website::$generalName; + + session_start(); + + $this->shift(1); + + $this->s['registered']->check(); + + if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect($this->controller.'/home/'.$this->lang,2,'wrong token..'); + + $clean['id_user'] = (int)$this->s['registered']->status['id_user']; + + if (isset($_POST['closeAction'])) + { + $this->s['registered']->logout(); + $this->m['UsersModel']->close($clean['id_user']); + + if ($this->m['UsersModel']->queryResult) + { + $this->redirect('users/notice/'.$this->lang); + } + + } + + $this->append($data); + $this->load('goodbye'); + $this->right(); + } + +} \ No newline at end of file diff --git a/Application/Controllers/NewsController.php b/Application/Controllers/NewsController.php new file mode 100644 index 0000000..1d500c9 --- /dev/null +++ b/Application/Controllers/NewsController.php @@ -0,0 +1,67 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class NewsController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + + $this->_topMenuClasses['news'] = " class='currentitem'"; + + parent::__construct($model, $controller, $queryString); + + $this->model('NewsModel'); + + $data['title'] = 'news - '.Website::$generalName; + $this->append($data); + } + + public function index($lang = 'en') + { + $argKeys = array( + 'page:forceNat' => 1, + ); + + $this->setArgKeys($argKeys); + + $this->shift(1); + + $this->helper('Pages',$this->controller.'/index/'.$this->lang,'page'); + $this->h['Pages']->nextString = 'older news'; + $this->h['Pages']->previousString = 'latest news'; + $page = $this->viewArgs['page']; + $recordNumber = $this->m['NewsModel']->rowNumber(); + $data['recordNumber'] = $recordNumber; + + //set the limit clause + $limit = $this->h['Pages']->getLimit($page,$recordNumber,10); + + $data['table'] = $this->m['NewsModel']->select()->limit($limit)->send(); + $data['pageList'] = $this->h['Pages']->render($page,0); + + $this->append($data); + $this->load('index'); + $this->right($lang); + } + +} \ No newline at end of file diff --git a/Application/Controllers/NotebooksController.php b/Application/Controllers/NotebooksController.php new file mode 100644 index 0000000..1daf894 --- /dev/null +++ b/Application/Controllers/NotebooksController.php @@ -0,0 +1,159 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class NotebooksController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('NotebooksModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['NotebooksModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'notebook'; + + //hardware conditions + $this->m['HardwareModel']->strongConditions['update'] = array( + "checkIsStrings|".Notebooks::vendorsList() => "vendor", + "checkNotEmpty" => "model|you have to fill the model name entry", + "checkMatch|".Hardware::$regExpressions['model'] => "model|characters not allowed in the model name entry", + "+checkIsStrings|".Notebooks::compatibilityList() => "compatibility", + "checkLength|190" => "model", + "+checkLength|299" => "distribution", + "++checkIsStrings|".Hardware::getCommYears() => "comm_year", + "+++checkIsStrings|".Notebooks::$subtypeSelect => "subtype", + "++++checkIsStrings|".Notebooks::wifiList() => "wifi_works", + "+++++checkIsStrings|".Notebooks::videoList() => "video_card_works", + "++++++checkIsStrings|".Notebooks::biosList() => "bios", + "+++++++checkIsStrings|".Notebooks::webcamList() => "webcam_works", + "++++++++checkIsStrings|".Notebooks::architectureList() => "architecture", + "+++++++++checkIsStrings|".Notebooks::installableList() => "can_free_systems_be_installed", + "++++++++++checkIsStrings|".Notebooks::preventWifiList() => "prevent_wifi", + ); + + $this->m['HardwareModel']->strongConditions['insert'] = $this->m['HardwareModel']->strongConditions['update']; + + $this->m['HardwareModel']->softConditions['update'] = array( + "checkMatch|".Hardware::$regExpressions['kernel'] => "kernel|characters not allowed in the kernel entry", + "checkLength|40000" => "description", + "++checkLength|99" => "video_card_type,wifi_type", + "+++checkLength|99" => "kernel", + "+checkMatch|/^[a-zA-Z0-9\-\_\.\+\s\/\,\:\;\(\)\[\]]+$/" => "video_card_type|only the following characters are allowed for the videocard entry: a-z A-Z 0-9 - _ . + / , : ; ( ) [ ]", + "++checkMatch|/^[a-zA-Z0-9\-\_\.\+\s\/\,\:\;\(\)\[\]]+$/" => "wifi_type|only the following characters are allowed for the wifi entry: a-z A-Z 0-9 - _ . + / , : ; ( ) [ ]", + "+++checkMatch|/^[a-zA-Z0-9\-\_\.\+\s\/\,\:\;\(\)\[\]]+$/" => "webcam_type|only the following characters are allowed for the webcam entry: a-z A-Z 0-9 - _ . + / , : ; ( ) [ ]", + ); + + $this->m['HardwareModel']->softConditions['insert'] = $this->m['HardwareModel']->softConditions['update']; + + $this->m['HardwareModel']->setFields('vendor,model,compatibility,kernel,description,distribution,video_card_type,video_card_works,wifi_type,wifi_works,comm_year,subtype,bios,can_free_systems_be_installed,webcam_type,webcam_works,architecture,prevent_wifi','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'compatibility:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'subtype:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'compatibility', + 'bios:sanitizeString' => 'undef', + 'architecture:sanitizeString' => 'undef', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['worksField'] = 'compatibility'; + + $data['notFoundString'] = "No notebooks found"; + + $data['title'] = 'Notebooks'; + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'subtype' => $this->viewArgs['subtype'], + 'compatibility' => $this->viewArgs['compatibility'], + 'bios' => $this->viewArgs['bios'], + 'architecture' => $this->viewArgs['architecture'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/PrintersController.php b/Application/Controllers/PrintersController.php new file mode 100644 index 0000000..8610314 --- /dev/null +++ b/Application/Controllers/PrintersController.php @@ -0,0 +1,154 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class PrintersController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('PrintersModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['PrintersModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'printer'; + + //hardware conditions + $this->m['HardwareModel']->strongConditions['update'] = array( + "checkNotEmpty" => "model|you have to fill the model name entry", + "checkMatch|".Hardware::$regExpressions['model'] => "model|characters not allowed in the model name entry", + "+checkMatch|".Hardware::$regExpressions['vendorid_productid'] => "pci_id|VendorID:ProductID has to have the following format: [a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}", + "checkLength|190" => "model", + "+checkLength|299" => "distribution", + "+checkIsStrings|".Printer::compatibilityList() => "compatibility", + "++checkIsStrings|".Hardware::getCommYears() => "comm_year", + "+++checkIsStrings|".Printer::$interface => "interface", + "++++checkIsStrings|".Printer::$subtype => "subtype", + "+++++checkIsStrings|".Printer::$trackSelect => "it_tracks_users", + ); + + $this->m['HardwareModel']->strongConditions['insert'] = $this->m['HardwareModel']->strongConditions['update']; + + $this->m['HardwareModel']->softConditions['update'] = array( + "checkMatch|".Hardware::$regExpressions['kernel'] => "kernel|characters not allowed in the kernel entry", + "checkLength|40000" => "description", + "+checkLength|49" => "driver", + "++checkLength|99" => "kernel", + "++checkMatch|".Hardware::$regExpressions['driver'] => "driver|only the following characters are allowed for the driver entry: a-z A-Z 0-9 - _ . + s / , : ; ( ) [ ]", + "+++checkLength|1000" => "other_names|the other names entry exceeds the value of 1000 characters", + ); + + $this->m['HardwareModel']->softConditions['insert'] = $this->m['HardwareModel']->softConditions['update']; + + $this->m['HardwareModel']->setFields('model,kernel,description,compatibility,distribution,comm_year,pci_id,driver,interface,subtype,other_names,it_tracks_users','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'compatibility:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'compatibility', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'printers'; + + $data['intefaceOptions'] = Printer::$interface; + $data['worksOptions'] = Printer::$compatibility; + $data['worksField'] = 'compatibility'; + + $data['notFoundString'] = "No printers found"; + + $data['subtypeHelpLabel'] = "laser, inkjet, .."; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'compatibility' => $this->viewArgs['compatibility'], + 'comm_year' => $this->viewArgs['comm_year'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/ProjectController.php b/Application/Controllers/ProjectController.php new file mode 100644 index 0000000..234fb59 --- /dev/null +++ b/Application/Controllers/ProjectController.php @@ -0,0 +1,42 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ProjectController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + $this->_topMenuClasses['project'] = " class='currentitem ui-btn-active'"; + + parent::__construct($model, $controller, $queryString); + + $data['title'] = 'project - '.Website::$generalName; + $this->append($data); + } + + public function index($lang = 'en') + { + $this->cleverLoad('index'); + $this->right(); + } + +} \ No newline at end of file diff --git a/Application/Controllers/RaidadaptersController.php b/Application/Controllers/RaidadaptersController.php new file mode 100644 index 0000000..be248b4 --- /dev/null +++ b/Application/Controllers/RaidadaptersController.php @@ -0,0 +1,131 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class RaidadaptersController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + $worksOptions = Raidadapters::$select; + $worksField = 'compatibility'; + $interfaceOptions = Raidadapters::$interface; + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('RaidadaptersModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['RaidadaptersModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'RAID-adapter'; + + $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,compatibility,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'compatibility:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'compatibility-desc', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Acquisition cards'; + + $data['intefaceOptions'] = $interfaceOptions; + $data['worksOptions'] = $worksOptions; + $data['worksField'] = $worksField; + + $data['notFoundString'] = "No RAID adapter found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'compatibility' => $this->viewArgs['compatibility'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/RssController.php b/Application/Controllers/RssController.php new file mode 100644 index 0000000..0a74695 --- /dev/null +++ b/Application/Controllers/RssController.php @@ -0,0 +1,64 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class RssController extends SpecialController +{ + + public function __construct($model, $controller, $queryString) + { + parent::__construct($model, $controller, $queryString); + + $data['title'] = 'RSS - '.Website::$generalName; + $this->append($data); + } + + public function modifications($lang = 'en') + { + header ("Content-Type:application/rss+xml"); + parent::modifications($lang); + + $data['statusnetText'] = null; + $this->append($data); + + $this->clean(); + $this->load('modifications'); + } + + //RSS feeds for identi.ca or StatusNet + public function statusnet($lang = 'en') + { + $this->modifications($lang); + + $data['statusnetText'] = Website::$statusnetGroupText; + $this->append($data); + } + + public function notapproved($lang = 'en') + { + $this->shift(1); + + $this->pagelist($lang,'notapproved'); + $this->clean(); + $this->load('notapproved'); + } + +} \ No newline at end of file diff --git a/Application/Controllers/ScannersController.php b/Application/Controllers/ScannersController.php new file mode 100644 index 0000000..80dc229 --- /dev/null +++ b/Application/Controllers/ScannersController.php @@ -0,0 +1,127 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ScannersController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('ScannersModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['ScannersModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'scanner'; + + $this->m['HardwareModel']->setConditions(Printer::compatibilityList(),'compatibility',Printer::$interface); + + $this->m['HardwareModel']->setFields('model,kernel,description,compatibility,distribution,comm_year,pci_id,driver,interface,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'compatibility:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'compatibility', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'scanners'; + + $data['intefaceOptions'] = Printer::$interface; + $data['worksOptions'] = Printer::$compatibility; + $data['worksField'] = 'compatibility'; + + $data['notFoundString'] = "No scanners found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'compatibility' => $this->viewArgs['compatibility'], + 'comm_year' => $this->viewArgs['comm_year'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/SdcardreadersController.php b/Application/Controllers/SdcardreadersController.php new file mode 100644 index 0000000..9d156cf --- /dev/null +++ b/Application/Controllers/SdcardreadersController.php @@ -0,0 +1,131 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class SdcardreadersController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + $worksOptions = Sdcardreaders::$select; + $worksField = 'sd_card_works'; + $interfaceOptions = Sdcardreaders::$interface; + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('SdcardreadersModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['SdcardreadersModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'sd-card-reader'; + + $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,sd_card_works,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'sd_card_works:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'sdcard-works', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'SD card readers'; + + $data['intefaceOptions'] = $interfaceOptions; + $data['worksOptions'] = $worksOptions; + $data['worksField'] = $worksField; + + $data['notFoundString'] = "No SD card readers found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'sd_card_works' => $this->viewArgs['sd_card_works'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/SearchController.php b/Application/Controllers/SearchController.php new file mode 100644 index 0000000..1892f70 --- /dev/null +++ b/Application/Controllers/SearchController.php @@ -0,0 +1,267 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class SearchController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + + $this->_topMenuClasses['search'] = " class='currentitem'"; + + parent::__construct($model, $controller, $queryString); + + $this->model('HardwareModel'); + + $data['title'] = 'search - '.Website::$generalName; + $this->append($data); + } + + public function form($lang = 'en') + { + $this->cleverLoad('form'); + $this->right(); + } + + public function results($lang = 'en') + { + Params::$nullQueryValue = 'undef'; + + $argKeys = array( + 'page:forceNat' => 1, + 'action:sanitizeAlphanum' => 'search', + 'type:sanitizeString' => 'notebook', + 'model:sanitizeString' => 'undef', + ); + + $this->setArgKeys($argKeys); + + $this->shift(1); + + if (strcmp($this->viewArgs['action'],'search') === 0) + { + Params::$whereClauseSymbolArray = array('like'); + + $this->m['HardwareModel']->logicalOperators = array('AND','OR'); + + $whereClause = array( + 'type' => $this->viewArgs['type'], + 'level1' => array( + 'model' => "like '%".$this->viewArgs['model']."%'", + 'other_names' => "like '%".$this->viewArgs['model']."%'", + ), +// 'model' => "like '%".$this->viewArgs['model']."%'", +// 'other_names' => "like '%".$this->viewArgs['model']."%'", + '-deleted' => "no", + 'cleared' => "no", + ); + + $recordNumber = $this->m['HardwareModel']->clear()->where($whereClause)->orderBy("id_hard desc")->rowNumber(); + + $data['recordNumber'] = $recordNumber; + + //load the Pages helper + $this->helper('Pages',$this->controller.'/results/'.$this->lang,'page'); + $page = $this->viewArgs['page']; + //set the limit clause + $limit = $this->h['Pages']->getLimit($page,$recordNumber,10); + + $data['table'] = $this->m['HardwareModel']->clear()->select('id_hard,model,type,comm_year,other_names')->where($whereClause)->limit($limit)->orderBy("id_hard desc")->send(); +// echo $this->m['HardwareModel']->getQuery(); + + $data['pageList'] = $this->h['Pages']->render($page-3,7); + + $this->append($data); + $this->cleverLoad('results'); + $this->right(); + } + + } + + public function pciid($lang = 'en') + { + if (isset($_POST['pciid'])) + { + $clean['pciid'] = $this->request->post('pciid','','sanitizePciid'); + $data['table'] = $this->m['HardwareModel']->clear()->select()->where(array('pci_id'=>$clean['pciid']))->send(); + $data['recordNumber'] = 0; + + $this->append($data); + $this->cleverLoad('results'); + $this->right(); + } + } + + public function lspci($lang = 'en') + { + if (isset($_POST['lspci'])) + { + $data['notice'] = null; + + $lspci = $this->request->post('lspci','','sanitizeHtml'); + $lspciResult = array(); + $flag = true; + + if (strlen($lspci)<50000) + { + $lspci = nl2br($lspci); + $lspciArray = explode('
',$lspci); + reset($lspciArray); + while(current($lspciArray) !== false) + { + $item = current($lspciArray); + if( preg_match( '/Slot\:(.*)([0-9a-zA-Z]{2}\:[0-9a-zA-Z]{2}\.[0-9a-zA-Z]{1})/i', $item ) ) +// if (stristr($item,'Slot')) + { + $temp = array(); +// class + if (next($lspciArray) !== false) + { + $item = trim(current($lspciArray)); + if( preg_match( '/Class\:(.*)\[(.*)\]/i', $item, $matches ) ) + { + $temp['className'] = sanitizeAll($matches[1]); + $temp['classId'] = sanitizeAll($matches[2]); + } + else + { + $temp['className'] = "unknown"; + $temp['classId'] = "unknown"; + } + } + else + { + $flag = false; + break; + } + +// vendor + if (next($lspciArray) !== false) + { + $item = trim(current($lspciArray)); + if( preg_match( '/Vendor\:(.*)\[(.*)\]/i', $item, $matches ) ) + { + $temp['vendorName'] = sanitizeAll($matches[1]); + $temp['vendorId'] = sanitizeAll($matches[2]); + } + else + { + $temp['vendorName'] = "unknown"; + $temp['vendorId'] = "unknown"; + } + } + else + { + $flag = false; + break; + } + +// device + if (next($lspciArray) !== false) + { + $item = trim(current($lspciArray)); + if( preg_match( '/Device\:(.*)\[(.*)\]/i', $item, $matches ) ) + { + $temp['deviceName'] = sanitizeAll($matches[1]); + $temp['deviceId'] = sanitizeAll($matches[2]); + } + else + { + $temp['deviceName'] = "unknown"; + $temp['deviceId'] = "unknown"; + } + } + else + { + $flag = false; + break; + } + + $lspciResult[] = $temp; + } + next($lspciArray); + } + if (count($lspciResult) === 0 or $flag === false) + { + $data['notice'] = "
".gtext('the text submitted by you does not seem to be the lspci -vmmnn output. Please check the text and try again')."
\n"; + $flag = false; + } + } + else + { + $data['notice'] = "
the lspci output is too long
\n"; + $flag = false; + } + + $data['flag'] = $flag; + + $data['table'] = array(); + $data['notFoundDevices'] = array(); + + if ($flag) + { + $lspciFiltered = array(); + $vendorIDProductIDArray = array(); + foreach ($lspciResult as $device) + { + if (array_key_exists($device['classId'],Hardware::$deviceClasses)) + { + $vendorIDProductIDArray[] = sanitizePciid($device['vendorId'].":".$device['deviceId']); + $lspciFiltered[] = $device; + } + } + if (count($vendorIDProductIDArray) > 0) + { + $whereString = "'".implode("','",$vendorIDProductIDArray)."'"; + $data['table'] = $this->m['HardwareModel']->select()->where(array('pci_id'=>"in($whereString)"))->send(); + + $foundPciidArray = $this->m['HardwareModel'] + ->select('pci_id') + ->where(array('pci_id'=>"in($whereString)")) + ->toList('pci_id') + ->send(); + + $notFoundDevices = array(); //list of devices not found inside the database + $notFoundPciIdList = array(); //to check that it does not take the same device twice + + foreach ($lspciFiltered as $device) + { + if (!in_array($device['vendorId'].":".$device['deviceId'],$foundPciidArray)) + { + if (!in_array($device['vendorId'].":".$device['deviceId'],$notFoundPciIdList)) + { + $notFoundDevices[] = $device; + $notFoundPciIdList[] = $device['vendorId'].":".$device['deviceId']; + } + } + } + + $data['notFoundDevices'] = $notFoundDevices; + } + + } + $this->append($data); + $this->cleverLoad('lspci_results'); + $this->right(); + } + } +} \ No newline at end of file diff --git a/Application/Controllers/SoundcardsController.php b/Application/Controllers/SoundcardsController.php new file mode 100644 index 0000000..fff5e77 --- /dev/null +++ b/Application/Controllers/SoundcardsController.php @@ -0,0 +1,127 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class SoundcardsController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('SoundcardsModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['SoundcardsModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'soundcard'; + + $this->m['HardwareModel']->setConditions(Soundcards::$audioSelect,'sound_card_works',Soundcards::$interface); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,sound_card_works,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'sound_card_works:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'sound-card-works', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Soundcard'; + + $data['intefaceOptions'] = Soundcards::$interface; + $data['worksOptions'] = Soundcards::$audioSelect; + $data['worksField'] = 'sound_card_works'; + + $data['notFoundString'] = "No sound cards found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'sound_card_works' => $this->viewArgs['sound_card_works'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/SpecialController.php b/Application/Controllers/SpecialController.php new file mode 100644 index 0000000..4acbb5e --- /dev/null +++ b/Application/Controllers/SpecialController.php @@ -0,0 +1,216 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class SpecialController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + parent::__construct($model, $controller, $queryString); + + $this->model('HistoryModel'); + $this->model('HardwareModel'); + + $data['title'] = gtext('last modifications').' - '.Website::$generalName; + $this->append($data); + + Params::$nullQueryValue = 'undef'; + + $this->setArgKeys(array('page:forceNat'=>1,'username:sanitizeAll'=>'undef')); + } + + protected function last($lang = 'en',$action = 'modifications') + { + switch ($action) + { + case 'modactions': + $data['title'] = 'last moderations - '.Website::$generalName; + $data['viewTitle'] = 'List of actions carried out by moderators'; + $data['user_status'] = 'MODERATOR'; + + $whereClauseArray = array( + 'gr' => 'moderator', + ); + + $viewFile = 'modactions'; + + break; + case 'adminactions': + $data['title'] = 'last admin actions - '.Website::$generalName; + $data['viewTitle'] = 'List of actions carried out by administrators'; + $data['user_status'] = 'ADMINISTRATOR'; + + $whereClauseArray = array( + 'gr' => 'admin', + ); + + $viewFile = 'modactions'; + + break; + + case 'usersactions': + $data['title'] = 'last registered users actions - '.Website::$generalName; + $data['viewTitle'] = 'List of actions carried out by registered users'; + $data['user_status'] = 'USER'; + + $whereClauseArray = array( + 'gr' => 'registered', + ); + + $viewFile = 'modactions'; + + break; + } + $whereClauseArray['username'] = $this->viewArgs['username']; + + $this->helper('Pages','special/'.$this->action.'/'.$this->lang,'page'); + + $this->m['HistoryModel']->clear()->left('regusers')->on('history.created_by=regusers.id_user')->select("history.*,regusers.username")->where($whereClauseArray)->orderBy('id_history desc'); + + $recordNumber = $this->m['HistoryModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['HistoryModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); + + $data['table'] = $this->m['HistoryModel']->send(); + +// echo $this->m['HistoryModel']->getQuery(); + + $data['pageList'] = $this->h['Pages']->render($page-5,11); + + //the value of the filter + $data['filterValue'] = strcmp($this->viewArgs['username'],'undef') === 0 ? null : $this->viewArgs['username']; + + $this->append($data); + $this->load($viewFile); + $this->right(); + } + + public function modifications($lang = 'en') + { + $this->shift(1); + + $data['title'] = 'last modifications - '.Website::$generalName; + + $whereClauseArray = array( + 'gr' => 'registered', + 'type' => 'hardware', + 'deleted' => 'no', + 'cleared' => 'no', + ); + + $this->helper('Pages','special/'.$this->action.'/'.$this->lang,'page'); + + $this->m['HistoryModel']->clear()->select('history.*,hardware.*')->inner('hardware')->on('hardware.id_hard=history.id')->where($whereClauseArray)->orderBy('id_history desc'); + + $recordNumber = $this->m['HistoryModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['HistoryModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); + + $data['table'] = $this->m['HistoryModel']->send(); + + $data['pageList'] = $this->h['Pages']->render($page-5,11); + + $this->append($data); + $this->load('modifications'); + $this->right(); + } + + public function modactions($lang = 'en') + { + $this->shift(1); + + $this->s['registered']->check('moderator'); + + $this->last($lang = 'en','modactions'); + } + + public function adminactions($lang = 'en') + { + $this->shift(1); + + $this->s['registered']->check('admin'); + + $this->last($lang = 'en','adminactions'); + } + + public function usersactions($lang = 'en') + { + $this->shift(1); + + $this->s['registered']->check('moderator'); + + $this->last($lang = 'en','usersactions'); + } + + protected function pagelist($lang = 'en', $type) + { + switch ($type) + { + case 'deleted': + $whereArray = array('-deleted'=>'yes','approved'=>'yes'); + $data['titleString'] = 'hidden device pages'; + break; + case 'notapproved': + $whereArray = array('approved'=>'no'); + $data['titleString'] = 'Device pages that have to be approved'; + break; + } + + $this->helper('Pages','special/'.$this->action.'/'.$this->lang,'page'); + + $this->m['HardwareModel']->clear()->select()->where($whereArray)->orderBy('id_hard desc'); + + $recordNumber = $this->m['HardwareModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['HardwareModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); + + $data['table'] = $this->m['HardwareModel']->send(); + + $data['pageList'] = $this->h['Pages']->render($page-5,11); + + $this->append($data); + $this->load('pages_deleted'); + $this->right(); + } + + public function deleted($lang = 'en') + { + $this->shift(1); + + $this->s['registered']->check('admin'); + + $this->pagelist($lang,'deleted'); + } + + public function notapproved($lang = 'en') + { + $this->shift(1); + + $this->s['registered']->check('admin'); + + $this->pagelist($lang,'notapproved'); + } + +} \ No newline at end of file diff --git a/Application/Controllers/ThreegcardsController.php b/Application/Controllers/ThreegcardsController.php new file mode 100644 index 0000000..3824fe0 --- /dev/null +++ b/Application/Controllers/ThreegcardsController.php @@ -0,0 +1,127 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ThreegcardsController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('ThreegcardsModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['ThreegcardsModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = '3G-card'; + + $this->m['HardwareModel']->setConditions(Wifi::$wifiSelect,'wifi_works',ThreeGcards::interfaceList()); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,wifi_works,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'wifi_works:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'wifi-works', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = '3G card'; + + $data['intefaceOptions'] = Wifi::$interface; + $data['worksOptions'] = Wifi::$wifiSelect; + $data['worksField'] = 'wifi_works'; + + $data['notFoundString'] = "No 3G cards found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'wifi_works' => $this->viewArgs['wifi_works'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/UsersController.php b/Application/Controllers/UsersController.php new file mode 100644 index 0000000..741eaf4 --- /dev/null +++ b/Application/Controllers/UsersController.php @@ -0,0 +1,352 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class UsersController extends BaseController +{ + + public function __construct($model, $controller, $queryString) + { + parent::__construct($model, $controller, $queryString); + + $this->model('UsersModel'); + $this->model('ProfileModel'); + $this->model('HardwareModel'); + + $data['title'] = 'Login'; + $this->append($data); + } + + public function login($lang = 'en') + { + $data = array(); + + if ( strcmp($this->_updating,'no') === 0 ) + { + $data['flag'] = isset($type) ? 'setted' : null; + + $data['title'] = 'Login - '.Website::$generalName; + + $redirect = $this->request->get('redirect','','sanitizeAll'); + + $data['action'] = Url::getRoot("users/login/".$this->lang."?redirect=$redirect"); + + $data['notice'] = null; + + $this->s['registered']->checkStatus(); + + if ($this->s['registered']->status['status']=='logged') { //check if already logged + $this->redirect('home/index/'.Lang::$current,3,'You are already logged...'); + die(); + } + if (isset($_POST['username']) and isset($_POST['password'])) + { + $username = ctype_alnum($_POST['username']) ? sanitizeAll($_POST['username']) : ''; + $choice = $this->s['registered']->login($username,$_POST['password']); + + switch($choice) { + case 'logged': + $this->redirect('home/index/'.Lang::$current,3,'You are already logged...'); + break; + case 'accepted': + if (strcmp($redirect,'') !== 0) + { + $redirect = html_entity_decode($redirect,ENT_QUOTES,DEFAULT_CHARSET); + $domainName = rtrim(Url::getRoot(),"/"); + header('Location:'.$domainName."/".$redirect); + } + else + { + $this->redirect('home/index/'.Lang::$current,0); + } + break; + case 'login-error': + $data['notice'] = '
Wrong username or password
'; + break; + case 'wait': + $data['notice'] = '
You have to wait 5 seconds before you can try to login another time
'; + break; + } + } + } + + $this->append($data); + $this->load('login'); + } + + public function logout($lang = 'en') + { + $res = $this->s['registered']->logout(); + + if ($res === 'not-logged') + { + $data['notice'] = "
You can't logout because you are not logged...
\n"; + } + else if ($res === 'was-logged') + { + $this->redirect('home/index/'.Lang::$current,0); + } + else if ($res === 'error') + { + + } + + $this->append($data); + $this->load('logout'); + } + + public function add($lang = 'en') + { + $data['title'] = 'create account - '.Website::$generalName; + + if ( strcmp($this->_updating,'no') === 0 ) + { + //start session for captcha + session_start(); + + if ( isset($_SESSION['status']) ) unset($_SESSION['status']); + + $this->shift(1); + + $this->m['UsersModel']->strongConditions['insert'] = array( + "checkAlphanum" => "username", + "checkLength|35" => "username", + "checkMail" => "e_mail", + "+checkLength|60" => "e_mail", + "checkEqual" => "password,confirmation", + "checkMatch|/^[a-zA-Z0-9\_\-\!]+$/" => "password,confirmation|characters allowed for the password: a-z A-Z 0-9 - _ !" + ); + + $this->m['UsersModel']->databaseConditions['insert'] = array( + "checkUnique" => "username", + "+checkUnique" => "e_mail" + ); + + if ($this->s['registered']->status['status'] === 'logged') + { + $this->redirect('home/index/'.$this->lang,2,'you are already logged..'); + } + else + { + $data['notice'] = null; + + $this->m['UsersModel']->setFields('username:sanitizeAll,e_mail:sanitizeAll,password:sha1','none'); + + $this->m['UsersModel']->updateTable('insert'); + + $data['notice'] = $this->m['UsersModel']->notice; + + $values = $this->m['UsersModel']->getFormValues('insert','sanitizeHtml'); + $values['confirmation'] = ''; + + $data['values'] = $values; + + $this->append($data); + + $this->load('add'); + $this->right(); + } + } + else + { + $this->redirect('users/login/'.$this->lang,0); + } + } + + public function confirm($lang = 'en', $id_user = 0, $confirmation_token = '') + { + $data['title'] = 'confirm account - '.Website::$generalName; + + if ( strcmp($this->_updating,'no') === 0 ) + { + if ($this->s['registered']->status['status'] === 'logged') + { + $this->redirect('home/index/'.$this->lang,2,'you are already logged..'); + } + else + { + $clean['id_user'] = (int)$id_user; + $clean['confirmation_token'] = sanitizeAlphanum($confirmation_token); + + $data['status_confirm'] = false; + + $res = $this->m['UsersModel']->select('id_user,creation_time')->where(array("id_user"=>$clean['id_user'],"confirmation_token"=>$clean['confirmation_token'],"has_confirmed"=>1,"deleted"=>"no"))->send(); + + // echo $this->m['UsersModel']->getQuery(); + + if (count($res) > 0) + { + $now = time(); + $checkTime = $res[0]['regusers']['creation_time'] + Account::$confirmTime; + if ($checkTime > $now) + { + $this->m['UsersModel']->values = array('has_confirmed' => 0, 'creation_time' => 0); + if ($this->m['UsersModel']->update($clean['id_user'])) + { + $data['status_confirm'] = true; + + //ad a record in the profile table + $this->m['ProfileModel']->values = array('created_by' => $clean['id_user']); + $this->m['ProfileModel']->insert(); + + } + } + } + + // var_dump($data['status_confirm']); + + $this->append($data); + $this->load('confirmation'); + $this->right(); + } + } + else + { + $this->redirect('users/login/'.$this->lang,0); + } + } + + public function change($lang = 'en', $id_user = 0, $forgot_token = '') + { + session_start(); + + $data['title'] = 'change password - '.Website::$generalName; + + if ( strcmp($this->_updating,'no') === 0 ) + { + if ($this->s['registered']->status['status'] === 'logged') + { + $this->redirect('home/index/'.$this->lang,2,'you are already logged..'); + } + else + { + $clean['id_user'] = (int)$id_user; + $clean['forgot_token'] = sanitizeAlphanum($forgot_token); + + $res = $this->m['UsersModel']->select('username,id_user,forgot_time,e_mail')->where(array("id_user"=>$clean['id_user'],"forgot_token"=>$clean['forgot_token'],"has_confirmed"=>0,"deleted"=>"no"))->send(); + + if (count($res) > 0) + { + $now = time(); + $checkTime = $res[0]['regusers']['forgot_time'] + Account::$confirmTime; + if ($checkTime > $now) + { + $username = $res[0]['regusers']['username']; + $email = $res[0]['regusers']['e_mail']; + + $newPassword = generateString(10); + $this->m['UsersModel']->values = array('password' => sha1($newPassword), 'forgot_time' => 0); + if ($this->m['UsersModel']->update($clean['id_user'])) + { + $result = Account::sendpassword($username,$email,$newPassword); + + if ($result) + { + $_SESSION['status'] = 'sent_new_password'; + } + else + { + $_SESSION['status'] = 'sent_new_password_error'; + } + + $hed = new HeaderObj(DOMAIN_NAME); + $hed->redirect('users/notice/'.Lang::$current,1); + + } + } + } + + $this->append($data); + $this->load('change'); + $this->right(); + } + } + else + { + $this->redirect('users/login/'.$this->lang,0); + } + } + + public function forgot($lang = 'en') + { + $data['title'] = 'request password - '.Website::$generalName; + + if ( strcmp($this->_updating,'no') === 0 ) + { + session_start(); + + if ( isset($_SESSION['status']) ) unset($_SESSION['status']); + + $this->shift(1); + + if ($this->s['registered']->status['status'] === 'logged') + { + $this->redirect('home/index/'.$this->lang,2,'you are already logged..'); + } + else + { + $data['notice'] = null; + + if (isset($_POST['forgotAction'])) + { + if (isset($_POST['username'])) + { + $this->m['UsersModel']->forgot($_POST['username']); + $data['notice'] = $this->m['UsersModel']->notice; + } + } + + $this->append($data); + + $this->load('forgot'); + $this->right(); + } + } + else + { + $this->redirect('users/login/'.$this->lang,0); + } + } + + public function notice($lang = 'en') + { + $data['title'] = 'notice - '.Website::$generalName; + + if ( strcmp($this->_updating,'no') === 0 ) + { + session_start(); + if ($this->s['registered']->status['status'] === 'logged') + { + $this->redirect('home/index/'.$this->lang,2,'you are already logged..'); + } + else + { + $this->load('notice'); + $this->right(); + } + } + else + { + $this->redirect('users/login/'.$this->lang,0); + } + } + +} \ No newline at end of file diff --git a/Application/Controllers/VideocardsController.php b/Application/Controllers/VideocardsController.php new file mode 100644 index 0000000..a27e723 --- /dev/null +++ b/Application/Controllers/VideocardsController.php @@ -0,0 +1,127 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class VideocardsController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('VideocardsModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['VideocardsModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'videocard'; + + $this->m['HardwareModel']->setConditions(Videocard::videoList(),'video_card_works',Videocard::$interface); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,video_card_works,comm_year,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'video_card_works:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'video-card-works', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Videocards'; + + $data['intefaceOptions'] = Videocard::$interface; + $data['worksOptions'] = Videocard::$videoSelect; + $data['worksField'] = 'video_card_works'; + + $data['notFoundString'] = "No video cards found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'video_card_works' => $this->viewArgs['video_card_works'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/WebcamsController.php b/Application/Controllers/WebcamsController.php new file mode 100644 index 0000000..41807ed --- /dev/null +++ b/Application/Controllers/WebcamsController.php @@ -0,0 +1,127 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class WebcamsController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('WebcamsModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['WebcamsModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'webcam'; + + $this->m['HardwareModel']->setConditions(Webcams::$select,'webcam_works',Webcams::$interface); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,webcam_works,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'webcam_works:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'webcam-works', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Webcam'; + + $data['intefaceOptions'] = Webcams::$interface; + $data['worksOptions'] = Webcams::$select; + $data['worksField'] = 'webcam_works'; + + $data['notFoundString'] = "No webcams found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'webcam_works' => $this->viewArgs['webcam_works'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/WifiController.php b/Application/Controllers/WifiController.php new file mode 100644 index 0000000..8bf4c72 --- /dev/null +++ b/Application/Controllers/WifiController.php @@ -0,0 +1,127 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class WifiController extends GenericController +{ + + public function __construct($model, $controller, $queryString) + { + + parent::__construct($model, $controller, $queryString); + + //load the model + $this->model('HardwareModel'); + $this->model('RevisionsModel'); + $this->model('WifiModel'); + $this->model('TalkModel'); + + $this->mod = $this->m['WifiModel']; + + $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; + $this->m['HardwareModel']->type = 'wifi'; + + $this->m['HardwareModel']->setConditions(Wifi::$wifiSelect,'wifi_works',ThreeGcards::interfaceList()); + + $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,wifi_works,pci_id,interface,driver,other_names','sanitizeAll'); + + $argKeys = array( + 'page:forceNat' => 1, + 'history_page:forceNat' => 1, + 'vendor:sanitizeString' => 'undef', + 'comm_year:sanitizeString' => 'undef', + 'wifi_works:sanitizeString' => 'undef', + 'interface:sanitizeString' => 'undef', + 'sort-by:sanitizeString' => 'wifi-works', + 'search_string:sanitizeString' => 'undef' + ); + + $this->setArgKeys($argKeys); + + $data['title'] = 'Wifi'; + + $data['intefaceOptions'] = Wifi::$interface; + $data['worksOptions'] = Wifi::$wifiSelect; + $data['worksField'] = 'wifi_works'; + + $data['notFoundString'] = "No wifi cards found"; + + $this->append($data); + } + + public function catalogue($lang = 'en') + { + $this->shift(1); + + $whereArray = array( + 'type' => $this->mod->type, + 'vendor' => $this->viewArgs['vendor'], + 'comm_year' => $this->viewArgs['comm_year'], + 'wifi_works' => $this->viewArgs['wifi_works'], + 'interface' => $this->viewArgs['interface'], + ); + + $this->mod->setWhereQueryClause($whereArray); + + parent::catalogue($lang); + } + + public function view($lang = 'en', $id = 0, $name = null) + { + parent::view($lang, $id, $name); + } + + public function history($lang = 'en', $id = 0) + { + parent::history($lang, $id); + } + + public function revision($lang = 'en', $id_rev = 0) + { + parent::revision($lang, $id_rev); + } + + public function insert($lang = 'en', $token = '') + { + parent::insert($lang, $token); + } + + public function update($lang = 'en', $token = '') + { + parent::update($lang, $token); + } + + public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) + { + parent::differences($lang, $id_hard, $id_rev); + } + + public function climb($lang = 'en', $id_rev = 0, $token = '') + { + parent::climb($lang, $id_rev, $token); + } + + public function talk($lang = 'en', $id_hard = 0, $token = '') + { + parent::talk($lang, $id_hard, $token); + } + +} diff --git a/Application/Controllers/WikiController.php b/Application/Controllers/WikiController.php new file mode 100644 index 0000000..f3da19f --- /dev/null +++ b/Application/Controllers/WikiController.php @@ -0,0 +1,644 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class WikiController extends BaseController +{ + + public function __construct($model, $controller, $queryString) { + + $this->_topMenuClasses['wiki'] = " class='currentitem'"; + + parent::__construct($model, $controller, $queryString); + + $this->model('UsersModel'); + $this->model('WikiModel'); + $this->model('WikirevisionsModel'); + $this->model('WikitalkModel'); + + $this->m['WikiModel']->id_user = (int)$this->s['registered']->status['id_user']; + } + + public function insert($lang = 'en') + { + $this->shift(1); + + $data['pagePreview'] = null; + + $data['title'] = 'insert a wiki page - '.Website::$generalName; + + $this->m['WikiModel']->setFields('title,page','sanitizeAll'); + + $data['notice'] = null; + + $this->s['registered']->checkStatus(); + + if ($this->s['registered']->status['status'] === 'logged') + { + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + if (isset($_POST['insertAction'])) + { + //insert the new wiki page + $this->m['WikiModel']->updateTable('insert'); + + if ($this->m['WikiModel']->queryResult) + { + $domainName = rtrim(Url::getRoot(),"/"); + header('Location: '.$domainName.'/wiki/page/'.$this->lang.'/'.$this->m['WikiModel']->lastTitleClean); + die(); + } + } + + $data['pagePreview'] = $this->getPreview(); + + $data['notice'] = $this->m['WikiModel']->notice; + + $data['submitName'] = "insertAction"; + $data['hiddenInput'] = null; + + $data['values'] = $this->m['WikiModel']->getFormValues('insert','sanitizeHtml'); + $this->append($data); + + $this->load('form'); + $this->load('bottom_left'); + $this->right(); + } + else + { + $this->redirect("users/login/".$this->lang."?redirect=".$this->controller."/insert/".$this->lang,0); + } + } + + public function update($lang = 'en') + { + $this->shift(1); + + $data['pagePreview'] = null; + + $data['title'] = 'update a wiki page - '.Website::$generalName; + + $this->m['WikiModel']->setFields('title,page','sanitizeAll'); + + $data['notice'] = null; + $this->s['registered']->checkStatus(); + + if (isset($_POST['id_wiki'])) + { + //get the id + $clean['id_wiki'] = (int)$_POST['id_wiki']; + $title = $this->m['WikiModel']->getTheModelName($clean['id_wiki']); + + if ($this->s['registered']->status['status'] === 'logged') + { + + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + if ($this->m['WikiModel']->isBlocked($clean['id_wiki'])) $this->redirect('wiki/page/'.$this->lang,2,'this page has been blocked..'); + + if ($this->m['WikiModel']->isDeleted($clean['id_wiki'])) $this->redirect('wiki/page/'.$this->lang,2,'this page has been deleted..'); + + $deleted = $this->m['WikiModel']->select("wiki.deleted")->where(array("id_wiki"=>$clean['id_wiki']))->limit(1)->toList('wiki.deleted')->send(); + + $data['tree_name'] = $title; + + if (isset($_POST['updateAction'])) + { + //carry out the update database action + $this->m['WikiModel']->updateTable('update'); + + if ($this->m['WikiModel']->queryResult) + { + $domainName = rtrim(Url::getRoot(),"/"); + header('Location: '.$domainName.'/wiki/page/'.$this->lang.'/'.$this->m['WikiModel']->lastTitleClean); + die(); + } + } + + $data['pagePreview'] = $this->getPreview(); + + $data['notice'] = $this->m['WikiModel']->notice; + + $data['id_wiki'] = $clean['id_wiki']; + $data['submitName'] = "updateAction"; + + $data['values'] = $this->m['WikiModel']->getFormValues('update','sanitizeHtml'); + $data['hiddenInput'] = "\n"; + + $this->append($data); + + $this->load('form'); + $this->load('bottom_left'); + $this->right(); + } + else + { + $domainName = rtrim(Url::getRoot(),"/"); + header('Location: '.$domainName."/users/login/".$this->lang."?redirect=".$this->controller."/page/".$this->lang."/".titleForRedirect($title)); + die(); + } + } + else + { + $this->redirect($this->controller.'/page/'.$this->lang); + } + } + + //get the preview of the description entry + protected function getPreview() + { + if (isset($_POST['previewAction'])) + { + $this->m['WikiModel']->result = false; + return $this->request->post('page','','sanitizeHtml'); + } + return null; + } + + public function page($lang = 'en', $title_clean = null) + { + $this->shift(2); + + $data['title'] = 'main page - '.Website::$generalName; + $clean['title_clean'] = sanitizeAll($title_clean); + + $data['isDeleted'] = false; + $data['isBlocked'] = false; + + if (isset($title_clean)) + { + $res = $this->m['WikiModel']->select()->where(array('title_clean'=>$clean['title_clean']))->orderBy('id_wiki desc')->limit(1)->send(); + + if ( count($res) > 0 ) + { + $data['table'] = $res; + $data['tree_name'] = $res[0]['wiki']['title']; + $data['title'] = $res[0]['wiki']['title'] . ' - ' . Website::$generalName; + $data['isDeleted'] = $this->m['WikiModel']->isDeleted($res[0]['wiki']['id_wiki']); + $data['isBlocked'] = $this->m['WikiModel']->isBlocked($res[0]['wiki']['id_wiki']); + + if ( count($res) < 2 ) + { + $data['talk_number'] = $this->m['WikitalkModel']->select('count(*) as numb,id_wiki')->where(array('id_wiki'=>$res[0]['wiki']['id_wiki'],'deleted'=>'no'))->rowNumber(); + + $viewFile = 'wiki_page'; + $data['id_wiki'] = $res[0]['wiki']['id_wiki']; + } + else + { + $viewFile = 'select'; + } + } + else + { + $rev = new WikirevisionsModel(); + $res_rev = $rev->select()->where(array('title_clean'=>$clean['title_clean']))->orderBy('id_rev desc')->limit(1)->send(); + if ( count($res_rev) > 0 ) + { + $clean['idWiki'] = $rev->getIdPage($res_rev[0]['wiki_revisions']['id_rev']); + $newTitle = $this->m['WikiModel']->getTheModelName($clean['idWiki']); + $n = titleForRedirect($newTitle); + $domainName = rtrim(Url::getRoot(),"/"); + header('Location: '.$domainName.'/wiki/page/'.$this->lang.'/'.$n); + die(); + } + else + { + $viewFile = 'not_found'; + } + } + } + else + { + $this->redirect('wiki/page/'.$this->lang.'/Main-Page'); + } + + $data['md_javascript'] = "moderator_dialog(\"pageblock\",\"page\");moderator_dialog(\"pageunblock\",\"page\");moderator_dialog(\"pagehide\",\"page_del\");moderator_dialog(\"pageshow\",\"page_del\");"; + + $this->append($data); + + $this->load($viewFile); + $this->load('bottom_left'); + $this->load('moderator_dialog'); + $this->right(); + } + + public function history($lang = 'en', $id = 0) + { + $argKeys = array( + 'page:forceNat' => 1, + ); + + $this->setArgKeys($argKeys); + $this->shift(2); + + $clean['id'] = (int)$id; + $data['id'] = $clean['id']; + $data['tree_name'] = $this->m['WikiModel']->getTheModelName($clean['id']); + $data['isBlocked'] = $this->m['WikiModel']->isBlocked($clean['id']); + $data['isDeleted'] = $this->m['WikiModel']->isDeleted($clean['id']); + + $data['title'] = 'history - '.Website::$generalName; + + //get the first revision + $res = $this->m['WikirevisionsModel']->db->select('revisions','id_rev','id_wiki='.$clean['id'],null,'id_rev',1); + if (count($res) > 0) + { + $data['firstRev'] = $res[0]['wiki_revisions']['id_rev']; + } + + $res1 = $this->m['WikiModel']->db->select('wiki','update_date,created_by','id_wiki='.$clean['id']); + + $this->m['WikirevisionsModel']->setWhereQueryClause(array('id_wiki' => $clean['id'])); + + //load the Pages helper + $this->helper('Pages',$this->controller.'/history/'.$this->lang.'/'.$clean['id'],'page'); + //get the number of records + $recordNumber = $this->m['WikirevisionsModel']->rowNumber(); + $page = $this->viewArgs['page']; + //set the limit clause + $this->m['WikirevisionsModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,20); + $res2 = $this->m['WikirevisionsModel']->getFields('update_date,created_by,id_rev'); + + $data['pageList'] = $this->h['Pages']->render($page-3,7); + + $data['rev1'] = $res1; + $data['rev2'] = $res2; + + $this->append($data); + $this->load('history'); + $this->load('bottom_left'); + $this->right(); + } + + public function revision($lang = 'en', $id_rev = 0) + { + $argKeys = array( + 'page:forceNat' => 1, + ); + + $this->setArgKeys($argKeys); + $this->shift(2); + + $clean['id_rev'] = (int)$id_rev; + + $this->m['WikirevisionsModel']->setWhereQueryClause(array("id_rev" => $clean['id_rev'])); + $data['table'] = $this->m['WikirevisionsModel']->getAll(); + + $data['id_wiki'] = 0; + $data['created_by'] = null; + $data['update_date'] = null; + $data['tree_name'] = null; + $data['tree'] = null; + $data['tree'] = null; + $data['title'] = 'revision - '.Website::$generalName; + $data['isDeleted'] = false; + + if (count($data['table']) > 0) + { + $data['id_wiki'] = (int)$data['table'][0]['wiki_revisions']['id_wiki']; + $data['isDeleted'] = $this->m['WikiModel']->isDeleted($data['id_wiki']); + $data['tree_name'] = $this->m['WikiModel']->getTheModelName($data['id_wiki']); + $data['tree'] = $this->getSpecPageLink() . " » " . "toWikiPage($data['id_wiki'])."'>".$data['tree_name'].""." » " . $this->getHistoryLink($data['id_wiki']) . " » ".gtext('Revision'); + + $data['created_by'] = $data['table'][0]['wiki_revisions']['created_by']; + $data['update_date'] = $data['table'][0]['wiki_revisions']['update_date']; + } + + $this->append($data); + $this->load('wiki_page'); + $this->load('bottom_left'); + $this->right(); + } + + public function differences($lang = 'en', $id_wiki = 0, $id_rev = 0) + { + $this->shift(3); + + $data['title'] = 'differences - '.Website::$generalName; + + $clean['id_wiki'] = (int)$id_wiki; + $clean['id_rev'] = (int)$id_rev; + + $data['id_wiki'] = $clean['id_wiki']; + $tree_name = $this->m['WikiModel']->getTheModelName((int)$clean['id_wiki']); + $data['tree_name'] = $tree_name; + $data['tree'] = $this->getSpecPageLink() . " » " . "toWikiPage($clean['id_wiki'])."'>".$data['tree_name']."" ." » " . $this->getHistoryLink($data['id_wiki']) . " » ".gtext('Differences'); + + $data['isDeleted'] = $this->m['WikiModel']->isDeleted($clean['id_wiki']); + $data['showDiff'] = false; + + $diffArray = array(); + + if (strcmp($clean['id_wiki'],0) !== 0 and strcmp($clean['id_rev'],0) !== 0) + { + $this->m['WikirevisionsModel']->where(array('id_wiki' => $clean['id_wiki'],'id_rev' => '<='.$clean['id_rev'])); + $this->m['WikirevisionsModel']->limit = 2; + $res = $this->m['WikirevisionsModel']->getAll(); + if (count($res) > 1) + { + $newArray = $res[0]['wiki_revisions']; + $oldArray = $res[1]['wiki_revisions']; + + $data['update_new'] = $newArray['update_date']; + $data['update_old'] = $oldArray['update_date']; + $data['created_by'] = $newArray['created_by']; + + $diffArray = $this->m['WikiModel']->getDiffArray($oldArray, $newArray); + + $data['showDiff'] = true; + } + } + else if (strcmp($clean['id_wiki'],0) !== 0 and strcmp($clean['id_rev'],0) === 0) + { + $this->m['WikiModel']->where(array('id_wiki' => $clean['id_wiki'])); + $lastRes = $this->m['WikiModel']->getAll(); + + if (count($lastRes) > 0) + { + $this->m['WikirevisionsModel']->setWhereQueryClause(array('id_wiki' => $clean['id_wiki'])); + $this->m['WikirevisionsModel']->limit = 1; + $revRes = $this->m['WikirevisionsModel']->getAll(); + + if (count($revRes) > 0) + { + $newArray = $lastRes[0]['wiki']; + $oldArray = $revRes[0]['wiki_revisions']; + + $data['update_new'] = $newArray['update_date']; + $data['update_old'] = $oldArray['update_date']; + $data['created_by'] = $newArray['created_by']; + + $diffArray = $this->m['WikiModel']->getDiffArray($oldArray, $newArray); + + $data['showDiff'] = true; + } + } + + } + + $data['fieldsWithBreaks'] = $this->m['WikiModel']->fieldsWithBreaks; + $data['diffArray'] = $diffArray; + + $this->append($data); + $this->load('differences'); + $this->load('bottom_left'); + $this->right(); + } + + public function climb($lang = 'en', $id_rev = 0) + { + $this->shift(2); + + $this->m['WikiModel']->setFields('title,page','sanitizeAll'); + + $data['title'] = 'make current - '.Website::$generalName; + + $clean['id_rev'] = (int)$id_rev; + $clean['id_wiki'] = (int)$this->m['WikirevisionsModel']->getIdPage($clean['id_rev']); + + if ($clean['id_wiki'] !== 0) + { + + $data['isDeleted'] = $this->m['WikiModel']->isDeleted($clean['id_wiki']); + + $data['id_rev'] = $clean['id_rev']; + $data['id_wiki'] = $clean['id_wiki']; + $data['tree_name'] = $this->m['WikiModel']->getTheModelName($clean['id_wiki']); + $data['name'] = $data['tree_name']; + $data['tree'] = $this->getSpecPageLink() . " » " . "toWikiPage($clean['id_wiki'])."'>".$data['tree_name'].""." » " . $this->getHistoryLink($clean['id_wiki']) . " » " . gtext('Make current'); + + $data['notice'] = null; + $this->s['registered']->checkStatus(); + + if ($this->s['registered']->status['status'] === 'logged') + { + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + if ($this->m['WikiModel']->isBlocked($clean['id_wiki'])) $this->redirect('wiki/page/'.$this->lang,2,'this page has been blocked..'); + + if ($this->m['WikiModel']->isDeleted($clean['id_wiki'])) $this->redirect('wiki/page/'.$this->lang,2,'this page has been deleted..'); + + if (isset($_POST['confirmAction'])) + { + $this->m['WikiModel']->makeCurrent($clean['id_rev']); + + if ($this->m['WikiModel']->queryResult) + { + $domainName = rtrim(Url::getRoot(),"/"); + header('Location: '.$domainName.'/wiki/page/'.$this->lang.'/'.$this->m['WikiModel']->lastTitleClean); + die(); + } + + $data['notice'] = $this->m['WikiModel']->notice; + } + + $this->append($data); + $this->load('climb'); + $this->load('bottom_left'); + $this->right(); + } + else + { + $this->redirect("users/login/".$this->lang."?redirect=".$this->controller."/page/".$this->lang."/".encodeUrl($data['tree_name']),0); + } + } + } + + public function talk($lang = 'en', $id_wiki = 0) + { + $this->shift(2); + + $this->m['WikitalkModel']->setFields('title,message','sanitizeAll'); + + $data['title'] = 'talk - '.Website::$generalName; + + $clean['id_wiki'] = (int)$id_wiki; + $data['id_wiki'] = $clean['id_wiki']; + $data['tree_name'] = $this->m['WikiModel']->getTheModelName($clean['id_wiki']); + $data['isBlocked'] = $this->m['WikiModel']->isBlocked($clean['id_wiki']); + $data['isDeleted'] = $this->m['WikiModel']->isDeleted($clean['id_wiki']); + + $data['tree'] = $this->getSpecPageLink() . " » " . "toWikiPage($clean['id_wiki'])."'>".$data['tree_name'].""." » ".gtext('Talk'); + + if (isset($_POST['insertAction'])) + { + if ($this->s['registered']->status['status'] === 'logged') + { + if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); + + if ($this->m['WikiModel']->isBlocked($clean['id_wiki'])) $this->redirect('wiki/page/'.$this->lang,2,'this page has been blocked..'); + + if ($this->m['WikiModel']->isDeleted($clean['id_wiki'])) $this->redirect('wiki/page/'.$this->lang,2,'this page has been deleted..'); + + $this->m['WikitalkModel']->values['created_by'] = $this->s['registered']->status['id_user']; + $this->m['WikitalkModel']->values['id_wiki'] = $clean['id_wiki']; + + $this->m['WikitalkModel']->updateTable('insert'); + +// if ($this->m['WikitalkModel']->queryResult) +// { +// header('Refresh: 0;url='.$_SERVER['REQUEST_URI']); +// die(); +// } + } + } + + $data['table'] = $this->m['WikitalkModel']->select()->where(array('id_wiki'=>$clean['id_wiki']))->orderBy('id_talk')->send(); + + $data['values'] = $this->m['WikitalkModel']->getFormValues('insert','sanitizeHtml'); + $data['notice'] = $this->m['WikitalkModel']->notice; + +// javascript for moderator + $data['md_javascript'] = "moderator_dialog(\"hide\",\"wiki_talk\");moderator_dialog(\"show\",\"wiki_talk\");"; + $data['go_to'] = $this->currPage."/".$this->lang."/".$clean['id_wiki']; + + $this->append($data); + $this->load('talk'); + $this->load('moderator_dialog'); + $this->right(); + } + + public function pages($lang = 'en') + { + $data['topString'] = 'list of pages'; + $data['title'] = gtext('list of pages').' - '.Website::$generalName; + + $this->setArgKeys(array('page:forceNat'=>1)); + + $this->shift(1); + + $this->helper('Pages','wiki/pages/'.$this->lang,'page'); + + $this->m['WikiModel']->clear()->select()->where(array('-deleted'=>'no'))->orderBy('id_wiki desc'); + + $recordNumber = $this->m['WikiModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['WikiModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); + + $data['table'] = $this->m['WikiModel']->send(); + + $data['pageList'] = $this->h['Pages']->render($page-7,15); + + $this->append($data); + $this->load('pages'); + $this->right(); + } + + protected function see($lang = 'en', $status = 'blocked') + { + $this->s['registered']->check('admin'); + + switch ($status) + { + case 'deleted': + $data['topString'] = 'list of deleted pages'; + $data['title'] = gtext('list of deleted pages').' - '.Website::$generalName; + $whereClause = '-deleted'; + break; + case 'blocked': + $data['topString'] = 'list of blocked pages'; + $data['title'] = gtext('list of blocked pages').' - '.Website::$generalName; + $whereClause = 'blocked'; + break; + } + + $this->setArgKeys(array('page:forceNat'=>1)); + + $this->shift(1); + + $this->helper('Pages','wiki/'.$status.'/'.$this->lang,'page'); + + $this->m['WikiModel']->clear()->select()->where(array($whereClause=>'yes'))->orderBy('id_wiki desc'); + + $recordNumber = $this->m['WikiModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['WikiModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); + + $data['table'] = $this->m['WikiModel']->send(); + + $data['pageList'] = $this->h['Pages']->render($page-7,15); + + $this->append($data); + $this->load('pages'); + $this->right(); + } + + public function deleted($lang = 'en') + { + $this->see($lang,'deleted'); + } + + public function blocked($lang = 'en') + { + $this->see($lang,'blocked'); + } + + //print all the modifications to the wiki + public function modifications($lang = 'en') + { + $data['title'] = gtext('last modifications').' - '.Website::$generalName; + + $this->setArgKeys(array('page:forceNat'=>1)); + + $this->shift(1); + + $whereClauseArray = array( + 'gr' => 'registered', + 'type' => 'wiki', + ); + + $this->helper('Pages','wiki/modifications/'.$this->lang,'page'); + + $this->m['HistoryModel']->clear()->select()->where($whereClauseArray)->orderBy('id_history desc'); + + $recordNumber = $this->m['HistoryModel']->rowNumber(); + $page = $this->viewArgs['page']; + + $this->m['HistoryModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); + + $data['table'] = $this->m['HistoryModel']->send(); + + $data['pageList'] = $this->h['Pages']->render($page-7,15); + + $this->append($data); + $this->load('modifications'); + $this->right(); + } + + protected function getViewLink($ne_name) + { + return "controller.'/page/'.$this->lang.'/'.encodeUrl($ne_name)."'>".$ne_name.""; + } + + protected function getHistoryLink($id) + { + return "controller.'/history/'.$this->lang.'/'.$id."'>".gtext('History').""; + } + + protected function getSpecPageLink() + { + return "controller.'/page/'.$this->lang."/Main-Page'>".ucfirst($this->controller).""; + } + +} \ No newline at end of file diff --git a/Application/Hooks/AfterInitialization.php b/Application/Hooks/AfterInitialization.php new file mode 100755 index 0000000..a369309 --- /dev/null +++ b/Application/Hooks/AfterInitialization.php @@ -0,0 +1,10 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Distributions +{ + + public static $allowed = array(); + + public static $allowed_active = array(); + + public static function getList() + { + return implode(' , ',array_keys(self::$allowed)); + } + + //fill the $allowed property with the list of allowed distros from the distros MySQL table + public static function setAllowedList() + { + $distros = new DistrosModel(); + + self::$allowed = $distros->clear()->toList("clean_name","full_name")->orderBy("id_order")->send(); + self::$allowed_active = $distros->clear()->where(array('active'=>'1'))->toList("clean_name","full_name")->orderBy("id_order")->send(); + } + + public static function getName($distList = '') + { + $returnString = null; + $returnArray = array(); + $distArray = explode(',',$distList); + foreach ($distArray as $dist) + { + $dist = trim($dist); + if (array_key_exists($dist,self::$allowed)) + { + $returnArray[] = self::$allowed[$dist]; + } + } + return implode("
",$returnArray); + } + + public static function check($distString) + { + $distArray = explode(',',$distString); + + $allowedArray = array_keys(self::$allowed); + + foreach ($distArray as $dist) + { + $dist = trim($dist); + if (!in_array($dist,$allowedArray)) return false; + } + + return true; + } + + public static function getFormHtml() + { + $str = "
"; + $str .= "
"; + foreach (self::$allowed_active as $value => $label) + { + $str .= "
$label
"; + } + $str .= "
"; + $str .= ""; + $str .= ""; + $str .= "
"; + + return $str; + } + +} diff --git a/Application/Include/hardware.php b/Application/Include/hardware.php new file mode 100644 index 0000000..bd83987 --- /dev/null +++ b/Application/Include/hardware.php @@ -0,0 +1,576 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + + +function translate($string) +{ + return Hardware::translate($string); +} + +function translate_and_gtext($string) +{ + return gtext(translate($string)); +} + +class Hardware +{ + + public static $translations = array( + "amd64" => 'x86-64/amd64', + "PC-Card" => 'PCMCIA/PC-Card', + "works_with_3D" => "works with 3D acceleration", + "works_without_3D" => "works, but without 3D acceleration", + "does_not_work" => "it does not work", + "can-be-installed" => "can be installed", + "pcmcia-controller" => "PCMCIA Controller", + "usb-controller" => "USB Controller", + "firewire-controller" => "Firewire Controller", + "heci-controller" => "HECI Controller", + ); + + public static $regExpressions = array( + "kernel" => "/^[a-zA-Z0-9\-\_\.\+\s\(\)\,]+$/", + "driver" => "/^[a-zA-Z0-9\-\_\.\+\s\/\,\:\;\(\)\[\]]+$/", + "vendorid_productid" => "/^[a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}$/", + "model" => "/^[a-zA-Z0-9\-\_\.\+\s\(\)\@\[\]\/\,\']+$/", + ); + + public static function translate($string) + { + if (array_key_exists($string,self::$translations)) + { + return self::$translations[$string]; + } + return $string; + } + + //classId => controller + public static $deviceClasses = array( + '0403' => 'soundcards', + '0280' => 'wifi', + '0300' => 'videocards', + '0200' => 'ethernetcards', + '0400' => 'acquisitioncards', + '0401' => 'acquisitioncards', + '0480' => 'acquisitioncards', + '0805' => 'sdcardreaders', + '0703' => 'modems', + '0104' => 'raidadapters', + '0c00' => 'hostcontrollers', + '0c03' => 'hostcontrollers', + '0780' => 'hostcontrollers', + '0607' => 'hostcontrollers', + '0e00' => 'raidadapters', + ); + + public static $icons = array( + 'notebook' => 'H2O/computer-laptop_22.png', + 'wifi' => 'H2O/network-wireless_22.png', + 'videocard' => 'Crystal/1282042976_hardware.png', + 'printer' => 'H2O/printer_22.png', + 'scanner' => 'H2O/scanner_22.png', + '3G-card' => 'Crystal/usb_22.png', + 'soundcard' => 'H2O/audio-card_22.png', + 'webcam' => 'H2O/camera-web_22.png', + 'bluetooth' => 'H2O/preferences-system-bluetooth-22.png', + 'acquisition-card' => 'Crystal/cam_mount-22.png', + 'fingerprint-reader' => 'fingerprint_icon-22.png', + 'ethernet-card' => 'H2O/network-wired_22.png', + 'sd-card-reader' => 'H2O/media-flash-sd-mmc_22.png', + 'modem' => 'Crystal/modem_22.png', + 'RAID-adapter' => 'Crystal/1282042976_hardware.png', + 'host-controller' => 'Crystal/1282042976_hardware.png', + ); + + public static $typeToController = array( + 'notebook' => 'notebooks', + 'wifi' => 'wifi', + 'videocard' => 'videocards', + 'printer' => 'printers', + 'scanner' => 'scanners', + '3G-card' => 'threegcards', + 'soundcard' => 'soundcards', + 'webcam' => 'webcams', + 'bluetooth' => 'bluetooth', + 'acquisition-card' => 'acquisitioncards', + 'fingerprint-reader' => 'fingerprintreaders', + 'ethernet-card' => 'ethernetcards', + 'sd-card-reader' => 'sdcardreaders', + 'modem' => 'modems', + 'RAID-adapter' => 'raidadapters', + 'host-controller' => 'hostcontrollers', + ); + + public static $typeToWorksField = array( + 'notebook' => 'compatibility', + 'wifi' => 'wifi_works', + 'videocard' => 'video_card_works', + 'printer' => 'compatibility', + 'scanner' => 'compatibility', + '3G-card' => 'wifi_works', + 'soundcard' => 'sound_card_works', + 'webcam' => 'webcam_works', + 'bluetooth' => 'bluetooth_works', + 'acquisition-card' => 'compatibility', + 'fingerprint-reader' => 'fingerprint_works', + 'ethernet-card' => 'ethernet_card_works', + 'sd-card-reader' => 'sd_card_works', + 'modem' => 'compatibility', + 'RAID-adapter' => 'compatibility', + 'host-controller' => 'compatibility', + ); + + public static function getTypes() + { + return implode(',',array_keys(self::$typeToController)); + } + + public static function getControllerFromType($type) + { + if (array_key_exists($type,self::$typeToController)) + { + return self::$typeToController[$type]; + } + return null; + } + + public static function getWorksFieldFromType($type) + { + if (array_key_exists($type,self::$typeToWorksField)) + { + return self::$typeToWorksField[$type]; + } + return null; + } + + //get the type from the controller + public static function getTypeFromController($controller) + { + $temp = array_flip(self::$typeToController); + if (array_key_exists($controller,$temp)) + { + return $temp[$controller]; + } + return null; + } + + public static function getTypeFromClass($class) + { + if (array_key_exists($class,self::$deviceClasses)) + { + return self::getTypeFromController(self::$deviceClasses[$class]); + } + return null; + } + + public static function getIconFromType($type) + { + if (array_key_exists($type,self::$icons)) + { + return Url::getRoot()."Public/Img/".self::$icons[$type]; + } + return null; + } + + public static function getIconFromController($controller) + { + if ($type = self::getTypeFromController($controller)) + { + return self::getIconFromType($type); + } + return null; + } + + public static function getIconFromClass($class) + { + if (array_key_exists($class,self::$deviceClasses)) + { + return self::getIconFromController(self::$deviceClasses[$class]); + } + return null; + } + + //get the list of the allowed years of commercialization + public static function getCommYears() + { + $currentYear = (int)date("Y"); + $allowed = 'not-specified'; + + for ($i=$currentYear;$i>1991;$i--) + { + $allowed .= ",$i"; + } + return $allowed; + } + + public static $trackSelect = 'not-specified,no,yes'; + +} + +class Printer extends Hardware +{ + + public static $compatibility = array( + "A-Full" => "A-Full", + "B-Partial" => "B-Partial", + "C-None" => "C-None", + ); + + public static $interface = "not-specified,USB,Serial,Parallel,Firewire,SCSI,Ethernet"; + + public static $subtype = "not-specified,laser,inkjet,other"; + + public static function compatibilityList() + { + return implode(',',array_values(self::$compatibility)); + } + +} + +class Wifi extends Hardware +{ + + public static $interface = array( + "not-specified" => "not-specified", + "USB" => "USB", + "PCI" => "PCI", + "PCI-E" => "PCI-E", + "mini-PCI" => "mini-PCI", + "mini-PCI-E" => "mini-PCI-E", + "ExpressCard" => "ExpressCard", + "Ethernet" => "Ethernet", + "PCMCIA/PC-Card" => "PC-Card", + ); + + public static $interfaceReverse = array( + "not-specified" => "not-specified", + "USB" => "USB", + "PCI" => "PCI", + "PCI-E" => "PCI-E", + "mini-PCI" => "mini-PCI", + "mini-PCI-E" => "mini-PCI-E", + "ExpressCard" => "ExpressCard", + "Ethernet" => "Ethernet", + "PC-Card" => "PCMCIA/PC-Card", + ); + + public static $wifiSelect = 'yes,no'; + + public static function interfaceList() + { + return implode(',',array_values(self::$interface)); + } +} + +class Videocard extends Hardware +{ + + public static $videoSelect = array( + "works with 3D acceleration" => "works_with_3D", + "works, but without 3D acceleration" => "works_without_3D", + "it does not work" => "does_not_work", + ); + + public static $videoReverse = array( + "works_with_3D" => "works with 3D acceleration", + "works_without_3D" => "works, but without 3D acceleration", + "does_not_work" => "it does not work", + ); + + public static $interface = "not-specified,PCI,AGP,PCI-E,ISA,MCA,VLB"; + + public static function videoList() + { + return implode(',',array_values(self::$videoSelect)); + } +} + + +class Notebooks extends Hardware +{ + + public static $vendors = array( + "Acer" => "Acer", + "Apple" => "Apple", + "Asus" => "Asus", + "BenQ" => "BenQ", + "Blue Light" => "Blue-Light", + "CLEVO CO." => "CLEVO-CO", + "Compal Electronics" => "Compal-Electronics", + "COMPAQ" => "COMPAQ", + "Dell" => "Dell", + "emachines" => "emachines", + "FUJITSU" => "FUJITSU", + "Garlach44" => "Garlach44", + "Gateway" => "Gateway", + "Google" => "Google", + "Hasee" => "Hasee", + "Hewlett Packard" => "Hewlett-Packard", + "IBM" => "IBM", + "Intel" => "Intel", + "Lanix" => "Lanix", + "Lemote" => "Lemote", + "Lenovo" => "Lenovo", + "LG" => "LG", + "Libiquity" => "Libiquity", + "Minifree" => "Minifree", + "msi" => "msi", + "Olimex" => "Olimex", + "One Laptop per Child (Non-Profit)" => "One-Laptop-per-Child-Non-Profit", + "Openpandora Ltd." => "Openpandora-Ltd", + "Oracle" => "Oracle", + "Packard Bell" => "Packard-Bell", + "Panasonic" => "Panasonic", + "Philco" => "Philco", + "Philips" => "Philips", + "Positivo" => "Positivo", + "Purism" => "Purism", + "Qbex" => "Qbex", + "SAMSUNG" => "SAMSUNG", + "Slimbook" => "Slimbook", + "Sony" => "Sony", + "System76" => "System76", + "ThinkPenguin" => "ThinkPenguin", + "Thomson" => "Thomson", + "TOSHIBA" => "TOSHIBA", + "ZaReason, Inc" => "ZaReason-Inc", + ); + + public static $compatibility = array( + "A Platinum" => "A-platinum", + "B Gold" => "B-gold", + "C Silver" => "C-silver", + "D Bronze" => "D-bronze", + "E Garbage" => "E-garbage" + ); + + public static $subtypeSelect = 'notebook,netbook,tablet,not-specified'; + + public static $architectureSelect = array( + "not specified" => 'not-specified', + "x86" => 'x86', + "x86-64/amd64" => 'amd64', + "MIPS" => 'MIPS', + "ARM" => 'ARM', + ); + + public static $biosSelect = array( + "not specified" => 'not-specified', + "no" => 'no', + "yes" => 'yes', + "can be installed" => 'can-be-installed', + ); + + public static $preventWifiSelect = array( + "not specified" => 'not-specified', + "no" => 'no', + "yes (please specify in the description entry)" => 'yes', + ); + + public static $installableSelect = array( + "not specified" => 'not-specified', + "no (please specify in the description entry)" => 'no', + "yes" => 'yes', + ); + +// public static $installableSelect = 'not-specified,no,yes'; + + public static $videoSelect = array( + "not specified" => 'not-specified', + "yes, with 3D acceleration" => "yes_with_3D", + "yes, but without 3D acceleration" => "yes_without_3D", + "it does not work" => "no", + ); + + public static $videoReverse = array( + "yes_with_3D" => "works with 3D acceleration", + "yes_without_3D" => "works, but without 3D acceleration", + "no" => "it does not work", + 'not-specified' => "not specified how it works", + "" => "" + ); + + public static $wifiSelect = array( + "not specified" => 'not-specified', + 'yes' => 'yes', + 'no' => 'no', + 'there is no wifi card' => 'no-wifi-card', + ); + + public static $wifiReverse = array( + "yes" => "it works", + "no" => "it does not work", + 'not-specified' => "not specified how it works", + 'no-wifi-card' => 'there is no wifi card', + "" => "" + ); + + public static $webcamSelect = array( + 'not specified' => 'not-specified', + 'it works' => 'yes', + 'it does not work' => 'no', + 'there is no webcam' => 'there-is-no-webcam', + ); + + public static $webcamReverse = array( + "yes" => "it works", + "no" => "it does not work", + 'not-specified' => "not specified how it works", + 'there-is-no-webcam' => 'there is no webcam', + ); + + public static function videoList() + { + return implode(',',array_values(self::$videoSelect)); + } + + public static function wifiList() + { + return implode(',',array_values(self::$wifiSelect)); + } + + public static function webcamList() + { + return implode(',',array_values(self::$webcamSelect)); + } + + public static function vendorsList() + { + return implode(',',array_values(self::$vendors)); + } + + public static function compatibilityList() + { + return implode(',',array_values(self::$compatibility)); + } + + public static function architectureList() + { + return implode(',',array_values(self::$architectureSelect)); + } + + public static function biosList() + { + return implode(',',array_values(self::$biosSelect)); + } + + public static function preventWifiList() + { + return implode(',',array_values(self::$preventWifiSelect)); + } + + public static function installableList() + { + return implode(',',array_values(self::$installableSelect)); + } +} + +class ThreeGcards extends Wifi +{ + + public static $select = 'yes,no'; + + +} + +class Soundcards extends Hardware +{ + + public static $audioSelect = 'yes,no'; + + public static $interface = "not-specified,PCI,ISA,USB,Firewire,Parallel,PCI-E,PCMCIA"; + +} + +class Webcams extends Hardware +{ + + public static $select = 'yes,no'; + + public static $interface = "not-specified,USB,Firewire,Parallel,Wifi,Serial"; + +} + +class Bluetooth extends Hardware +{ + + public static $select = 'yes,no'; + + public static $interface = "not-specified,USB,PCI,PCI-E,mini-PCI,mini-PCI-E,ExpressCard,PC-Card"; + +} + +class Acquisitioncards extends Hardware +{ + + public static $select = 'yes,no'; + + public static $interface = "not-specified,USB,PCI,PCI-E,mini-PCI,mini-PCI-E,ExpressCard,PC-Card,Firewire,Parallel,Serial"; + +} + +class Fingerprintreaders extends Acquisitioncards +{ + +} + +class Ethernetcards extends Acquisitioncards +{ + +} + +class Sdcardreaders extends Acquisitioncards +{ + +} + +class Modems extends Acquisitioncards +{ + +} + +class Raidadapters extends Acquisitioncards +{ + +} + +class PCMCIAControllers extends Acquisitioncards +{ + +} + +class Hostcontrollers extends Acquisitioncards +{ + + public static $subtype = array( + "PCMCIA Controller" => "pcmcia-controller", + "USB Controller" => "usb-controller", + "Firewire Controller" => "firewire-controller", + "HECI Controller" => "heci-controller", + ); + + public static function subtypeList() + { + return implode(',',array_values(self::$subtype)); + } + +} diff --git a/Application/Include/languages.php b/Application/Include/languages.php new file mode 100644 index 0000000..2d59c6a --- /dev/null +++ b/Application/Include/languages.php @@ -0,0 +1,2363 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Lang +{ + public static $allowed = array('en','es','fr','it','de','gr','pt'); + public static $current = 'en'; + + public static $complete = array( + 'en' => 'gb.png,English', + 'es' => 'es.png,Español', + 'fr' => 'fr.png,Français', + 'it' => 'it.png,Italiano', + 'de' => 'de.png,Deutsch', + 'gr' => 'gr.png,Ελληνικά', + 'pt' => 'pt.png,Português', + ); + + //$pos=0: icon, $pos=1:lang name + public static function getLangInfo($langCode,$pos) + { + if (array_key_exists($langCode,self::$complete)) + { + $all = explode(',',self::$complete[$langCode]); + return $all[$pos]; + } + return $langCode; + } + + public static function getLabel($langCode) + { + return self::getLangInfo($langCode,1); + } + + public static function getIcon($langCode) + { + return self::getLangInfo($langCode,0); + } + + public static $i18n = array( + 'it' => array + ( + /*0001*/"Search one device in the archive" => "Cerca un dispositivo nell'archivio", + /*0002*/"hardware type" => "tipo di hardware", + /*0003*/"the model name contains" => "il nome del modello contiene", + /*0004*/"List of issues" => "Lista di questioni", + /*0005*/"TITLE" => "TITOLO", + /*0006*/"TOPIC" => "ARGOMENTO", + /*0007*/"OPENED BY" => "APERTO DA", + /*0008*/"DATE" => "DATA", + /*0009*/"REPLIES" => "MESSAGGI", + /*0010*/"PRIORITY" => "PRIORITÀ", + /*0011*/"STATUS" => "STATO", + /*0012*/"You have to" => "Devi eseguire il", + /*0013*/"in order to submit an issue" => "per poter aprire una nuova questione", + /*0014*/"in order to add a message" => "per poter inviare un messaggio", + /*0015*/"Description" => "Descrizione", + /*0016*/"Messages" => "Messaggi", + /*0017*/"this message has been deleted" => "questo messaggio è stato cancellato", + /*0018*/"in order to submit a message to this issue" => "per aggiungere un messaggio a questa questione", + /*0019*/"model name" => "nome del modello", + /*0020*/"model type" => "tipo di device", + /*0021*/"year of commercialization" => "anno di commercializzazione", + /*0022*/"Results of the search" => "Risultati della ricerca", + /*0023*/"page list" => "pagine", + /*0024*/"No devices found" => "Non è stato trovato alcun device", + /*0025*/"vendor" => "marca", + /*0026*/"compatibility" => "compatibilità", + /*0027*/"year" => "anno", + /*0028*/"subtype" => "sottotipo", + /*0029*/"sort by" => "ordina per", + /*0030*/"interface" => "interfaccia", + /*0031*/"does it work?" => "funziona?", + /*0032*/"preview of the message" => "anteprima del messaggio", + /*0033*/"preview of the new issue message" => "anteprima del testo della questione", + /*0034*/"Add a message to this issue" => "Aggiungi un messaggio a questa questione", + /*0035*/"Add a new issue" => "Aggiungi una nuova questione", + /*0036*/"MESSAGE" => "MESSAGGIO", + /*0037*/"there are no messages" => "non ci sono messaggi", + /*0038*/"No notebooks found" => "Non è stato trovato alcun notebook", + /*0039*/"subtype (notebook, netbook, tablet)" => "sottotipo (notebook, netbook, tablet)", + /*0040*/"compatibility with free software" => "compatibilità con il software libero", + /*0041*/"view the other specifications" => "guarda le altre specifiche", + /*0042*/"model" => "modello", + /*0043*/"model id" => "id del modello", + /*0044*/"tested on" => "testato con", + /*0045*/"tested with the following kernel libre" => "testato con il seguente kernel libre", + /*0046*/"video card model" => "modello di scheda video", + /*0047*/"wifi model" => "modello di scheda wifi", + /*0048*/"GNU/Linux distribution used for the test" => "distribuzione GNU/Linux usata per il test", + /*0049*/"does the video card work?" => "funziona la scheda video?", + /*0050*/"does the wifi card work?" => "funziona la scheda wifi?", + /*0051*/"Description: (write here all the useful information)" => "Descrizione (scrivi sotto tutte le informazioni utili)", + /*0052*/"discover all the wiki tags" => "scopri tutti i tag della wiki", + /*0053*/"Fields marked with * are mandatory" => "I campi marcati con * sono obbligatori", + /*0054*/"No printers found" => "Non è stata trovata alcuna stampante", + /*0055*/"interface" => "interfaccia", + /*0056*/"VendorID:ProductID code of the device" => "codice VendorID:ProductID del prodotto", + /*0057*/"free driver used" => "driver liberi usati", + /*0058*/"set not-specified if not sure" => "seleziona not-specified se non sei sicuro/a", + /*0059*/"see the help page or leave blank if you are not sure" => "guarda nella pagina di help o lascia vuoto se non sei sicuro/a", + /*0060*/"No scanners found" => "Non sono è stato trovato alcuno scanner", + /*0061*/"No video cards found" => "Non è stata trovata alcuna scheda grafica", + /*0062*/"how does it work with free software?" => "come funziona con il software libero?", + /*0063*/"No wifi cards found" => "Non è stata trovata alcuna scheda wifi", + /*0064*/"does it work with free software?" => "funziona con il software libero?", + /*0065*/"differences in the entry" => "differenze nel campo", + /*0066*/"No 3G cards found" => "Non è stata trovata alcuna scheda 3G", + /*0067*/"Please specify in the below description entry the Internet Service Provider (ISP) and the country where the service is provided" => "Per favore specifica nel sottostante campo descrizione l'Internet Service Provider (ISP) e il Paese dove il servizio viene fornito", + /*0068*/"webcam model" => "modello di webcam", + /*0069*/"does it have a free BIOS?" => "ha il BIOS libero?", + /*0070*/"does the webcam work?" => "funziona la webcam?", + /*0071*/"Current revision" => "Revisione corrente", + /*0072*/"Hello" => "Ciao", + /*0073*/"Your" => "il ", + /*0074*/"control panel" => "pannello di controllo", + /*0075*/"create new account" => "crea un account", + /*0076*/"request new password" => "richiedi nuova password", + /*0077*/"website statistics" => "statistiche del sito", + /*0078*/"hardware in the database" => "hardware nel database", + /*0079*/"users logged" => "utenti loggati", + /*0080*/"Watch your public profile" => "Guarda il tuo profilo pubblico", + /*0081*/"Edit your profile" => "Modifica il tuo profilo", + /*0082*/"Change your e-mail address" => "Cambia il tuo indirizzo e-mail", + /*0083*/"Change your password" => "Cambia la tua password", + /*0084*/"Delete your account" => "Chiudi il tuo account", + /*0085*/"choose the username" => "scegli lo username", + /*0086*/"characters allowed" => "caratteri ammessi", + /*0087*/"your e-mail address" => "il tuo indirizzo e-mail", + /*0088*/"necessary to confirm the registration" => "necessario per confermare la registrazione", + /*0089*/"choose the password" => "scegli la password", + /*0090*/"confirm the password" => "conferma la password", + /*0091*/"write the code above" => "scrivi il codice mostrato sopra", + /*0092*/"write your username" => "scrivi il tuo username", + /*0093*/"Actions carried out by moderators" => "Azioni compiute dai moderatori", + /*0094*/"meet" => "conosci", + /*0095*/"Public profile of" => "Profilo pubblico di", + /*0096*/"See all the contributions of" => "Guarda tutti i contributi di ", + /*0097*/"My website" => "Il mio sito personale", + /*0098*/"My real name" => "Il mio vero nome", + /*0099*/"My e-mail address" => "Il mio indirizzo e-mail", + /*0100*/"I'm from" => "Vengo da", + /*0101*/"Birthdate" => "Sono nato il", + /*0102*/"My favourite distribution" => "La mia distribuzione favorita", + /*0103*/"Free software projects I'm working on" => "Progetti di software libero con i quali collaboro", + /*0104*/"My description" => "La mia descrizione", + /*0105*/"contributions" => "contributi", + /*0106*/"contributions of" => "contributi di", + /*0107*/"No sound cards found" => "Non è stata trovata alcuna scheda audio", + /*0108*/"LAST UPDATE" => "ULTIMA MODIFICA", + /*0109*/"search by" => "cerca per", + /*0110*/"analyze the output of the lspci command" => "analizza l'output del comando lscpi", + /*0111*/"paste the output of the lspci command" => "incolla l'output del comand lspci", + /*0112*/"works, but without 3D acceleration" => "funziona, ma senza accelerazione 3D", + /*0113*/"the text submitted by you does not seem to be the lspci -vmmnn output. Please check the text and try again" => "il testo che hai inviato non sembra l'output del comando lspci -vmmnn. Per favore ricontrolla il testo e riprova", + /*0114*/"Search form" => "Form della ricerca", + /*0115*/"write here the output of lspci -vmmnn" => "scrivi qui l'output del comando lspci -vmmnn", + /*0116*/"The following devices has been found in the database" => "I seguenti device sono stati trovati nel database", + /*0117*/"yes" => "sì", + /*0118*/"no" => "no", + /*0119*/"The following devices has not been found in the database" => "I seguenti device non sono stati trovati nel database", + /*0120*/"can you please insert them?" => "puoi gentilmente inserirli?", + /*0121*/"No webcams found" => "Non è stata trovata alcuna webcam", + /*0122*/"Download the xml file of all the database" => "Scarica il file xml di tutto il database", + /*0123*/"Download the xml file of all the notebooks in the database" => "Scarica il file xml di tutti i notebook presenti nel database", + /*0124*/"Download the xml file of all the wifi cards in the database" => "Scarica il file xml di tutte le schede wifi presenti nel database", + /*0125*/"Download the xml file of all the video cards in the database" => "Scarica il file xml di tutte le schede video presenti nel database", + /*0126*/"Download the xml file of all the printers in the database" => "Scarica il file xml di tutte le stampanti presenti nel database", + /*0127*/"Download the xml file of all the 3G cards in the database" => "Scarica il file xml di tutte le schede 3G presenti nel database", + /*0128*/"Download the xml file of all the sound cards in the database" => "Scarica il file xml di tutte le schede audio presenti nel database", + /*0129*/"Download the xml file of all the webcams in the database" => "Scarica il file xml di tutte le webcam presenti nel database", + /*0130*/"You can download all the h-node database in one unique xml file in order to parse its contents by means of some proper script (for example a Python or Perl or PHP script)" => "Puoi scaricare l'intero database di h-node in un unico file xml per analizzarne i contenuti utilizzando uno script appropriato (ad esempio uno script Python o Perl o PHP)", + /*0131*/"Download the h-node hardware database in xml format" => "Scarica il database dell'hardware di h-node in formato xml", + /*0132*/"Database modifications" => "Modifiche al database", + /*0133*/"List of the database modifications carried out by users" => "Lista delle modifiche apportate al database dagli utenti", + /*0134*/"the model" => "il modello", + /*0135*/"has been inserted by" => "è stato inserito da", + /*0136*/"has been updated by" => "è stato modificato da", + /*0137*/"at" => "alle ore", + /*0138*/"last modifications" => "ultime modifiche", + /*0139*/"watch all modifications" => "guarda tutte le modifiche", + /*0140*/"the title" => "il titolo", + /*0141*/"the text of the wiki page" => "il testo della pagina", + /*0142*/"the wiki page has not been found" => "la pagina della wiki non è stata trovata", + /*0143*/"Page not-found" => "Pagina non trovata", + /*0144*/"Insert" => "Inserisci", + /*0145*/"Update" => "Modifica", + /*0146*/"History" => "History", + /*0147*/"Revision" => "Revisione", + /*0148*/"Differences" => "Differenze", + /*0149*/"Insert a new wiki page" => "Inserisci una nuova pagina nella wiki", + /*0150*/"Edit the wiki page" => "Modifica la pagina della wiki", + /*0151*/"Make current" => "Rendi revisione corrente", + /*0152*/"I want to make this revision the current revision" => "Voglio che questa revisione diventi quella corrente", + /*0153*/"Confirm" => "Conferma", + /*0154*/"Make this revision the current revision of the page" => "Rendi questa revisione la revisione corrente della pagina", + /*0155*/"This wiki page has been deleted" => "Questa pagina della wiki è stata cancellata", + /*0156*/"Talk" => "Discussione", + /*0157*/"Talk page of the wiki page" => "Pagina di discussione della pagina della wiki", + /*0158*/"a page with the same title already exists" => "esiste già una pagina con questo titolo", + /*0159*/"title is too long" => "il titolo è troppo lungo", + /*0160*/"the page text is too long" => "il testo della pagina è troppo lungo", + /*0161*/"History of the wiki page" => "History della pagina della wiki", + /*0162*/"Would you like to insert it?" => "Vuoi inserirla?", + /*0163*/"Wiki modifications" => "Modifiche alla Wiki", + /*0164*/"List of the wiki modifications carried out by users" => "Lista delle modifiche apportate alla Wiki dagli utenti", + /*0165*/"list of pages" => "lista delle pagine", + /*0166*/"List of wiki pages" => "Lista delle pagine della wiki", + /*0167*/"This wiki page has been blocked" => "Questa pagina della wiki è stata bloccata", + /*0168*/"unblock the wiki page" => "sblocca la pagina", + /*0169*/"block the wiki page" => "blocca la pagina", + /*0170*/"show the wiki page" => "mostra la pagina della wiki", + /*0171*/"hide the wiki page" => "nascondi la pagina della wiki", + /*0172*/"list of deleted pages" => "lista delle pagine cancellate", + /*0173*/"restore the wiki page" => "ripristina la pagina", + /*0174*/"delete the wiki page" => "cancella la pagina", + /*0175*/"list of blocked pages" => "lista delle pagine bloccate", + /*0176*/"special pages" => "pagine speciali", + /*0177*/"Actions carried out by administrators" => "Azioni compiute dagli amministratori", + /*0178*/"No bluetooth devices found" => "Non è stato trovato alcun dispositivo bluetooth", + /*0179*/"learn how to find it" => "scopri come individuarlo", + /*0180*/"Download the xml file of all the bluetooth devices in the database" => "Scarica il file xml di tutti i dispositivi bluetooth presenti nel database", + /*0181*/"License information" => "Informazioni sulla licenza", + /*0182*/"No acquisition card found" => "Non è stata trovata alcuna scheda d'acquisizione", + /*0183*/"No fingerprint readers found" => "Non è stato trovato alcun lettore di impronte digitali", + /*0184*/"Download the xml file of all the acquisition cards in the database" => "Scarica il file xml di tutte le schede di acquisizione presenti nel database", + /*0185*/"Download the xml file of all the fingerprint readers in the database" => "Scarica il file xml di tutti i lettori di impronte digitali presenti nel database", + /*0186*/"architecture" => "architettura", + /*0187*/"Add here the device name as written on the device itself or on the device box. Add it only if it is different from the model name already inserted inside the above entry. Add the new name in such a way that there is one name per row." => "Aggiungi qui il nome del dispositivo così com'è scritto sul dispositivo stesso o sulla confezione. Aggiungi tale nome solo se è diverso dal nome del modello già inserito nel campo precedente. Aggiungi il nuovo nome in modo che ci sia un nome per riga.", + /*0188*/"Write here the model name obtained by the lspci or lsusb command." => "Scrivi qui il nome del modello ottenuto dal comando lspci o dal comando lsusb.", + /*0189*/"This is the name of the chipset of your device." => "Questo è il nome del chipset del tuo dispositivo.", + /*0190*/"possible other names of the device" => "eventuali altri nomi del dispositivo", + /*0191*/"Description entry preview" => "Anteprima del campo descrizione", + /*0192*/"Page preview" => "Anteprima della pagina", + /*0193*/"This device page has been hidden" => "La pagina di questo dispositivo è stata nascosta", + /*0194*/"restore the device page" => "ripristina la pagina", + /*0195*/"hide the device page" => "nascondi la pagina", + /*0196*/"Download the xml file of all the scanners in the database" => "Scarica il file xml di tutti gli scanner presenti nel database", + /*0197*/"Special pages for administrators" => "Pagine speciali per gli amministratori", + /*0198*/"Special pages for moderators" => "Pagine speciali per i moderatori", + /*0199*/"see the page" => "guarda la pagina", + /*0200*/"hidden device pages" => "pagine nascoste di dispositivi", + /*0201*/"panel" => "pannello", + /*0202*/"List of hidden device pages" => "Lista di pagine nascoste di dispositivi", + /*0203*/"approve the device page" => "approva la pagina del dispositivo", + /*0204*/"This device page has not been approved yet" => "La pagina del dispositivo non è ancora stata approvata", + /*0205*/"Device pages that have to be approved" => "Pagine di dispositivi da approvare", + /*0206*/"The device page has to be approved by an administrator of the website" => "La pagina del dispositivo deve essere approvata da un amministratore del sito", + /*0207*/"permanently delete the device page" => "cancella definitivamente la pagina", + /*0208*/"This page has been permanently deleted by an administrator of the website" => "Questa pagina è stata definitivamente cancellata da un amministratore del sito", + /*0209*/"No ethernet devices found" => "Non è stata trovata alcuna scheda ethernet", + /*0210*/"free BIOS" => "BIOS libero?", + /*0211*/"You are not a registered user or you have not logged in. Your contribution won't be published until an administrator approves it. If you want your contributions to be automatically published please log in or create an account." => "Noi sei un utente registrato oppure non hai eseguito il login. Il tuo contributo non verrà pubblicato finché un amministratore non l'avrà approvato. Se desideri che il tuo contributo sia automaticamente pubblicato per favore esegui il login oppure crea un account.", + /*0212*/"has been inserted by an anonymous user, it has to be approved by an administrator in order to be published" => "è stato inserito da un utente anonimo, deve essere approvato da un amministratore per essere pubblicato", + /*0213*/"you can also subscribe to the feed in order to receive the new modifications that need a moderation" => "puoi anche iscriverti al feed per ricevere le nuove modifiche che richiedono una moderazione", + /*0214*/"you need javascript enabled in order to correctly use the language's tabs (see below)" => "deve abilitare Javascript per usare correttamente le schede della lingua (vedi sotto)", + /*0215*/"yes" => "sì", + /*0216*/"works with 3D acceleration" => "funziona con accelerazione 3D", + /*0217*/"works, but without 3D acceleration" => "funziona, ma senza accelerazione 3D", + /*0218*/"it does not work" => "non funziona", + /*0219*/"Notebooks, netbooks, tablet PC" => "Notebooks, netbooks, tablet PC", + /*0220*/"Wifi cards" => "Schede wifi", + /*0221*/"Video cards" => "Schede video", + /*0222*/"Printers and multifunction" => "Stampanti e multifunzione", + /*0223*/"Scanners" => "Scanner", + /*0224*/"3G cards" => "Schede 3G", + /*0225*/"Sound cards" => "Schede audio", + /*0226*/"Webcams" => "Webcam", + /*0227*/"Bluetooth devices" => "Dispositivi bluetooth", + /*0228*/"TV/Video/FM acquisition cards" => "Schede di acquisizione TV/Video/FM", + /*0229*/"Fingerprint readers" => "Lettori di impronte digitali", + /*0230*/"Ethernet cards" => "Schede ethernet", + /*0231*/"Hardware" => "Hardware", + /*0232*/"Issues" => "Questioni", + /*0233*/"Search" => "Cerca", + /*0234*/"News" => "Notizie", + /*0235*/"Download" => "Scarica", + /*0236*/"Help" => "Aiuto", + /*0237*/"List of" => "Lista di", + /*0238*/"talk messages" => "messaggi", + /*0239*/"History" => "Revisioni", + /*0240*/"Revision" => "Revisione", + /*0241*/"This is an old revision of this page, as edited by" => "Questa è una vecchia revisione della pagina, così come è stata modificata da", + /*0242*/"It may differ significantly from the" => "Può differire significativamente dalla", + /*0243*/"Differences between the revision of" => "Differenze tra la revisione del", + /*0244*/"created by" => "creata da", + /*0245*/"and the revision of" => "e la revisione del", + /*0246*/"Notice: the text in red has been deleted from the previous revision, the text in green has been added in this revision and the text in gray has not been changed." => "Nota: il testo in rosso è stato cancellato dalla revisione precedente, il testo in verde è stato aggiunto in questa revisione e il testo in grigio non è stato cambiato", + /*0247*/"Insert" => "Inserisci", + /*0248*/"Edit" => "Modifica", + /*0249*/"Talk page" => "Pagina di discussione", + /*0250*/"Download the xml file of all the ethernet cards in the database" => "Scarica il file xml di tutte le schede ethernet presenti nel database", + /*0251*/"No SD card readers found" => "Non è stato trovato alcun lettore di schede SD", + /*0252*/"SD card readers" => "Lettori di schede SD", + /*0253*/"Download the xml file of all the SD card readers in the database" => "Scarica il file xml di tutti i lettori di schede SD presenti nel database", + /*0254*/"There are no devices in the database with the vendorid:productid code specified by you." => "Non ci sono dispositivi nel database con il codice vendorid:productid da te specificato", + /*0255*/"Would you like to add it to the database?" => "Vorresti inserirlo nel database?", + /*0256*/"can free operating systems be installed?" => "possono essere installati sistemi operativi liberi?", + /*0257*/"This issue has been deleted" => "Questa questione è stata cancellata", + /*0258*/"hidden for those who are not moderators" => "Nascosto per coloro che non sono moderatori", + /*0259*/"This issue is hidden for all the users that are not moderators" => "Questa questione è nascosta per tutti gli utenti non moderatori", + /*0260*/"hide the issue" => "nascondi la questione", + /*0261*/"show the issue" => "mostra la questione", + /*0262*/"open the issue again" => "apri nuovamente la questione", + /*0263*/"close the issue" => "chiudi la questione", + /*0264*/"This issue is closed" => "Questa questione è stata chiusa", + /*0265*/"This issue is opened" => "Questa questione è aperta", + /*0266*/"does it adopt any techniques to track users?" => "adotta qualche tecnica per tracciare gli utenti?", + /*0267*/"Actions carried out by users" => "Azioni compiute dagli utenti", + /*0268*/"No modems found" => "Non è stato trovato alcun modem", + /*0269*/"Download the xml file of all the modems in the database" => "Scarica il file xml di tutti i modem presenti nel database", + /*0270*/"Modems and ADSL cards" => "Modem e schede ADSL", + /*0271*/"Table of contents" => "Indice dei contenuti", + /*0272*/"by" => "creato da", + /*0273*/"Add a message" => "Aggiungi un messaggio", + /*0274*/"Save" => "Salva", + /*0275*/"Revision of the wiki page" => "Revisione della pagina della wiki", + /*0276*/"Preview" => "Anteprima", + /*0277*/"January" => "gennaio", + /*0278*/"February" => "febbraio", + /*0279*/"March" => "marzo", + /*0280*/"April" => "aprile", + /*0281*/"May" => "maggio", + /*0282*/"June" => "giugno", + /*0283*/"July" => "luglio", + /*0284*/"August" => "agosto", + /*0285*/"September" => "settembre", + /*0286*/"October" => "ottobre", + /*0287*/"November" => "novembre", + /*0288*/"December" => "dicembre", + /*0289*/"not-specified" => "non specificato", + /*0290*/"last-inserted" => "ultimo inserito", + /*0291*/"last inserted" => "ultimo inserito", + /*0292*/"alphabetically" => "alfabeticamente", + /*0293*/"alphabetically-desc" => "alfabeticamente decresc", + /*0294*/"alphabetically desc" => "alfabeticamente decresc", + /*0295*/"undef" => "tutti", + /*0296*/"All" => "Tutti", + /*0297*/"inkjet" => "getto d'inchiostro", + /*0298*/"A-Full" => "A-Piena", + /*0299*/"B-Partial" => "B-Parziale", + /*0300*/"C-None" => "C-Nessuna", + /*0301*/"A-platinum" => "A-platino", + /*0302*/"B-gold" => "B-oro", + /*0303*/"C-silver" => "C-argento", + /*0304*/"D-bronze" => "D-bronzo", + /*0305*/"E-garbage" => "E-spazzatura", + /*0306*/"not specified how it works" => "non è stato specificato come funziona", + /*0307*/"there is no wifi card" => "la scheda wifi non è presente", + /*0308*/"there is no webcam" => "la webcam non è presente", + /*0309*/"it works" => "funziona", + /*0310*/"does_not_work" => "non funziona", + /*0311*/"works_without_3D" => "funziona senza 3D", + /*0312*/"works_with_3D" => "funziona con 3D", + /*0313*/"list of languages" => "elenco delle lingue", + /*0314*/"Choose the language" => "Scegli la lingua", + /*0315*/"back" => "indietro", + /*0316*/"next" => "successivi", + /*0317*/"previous" => "precedenti", + /*0318*/"type" => "tipo", + /*0319*/"contact us" => "contattaci", + /*0320*/"credits" => "crediti", + /*0321*/"desktop version" => "versione desktop", + /*0322*/"RAID adapters" => "Adattatori RAID", + /*0323*/"No RAID adapter found" => "Nessun adattatore RAID è stato trovato", + /*0324*/"Download the xml file of all the RAID adapters in the database" => "Scarica il file xml di tutti gli adattatori RAID presenti nel database", + /*0325*/"No PCMCIA Controller found" => "Nessun controller PCMCIA è stato trovato", + /*0326*/"PCMCIA Controllers" => "Controller PCMCIA", + /*0327*/"Download the xml file of all the PCMCIA Controllers in the database" => "Scarica il file xml di tutti i Controller PCMCIA presenti nel database", + /*0328*/"notebook" => "notebook", + /*0329*/"netbook" => "netbook", + /*0330*/"motherboard" => "scheda madre", + /*0331*/"tablet" => "tablet", + /*0332*/"netbooks" => "netbook", + /*0333*/"Notebooks" => "Notebook", + /*0334*/"tablet PC" => "PC tablet", + /*0335*/"motherboards" => "schede madri", + /*0336*/"Write a comma-separated list of kernel versions" => "Scrivi una lista di kernel separati da virgole", + /*0337*/"Example" => "Esempio", + /*0338*/"free boot firmware?" => "firmware per boot libero?", + /*0339*/"can be installed" => "può essere installato", + /*0340*/"does it have a free boot firmware (BIOS,UEFI,...) ?" => "ha un firmware per il boot (BIOS, UEFI,..) libero?", + /*0341*/"Hello,\n\nyou have registered an account at"=>"Ciao,\n\nhai richiesto l'attivazione di un account al sito", + /*0342*/"with the following data:\nusername: " => "con i seguenti dati:\nusername: ", + /*0343*/"in order to confirm the registration of the new account please follow the link below" => "per confermare la registrazione per favore segui il link sottostante", + /*0344*/"If you don't want to confirm the account registration\nthen wait one hour and your username and e-mail will be deleted from the database" => "Se non vuoi confermare la registrazione dell'account\naspetta un ora e il tuo username e la tua e-mail verranno cancellati dal nostro database", + /*0345*/"If you received this e-mail for error, please simply disregard this message" => "Se hai ricevuto questa e-mail per errore, per favore cancellala", + /*0346*/"account registration" => "registrazione account", + /*0347*/"Host Controllers" => "Host Controller", + /*0348*/"No Host Controller found" => "Non è stato trovato alcun host controller", + /*0349*/"Download the xml file of all the Host Controllers in the database" => "Scarica il file xml di tutti gli Host Controller presenti nel database", + /*0350*/"PCMCIA Controller" => "Controller PCMCIA", + /*0351*/"USB Controller" => "Controller USB", + /*0352*/"Firewire Controller" => "Controller Firewire", + /*0353*/"HECI Controller" => "Controller HECI", + /*0354*/"device type" => "tipo di dispositivo", + /*0355*/"Thanks for your contribution!" => "Grazie per il tuo contributo!", + /*0356*/"does the device prevent installing wifi cards not-approved by the vendor?" => "il dispositivo impedisce l'installazione di schede wifi non approvate dal rivenditore/distributore?", + /*0357*/"see the details inside the description entry" => "guarda i dettagli all'interno del campo descrizione", + /*0358*/"Thanks for helping the h-node project and the free software movement!" => "Grazie per aver aiutato il progetto h-node e il movimento del software libero!", + /*0359*/"You have just inserted a new notebook into the database. Can you please insert its devices separately too? Thanks!" => "Hai appena inserito un nuovo portatile. Potresti gentilmente inserire separatamente anche i suoi dispositivi?", + /*0360*/"insert" => "inserisci", + /*0361*/"List of allowed fully free distributions" => "Lista delle distribuzioni completamente libere ammesse", + /*0362*/"Insert a new distro" => "Inserisci una nuova distribuzione", + /*0363*/"DISTRO-CODE" => "CODICE DISTRIBUZIONE", + ), + 'es' => array + ( + /*0001*/"Search one device in the archive" => "Busque un dispositivo en el archivo", + /*0002*/"hardware type" => "tipo de hardware", + /*0003*/"the model name contains" => "el nombre del modelo contiene", + /*0004*/"List of issues" => "Lista de incidencias", + /*0005*/"TITLE" => "TITULO", + /*0006*/"TOPIC" => "ARGUMENTO", + /*0007*/"OPENED BY" => "ABIERTO POR", + /*0008*/"DATE" => "FECHA", + /*0009*/"REPLIES" => "RESPUESTAS", + /*0010*/"PRIORITY" => "PRIORIDAD", + /*0011*/"STATUS" => "ESTADO", + /*0012*/"You have to" => "Tiene que", + /*0013*/"in order to submit an issue" => "para poder agregar una incidencia", + /*0014*/"in order to add a message" => "para poder agregar un mensaje", + /*0015*/"Description" => "Descripción", + /*0016*/"Messages" => "Mensajes", + /*0017*/"this message has been deleted" => "este mensaje ha sido borrado", + /*0018*/"in order to submit a message to this issue" => "para poder agregar un mensaje a esta incidencia", + /*0019*/"model name" => "nombre del modelo", + /*0020*/"model type" => "tipo de modelo", + /*0021*/"year of commercialization" => "año de comercialización", + /*0022*/"Results of the search" => "Resultado de la búsqueda", + /*0023*/"page list" => "página", + /*0024*/"No devices found" => "No se encontró ningún dispositivo", + /*0025*/"vendor" => "fabricante", + /*0026*/"compatibility" => "compatibilidad", + /*0027*/"year" => "año", + /*0028*/"subtype" => "subtipo", + /*0029*/"sort by" => "ordenar por", + /*0030*/"interface" => "interfaz", + /*0031*/"does it work?" => "¿funciona?", + /*0032*/"preview of the message" => "vista previa del mensaje", + /*0033*/"preview of the new issue message" => "vista previa del mensaje de la incidencia", + /*0034*/"Add a message to this issue" => "Agregue un mensaje a esta incidencia", + /*0035*/"Add a new issue" => "Agregue una nueva incidencia", + /*0036*/"MESSAGE" => "MENSAJE", + /*0037*/"there are no messages" => "no hay mensajes", + /*0038*/"No notebooks found" => "No se encontró ningún computador portátil", + /*0039*/"subtype (notebook, netbook, tablet)" => "subtipo (portátil, subportátil, tablet)", + /*0040*/"compatibility with free software" => "compatibilidad con software libre", + /*0041*/"view the other specifications" => "ver otras especificaciones", + /*0042*/"model" => "modelo", + /*0043*/"model id" => "id del modelo", + /*0044*/"tested on" => "probado con", + /*0045*/"tested with the following kernel libre" => "probado con el siguiente kernel libre", + /*0046*/"video card model" => "modelo de tarjeta de video", + /*0047*/"wifi model" => "modelo de tarjeta de red inalámbrica", + /*0048*/"GNU/Linux distribution used for the test" => "distribución GNU/Linux usada para la prueba", + /*0049*/"does the video card work?" => "¿funciona la tarjeta de video?", + /*0050*/"does the wifi card work?" => "¿funciona la tarjeta de red inalámbrica?", + /*0051*/"Description: (write here all the useful information)" => "Descripción (escriba aquí toda la información útil)", + /*0052*/"discover all the wiki tags" => "mostrar todas las etiquetas del wiki", + /*0053*/"Fields marked with * are mandatory" => "Campos marcados con * son obligatorios", + /*0054*/"No printers found" => "No se encontró ninguna impresora", + /*0055*/"interface" => "interfaz", + /*0056*/"VendorID:ProductID code of the device" => "código VendorID:ProductID del dispositivo", + /*0057*/"free driver used" => "driver libre usado", + /*0058*/"set not-specified if not sure" => "seleccione not-specified si no esta seguro/a", + /*0059*/"see the help page or leave blank if you are not sure" => "vea la página de ayuda o deje vacío si no esta seguro/a", + /*0060*/"No scanners found" => "No se encontró ningún escáner", + /*0061*/"No video cards found" => "No se encontró ninguna tarjeta de video", + /*0062*/"how does it work with free software?" => "¿como funciona con software libre?", + /*0063*/"No wifi cards found" => "No se encontró ninguna tarjeta de red inalámbrica", + /*0064*/"does it work with free software?" => "¿funciona con software libre?", + /*0065*/"differences in the entry" => "diferencias en el campo", + /*0066*/"No 3G cards found" => "No se encontró ninguna tarjeta 3G", + /*0067*/"Please specify in the below description entry the Internet Service Provider (ISP) and the country where the service is provided" => "Por favor especifique en el campo de descripción inferior el Proveedor de Internet (ISP) y el país donde se provee el servicio", + /*0068*/"webcam model" => "modelo de cámara web", + /*0069*/"does it have a free BIOS?" => "¿tiene BIOS libre?", + /*0070*/"does the webcam work?" => "¿funciona la cámara web?", + /*0071*/"Current revision" => "Revisión actual", + /*0072*/"Hello" => "Hola", + /*0073*/"Your" => "Su", + /*0074*/"control panel" => "panel de control", + /*0075*/"create new account" => "crear una cuenta", + /*0076*/"request new password" => "solicitar nueva contraseña", + /*0077*/"website statistics" => "estadísticas del sito", + /*0078*/"hardware in the database" => "hardware en la base de datos", + /*0079*/"users logged" => "usuarios en línea", + /*0080*/"Watch your public profile" => "Ver su perfil público", + /*0081*/"Edit your profile" => "Editar su perfil", + /*0082*/"Change your e-mail address" => "Cambiar su dirección de correo electrónico", + /*0083*/"Change your password" => "Cambiar su contraseña", + /*0084*/"Delete your account" => "Borrar su cuenta", + /*0085*/"choose the username" => "elija su nombre de usuario", + /*0086*/"characters allowed" => "caracteres permitidos", + /*0087*/"your e-mail address" => "su dirección de correo electrónico", + /*0088*/"necessary to confirm the registration" => "necesario para confirmar el registro", + /*0089*/"choose the password" => "elija la contraseña", + /*0090*/"confirm the password" => "confirme la contraseña", + /*0091*/"write the code above" => "escriba el código mostrado en la parte superior", + /*0092*/"write your username" => "escriba su nombre de usuario", + /*0093*/"Actions carried out by moderators" => "Acciones efectuadas por los moderadores", + /*0094*/"meet" => "conoce a", + /*0095*/"Public profile of" => "Perfil público de", + /*0096*/"See all the contributions of" => "Ver todas las contribuciones de", + /*0097*/"My website" => "Mi sitio web", + /*0098*/"My real name" => "Mi nombre real", + /*0099*/"My e-mail address" => "Mi dirección de correo electrónico", + /*0100*/"I'm from" => "Soy de", + /*0101*/"Birthdate" => "Fecha de nacimiento", + /*0102*/"My favourite distribution" => "Mi distribución favorita", + /*0103*/"Free software projects I'm working on" => "Proyectos de Software Libre en los que colaboro", + /*0104*/"My description" => "Mi descripción", + /*0105*/"contributions" => "contribuciones", + /*0106*/"contributions of" => "contribuciones de", + /*0107*/"No sound cards found" => "No se encontró ninguna tarjeta de audio", + /*0108*/"LAST UPDATE" => "ÚLTIMA MODIFICACIÓN", + /*0109*/"search by" => "buscar por", + /*0110*/"analyze the output of the lspci command" => "analice la salida de la orden lscpi", + /*0111*/"paste the output of the lspci command" => "pegue la salida de la orden lspci", + /*0112*/"works, but without 3D acceleration" => "funciona, pero sin aceleración 3D", + /*0113*/"the text submitted by you does not seem to be the lspci -vmmnn output. Please check the text and try again" => "el texto insertado no parece ser la salida de la orden lspci -vmmnn. Por favor revise el texto e intente nuevamente", + /*0114*/"Search form" => "Formulario de búsqueda", + /*0115*/"write here the output of lspci -vmmnn" => "escriba aquí la salida de la orden lspci -vmmnn", + /*0116*/"The following devices has been found in the database" => "Los siguientes dispositivos han sido encontrados en la base de datos", + /*0117*/"yes" => "si", + /*0118*/"no" => "no", + /*0119*/"The following devices has not been found in the database" => "Los siguientes dispositivos no han sido encontrados en la base de datos", + /*0120*/"can you please insert them?" => "¿podría insertarlos?", + /*0121*/"No webcams found" => "No se encontró ninguna cámara web", + /*0122*/"Download the xml file of all the database" => "Descargue el archivo xml de toda la base de datos", + /*0123*/"Download the xml file of all the notebooks in the database" => "Descargue el archivo xml de todos los computadores portátiles presentes en la base de datos", + /*0124*/"Download the xml file of all the wifi cards in the database" => "Descargue el archivo xml de todas las tarjetas de red inalámbrica presentes en la base de datos", + /*0125*/"Download the xml file of all the video cards in the database" => "Descargue el archivo xml de todas las tarjetas de video presentes en la base de datos", + /*0126*/"Download the xml file of all the printers in the database" => "Descargue el archivo xml de todas las impresoras presentes en la base de datos", + /*0127*/"Download the xml file of all the 3G cards in the database" => "Descargue el archivo xml de todas las tarjetas 3G presentes en la base de datos", + /*0128*/"Download the xml file of all the sound cards in the database" => "Descargue el archivo xml de todas las tarjetas de audio presentes en la base de datos", + /*0129*/"Download the xml file of all the webcams in the database" => "Descargue el archivo xml de todas las cámaras web presentes en la base de datos", + /*0130*/"You can download all the h-node database in one unique xml file in order to parse its contents by means of some proper script (for example a Python or Perl or PHP script)" => "Puede descargar toda la base de datos de h-node en un archivo xml único para poder analizar su contenido por medio de otro script apropiado (por ejemplo un script en Python, Perl o PHP)", + /*0131*/"Download the h-node hardware database in xml format" => "Descargue la base de datos de h-node en formato xml", + /*0132*/"Database modifications" => "Modificaciones a la base de datos", + /*0133*/"List of the database modifications carried out by users" => "Lista de modificaciones realizada por los usuarios", + /*0134*/"the model" => "el modelo", + /*0135*/"has been inserted by" => "ha sido agregado por", + /*0136*/"has been updated by" => "ha sido modificado por", + /*0137*/"at" => "en", + /*0138*/"last modifications" => "últimas modificaciones", + /*0139*/"watch all modifications" => "ver todas las modificaciones", + /*0140*/"the title" => "el titulo", + /*0141*/"the text of the wiki page" => "el texto de la página", + /*0142*/"the wiki page has not been found" => "la página del wiki no ha sido encontrada", + /*0143*/"Page not-found" => "Página no encontrada", + /*0144*/"Insert" => "Agregar", + /*0145*/"Update" => "Actualizar", + /*0146*/"History" => "Historial", + /*0147*/"Revision" => "Revisión", + /*0148*/"Differences" => "Diferencias", + /*0149*/"Insert a new wiki page" => "Agregar una página nueva al wiki", + /*0150*/"Edit the wiki page" => "Editar la página del wiki", + /*0151*/"Make current" => "Hacer revisión actual", + /*0152*/"I want to make this revision the current revision" => "Quiero hacer ésta revisión la revisión actual", + /*0153*/"Confirm" => "Confirmar", + /*0154*/"Make this revision the current revision of the page" => "Hacer esta revisión la revisión actual de la página", + /*0155*/"This wiki page has been deleted" => "Ésta página del wiki ha sido borrada", + /*0156*/"Talk" => "Discusión", + /*0157*/"Talk page of the wiki page" => "Página de discusión de la página del wiki", + /*0158*/"a page with the same title already exists" => "una página con el mismo titulo ya existe", + /*0159*/"title is too long" => "el titulo es demasiado largo", + /*0160*/"the page text is too long" => "el texto de la página es demasiado largo", + /*0161*/"History of the wiki page" => "Historial de la página del wiki", + /*0162*/"Would you like to insert it?" => "¿Le gustaría agregarlo?", + /*0163*/"Wiki modifications" => "Modificaciones al wiki", + /*0164*/"List of the wiki modifications carried out by users" => "Lista de modificaciones aportadas al wiki por los usuarios", + /*0165*/"list of pages" => "lista de páginas", + /*0166*/"List of wiki pages" => "Lista de las páginas del wiki", + /*0167*/"This wiki page has been blocked" => "Ésta página del wiki ha sido bloqueada", + /*0168*/"unblock the wiki page" => "desbloquear la página", + /*0169*/"block the wiki page" => "bloquear la página", + /*0170*/"show the wiki page" => "mostrar la página del wiki", + /*0171*/"hide the wiki page" => "esconder la página del wiki", + /*0172*/"list of deleted pages" => "lista de las páginas borradas", + /*0173*/"restore the wiki page" => "restaurar la página", + /*0174*/"delete the wiki page" => "borrar la página", + /*0175*/"list of blocked pages" => "lista de las páginas bloqueadas", + /*0176*/"special pages" => "páginas especiales", + /*0177*/"Actions carried out by administrators" => "Acciones realizadas por administradores", + /*0178*/"No bluetooth devices found" => "No se encontró ningún dispositivo bluetooth", + /*0179*/"learn how to find it" => "aprenda como encontrarlo", + /*0180*/"Download the xml file of all the bluetooth devices in the database" => "Descargue el archivo xml de todas los dispositivos bluetooth presentes en la base de datos", + /*0181*/"License information" => "Información de licencia", + /*0182*/"No acquisition card found" => "No se encontró ninguna tarjeta de adquisición", + /*0183*/"No fingerprint readers found" => "No se encontró ningún lector de huellas digitales", + /*0184*/"Download the xml file of all the acquisition cards in the database" => "Descargue el archivo xml de todas las tarjetas de adquisición presentes en la base de datos", + /*0185*/"Download the xml file of all the fingerprint readers in the database" => "Descargue el archivo xml de todas los lectores de huellas digitales presentes en la base de datos", + /*0186*/"architecture" => "arquitectura", + /*0187*/"Add here the device name as written on the device itself or on the device box. Add it only if it is different from the model name already inserted inside the above entry. Add the new name in such a way that there is one name per row." => "Inserte aquí el nombre del dispositivo como esta escrito en el dispositivo o la caja del dispositivo. Inserte solo y si es diferente del model name que ya se encuentra dentro de la entrada superior. Inserte de manera que exista un nombre diferente en cada linea", + /*0188*/"Write here the model name obtained by the lspci or lsusb command." => "Escriba aquí el nombre del modelo obtenido por la orden lspci o lsusb.", + /*0189*/"This is the name of the chipset of your device." => "Este es el nombre del chipset de tu dispositivo.", + /*0190*/"possible other names of the device" => "otros posibles nombres del dispositivo", + /*0191*/"Description entry preview" => "Vista previa de la descripción", + /*0192*/"Page preview" => "Vista previa", + /*0193*/"This device page has been hidden" => "La página del dispositivo ha sido escondida", + /*0194*/"restore the device page" => "restaure la página del dispositivo", + /*0195*/"hide the device page" => "esconda la página del dispositivo", + /*0196*/"Download the xml file of all the scanners in the database" => "Descargue el archivo xml de todos los escáneres presentes en la base de datos", + /*0197*/"Special pages for administrators" => "Páginas especiales para administradores", + /*0198*/"Special pages for moderators" => "Páginas especiales para moderadores", + /*0199*/"see the page" => "ver la página", + /*0200*/"hidden device pages" => "página escondida del dispositivo", + /*0201*/"panel" => "panel", + /*0202*/"List of hidden device pages" => "Lista de páginas de dispositivos escondidos", + /*0203*/"approve the device page" => "apruebe la página del dispositivo", + /*0204*/"This device page has not been approved yet" => "Esta página del dispositivo aun no ha sido aprobada", + /*0205*/"Device pages that have to be approved" => "Páginas de dispositivos para ser aprobadas", + /*0206*/"The device page has to be approved by an administrator of the website" => "La página del dispositivo tiene que ser aprobada por un administrador del sito", + /*0207*/"permanently delete the device page" => "eliminar la página del dispositivo permanentemente", + /*0208*/"This page has been permanently deleted by an administrator of the website" => "Esta página ha sido permanentemente eliminada por un administrador del sitio", + /*0209*/"No ethernet devices found" => "No se encontró ningún dispositivo ethernet", + /*0210*/"free BIOS" => "¿BIOS libre?", + /*0211*/"You are not a registered user or you have not logged in. Your contribution won't be published until an administrator approves it. If you want your contributions to be automatically published please log in or create an account." => "No es un usuario registrado o no ha iniciado sesión. Su contribución no será publicada hasta que un administrador la apruebe. Si quiere que sus contribuciones sean publicadas automáticamente por favor inicie sesión o cree una cuenta.", + /*0212*/"has been inserted by an anonymous user, it has to be approved by an administrator in order to be published" => "ha sido agregado por un usuario anónimo, tiene que ser aprobado por un administrador para ser publicado", + /*0213*/"you can also subscribe to the feed in order to receive the new modifications that need a moderation" => "puede también suscribirse al feed para recibir las nuevas modificaciones que necesitan moderación", + /*0214*/"you need javascript enabled in order to correctly use the language's tabs (see below)" => "necesita javascript habilitado para poder usar correctamente las pestañas de idioma (vea debajo)", + /*0215*/"yes" => "si", + /*0216*/"works with 3D acceleration" => "funciona con aceleración 3D", + /*0217*/"works, but without 3D acceleration" => "funciona, pero sin aceleración 3D", + /*0218*/"it does not work" => "no funciona", + /*0219*/"Notebooks, netbooks, tablet PC" => "Computadores portátiles, subportátiles, tablet PC", + /*0220*/"Wifi cards" => "Tarjetas de red inalámbrica", + /*0221*/"Video cards" => "Tarjetas de video", + /*0222*/"Printers and multifunction" => "Impresoras y multifuncionales", + /*0223*/"Scanners" => "Escáners", + /*0224*/"3G cards" => "Tarjetas 3G", + /*0225*/"Sound cards" => "Tarjetas de audio", + /*0226*/"Webcams" => "Cámaras web", + /*0227*/"Bluetooth devices" => "Dispositivos bluetooth", + /*0228*/"TV/Video/FM acquisition cards" => "Tarjetas de adquisición TV/Video/FM", + /*0229*/"Fingerprint readers" => "Lectores de huellas digitales", + /*0230*/"Ethernet cards" => "Tarjetas de ethernet", + /*0231*/"Hardware" => "Hardware", + /*0232*/"Issues" => "Incidencias", + /*0233*/"Search" => "Búsqueda", + /*0234*/"News" => "Noticias", + /*0235*/"Download" => "Descarga", + /*0236*/"Help" => "Ayuda", + /*0237*/"List of" => "Lista de", + /*0238*/"talk messages" => "mensajes", + /*0239*/"History" => "Historial", + /*0240*/"Revision" => "Revisión", + /*0241*/"This is an old revision of this page, as edited by" => "Esta es una revisión anterior de esta página, editada por", + /*0242*/"It may differ significantly from the" => "Puede diferir significantemente de la", + /*0243*/"Differences between the revision of" => "Diferencias entre las revisiones de", + /*0244*/"created by" => "creado por", + /*0245*/"and the revision of" => "y la revisión de", + /*0246*/"Notice: the text in red has been deleted from the previous revision, the text in green has been added in this revision and the text in gray has not been changed." => "Nota: el texto en rojo ha sido borrado de la revisión anterior, el texto en verde ha sido agregado en esta revisión y el texto en gris no ha sido cambiado", + /*0247*/"Insert" => "Insertar", + /*0248*/"Edit" => "Editar", + /*0249*/"Talk page" => "Página de discusión", + /*0250*/"Download the xml file of all the ethernet cards in the database" => "Descargue el archivo xml de todas las tarjetas de ethernet presentes en la base de datos", + /*0251*/"No SD card readers found" => "No se encontró ningún lector de tarjetas SD", + /*0252*/"SD card readers" => "Lectores de tarjetas SD", + /*0253*/"Download the xml file of all the SD card readers in the database" => "Descargue el archivo xml de todos los lectores de tarjetas SD presentes en la base de datos", + /*0254*/"There are no devices in the database with the vendorid:productid code specified by you." => "No hay dispositivos en la base de datos con el código vendorid:productid que ha especificado", + /*0255*/"Would you like to add it to the database?" => "¿Le gustaría agregarlo a la base de datos?", + /*0256*/"can free operating systems be installed?" => "¿puede ser instalado un sistema libre?", + /*0257*/"This issue has been deleted" => "Esta incidencia ha sido eliminada", + /*0258*/"hidden for those who are not moderators" => "Oculta para aquellos que no son moderadores", + /*0259*/"This issue is hidden for all the users that are not moderators" => "Esta incidencia está oculta para todos los usuarios que no son moderadores", + /*0260*/"hide the issue" => "esconder la incidencia", + /*0261*/"show the issue" => "mostrar la incidencia", + /*0262*/"open the issue again" => "abrir nuevamente la incidencia", + /*0263*/"close the issue" => "cerrar la incidencia", + /*0264*/"This issue is closed" => "Esta incidencia está cerrada", + /*0265*/"This issue is opened" => "Esta incidencia está abierta", + /*0266*/"does it adopt any techniques to track users?" => "¿adopta alguna técnica para rastrear a los usuarios?", + /*0267*/"Actions carried out by users" => "Acciones realizadas por usuarios", + /*0268*/"No modems found" => "No se encontró ningún modem", + /*0269*/"Download the xml file of all the modems in the database" => "Descargue el archivo xml de todos los modems presentes en la base de datos", + /*0270*/"Modems and ADSL cards" => "Modems y tarjetas ADSL", + /*0271*/"Table of contents" => "Tabla de contenido", + /*0272*/"by" => "creado por", + /*0273*/"Add a message" => "Agregar un mensaje", + /*0274*/"Save" => "Guardar", + /*0275*/"Revision of the wiki page" => "Revisión de la página del wiki", + /*0276*/"Preview" => "Vista previa", + /*0277*/"January" => "Enero", + /*0278*/"February" => "Febrero", + /*0279*/"March" => "Marzo", + /*0280*/"April" => "Abril", + /*0281*/"May" => "Mayo", + /*0282*/"June" => "Junio", + /*0283*/"July" => "Julio", + /*0284*/"August" => "Agosto", + /*0285*/"September" => "Septiembre", + /*0286*/"October" => "Octubre", + /*0287*/"November" => "Noviembre", + /*0288*/"December" => "Diciembre", + /*0289*/"not-specified" => "no especificado", + /*0290*/"last-inserted" => "último insertado", + /*0291*/"last inserted" => "último insertado", + /*0292*/"alphabetically" => "alfabéticamente", + /*0293*/"alphabetically-desc" => "alfabéticamente descendiente", + /*0294*/"alphabetically desc" => "alfabéticamente descendiente", + /*0295*/"undef" => "sin definir", + /*0296*/"All" => "Todo", + /*0297*/"inkjet" => "inyección de tinta", + /*0298*/"A-Full" => "A-Completa", + /*0299*/"B-Partial" => "B-Parcial", + /*0300*/"C-None" => "C-Ninguna", + /*0301*/"A-platinum" => "A-platino", + /*0302*/"B-gold" => "B-oro", + /*0303*/"C-silver" => "C-plata", + /*0304*/"D-bronze" => "D-bronce", + /*0305*/"E-garbage" => "E-basura", + /*0306*/"not specified how it works" => "sin especificar como funciona", + /*0307*/"there is no wifi card" => "no hay tarjeta de red inalámbrica presente", + /*0308*/"there is no webcam" => "no hay cámara web presente", + /*0309*/"it works" => "funciona", + /*0310*/"does_not_work" => "no funciona", + /*0311*/"works_without_3D" => "funciona sin 3D", + /*0312*/"works_with_3D" => "funciona con 3D", + /*0313*/"list of languages" => "lista de idiomas", + /*0314*/"Choose the language" => "Seleccione un idioma", + /*0315*/"back" => "regresar", + /*0316*/"next" => "siguiente", + /*0317*/"previous" => "anterior", + /*0318*/"type" => "tipo", + /*0319*/"contact us" => "contacto", + /*0320*/"credits" => "créditos", + /*0321*/"desktop version" => "versión de escritorio", + /*0322*/"RAID adapters" => "Adaptador RAID", + /*0323*/"No RAID adapter found" => "No se encontró ningún adaptador RAID", + /*0324*/"Download the xml file of all the RAID adapters in the database" => "Descargue el archivo xml de todos los adaptadores RAID presentes en la base de datos", + /*0325*/"No PCMCIA Controller found" => "No se encontró ningún controlador PCMCIA", + /*0326*/"PCMCIA Controllers" => "Controlador PCMCIA", + /*0327*/"Download the xml file of all the PCMCIA Controllers in the database" => "Descargue el archivo xml de todos los controladores PCMCIA presentes en la base de datos", + /*0328*/"notebook" => "computadores portátiles", + /*0329*/"netbook" => "netbook", + /*0330*/"motherboard" => "tarjeta madre", + /*0331*/"tablet" => "tablet", + /*0332*/"netbooks" => "netbook", + /*0333*/"Notebooks" => "Computador portátil", + /*0334*/"tablet PC" => "PC tablet", + /*0335*/"motherboards" => "tarjetas madre", + /*0336*/"Write a comma-separated list of kernel versions" => "Escriba una lista de núcleos separada por comas", + /*0337*/"Example" => "Ejemplo", + /*0338*/"free boot firmware?" => "¿firmware boot libre?", + /*0339*/"can be installed" => "puede ser instalado", + /*0340*/"does it have a free boot firmware (BIOS,UEFI,...) ?" => "¿tiene un firmware boot (BIOS, UEFI,..) libre?", + /*0341*/"Hello,\n\nyou have registered an account at"=>"Hola,\n\nha registrado una cuenta en el sitio", + /*0342*/"with the following data:\nusername: " => "con la siguiente información:\nusername: ", + /*0343*/"in order to confirm the registration of the new account please follow the link below" => "para poder confirmar el registro de la nueva cuenta por favor siga el siguiente enlace", + /*0344*/"If you don't want to confirm the account registration\nthen wait one hour and your username and e-mail will be deleted from the database" => "Si no quiere confirmar el registro de la cuenta\nentonces espere una hora, su usuario y correo electrónico serán borrados de la base de datos", + /*0345*/"If you received this e-mail for error, please simply disregard this message" => "Si recibió este correo electrónico por error, por favor haga caso omiso del mensaje", + /*0346*/"account registration" => "registro de cuenta", + /*0347*/"Host Controllers" => "Controlador de Host", + /*0348*/"No Host Controller found" => "No se encontró ningún controlador de host", + /*0349*/"Download the xml file of all the Host Controllers in the database" => "Descargue el archivo xml de todos los controladores de host presentes en la base de datos", + /*0350*/"PCMCIA Controller" => "Controlador PCMCIA", + /*0351*/"USB Controller" => "Controlador USB", + /*0352*/"Firewire Controller" => "Controlador Firewire", + /*0353*/"HECI Controller" => "Controlador HECI", + /*0354*/"device type" => "tipo de dispositivo", + /*0355*/"Thanks for your contribution!" => "¡Gracias por su contribución!", + /*0356*/"does the device prevent installing wifi cards not-approved by the vendor?" => "¿el dispositivo evita la instalación de tarjetas inalámbricas no aprobadas por el distribuidor?", + /*0357*/"see the details inside the description entry" => "vea los detalles dentro del campo de descripción", + /*0358*/"Thanks for helping the h-node project and the free software movement!" => "¡Gracias por ayudar al proyecto h-node y al movimiento de software libre!", + /*0359*/"You have just inserted a new notebook into the database. Can you please insert its devices separately too? Thanks!" => "Ha agregado un nuevo computador portátil dentro de la base de datos. ¿Podría agregar los dispositivos por separado también? ¡Gracias!", + /*0360*/"insert" => "insertar", + /*0361*/"List of allowed fully free distributions" => "Lista de distribuciones completamente libres permitidas", + /*0362*/"Insert a new distro" => "Inserte una nueva distribución", + /*0363*/"DISTRO-CODE" => "CÓDIGO DE DISTRIBUCIÓN", + /*0364*/"Login form:" => "Inicio de sesión:", + /*0365*/"username" => "usuario", + /*0366*/"password" => "contraseña", + /*0367*/"login" => "entrar", + /*0367*/"JavaScript license information" => "información de licencia JavaScript", + ), + 'fr' => array + ( + /*0001*/"Search one device in the archive" => "Chercher un périphérique dans les archives", + /*0002*/"hardware type" => "type de matériel", + /*0003*/"the model name contains" => "le nom du modèle contient", + /*0004*/"List of issues" => "Liste des problèmes", + /*0005*/"TITLE" => "TITRE", + /*0006*/"TOPIC" => "SUJET", + /*0007*/"OPENED BY" => "OUVERT PAR", + /*0008*/"DATE" => "DATE", + /*0009*/"REPLIES" => "REPONSES", + /*0010*/"PRIORITY" => "PRIORITE", + /*0011*/"STATUS" => "STATUS", + /*0012*/"You have to" => "Vous devez", + /*0013*/"in order to submit an issue" => "pour pouvoir soumettre un problème", + /*0014*/"in order to add a message" => "pour pouvoir envoyer un message", + /*0015*/"Description" => "Description", + /*0016*/"Messages" => "Messages", + /*0017*/"this message has been deleted" => "ce message a été supprimé", + /*0018*/"in order to submit a message to this issue" => "pour pouvoir envoyer un message concernant ce problème", + /*0019*/"model name" => "nom de modèle", + /*0020*/"model type" => "type de modèle", + /*0021*/"year of commercialization" => "année de commercialisation", + /*0022*/"Results of the search" => "Resultat de la recherche", + /*0023*/"page list" => "liste de page", + /*0024*/"No devices found" => "Aucun périphérique trouvé", + /*0025*/"vendor" => "vendeur", + /*0026*/"compatibility" => "compatibilitée", + /*0027*/"year" => "année", + /*0028*/"subtype" => "sous-type", + /*0029*/"sort by" => "afficher par", + /*0030*/"interface" => "interface", + /*0031*/"does it work?" => "cela fonctionne-t-il ?", + /*0032*/"preview of the message" => "prévisualisation du message", + /*0033*/"preview of the new issue message" => "prévisualisation du message du nouveau problème", + /*0034*/"Add a message to this issue" => "Ajouter un message à ce problème", + /*0035*/"Add a new issue" => "Ajouter un nouveau problème", + /*0036*/"MESSAGE" => "MESSAGE", + /*0037*/"there are no messages" => "Il n'y a pas de messages", + /*0038*/"No notebooks found" => "Aucun notebook trouvé", + /*0039*/"subtype (notebook, netbook, tablet)" => "sous-type (notebook, netbook, tablet)", + /*0040*/"compatibility with free software" => "compatibilitée avec le logiciel libre", + /*0041*/"view the other specifications" => "voir les autres spécifications", + /*0042*/"model" => "modèle", + /*0043*/"model id" => "ID du modèle", + /*0044*/"tested on" => "testé sur", + /*0045*/"tested with the following kernel libre" => "testé avec le kernel libre suivant", + /*0046*/"video card model" => "modèle de carte vidéo", + /*0047*/"wifi model" => "modèle de carte wifi", + /*0048*/"GNU/Linux distribution used for the test" => "Distribution GNU/Linux utilisée pour le test", + /*0049*/"does the video card work?" => "La carte graphique fonctionne-t-elle ?", + /*0050*/"does the wifi card work?" => "La carte wifi fonctionne-t-elle ?", + /*0051*/"Description: (write here all the useful information)" => "Description (écrivez ici toutes les informations utiles)", + /*0052*/"discover all the wiki tags" => "voir tous les tags wiki", + /*0053*/"Fields marked with * are mandatory" => "Les champs marqués avec * sont obligatoires", + /*0054*/"No printers found" => "Aucun imprimante trouvée", + /*0055*/"interface" => "interface", + /*0056*/"VendorID:ProductID code of the device" => "VendorID:ProductID du périphérique", + /*0057*/"free driver used" => "pilote libre utilisé", + /*0058*/"set not-specified if not sure" => "définir comme non-spécifié en cas de doute", + /*0059*/"see the help page or leave blank if you are not sure" => "voir la page d'aide ou laisser blanc si vous n'êtes pas sur(e)", + /*0060*/"No scanners found" => "Aucun scanneur trouvé", + /*0061*/"No video cards found" => "Aucun carte graphique trouvée", + /*0062*/"how does it work with free software?" => "A quel point cela fonctionne-t-il avec du logiciel libre ?", + /*0063*/"No wifi cards found" => "Aucune carte wifi trouvée", + /*0064*/"does it work with free software?" => "cela fonctionne-t-il avec le logiciel libre ?", + /*0065*/"differences in the entry" => "differences dans l'entrée", + /*0066*/"No 3G cards found" => "Aucune carte 3G trouvée", + /*0067*/"Please specify in the below description entry the Internet Service Provider (ISP) and the country where the service is provided" => "Merci de préciser dans cette description le fournisseur d'accès et le pays dans lequel le service est fourni", + /*0068*/"webcam model" => "modèle de webcam", + /*0069*/"does it have a free BIOS?" => "a-t-il un BIOS libre ?", + /*0070*/"does the webcam work?" => "la webcam fonctionne t'elle ?", + /*0071*/"Current revision" => "Révision actuelle", + /*0072*/"Hello" => "Bonjour", + /*0073*/"Your" => "Votre", + /*0074*/"control panel" => "panneau de contrôle", + /*0075*/"create new account" => "créer un compte", + /*0076*/"request new password" => "demander un nouveau mot de passe", + /*0077*/"website statistics" => "statistiques du site", + /*0078*/"hardware in the database" => "hardware dans la base de données", + /*0079*/"users logged" => "utilisateurs connectés", + /*0080*/"Watch your public profile" => "Voir votre profil public", + /*0081*/"Edit your profile" => "Éditer votre profil", + /*0082*/"Change your e-mail address" => "Changer votre adresse e-mail", + /*0083*/"Change your password" => "Changer votre mot de passe", + /*0084*/"Delete your account" => "Supprimer votre compte", + /*0085*/"choose the username" => "choisissez le nom d'utilisateur", + /*0086*/"characters allowed" => "caractères autorisés", + /*0087*/"your e-mail address" => "votre adresse e-mail", + /*0088*/"necessary to confirm the registration" => "nécessaire pour confirmer la création", + /*0089*/"choose the password" => "choisissez le mot de passe", + /*0090*/"confirm the password" => "confirmez le mot de passe", + /*0091*/"write the code above" => "écrivez le code ci-dessous", + /*0092*/"write your username" => "écrivez votre nom d'utilisateur", + /*0093*/"Actions carried out by moderators" => "Actions gérées par les modérateurs", + /*0094*/"meet" => "rencontrer", + /*0095*/"Public profile of" => "Profil public de", + /*0096*/"See all the contributions of" => "Voir toute les distributions de", + /*0097*/"My website" => "Mon site web", + /*0098*/"My real name" => "Mon vrai nom", + /*0099*/"My e-mail address" => "Mon adresse e-mail", + /*0100*/"I'm from" => "Je viens de", + /*0101*/"Birthdate" => "Date de naissance", + /*0102*/"My favourite distribution" => "Ma distribution favorite", + /*0103*/"Free software projects I'm working on" => "Les projets de logiciel libre sur lesquels je travaille", + /*0104*/"My description" => "Ma description", + /*0105*/"contributions" => "contributions", + /*0106*/"contributions of" => "contributions de", + /*0107*/"No sound cards found" => "Aucune carte son trouvée", + /*0108*/"LAST UPDATE" => "DERNIERE MISE A JOUR", + /*0109*/"search by" => "cherchez par", + /*0110*/"analyze the output of the lspci command" => "analisez le retour de la commande lspci", + /*0111*/"paste the output of the lspci command" => "copiez le retour de la commande lspci", + /*0112*/"works, but without 3D acceleration" => "fonctionne, mais sans accélération 3D", + /*0113*/"the text submitted by you does not seem to be the lspci -vmmnn output. Please check the text and try again" => "le texte que vous avez soumis n'a pas l'air d'être le résultat de la commande lspci -vmmnn, merci de vérifier", + /*0114*/"Search form" => "Formulaire de recherche", + /*0115*/"write here the output of lspci -vmmnn" => "écrivez ici le retour de la commande lspci -vmmnn", + /*0116*/"The following devices has been found in the database" => "Ces périphériques ont été trouvés dans la base de données", + /*0117*/"yes" => "oui", + /*0118*/"no" => "non", + /*0119*/"The following devices has not been found in the database" => "Ces périphériques n'ont pas été trouvés dans la base de données", + /*0120*/"can you please insert them?" => "pouvez vous les insérer ?", + /*0121*/"No webcams found" => "Aucune webcam trouvée", + /*0122*/"Download the xml file of all the database" => "Téléchargez le fichier XML de la base de données complètes", + /*0123*/"Download the xml file of all the notebooks in the database" => "Téléchargez le fichier XML de tout les notebooks dans la base de données", + /*0124*/"Download the xml file of all the wifi cards in the database" => "Téléchargez le fichier XML de toute les cartes wifi dans la base de données", + /*0125*/"Download the xml file of all the video cards in the database" => "Téléchargez le fichier XML de toute les cartes graphiques dans la base de données", + /*0126*/"Download the xml file of all the printers in the database" => "Téléchargez le fichier XML de toute les imprimantes dans la base de données", + /*0127*/"Download the xml file of all the 3G cards in the database" => "Téléchargez le fichier XML de toute les cartes 3G dans la base de données", + /*0128*/"Download the xml file of all the sound cards in the database" => "Téléchargez le fichier XML de toutes les cartes son dans la base de données", + /*0129*/"Download the xml file of all the webcams in the database" => "Téléchargez le fichier XML de toutes les webcams dans la base de données", + /*0130*/"You can download all the h-node database in one unique xml file in order to parse its contents by means of some proper script (for example a Python or Perl or PHP script)" => "Vous pouvez téléchargez toute la base de donnée de h-node en un seul fichier XML pour pouvoir ensuite l'exploiter avec des scripts (par exemple un script Python, Perl ou PHP)", + /*0131*/"Download the h-node hardware database in xml format" => "Téléchargez la base de données matérielle de h-node au format XML", + /*0132*/"Database modifications" => "Modification de la base de données", + /*0133*/"List of the database modifications carried out by users" => "Liste des modifications faites à la base de données par les utilisateurs", + /*0134*/"the model" => "le modèle", + /*0135*/"has been inserted by" => "a été inséré par", + /*0136*/"has been updated by" => "a été mis à jour par", + /*0137*/"at" => "à", + /*0138*/"last modifications" => "dernières modifications", + /*0139*/"watch all modifications" => "voir toutes les modifications", + /*0140*/"the title" => "le titre", + /*0141*/"the text of the wiki page" => "le texte de la page du wiki", + /*0142*/"the wiki page has not been found" => "la page du wiki n'a pas été trouvée", + /*0143*/"Page not-found" => "Page introuvable", + /*0144*/"Insert" => "Insérer", + /*0145*/"Update" => "Mettre à jour", + /*0146*/"History" => "Historique", + /*0147*/"Revision" => "Révisions", + /*0148*/"Differences" => "Différences", + /*0149*/"Insert a new wiki page" => "Insérer une nouvelle page wiki", + /*0150*/"Edit the wiki page" => "Editer la page wiki", + /*0151*/"Make current" => "Rendre actuel", + /*0152*/"I want to make this revision the current revision" => "Je veux faire de cette révision la révision actuelle", + /*0153*/"Confirm" => "Confirmer", + /*0154*/"Make this revision the current revision of the page" => "Je veux faire de cette révision la révision actuelle de cette page", + /*0155*/"This wiki page has been deleted" => "La page wiki a été supprimée", + /*0156*/"Talk" => "Discussion", + /*0157*/"Talk page of the wiki page" => "Page de discussion de la page de wiki", + /*0158*/"a page with the same title already exists" => "une page avec le même titre existe déja", + /*0159*/"title is too long" => "le titre est trop long", + /*0160*/"the page text is too long" => "le texte de la page est trop long", + /*0161*/"History of the wiki page" => "Historique de la page wiki", + /*0162*/"Would you like to insert it?" => "Voulez-vous l'insérer ?", + /*0163*/"Wiki modifications" => "Modifications du wiki", + /*0164*/"List of the wiki modifications carried out by users" => "Liste des modification faites au wiki par les utilisateurs", + /*0165*/"list of pages" => "list des pages", + /*0166*/"List of wiki pages" => "Liste des pages du wiki", + /*0167*/"This wiki page has been blocked" => "La page wiki a été bloquée", + /*0168*/"unblock the wiki page" => "débloquer la page wiki", + /*0169*/"block the wiki page" => "bloquer la page wiki", + /*0170*/"show the wiki page" => "montrer la page wiki", + /*0171*/"hide the wiki page" => "cacher la page wiki", + /*0172*/"list of deleted pages" => "liste des pages supprimées", + /*0173*/"restore the wiki page" => "restaurer la page wiki", + /*0174*/"delete the wiki page" => "supprimer la page wiki", + /*0175*/"list of blocked pages" => "liste de pages bloquées", + /*0176*/"special pages" => "pages spéciales", + /*0177*/"Actions carried out by administrators" => "Actions faites par les administrateurs", + /*0178*/"No bluetooth devices found" => "Aucun périphérique bluetooth trouvé", + /*0179*/"learn how to find it" => "apprenez à le trouver", + /*0180*/"Download the xml file of all the bluetooth devices in the database" => "Téléchargez le fichier xml de tous les périphériques bluetooth dans la base de données", + /*0181*/"License information" => "Information de license", + /*0182*/"No acquisition card found" => "Aucune carte d'acquisition trouvée", + /*0183*/"No fingerprint readers found" => "Aucun lecteur d'empreintes digitales trouvé", + /*0184*/"Download the xml file of all the acquisition cards in the database" => "Téléchargez le fichier xml de toutes les cartes d'acquisition dans la base de données", + /*0185*/"Download the xml file of all the fingerprint readers in the database" => "Téléchargez le fichier xml de tous les lecteurs d'empreintes digitales dans la base de données", + /*0186*/"architecture" => "architecture", + /*0187*/"Add here the device name as written on the device itself or on the device box. Add it only if it is different from the model name already inserted inside the above entry. Add the new name in such a way that there is one name per row." => "Insérez ici le nom du périphérique tel qu'écris sur le périphérique lui même ou sur son emballage. Ajoutez-le uniquement s'il est différent du nom du modèle déja inséré dans l'entrée ci-dessus. Ajoutez le nouveau nom de façon à ce qu'il n'y ait qu'un nom par rangée. ", + /*0188*/"Write here the model name obtained by the lspci or lsusb command." => "Ecrivez ici le nom du modèle obtenu par la commande lspci ou lsusb.", + /*0189*/"This is the name of the chipset of your device." => "Ceci est le nom du chipset de votre périphérique.", + /*0190*/"possible other names of the device" => "autres noms possibles du périphérique", + /*0191*/"Description entry preview" => "Description de la prévisualisation de l'entrée", + /*0192*/"Page preview" => "Prévisualisation de la page", + /*0193*/"This device page has been hidden" => "La page de ce périhérique a été cachée", + /*0194*/"restore the device page" => "restaurer la page de ce périphérique", + /*0195*/"hide the device page" => "cacher la page de ce périphérique", + /*0196*/"Download the xml file of all the scanners in the database" => "Téléchargez le fichier xml de tous les scanneur dans la base de données", + /*0197*/"Special pages for administrators" => "Page spéciale pour les administrateurs", + /*0198*/"Special pages for moderators" => "Page spéciale pour les modérateurs", + /*0199*/"see the page" => "voir la page", + /*0200*/"hidden device pages" => "pages de périphériques cachées", + /*0201*/"panel" => "panneau", + /*0202*/"List of hidden device pages" => "Liste des pages de périphériques cachées", + /*0203*/"approve the device page" => "approuver la page du périphérique", + /*0204*/"This device page has not been approved yet" => "La page du périphérique n'a pas encore été approuvée", + /*0205*/"Device pages that have to be approved" => "Pages de périphériques en attente d'être approuvées", + /*0206*/"The device page has to be approved by an administrator of the website" => "La page du périphérique est en attente d'être approuvée par un administrateur", + /*0207*/"permanently delete the device page" => "supprimer définitivement la page", + /*0208*/"This page has been permanently deleted by an administrator of the website" => "Cette page a été définitivement supprimée par un administrateur du site", + /*0209*/"No ethernet devices found" => "Pas de périphériques ethernet trouvés", + /*0210*/"free BIOS" => "BIOS libre", + /*0211*/"You are not a registered user or you have not logged in. Your contribution won't be published until an administrator approves it. If you want your contributions to be automatically published please log in or create an account." => "Vous n'êtes pas un utilisateur enregistré ou vous n'êtes pas authentifié. Votre contribution ne sera pas publiée tant qu'un administrateur de l'aura pas approuvée. Si vous souhaitez que vos contributions soient automatiquement publiées, veuillez vous authentifier ou de créer un compte.", + /*0212*/"has been inserted by an anonymous user, it has to be approved by an administrator in order to be published" => "a été inséré par un utilisateur anonyme et doit-être approuvé par un administrateur afin d'être publié", + /*0213*/"you can also subscribe to the feed in order to receive the new modifications that need a moderation" => "vous pouvez également vous abonner au flux afin de recevoir les nouvelles modifications en attente de modération", + /*0214*/"you need javascript enabled in order to correctly use the language's tabs (see below)" => "il est nécessaire d'activer javascript afin d'utiliser correctement les onglets de langue (voir ci-dessous)", + /*0215*/"yes" => "oui", + /*0216*/"works with 3D acceleration" => "fonctionne avec accélération 3D", + /*0217*/"works, but without 3D acceleration" => "fonctionne, mais sans accélération 3D", + /*0218*/"it does not work" => "ne fonctionne pas", + /*0219*/"Notebooks, netbooks, tablet PC" => "Notebooks, netbooks, tablettes", + /*0220*/"Wifi cards" => "Cartes wifi", + /*0221*/"Video cards" => "Cartes graphiques", + /*0222*/"Printers and multifunction" => "Imprimantes et multifonctions", + /*0223*/"Scanners" => "Scanneurs", + /*0224*/"3G cards" => "Cartes 3G", + /*0225*/"Sound cards" => "Cartes son", + /*0226*/"Webcams" => "Webcams", + /*0227*/"Bluetooth devices" => "Périphériques bluetooth", + /*0228*/"TV/Video/FM acquisition cards" => "Cartes d'acquisition TV/Video/FM", + /*0229*/"Fingerprint readers" => "Lecteurs d'empreintes digitales", + /*0230*/"Ethernet cards" => "Cartes ethernet", + /*0231*/"Hardware" => "Hardware", + /*0232*/"Issues" => "Problème", + /*0233*/"Search" => "Recherche", + /*0234*/"News" => "Nouvelles", + /*0235*/"Download" => "Télécharger", + /*0236*/"Help" => "Aide", + /*0237*/"List of" => "Liste de", + /*0238*/"talk messages" => "discussion", + /*0239*/"History" => "Historique", + /*0240*/"Revision" => "Révision", + /*0241*/"This is an old revision of this page, as edited by" => "Ceci est une version antérieure de la page, telle qu'éditée par", + /*0242*/"It may differ significantly from the" => "Il peut y avoir une différence significative avec", + /*0243*/"Differences between the revision of" => "Différences entre les révisions de", + /*0244*/"created by" => "créé par", + /*0245*/"and the revision of" => "et la révision de", + /*0246*/"Notice: the text in red has been deleted from the previous revision, the text in green has been added in this revision and the text in gray has not been changed." => "Note : le texte en rouge a été supprimé de la version précédente, le texte en vert a été ajouté à cette version et le texte en gris n'a pas été changé.", + /*0247*/"Insert" => "Insérer", + /*0248*/"Edit" => "Modifier", + /*0249*/"Talk page" => "Page de discussion", + /*0250*/"Download the xml file of all the ethernet cards in the database" => "Télécharger le fichier xml de toutes les cartes ethernet présentes dans la base de données", + /*0251*/"No sd card readers found" => "Aucun lecteur de carte SD trouvé", + /*0252*/"Sd card readers" => "Lecteurs de cartes SD", + /*0253*/"Download the xml file of all the SD card readers in the database" => "Télécharger le fichier xml de tous les lecteurs de cartes SD de la base de donnée", + /*0254*/"There are no devices in the database with the vendorid:productid code specified by you." => "Il n'y a pas de matériel dans la base de donnée avec le code vendorid:productid spécifié.", + /*0255*/"Would you like to add it to the database?" => "Voudriez-vous l'ajouter à la base de donnée ?", + /*0256*/"can free operating systems be installed?" => "Des systèmes d'exploitation libres peuvent-ils être installés ?", + /*0257*/"This issue has been deleted" => "Ce problème a été effacé", + /*0258*/"hidden for those who are not moderators" => "Caché pour les non-modérateurs", + /*0259*/"This issue is hidden for all the users that are not moderators" => "Ce problème est caché à tous les utilisateurs qui ne sont pas des modérateurs", + /*0260*/"hide the issue" => "cacher le problème", + /*0261*/"show the issue" => "montrer le problème", + /*0262*/"open the issue again" => "réouvrir le problème", + /*0263*/"close the issue" => "fermer le problème", + /*0264*/"This issue is closed" => "Ce problème est fermé", + /*0265*/"This issue is opened" => "Ce problème est ouvert", + /*0266*/"does it adopt any techniques to track users?" => "emploie-t-il des techniques pour suivre les utilisateurs à la trace ?", + /*0267*/"Actions carried out by users" => "Actions effectuées par les utilisateurs", + /*0268*/"No modems found" => "Aucun modem trouvé", + /*0269*/"Download the xml file of all the modems in the database" => "Télécharger le fichier xml de tous les modems de la base de donnée", + /*0270*/"Modems and ADSL cards" => "Modems et cartes ADSL", + /*0271*/"Table of contents" => "Table des matières", + /*0272*/"by" => "par", + /*0273*/"Add a message" => "Ajouter un message", + /*0274*/"Save" => "Sauvegarder", + /*0275*/"Revision of the wiki page" => "Révision de la page wiki", + /*0276*/"Preview" => "Aperçu", + /*0277*/"January" => "Janvier", + /*0278*/"February" => "Février", + /*0279*/"March" => "Mars", + /*0280*/"April" => "Avril", + /*0281*/"May" => "Mai", + /*0282*/"June" => "Juin", + /*0283*/"July" => "Juillet", + /*0284*/"August" => "Août", + /*0285*/"September" => "Septembre", + /*0286*/"October" => "Octobre", + /*0287*/"November" => "Novembre", + /*0288*/"December" => "Décembre", + /*0289*/"not-specified" => "non-spécifié", + /*0290*/"last-inserted" => "dernier-inséré", + /*0291*/"last inserted" => "dernier inséré", + /*0292*/"alphabetically" => "alphabétiquement", + /*0293*/"alphabetically-desc" => "alphabétiquement-décroissant", + /*0294*/"alphabetically desc" => "alphabétiquement par ordre décroissant", + /*0295*/"undef" => "nondef", + /*0296*/"All" => "Tout", + /*0297*/"inkjet" => "jet d'encre", + /*0298*/"A-Full" => "A-Complet", + /*0299*/"B-Partial" => "B-Partiel", + /*0300*/"C-None" => "C-Aucun", + /*0301*/"A-platinum" => "A-platine", + /*0302*/"B-gold" => "B-or", + /*0303*/"C-silver" => "C-argent", + /*0304*/"D-bronze" => "D-bronze", + /*0305*/"E-garbage" => "E-poubelle", + /*0306*/"not specified how it works" => "le fonctionnement n'est pas spécifié", + /*0307*/"there is no wifi card" => "il n'y a pas de carte wifi", + /*0308*/"there is no webcam" => "il n'y a pas de webcam", + /*0309*/"it works" => "fonctionne", + /*0310*/"does_not_work" => "ne_fonctionne_pas", + /*0311*/"works_without_3D" => "fonctionne_sans_3D", + /*0312*/"works_with_3D" => "fonctionne_avec_3D", + /*0313*/"list of languages" => "liste de langues", + /*0314*/"Choose the language" => "Choisissez la langue", + /*0315*/"back" => "retour", + /*0316*/"next" => "suivant", + /*0317*/"previous" => "précédent", + /*0318*/"type" => "type", + /*0319*/"contact us" => "contactez-nous", + /*0320*/"credits" => "crédits", + /*0321*/"desktop version" => "version du bureau", + /*0322*/"RAID adapters" => "Adaptateurs RAID", + /*0323*/"No RAID adapter found" => "Aucun adaptateur RAID trouvé", + /*0324*/"Download the xml file of all the RAID adapters in the database" => "Téléchargez le fichier xml de tous les adaptateurs RAID présents dans la base", + /*0325*/"No PCMCIA Controller found" => "Aucun contrôleur PCMCIA trouvé", + /*0326*/"PCMCIA Controllers" => "Contrôleur PCMCIA", + /*0327*/"Download the xml file of all the PCMCIA Controllers in the database" => "Téléchargez le fichier xml de tous les contrôleurs PCMCIA présents dans la base", + /*0328*/"notebook" => "ordinateur portable", + /*0329*/"netbook" => "netbook", + /*0330*/"motherboard" => "carte mère", + /*0331*/"tablet" => "tablette", + /*0332*/"netbooks" => "netbooks", + /*0333*/"Notebooks" => "Notebooks", + /*0334*/"tablet PC" => "tablette PC", + /*0335*/"motherboards" => "cartes mère", + /*0336*/"Write a comma-separated list of kernel versions" => "Écrivez une liste séparée par des virgules de versions de noyau", + /*0337*/"Example" => "Exemple", + /*0338*/"free boot firmware?" => "Micrologiciel de démarrage libre ?", + /*0339*/"can be installed" => "peut être installé", + /*0340*/"does it have a free boot firmware (BIOS,UEFI,...) ?" => "a un micrologiciel de démarrage (BIOS, UEFI,..) libre?", + /*0341*/"Hello,\n\nyou have registered an account at"=>"Bonjour,\n\nvous avez créé un compte à", + /*0342*/"with the following data:\nusername: " => "avec les données suivantes :\nnom d'utilisateur : ", + /*0343*/"in order to confirm the registration of the new account please follow the link below" => "pour confirmer la création du nouveau compte, veuillez suivre le lien ci-dessous", + /*0344*/"If you don't want to confirm the account registration\nthen wait one hour and your username and e-mail will be deleted from the database" => "Si vous ne voulez pas confirmer la création du compte\nattendez une heure et votre nom d'utilisateur et courriel seront supprimés de la base", + /*0345*/"If you received this e-mail for error, please simply disregard this message" => "Si vous avez reçu ce courriel par erreur, veuillez l'ignorer", + /*0346*/"account registration" => "création de compte", + /*0347*/"Host Controllers" => "Contrôleurs Hôte", + /*0348*/"No Host Controller found" => "Aucun Contrôleur Hôte trouvé", + /*0349*/"Download the xml file of all the Host Controllers in the database" => "Téléchargez le fichier xml de tous les Contrôleurs Hôte présents dans la base", + /*0350*/"PCMCIA Controller" => "Contrôleur PCMCIA", + /*0351*/"USB Controller" => "Contrôleur USB", + /*0352*/"Firewire Controller" => "Contrôleur Firewire", + /*0353*/"HECI Controller" => "Contrôleur HECI", + /*0354*/"device type" => "type d'appareil", + /*0355*/"Thanks for your contribution!" => "Merci pour votre contribution !", + /*0356*/"does the device prevent installing wifi cards not-approved by the vendor?" => "l'appareil empêche-t-il l'insertion de cartes wifi non approuvées par le vendeur ?", + /*0357*/"see the details inside the description entry" => "voir les détails dans le champ description", + /*0358*/"Thanks for helping the h-node project and the free software movement!" => "Merci d'aider le projet h-node et le mouvement du logiciel libre !", + /*0359*/"You have just inserted a new notebook into the database. Can you please insert its devices separately too? Thanks!" => "Vous venez d'insérer un nouvel ordinateur portable dans la base. Pouvez-vous insérer ses périphériques séparément ? Merci !", + /*0360*/"insert" => "insérer", + /*0361*/"List of allowed fully free distributions" => "Liste des distributions totalement libres autorisées", + /*0362*/"Insert a new distro" => "Insérer une nouvelle distribution", + /*0363*/"DISTRO-CODE" => "CODE-DISTRO", + ), + 'de' => array + ( + /*0001*/"Search one device in the archive" => "Ein Gerät im Archiv suchen", + /*0002*/"hardware type" => "Hardware-Typ", + /*0003*/"the model name contains" => "die Modellbezeichnung enthält", + /*0004*/"List of issues" => "Vorhandene Beiträge", + /*0005*/"TITLE" => "Titel", + /*0006*/"TOPIC" => "Thema", + /*0007*/"OPENED BY" => "Angelegt von", + /*0008*/"DATE" => "Datum", + /*0009*/"REPLIES" => "Nachricht", + /*0010*/"PRIORITY" => "Priorität", + /*0011*/"STATUS" => "Stand", + /*0012*/"You have to" => "Sie müssen", + /*0013*/"in order to submit an issue" => "um ein Thema einzusenden", + /*0014*/"in order to add a message" => "um eine Nachricht hinzufügen", + /*0015*/"Description" => "Beschreibung", + /*0016*/"Messages" => "Nachrichten", + /*0017*/"this message has been deleted" => "Diese Nachricht wurde gelöscht", + /*0018*/"in order to submit a message to this issue" => "um eine Antwort zu senden", + /*0019*/"model name" => "Modellbezeichnung", + /*0020*/"model type" => "Modelltyp", + /*0021*/"year of commercialization" => "Jahr der Markteinführung", + /*0022*/"Results of the search" => "Suchergebnisse", + /*0023*/"page list" => "Seite/n", + /*0024*/"No devices found" => "Es wurde kein Gerät gefunden", + /*0025*/"vendor" => "Hersteller", + /*0026*/"compatibility" => "Kompatibilität", + /*0027*/"year" => "Jahr", + /*0028*/"subtype" => "Typ", + /*0029*/"sort by" => "Sortierung nach", + /*0030*/"interface" => "Schnittstelle", + /*0031*/"does it work?" => "Funktionsweise", + /*0032*/"preview of the message" => "Nachrichtenvorschau", + /*0033*/"preview of the new issue message" => "Nachrichtenvorschau", + /*0034*/"Add a message to this issue" => "Auf diese Nachricht antworten", + /*0035*/"Add a new issue" => "Neue Nachricht erstellen", + /*0036*/"MESSAGE" => "Nachricht", + /*0037*/"there are no messages" => "Es sind keine Antworten vorhanden", + /*0038*/"No notebooks found" => "Es wurden keine Notebooks gefunden", + /*0039*/"subtype (notebook, netbook, tablet)" => "Typ (Notebook, Netbook, Tablet)", + /*0040*/"compatibility with free software" => "Kompatibilität mit Freie Software", + /*0041*/"view the other specifications" => "Weitere Angaben", + /*0042*/"model" => "Modell", + /*0043*/"model id" => "Modell-ID", + /*0044*/"tested on" => "überprüft mit Distribution", + /*0045*/"tested with the following kernel libre" => "Überbrüft mit folgendem freien Betriebssystemkern (Libre Kernel)", + /*0046*/"video card model" => "Grafikkarte", + /*0047*/"wifi model" => "WLAN", + /*0048*/"GNU/Linux distribution used for the test" => "Verwendete GNU/Linux-Distribution für die Überprüfung", + /*0049*/"does the video card work?" => "Funktioniert die Grafik einwandfrei?", + /*0050*/"does the wifi card work?" => "Funktioniert das WLAN einwandfrei?", + /*0051*/"Description: (write here all the useful information)" => "Beschreibung: (alle nützliche Informationen)", + /*0052*/"discover all the wiki tags" => "Wiki-Elemente", + /*0053*/"Fields marked with * are mandatory" => "* Pflichtangabe", + /*0054*/"No printers found" => "Es wurden keine Drucker gefunden", + /*0055*/"interface" => "Schnittstelle", + /*0056*/"VendorID:ProductID code of the device" => "Hersteller-ID:Produkt-ID des Gerätes", + /*0057*/"free driver used" => "Verwendete Freie Firmware/Treiber", + /*0058*/"set not-specified if not sure" => "Bitte „Keine Angabe“, wenn nicht sicher", + /*0059*/"see the help page or leave blank if you are not sure" => "Siehe „Hilfe“, oder freilassen, wenn nicht sicher", + /*0060*/"No scanners found" => "Es wurden keine Scanner gefunden", + /*0061*/"No video cards found" => "Es wurde keine Grafikkarte gefunden", + /*0062*/"how does it work with free software?" => "Funktioniert einwandfrei mit Freie Software?", + /*0063*/"No wifi cards found" => "Es wurde kein WLAN (intern/extern) gefunden", + /*0064*/"does it work with free software?" => "Funktioniert mit Freie Software?", + /*0065*/"differences in the entry" => "Unterschiede", + /*0066*/"No 3G cards found" => "Es wurde kein Mobilfunkstandard der dritten Generation (3G) gefunden", + /*0067*/"Please specify in the below description entry the Internet Service Provider (ISP) and the country where the service is provided" => "Bitte geben Sie in der folgenden Beschreibung den Internetdienstanbieter (ISP) und Land an, in dem die Dienstleistung erbracht wird", + /*0068*/"webcam model" => "Webcam", + /*0069*/"does it have a free BIOS?" => "Hat eine freies BIOS?", + /*0070*/"does the webcam work?" => "Funktioniert einwandfrei mit Freie Software?", + /*0071*/"Current revision" => "Aktuelle Version", + /*0072*/"Hello" => "Hallo", + /*0073*/"Your" => "Ihre ", + /*0074*/"control panel" => "Einstellungen", + /*0075*/"create new account" => "Neu registrieren", + /*0076*/"request new password" => "Passwort vergessen", + /*0077*/"website statistics" => "Website-Statistiken:", + /*0078*/"hardware in the database" => "Hardware-Datenbank", + /*0079*/"users logged" => "Angemeldete Benutzer", + /*0080*/"Watch your public profile" => "Öffentliches Profil", + /*0081*/"Edit your profile" => "Profil bearbeiten", + /*0082*/"Change your e-mail address" => "E-Mail-Adresse ändern", + /*0083*/"Change your password" => "Passwort ändern", + /*0084*/"Delete your account" => "Konto löschen", + /*0085*/"choose the username" => "Benutzername", + /*0086*/"characters allowed" => "Erlaubte Zeichen", + /*0087*/"your e-mail address" => "E-Mail-Adresse", + /*0088*/"necessary to confirm the registration" => "Zur Bestätigung der Registrierung erforderlich", + /*0089*/"choose the password" => "Passwort", + /*0090*/"confirm the password" => "Passwort (Wiederholung)", + /*0091*/"write the code above" => "Geben Sie die Zeichen ein", + /*0092*/"write your username" => "Geben Sie Ihren Benutzernamen ein", + /*0093*/"Actions carried out by moderators" => "Moderatoren durchgeführte Änderungen", + /*0094*/"meet" => "treffen", + /*0095*/"Public profile of" => "Öffentliches Profil auf", + /*0096*/"See all the contributions of" => "Alle Beiträge von", + /*0097*/"My website" => "Meine Webseite", + /*0098*/"My real name" => "Mein bürgerlicher Name", + /*0099*/"My e-mail address" => "Meine E-Mail-Adresse", + /*0100*/"I'm from" => "Ich bin aus", + /*0101*/"Birthdate" => "Geburtsdatum", + /*0102*/"My favourite distribution" => "Meine favorisierte Distribution", + /*0103*/"Free software projects I'm working on" => "Freie-Software-Projekte, an denen ich arbeite", + /*0104*/"My description" => "Meine Beschreibung", + /*0105*/"contributions" => "Beiträge", + /*0106*/"contributions of" => "Beiträge von", + /*0107*/"No sound cards found" => "Es wurde keine Soundkarte gefunden", + /*0108*/"LAST UPDATE" => "Letzte Aktualisierung", + /*0109*/"search by" => "Suchen nach", + /*0110*/"analyze the output of the lspci command" => "Analyse der Ausgabe des Befehls „lspci“", + /*0111*/"paste the output of the lspci command" => "Fügen Sie Ausgabe des Befehls „lspci“ ein", + /*0112*/"works, but without 3D acceleration" => "Funktioniert, aber ohne 3D-Beschleunigung", + /*0113*/"the text submitted by you does not seem to be the lspci -vmmnn output. Please check the text and try again" => "Der von Ihnen übermittelte Text scheint nicht der „lspci-vmmnn“-Ausgabe zu entsprechen. Bitte überprüfen Sie den Text und versuchen es erneut", + /*0114*/"Search form" => "Suchen", + /*0115*/"write here the output of lspci -vmmnn" => "Geben Sie hier die Ausgabe von „lspci-vmmnn“ ein", + /*0116*/"The following devices has been found in the database" => "Die folgenden Geräte wurden in der Datenbank gefunden", + /*0117*/"yes" => "Ja", + /*0118*/"no" => "Nein", + /*0119*/"The following devices has not been found in the database" => "Folgende Geräte wurden nicht in der Datenbank gefunden", + /*0120*/"can you please insert them?" => "Kann dies bitte eingefügt werden?", + /*0121*/"No webcams found" => "Es wurde keine Webcam gefunden", + /*0122*/"Download the xml file of all the database" => "Die vollständige Datenbank herunterladen (XML-Format)", + /*0123*/"Download the xml file of all the notebooks in the database" => "Alle enthaltenen Notebooks herunterladen (XML-Format)", + /*0124*/"Download the xml file of all the wifi cards in the database" => "Alle enthaltenen WLAN-Geräte herunterladen (XML-Format)", + /*0125*/"Download the xml file of all the video cards in the database" => "Alle enthaltenen Grafikkarten herunterladen (XML-Format)", + /*0126*/"Download the xml file of all the printers in the database" => "Alle enthaltenen Drucker herunterladen (XML-Format)", + /*0127*/"Download the xml file of all the 3G cards in the database" => "Alle enthaltenen 3G-Geräte herunterladen (XML-Format)", + /*0128*/"Download the xml file of all the sound cards in the database" => "Alle enthaltenen Soundkarten herunterladen (XML-Format)", + /*0129*/"Download the xml file of all the webcams in the database" => "Alle enthaltenen Webcams herunterladen (XML-Format)", + /*0130*/"You can download all the h-node database in one unique xml file in order to parse its contents by means of some proper script (for example a Python or Perl or PHP script)" => "Sie können alle h-node-Datenbanken als XML-Datei herunterladen, um den Inhalt durch ein Skript (bspw. ein Python-, Perl- oder PHP-Skript) analysieren zu können.", + /*0131*/"Download the h-node hardware database in xml format" => "Die h-node-Hardware-Datenbank im XML-Format herunterladen", + /*0132*/"Database modifications" => "Datenbank-Änderungen", + /*0133*/"List of the database modifications carried out by users" => "Von Benutzern durchgeführte Datenbank-Änderungen", + /*0134*/"the model" => "Das Modell", + /*0135*/"has been inserted by" => "wurde eingefügt von", + /*0136*/"has been updated by" => "wurde aktualisiert von", + /*0137*/"at" => "am", + /*0138*/"last modifications" => "Letzte Änderungen", + /*0139*/"watch all modifications" => "Alle Änderungen anzeigen", + /*0140*/"the title" => "Der Titel", + /*0141*/"the text of the wiki page" => "der Text des Wikis", + /*0142*/"the wiki page has not been found" => "Das Wiki wurde nicht gefunden", + /*0143*/"Page not-found" => "Seite nicht gefunden", + /*0144*/"Insert" => "Einfügen", + /*0145*/"Update" => "Aktualisieren", + /*0146*/"History" => "Historie", + /*0147*/"Revision" => "Version", + /*0148*/"Differences" => "Unterschiede", + /*0149*/"Insert a new wiki page" => "Ein neues Wiki einfügen", + /*0150*/"Edit the wiki page" => "Wiki bearbeiten", + /*0151*/"Make current" => "Aktualisieren", + /*0152*/"I want to make this revision the current revision" => "Ich möchte diese Version zur aktuellen Version machen", + /*0153*/"Confirm" => "Ok", + /*0154*/"Make this revision the current revision of the page" => "Diese Version zur aktuellen Version machen", + /*0155*/"This wiki page has been deleted" => "Dieses Wiki wurde gelöscht", + /*0156*/"Talk" => "Diskussion", + /*0157*/"Talk page of the wiki page" => "Diskussionsseite des Wikis", + /*0158*/"a page with the same title already exists" => "Es ist bereits eine Seite mit den gleichen Titel vorhanden", + /*0159*/"title is too long" => "Titel ist zu lang", + /*0160*/"the page text is too long" => "Der Text ist zu lang", + /*0161*/"History of the wiki page" => "Historie des Wikis", + /*0162*/"Would you like to insert it?" => "Wiki einfügen?", + /*0163*/"Wiki modifications" => "Wiki-Änderungen", + /*0164*/"List of the wiki modifications carried out by users" => "Von Benutzern durchgeführte Wiki-Änderungen", + /*0165*/"list of pages" => "Seiten", + /*0166*/"List of wiki pages" => "Wiki-Seiten", + /*0167*/"This wiki page has been blocked" => "Dieses Wiki wurde gesperrt", + /*0168*/"unblock the wiki page" => "Wiki entsperren", + /*0169*/"block the wiki page" => "Wiki sperren", + /*0170*/"show the wiki page" => "Wiki anzeigen", + /*0171*/"hide the wiki page" => "Wiki ausblenden", + /*0172*/"list of deleted pages" => "Gelöschte Seiten", + /*0173*/"restore the wiki page" => "Wiki wiederherstellen", + /*0174*/"delete the wiki page" => "Wiki löschen", + /*0175*/"list of blocked pages" => "Gesperrte Seiten", + /*0176*/"special pages" => "Sonderseiten", + /*0177*/"Actions carried out by administrators" => "Administratoren durchgeführten Aktionen anzeigen", + /*0178*/"No bluetooth devices found" => "Es wurden keine Bluetooth-Geräte gefunden", + /*0179*/"learn how to find it" => "Wie kann man das herausfinden?", + /*0180*/"Download the xml file of all the bluetooth devices in the database" => "Alle enthaltenen Bluetooth-Geräte herunterladen (XML-Format)", + /*0181*/"License information" => "Informationen zur Lizenz", + /*0182*/"No acquisition card found" => "Es wurde keine TV/Video/FM-Erweiterung gefunden", + /*0183*/"No fingerprint readers found" => "Es wurde kein Fingerabdruck-Lesegerät gefunden", + /*0184*/"Download the xml file of all the acquisition cards in the database" => "Alle enthaltenen TV/Video/FM-Erweiterungen herunterladen (XML-Format", + /*0185*/"Download the xml file of all the fingerprint readers in the database" => "Alle enthaltenen Fingerabdruck-Lesegeräte herunterladen (XML-Format", + /*0186*/"architecture" => "Architektur", + /*0187*/"Add here the device name as written on the device itself or on the device box. Add it only if it is different from the model name already inserted inside the above entry. Add the new name in such a way that there is one name per row." => "Fügen Sie hier den Gerätenamen hinzu, wie auf dem Gerät selbst oder auf der Verpackung angegeben, jedoch nur, wenn dieser von der bereits genannten Modellbezeichnung abweicht (ein Gerätename/pro Zeile).", + /*0188*/"Write here the model name obtained by the lspci or lsusb command." => "Geben Sie hier die vom Befehl „lspci“ oder „lsusb“ ermittelte Modellbezeichnung ein.", + /*0189*/"This is the name of the chipset of your device." => "Dies ist der Name des Chipsatzes Ihres Gerätes.", + /*0190*/"possible other names of the device" => "Andere mögliche Gerätenamen", + ), + 'gr' => array + ( + /*0001*/"Search one device in the archive" => "Αναζήτηση μίας συσκευής από το αρχείο", + /*0002*/"hardware type" => "Τύπος υλικού", + /*0003*/"the model name contains" => "το όνομα του μοντέλου περιλαμβάνει", + /*0004*/"List of issues" => "Κατάλογος ερωτήσεων", + /*0005*/"TITLE" => "ΤΙΤΛΟΣ", + /*0006*/"TOPIC" => "ΘΕΜΑ", + /*0007*/"OPENED BY" => "ΑΝΟΙΧΘΗΚΕ ΑΠΟ ΤΟΝ", + /*0008*/"DATE" => "ΔΕΔΟΜΕΝΑ", + /*0009*/"REPLIES" => "ΜΗΝΥΜΑΤΑ", + /*0010*/"PRIORITY" => "ΠΡΟΤΕΡΑΙΟΤΗΤΑ", + /*0011*/"STATUS" => "ΚΑΤΑΣΤΑΣΗ", + /*0012*/"You have to" => "Πρέπει να εκτελέσετε το", + /*0013*/"in order to submit an issue" => "για να μπορείτε να ανοίξετε ένα νέο θέμα", + /*0014*/"in order to add a message" => "για να μπορείτε να στείλετε ένα μήνυμα", + /*0015*/"Description" => "Περιγραφή", + /*0016*/"Messages" => "Μηνύματα", + /*0017*/"this message has been deleted" => "Αυτό το μήνυμα διεγράφη", + /*0018*/"in order to submit a message to this issue" => "Για να προσθέσετε ένα μήνυμα σε αυτό το θέμα", + /*0019*/"model name" => "Όνομα του μοντέλου", + /*0020*/"model type" => "Τύπος συσκευής", + /*0021*/"year of commercialization" => "Έτος εμπορικής κυκλοφορίας", + /*0022*/"Results of the search" => "Αποτελέσματα της αναζήτησης", + /*0023*/"page list" => "Κατάλογος σελίδων", + /*0024*/"No devices found" => "Δεν βρέθηκε καμία συσκευή", + /*0025*/"vendor" => "Κατασκευαστής", + /*0026*/"compatibility" => "Συμβατότητα", + /*0027*/"year" => "Έτος", + /*0028*/"subtype" => "Υποτύπος", + /*0029*/"sort by" => "Κατάταξη ανά", + /*0030*/"interface" => "Διεπαφή", + /*0031*/"does it work?" => "Λειτουργεί;", + /*0032*/"preview of the message" => "Προεπισκόπηση του μυνήματος", + /*0033*/"preview of the new issue message" => "Προεπισκόπηση του μηνύματος για το νέο θέμα", + /*0034*/"Add a message to this issue" => "Προσθήκη ενός μηνύματος σε αυτό το θέμα", + /*0035*/"Add a new issue" => "Προσθήκη ενός νέου θέματος", + /*0036*/"MESSAGE" => "ΜΗΝΥΜΑ", + /*0037*/"there are no messages" => "Δεν υπάρχουν καθόλου μηνύματα", + /*0038*/"No notebooks found" => "Δεν βρέθηκε κανένα notebook", + /*0039*/"subtype (notebook, netbook, tablet)" => "Υποτύπος (notebook, netbook, tablet)", + /*0040*/"compatibility with free software" => "Συμβατότητα με το ελεύθερο λογισμικό", + /*0041*/"view the other specifications" => "Δείτε τις άλλες προδιαγραφές", + /*0042*/"model" => "Μοντέλο", + /*0043*/"model id" => "Κωδικός id του μοντέλου", + /*0044*/"tested on" => "Δοκιμάσθηκε με", + /*0045*/"tested with the following kernel libre" => "Δοκιμάσθηκε με τον εξής ελεύθερο πυρήνα", + /*0046*/"video card model" => "Μοντέλο της κάρτας γραφικών", + /*0047*/"wifi model" => "Μοντέλο της κάρτας wifi", + /*0048*/"GNU/Linux distribution used for the test" => "Διανομή GNU/Linux που χρησιμοποιήθηκε για την δοκιμή", + /*0049*/"does the video card work?" => "Λειτουργεί η κάρτα γραφικών;", + /*0050*/"does the wifi card work?" => "Λειτουργεί η κάρτα wifi?", + /*0051*/"Description: (write here all the useful information)" => "Περιγραφή (γράψτε εδώ όλες τις χρήσιμες πληροφορίες)", + /*0052*/"discover all the wiki tags" => "Ανακαλύψτε όλες τις ετικέτες/tag του wiki", + /*0053*/"Fields marked with * are mandatory" => "Τα πεδία που επισημαίνονται με * είναι υποχρεωτικά", + /*0054*/"No printers found" => "Δεν βρέθηκε κανένας εκτυπωτής", + /*0055*/"interface" => "Διεπαφή", + /*0056*/"VendorID:ProductID code of the device" => "Κωδικός Κατασκευαστή:Κωδικός Προϊόντος", + /*0057*/"free driver used" => "Ελεύθεροι οδηγοί/driver που χρησιμοποιήθηκαν", + /*0058*/"set not-specified if not sure" => "Επιλέξτε το μη-διευκρινισμένο αν δεν είστε σίγουρος/η", + /*0059*/"see the help page or leave blank if you are not sure" => "Δείτε την σελίδα βοήθειας ή αφήστε κενό αν δεν είστε σίγουρος/η", + /*0060*/"No scanners found" => "Δεν βρέθηκε κανένας σαρωτής", + /*0061*/"No video cards found" => "Δεν βρέθηκε καμία κάρτα γραφικών", + /*0062*/"how does it work with free software?" => "πώς δουλεύει με το ελεύθερο λογισμικό;", + /*0063*/"No wifi cards found" => "Δεν βρέθηκε καμία κάρτα wifi", + /*0064*/"does it work with free software?" => "Λειτουργεί με ελεύθερο λογισμικό;", + /*0065*/"differences in the entry" => "Διαφορές στην καταχώρηση", + /*0066*/"No 3G cards found" => "Δεν βρέθηκε καμία κάρτα 3G", + /*0067*/"Please specify in the below description entry the Internet Service Provider (ISP) and the country where the service is provided" => "Παρακαλώ διευκρινείστε στο παρακάτω πεδίο περιγραφής τον πάροχο υπηρεσιών Internet (ISP) και τη Χώρα στην οποία παρέχονται οι υπηρεσίες", + /*0068*/"webcam model" => "Μοντέλο της webcam", + /*0069*/"does it have a free BIOS?" => "Έχει ελεύθερο BIOS;", + /*0070*/"does the webcam work?" => "Λειτουργεί η webcam;", + /*0071*/"Current revision" => "Τρέχουσα αναθεώρηση", + /*0072*/"Hello" => "Γεια σας", + /*0073*/"Your" => "Ο ", + /*0074*/"control panel" => "Πίνακας ελέγχου", + /*0075*/"create new account" => "Δημιουργήστε έναν λογαριασμό", + /*0076*/"request new password" => "Ζητήστε έναν νέο κωδικό πρόσβασης", + /*0077*/"website statistics" => "Στατιστικές του ιστοτόπου", + /*0078*/"hardware in the database" => "Υλικό/hardware στη βάση δεδομένων", + /*0079*/"users logged" => "Συνδεδεμένοι χρήστες", + /*0080*/"Watch your public profile" => "Δείτε το δημόσιο προφίλ σας", + /*0081*/"Edit your profile" => "Τροποποιήστε το προφίλ σας", + /*0082*/"Change your e-mail address" => "Αλλάξτε την ηλεκτρονική σας διεύθυνση", + /*0083*/"Change your password" => "Αλλάξτε τον κωδικό σας πρόσβασης", + /*0084*/"Delete your account" => "Διαγράψτε τον λογαριασμό σας", + /*0085*/"choose the username" => "Επιλέξτε το όνομα χρήστη", + /*0086*/"characters allowed" => "Αποδεκτοί χαρακτήρες", + /*0087*/"your e-mail address" => "Η ηλεκτρονική σας διεύθυνση", + /*0088*/"necessary to confirm the registration" => "Απαραίτητο για την επιβεβαίωση της εγγραφής", + /*0089*/"choose the password" => "Επιλέξτε τον κωδικό πρόσβασης", + /*0090*/"confirm the password" => "Επιβεβαιώστε τον κωδικό πρόσβασης", + /*0091*/"write the code above" => "Γράψτε τον παραπάνω κωδικό", + /*0092*/"write your username" => "Γράψτε το όνομα χρήστη", + /*0093*/"Actions carried out by moderators" => "Ενέργειες που έγιναν από τους συντονιστές/moderators", + /*0094*/"meet" => "γνωρίστε", + /*0095*/"Public profile of" => "Δημόσιο προφίλ του/της", + /*0096*/"See all the contributions of" => "Δείτε όλες τις συνεισφορές του/της", + /*0097*/"My website" => "Ο προσωπικός μου ιστότοπος", + /*0098*/"My real name" => "Το πραγματικό μου όνομα", + /*0099*/"My e-mail address" => "Η ηλεκτρονική μου διεύθυνση", + /*0100*/"I'm from" => "Είμαι από το/την", + /*0101*/"Birthdate" => "Ημερομ. γεννήσεως", + /*0102*/"My favourite distribution" => "Η αγαπημένη μου διανομή", + /*0103*/"Free software projects I'm working on" => "Projects ελεύθερου Λογισμικού για τα οποία εργάζομαι", + /*0104*/"My description" => "Η περιγραφή μου", + /*0105*/"contributions" => "Συνεισφορές", + /*0106*/"contributions of" => "Συνεισφορές του/της", + /*0107*/"No sound cards found" => "Δεν βρέθηκε καμία κάρτα ήχου", + /*0108*/"LAST UPDATE" => "ΤΕΛΕΥΤΑΙΑ ΕΝΗΜΕΡΩΣΗ", + /*0109*/"search by" => "Αναζήτηση για", + /*0110*/"analyze the output of the lspci command" => "Ανάλυση της εξόδου της εντολής lscpi", + /*0111*/"paste the output of the lspci command" => "Επικόλληση της εξόδου της εντολής lspci", + /*0112*/"works, but without 3D acceleration" => "Λειτουργεί, αλλά χωρίς επιτάχυνση 3D", + /*0113*/"the text submitted by you does not seem to be the lspci -vmmnn output. Please check the text and try again" => "το κείμενο που υποβάλλατε δεν μοιάζει με την έξοδο της εντολής lspci -vmmnn. Παρακαλώ επανελέγξτε το κείμενο και ξαναδοκιμάστε", + /*0114*/"Search form" => "Φόρμα αναζήτησης", + /*0115*/"write here the output of lspci -vmmnn" => "Γράψτε εδώ την έξοδο της εντολής lspci -vmmnn", + /*0116*/"The following devices has been found in the database" => "Βρέθηκαν οι ακόλουθες συσκευές στη βάση δεδομένων", + /*0117*/"yes" => "ναι", + /*0118*/"no" => "όχι", + /*0119*/"The following devices has not been found in the database" => "Οι εξής συσκευές δεν βρέθηκαν στη βάση δεδομένων", + /*0120*/"can you please insert them?" => "Μπορείτε παρακαλώ να τις εισαγάγετε;", + /*0121*/"No webcams found" => "Δεν βρέθηκε καμία webcam", + /*0122*/"Download the xml file of all the database" => "Μεταφορτώστε το αρχείο xml όλης της βάσης δεδομένων", + /*0123*/"Download the xml file of all the notebooks in the database" => "Μεταφορτώστε το αρχείο xml όλων των notebook που περικλείονται στη βάση δεδομένων", + /*0124*/"Download the xml file of all the wifi cards in the database" => "Μεταφορτώστε το αρχείο xml όλων των καρτών wifi που περικλείονται στη βάση δεδομένων", + /*0125*/"Download the xml file of all the video cards in the database" => "Μεταφορτώστε το αρχείο xml όλων των καρτών γραφικών που περικλείονται στη βάση δεδομένων", + /*0126*/"Download the xml file of all the printers in the database" => "Μεταφορτώστε το αρχείο xml όλων των εκτυπωτών που περικλείονται στη βάση δεδομένων", + /*0127*/"Download the xml file of all the 3G cards in the database" => "Μεταφορτώστε το αρχείο xml όλων των καρτών 3G που περικλείονται στη βάση δεδομένων", + /*0128*/"Download the xml file of all the sound cards in the database" => "Μεταφορτώστε το αρχείο xml όλων των καρτών ήχου που περικλείονται στη βάση δεδομένων", + /*0129*/"Download the xml file of all the webcams in the database" => "Μεταφορτώστε το αρχείο xml όλων των webcam που περικλείονται στη βάση δεδομένων", + /*0130*/"You can download all the h-node database in one unique xml file in order to parse its contents by means of some proper script (for example a Python or Perl or PHP script)" => "Μπορείτε να μεταφορτώσετε την βάση δεδομένων του h-node σε ένα ενιαίο αρχείο xml, για την ανάλυση των περιεχομένων του, με τη χρήση ενός κατάλληλου script (π.χ. ένα script σε Python ή σε Perl ή σε PHP)", + /*0131*/"Download the h-node hardware database in xml format" => "Μεταφορτώστε την βάση δεδομένων του υλικού/hardware του h-node υπό μορφή αρχείου xml", + /*0132*/"Database modifications" => "Τροποποιήσεις βάσης δεδομένων", + /*0133*/"List of the database modifications carried out by users" => "Κατάλογος τροποποιήσεων της βάσης δεδομένων των χρηστών", + /*0134*/"the model" => "το μοντέλο", + /*0135*/"has been inserted by" => "Έχει εισαχθεί από τον/την", + /*0136*/"has been updated by" => "Έχει τροποποιηθεί από τον/την", + /*0137*/"at" => "στις", + /*0138*/"last modifications" => "Τελευταίες τροποποιήσεις", + /*0139*/"watch all modifications" => "Δείτε όλες τις τροποποιήσεις", + /*0140*/"the title" => "ο τίτλος", + /*0141*/"the text of the wiki page" => "Το κείμενο της σελίδας του wiki", + /*0142*/"the wiki page has not been found" => "Η σελίδα του wiki δεν βρέθηκε", + /*0143*/"Page not-found" => "Η σελίδα δεν βρέθηκε", + /*0144*/"Insert" => "Εισαγωγή", + /*0145*/"Update" => "Τροποποίηση", + /*0146*/"History" => "Ιστορία", + /*0147*/"Revision" => "Αναθεώρηση", + /*0148*/"Differences" => "Διαφορές", + /*0149*/"Insert a new wiki page" => "Εισαγωγή μίας νέας σελίδας στο wiki", + /*0150*/"Edit the wiki page" => "Τροποποιήστε την σελίδα του wiki", + /*0151*/"Make current" => "Καταστήστε τρέχουσα την αναθεώρηση", + /*0152*/"I want to make this revision the current revision" => "Θέλω να κάνω αυτή την αναθεώρηση να είναι η τρέχουσα αναθεώρηση", + /*0153*/"Confirm" => "Επιβεβαίωση", + /*0154*/"Make this revision the current revision of the page" => "Κάντε αυτή την αναθεώρηση να είναι η τρέχουσα αναθεώρηση της σελίδας", + /*0155*/"This wiki page has been deleted" => "Αυτή η σελίδα του wiki έχει διαγραφεί", + /*0156*/"Talk" => "Συζήτηση", + /*0157*/"Talk page of the wiki page" => "Σελίδα συζήτησης της σελίδας του wiki", + /*0158*/"a page with the same title already exists" => "Υπάρχει ήδη μία σελίδα με τον ίδιο τίτλο", + /*0159*/"title is too long" => "Ο τίτλος είναι πολύ μεγάλος", + /*0160*/"the page text is too long" => "Το κείμενο της σελίδας είναι πολύ μεγάλο", + /*0161*/"History of the wiki page" => "Ιστορικό της σελίδας του wiki", + /*0162*/"Would you like to insert it?" => "Θα θέλατε να το εισαγάγετε;", + /*0163*/"Wiki modifications" => "Τροποποιήσεις του Wiki", + /*0164*/"List of the wiki modifications carried out by users" => "Κατάλογος των τροποποιήσεων του wiki που επέφεραν οι χρήστες", + /*0165*/"list of pages" => "κατάλογος των σελίδων", + /*0166*/"List of wiki pages" => "Κατάλογος των σελίδων του wiki", + /*0167*/"This wiki page has been blocked" => "Αυτή η σελίδα του wiki έχει εμποδισθεί", + /*0168*/"unblock the wiki page" => "Απελευθερώστε την σελίδα", + /*0169*/"block the wiki page" => "Εμποδίστε την σελίδα του wiki", + /*0170*/"show the wiki page" => "Εμφανείστε την σελίδα του wiki", + /*0171*/"hide the wiki page" => "Κρύψτε την σελίδα του wiki", + /*0172*/"list of deleted pages" => "Κατάλογος σελίδων που έχουν διαγραφεί", + /*0173*/"restore the wiki page" => "Ανακτήστε την σελίδα του wiki", + /*0174*/"delete the wiki page" => "Διαγράψτε την σελίδα", + /*0175*/"list of blocked pages" => "Κατάλογος σελίδων που έχουν εμποδισθεί", + /*0176*/"special pages" => "Ειδικές σελίδες", + /*0177*/"Actions carried out by administrators" => "Ενέργειες που εκτελέσθηκαν από τους διαχειριστές", + /*0178*/"No bluetooth devices found" => "Δεν βρέθηκε καμία συσκευή bluetooth", + /*0179*/"learn how to find it" => "Μάθετε πως να το βρείτε", + /*0180*/"Download the xml file of all the bluetooth devices in the database" => "Μεταφορτώστε το αρχείο xml όλων των συσκευών bluetooth που περικλείονται στη βάση δεδομένων", + /*0181*/"License information" => "Πληροφορίες για την άδεια", + /*0182*/"No acquisition card found" => "Δεν βρέθηκε καμία κάρτα λήψης", + /*0183*/"No fingerprint readers found" => "Δεν βρέθηκε καμία συσκευή ανάγνωσης δακτυλικών αποτυπωμάτων", + /*0184*/"Download the xml file of all the acquisition cards in the database" => "Μεταφορτώστε το αρχείο xml όλων των καρτών λήψης που περικλείονται στη βάση δεδομένων", + /*0185*/"Download the xml file of all the fingerprint readers in the database" => "Μεταφορτώστε το αρχείο xml όλων των συσκευών ανάγνωσης δακτυλικών αποτυπωμάτων που περικλείονται στη βάση δεδομένων", + /*0186*/"architecture" => "Αρχιτεκτονική", + /*0187*/"Add here the device name as written on the device itself or on the device box. Add it only if it is different from the model name already inserted inside the above entry. Add the new name in such a way that there is one name per row." => "Προσθέστε εδώ το όνομα της συσκευής έτσι όπως προκύπτει γραμμένο πάνω στην ίδια τη συσκευή ή στη συσκευασία της. Προσθέστε το όνομα αυτό μόνον αν είναι διαφορετικό από το όνομα του μοντέλου που έχει ήδη εισαχθεί στο προηγούμενο πεδίο. Προσθέστε το νέο όνομα έτσι ώστε να υπάρχει ένα όνομα ανά σειρά.", + /*0188*/"Write here the model name obtained by the lspci or lsusb command." => "Γράψτε εδώ το όνομα του μοντέλου που επιστρέφει η εντολή lspci είτε η εντολή lsusb.", + /*0189*/"This is the name of the chipset of your device." => "Αυτό είναι το όνομα του chipset της συσκευής σας.", + /*0190*/"possible other names of the device" => "Άλλα πιθανά ονόματα της συσκευής", + /*0191*/"Description entry preview" => "Προεπισκόπηση του πεδίου περιγραφής", + /*0192*/"Page preview" => "Προεπισκόπηση της σελίδας", + /*0193*/"This device page has been hidden" => "Η σελίδα αυτής της συσκευής έχει αποκρυφθεί", + /*0194*/"restore the device page" => "Ανάκτηση της σελίδας της συσκευής", + /*0195*/"hide the device page" => "Απόκρυψη της σελίδας της συσκευής", + /*0196*/"Download the xml file of all the scanners in the database" => "Μεταφορτώστε το αρχείο xml όλων των σαρωτών που περικλείονται στη βάση δεδομένων", + /*0197*/"Special pages for administrators" => "Ειδικές σελίδες για διαχειριστές", + /*0198*/"Special pages for moderators" => "Ειδικές σελίδες για τους συντονιστές/moderators", + /*0199*/"see the page" => "Δείτε την σελίδα", + /*0200*/"hidden device pages" => "Κρυφές σελίδες των συσκευών", + /*0201*/"panel" => "πάνελ", + /*0202*/"List of hidden device pages" => "Κατάλογος των κρυφών σελίδων των συσκευών", + /*0203*/"approve the device page" => "Έγκριση της σελίδας της συσκευής", + /*0204*/"This device page has not been approved yet" => "Αυτή η σελίδα συσκευής δεν έχει ακόμη εγκριθεί", + /*0205*/"Device pages that have to be approved" => "Σελίδες συσκευών προς έγκριση", + /*0206*/"The device page has to be approved by an administrator of the website" => "Αυτή η σελίδα συσκευής πρέπει να εγκριθεί από έναν διαχειριστή της ιστοσελίδας", + /*0207*/"permanently delete the device page" => "Διαγράψτε οριστικά την σελίδα συσκευής", + /*0208*/"This page has been permanently deleted by an administrator of the website" => "Αυτή η σελίδα έχει διαγραφεί οριστικά από έναν διαχειριστή της ιστοσελίδας", + /*0209*/"No ethernet devices found" => "Δεν βρέθηκε καμία κάρτα ethernet", + /*0210*/"free BIOS" => "Ελεύθερο BIOS", + /*0211*/"You are not a registered user or you have not logged in. Your contribution won't be published until an administrator approves it. If you want your contributions to be automatically published please log in or create an account." => "Δεν είστε ένας εγγεγραμμένος χρήστης, ή δεν κάνατε login. Η συνεισφορά σας δεν θα δημοσιευθεί μέχρι να εγκριθεί από έναν διαχειριστή. Αν επιθυμείτε να δημοσιεύεται αυτομάτως η συνεισφορά σας, τότε, παρακαλώ κάντε login, ή δημιουργήστε έναν λογαριασμό.", + /*0212*/"has been inserted by an anonymous user, it has to be approved by an administrator in order to be published" => "έχει εισαχθεί από έναν ανώνυμο χρήστη, και θα πρέπει πρώτα να εγκριθεί από έναν διαχειριστή για να δημοσιευθεί", + /*0213*/"you can also subscribe to the feed in order to receive the new modifications that need a moderation" => "μπορείτε και να εγγραφείτε στη ροή νέων, για να λαμβάνετε τις νέες τροποποιήσεις που χρειάζονται συντονισμό", + /*0214*/"you need javascript enabled in order to correctly use the language's tabs (see below)" => "πρέπει να έχετε ενεργοποιήσει την Javascript για να χρησιμοποιείτε σωστά τις καρτέλες γλώσσας (δείτε πιο κάτω)", + /*0215*/"yes" => "Ναι", + /*0216*/"works with 3D acceleration" => "Λειτουργεί με επιτάχυνση 3D", + /*0217*/"works, but without 3D acceleration" => "Λειτουργεί, αλλά χωρίς επιτάχυνση 3D", + /*0218*/"it does not work" => "Δεν λειτουργεί", + /*0219*/"Notebooks, netbooks, tablet PC" => "Φορητοί υπολογιστές, Υπο-φορητοί, Ταμπλέτες", + /*0220*/"Wifi cards" => "Κάρτες wifi", + /*0221*/"Video cards" => "Κάρτες γραφικών", + /*0222*/"Printers and multifunction" => "Εκτυπωτές και πολυεργαλεία", + /*0223*/"Scanners" => "Σαρωτές", + /*0224*/"3G cards" => "Κάρτες 3G", + /*0225*/"Sound cards" => "Κάρτες ήχου", + /*0226*/"Webcams" => "Διαδικτυακές κάμερες Webcam", + /*0227*/"Bluetooth devices" => "Συσκευές bluetooth", + /*0228*/"TV/Video/FM acquisition cards" => "Κάρτες λήψης TV/Video/FM", + /*0229*/"Fingerprint readers" => "Συσκευές ανγνώρισης δακτυλικών αποτυπωμάτων", + /*0230*/"Ethernet cards" => "Κάρτες ethernet", + /*0231*/"Hardware" => "Υλικό/ Hardware", + /*0232*/"Issues" => "Προβλήματα", + /*0233*/"Search" => "Αναζήτηση", + /*0234*/"News" => "Νέα", + /*0235*/"Download" => "Μεταφόρτωση", + /*0236*/"Help" => "Βοήθεια", + /*0237*/"List of" => "Κατάλογος των", + /*0238*/"talk messages" => "μυνήματα συζήτησης", + /*0239*/"History" => "Ιστορικό", + /*0240*/"Revision" => "Αναθεώρηση", + /*0241*/"This is an old revision of this page, as edited by" => "Αυτή είναι μια παλιά αναθεώρηση της σελίδας, έτσι όπως τροποποιήθηκε από τον/την", + /*0242*/"It may differ significantly from the" => "Μπορεί να διαφέρει σημαντικά από την", + /*0243*/"Differences between the revision of" => "Διαφορές ανάμεσα στην αναθεώρηση του/της", + /*0244*/"created by" => "που δημιουργήθηκε από τον/την", + /*0245*/"and the revision of" => "και την αναθεώρηση του/της", + /*0246*/"Notice: the text in red has been deleted from the previous revision, the text in green has been added in this revision and the text in gray has not been changed." => "Σημείωση: το κείμενο με κόκκινο έχει διαγραφεί από την προηγούμενη αναθεώρηση, το κείμενο με πράσινο έχει προστεθεί σε αυτή την αναθεώρηση και το κείμενο με γκρι δεν έχει αλλαχθεί", + /*0247*/"Insert" => "Εισαγωγή", + /*0248*/"Edit" => "Τροποποίηση", + /*0249*/"Talk page" => "Σελίδα συζήτησης", + /*0250*/"Download the xml file of all the ethernet cards in the database" => "Μεταφορτώστε το αρχείο xml όλων των καρτών ethernet που περικλείονται στη βάση δεδομένων", + /*0251*/"No SD card readers found" => "Δεν βρέθηκε καμία συσκευή ανάγνωσης καρτών SD", + /*0252*/"SD card readers" => "Συσκευές ανάγνωσης καρτών SD", + /*0253*/"Download the xml file of all the SD card readers in the database" => "Μεταφορτώστε το αρχείο xml όλων των συσκευών ανάγνωσης καρτών SD που περικλείονται στη βάση δεδομένων", + /*0254*/"There are no devices in the database with the vendorid:productid code specified by you." => "Δεν υπάρχουν συσεκυές στη βάση δεδομένων με τον κωδικό vendorid:productid που να διευκρινίσθηκε από εσάς", + /*0255*/"Would you like to add it to the database?" => "Θα θέλατε να το προσθέσετε στη βάση δεδομεων;", + /*0256*/"can free operating systems be installed?" => "μπορούν να εγκατασταθούν ελεύθερα λειτοργικά συστήματα;", + /*0257*/"This issue has been deleted" => "Αυτό το πρόβλημα έχει διαγραφεί", + /*0258*/"hidden for those who are not moderators" => "κρυφό για εκείνους που δεν είναι συντονιστές", + /*0259*/"This issue is hidden for all the users that are not moderators" => "Αυτό το πρόβλημα είναι κρυφό για όλους τους χρήστες που δεν είναι συντονιστές", + /*0260*/"hide the issue" => "Κρύψτε το πρόβλημα", + /*0261*/"show the issue" => "Εμφάνιση του προβλήματος", + /*0262*/"open the issue again" => "Ανοίξτε το πρόβλημα ξανά", + /*0263*/"close the issue" => "Κλείστε το πρόβλημα", + /*0264*/"This issue is closed" => "Αυτό το πρόβλημα έχει κλείσει", + /*0265*/"This issue is opened" => "Αυτό το πρόβλημα είναι ανοικτό", + /*0266*/"does it adopt any techniques to track users?" => "Υιοθετεί οποιεσδήποτε τεχνικές για παρακολούθηση των χρηστών;", + /*0267*/"Actions carried out by users" => "Ενέργειες που εκτελέσθηκαν από τους χρήστες", + /*0268*/"No modems found" => "Δεν βρέθηκε κανένα modem", + /*0269*/"Download the xml file of all the modems in the database" => "Μεταφορτώστε το αρχείο xml όλων των συσκευών modem που περιλαμβάνονται στη βάση δεδομένων", + /*0270*/"Modems and ADSL cards" => "Συσκευές Modem και κάρτες ADSL", + /*0271*/"Table of contents" => "Πίνακας περιεχομένων", + /*0272*/"by" => "Δημιουργήθηκε από τον/την", + /*0273*/"Add a message" => "Προσθέστε ένα μήνυμα", + /*0274*/"Save" => "Αποθήκευση", + /*0275*/"Revision of the wiki page" => "Αναθεώρηση της σελίδας του wiki", + /*0276*/"Preview" => "Προεπισκόπηση", + /*0277*/"January" => "Ιανουάριος", + /*0278*/"February" => "Φεβρουάριος", + /*0279*/"March" => "Μάρτιος", + /*0280*/"April" => "Απρίλιος", + /*0281*/"May" => "Μάιος", + /*0282*/"June" => "Ιούνιος", + /*0283*/"July" => "Ιούλιος", + /*0284*/"August" => "Αύγουστος", + /*0285*/"September" => "Σεπτέμβριος", + /*0286*/"October" => "Οκτώβριος", + /*0287*/"November" => "Νοέμβριος", + /*0288*/"December" => "Δεκέμβριος", + /*0289*/"not-specified" => "μη-διευκρινισμένο", + /*0290*/"last-inserted" => "τελευταία-εισαγωγή", + /*0291*/"last inserted" => "τελευταία εισαγωγή", + /*0292*/"alphabetically" => "κατά αλφαβητική σειρά", + /*0293*/"alphabetically-desc" => "κατά-φθίνουσα-αλφαβητική-σειρά", + /*0294*/"alphabetically desc" => "κατά φθίνουσα αλφαβητική σειρά", + /*0295*/"undef" => "αδιευκρ", + /*0296*/"All" => "Όλοι", + /*0297*/"inkjet" => "ψεκασμού μελάνης", + /*0298*/"A-Full" => "A-Πλήρης", + /*0299*/"B-Partial" => "B-Μερικός", + /*0300*/"C-None" => "C-Κανείς", + /*0301*/"A-platinum" => "A-Πλατινένιος", + /*0302*/"B-gold" => "B-χρυσός", + /*0303*/"C-silver" => "C-αργυρός", + /*0304*/"D-bronze" => "D-χάλκινος", + /*0305*/"E-garbage" => "E-σκουπίδια", + /*0306*/"not specified how it works" => "Δεν διευκρινίσθηκε πως λειτουργεί", + /*0307*/"there is no wifi card" => "Δεν υπάρχει κάρτα wifi", + /*0308*/"there is no webcam" => "Δεν υπάρχει καμία διαδικτυακή κάμερα", + /*0309*/"it works" => "Λειτουργεί", + /*0310*/"does_not_work" => "Δεν λειτουργεί", + /*0311*/"works_without_3D" => "Λειτουργεί χωρίς 3D", + /*0312*/"works_with_3D" => "Λειτουργεί με 3D", + /*0313*/"list of languages" => "Κατάλογος γλωσσών", + /*0314*/"Choose the language" => "Επιλέξτε μία γλώσσα", + /*0315*/"back" => "πίσω", + /*0316*/"next" => "τα επόμενα", + /*0317*/"previous" => "τα προηγούμενα", + /*0318*/"type" => "τύπος", + ), + 'pt' => array + ( + /*0001*/"Search one device in the archive" => "Procurar um dispositivo no arquivo", + /*0002*/"hardware type" => "Tipo de hardware", + /*0003*/"the model name contains" => "O nome do modelo contém", + /*0004*/"List of issues" => "Lista de discussões", + /*0005*/"TITLE" => "TÍTULO", + /*0006*/"TOPIC" => "TÓPICO", + /*0007*/"OPENED BY" => "ABERTO POR", + /*0008*/"DATE" => "DATA", + /*0009*/"REPLIES" => "RESPOSTAS", + /*0010*/"PRIORITY" => "PRIORIDADE", + /*0011*/"STATUS" => "STATUS", + /*0012*/"You have to" => "Você precisa", + /*0013*/"in order to submit an issue" => "para poder cadastrar uma discussão", + /*0014*/"in order to add a message" => "para pode adicionar uma mensagem", + /*0015*/"Description" => "Descrição", + /*0016*/"Messages" => "Mensagens", + /*0017*/"this message has been deleted" => "esta mensagem foi excluída", + /*0018*/"in order to submit a message to this issue" => "para poder enviar uma mensagem para esta discussão", + /*0019*/"model name" => "nome do modelo", + /*0020*/"model type" => "tipo de modelo", + /*0021*/"year of commercialization" => "ano de comercialização", + /*0022*/"Results of the search" => "Resultados da pesquisa", + /*0023*/"page list" => "página", + /*0024*/"No devices found" => "Nenhum dispositivo encontrado", + /*0025*/"vendor" => "fabricante", + /*0026*/"compatibility" => "compatibilidade", + /*0027*/"year" => "ano", + /*0028*/"subtype" => "subtipo", + /*0029*/"sort by" => "ordenar por", + /*0030*/"interface" => "interface", + /*0031*/"does it work?" => "funciona?", + /*0032*/"preview of the message" => "visualização da mensagem", + /*0033*/"preview of the new issue message" => "visualização da mensagem da nova discussão", + /*0034*/"Add a message to this issue" => "Adicionar uma mensagem a esta discussão", + /*0035*/"Add a new issue" => "Adicionar uma nova discussão", + /*0036*/"MESSAGE" => "MENSAGEM", + /*0037*/"there are no messages" => "não há mensagens", + /*0038*/"No notebooks found" => "Nenhum notebook encontrado", + /*0039*/"subtype (notebook, netbook, tablet)" => "subtipo (notebook, netbook, tablet)", + /*0040*/"compatibility with free software" => "compatibilidade com software livre", + /*0041*/"view the other specifications" => "exibir as outras especificações", + /*0042*/"model" => "Modelo", + /*0043*/"model id" => "ID do modelo", + /*0044*/"tested on" => "testado com", + /*0045*/"tested with the following kernel libre" => "testado com o seguinte kernel livre", + /*0046*/"video card model" => "modelo da placa de vídeo", + /*0047*/"wifi model" => "modelo da placa wifi", + /*0048*/"GNU/Linux distribution used for the test" => "distribuição GNU/Linux usada para teste", + /*0049*/"does the video card work?" => "a placa de vídeo funciona?", + /*0050*/"does the wifi card work?" => "a placa wifi funciona?", + /*0051*/"Description: (write here all the useful information)" => "Descrição (escreva todas as informações que achar útil)", + /*0052*/"discover all the wiki tags" => "explore todas as tags da wiki", + /*0053*/"Fields marked with * are mandatory" => "Campos marcados com * são obrigatórios", + /*0054*/"No printers found" => "Nenhuma impressora encontrada", + /*0055*/"interface" => "interface", + /*0056*/"VendorID:ProductID code of the device" => "código VendorID:ProductID do dispositivo", + /*0057*/"free driver used" => "driver livre utilizado", + /*0058*/"set not-specified if not sure" => "defina como não-especificado se não tiver certeza", + /*0059*/"see the help page or leave blank if you are not sure" => "leia a página de ajuda ou deixe em branco se não tiver certeza", + /*0060*/"No scanners found" => "Nenhum scanner encontrado", + /*0061*/"No video cards found" => "Nenhuma placa de vídeo encontrada", + /*0062*/"how does it work with free software?" => "como ele funciona com software livre?", + /*0063*/"No wifi cards found" => "Nenhuma placa wifi encontrada", + /*0064*/"does it work with free software?" => "funciona com software livre?", + /*0065*/"differences in the entry" => "diferenças no campo", + /*0066*/"No 3G cards found" => "Nenhum dispositivo 3G encontrado", + /*0067*/"Please specify in the below description entry the Internet Service Provider (ISP) and the country where the service is provided" => "Indique no campo de descrição abaixo o Provedor de Acesso à Internet (ISP) e o país onde o serviço é prestado", + /*0068*/"webcam model" => "modelo da webcam", + /*0069*/"does it have a free BIOS?" => "Tem uma BIOS livre?", + /*0070*/"does the webcam work?" => "A webcam funciona?", + /*0071*/"Current revision" => "Versão atual", + /*0072*/"Hello" => "Olá", + /*0073*/"Your" => "Seu", + /*0074*/"control panel" => "Painel de controle", + /*0075*/"create new account" => "Criar uma nova conta", + /*0076*/"request new password" => "Solicitar uma nova senha", + /*0077*/"website statistics" => "Estatísticas da página Web", + /*0078*/"hardware in the database" => "O hardware no banco de dados", + /*0079*/"users logged" => "usuários on-line", + /*0080*/"Watch your public profile" => "Veja o seu perfil público", + /*0081*/"Edit your profile" => "Editar o seu perfil", + /*0082*/"Change your e-mail address" => "Alterar o seu endereço de e-mail", + /*0083*/"Change your password" => "Alterar a sua senha", + /*0084*/"Delete your account" => "Excluir a sua conta", + /*0085*/"choose the username" => "escolha o nome de usuário", + /*0086*/"characters allowed" => "caracteres permitidos", + /*0087*/"your e-mail address" => "seu endereço de e-mail", + /*0088*/"necessary to confirm the registration" => "é necessário confirmar o registro", + /*0089*/"choose the password" => "escolha a senha", + /*0090*/"confirm the password" => "confirme a senha", + /*0091*/"write the code above" => "digite o código acima", + /*0092*/"write your username" => "digite o seu nome de usuário", + /*0093*/"Actions carried out by moderators" => "Ações realizadas pelos moderadores", + /*0094*/"meet" => "reunir", + /*0095*/"Public profile of" => "Perfil público de", + /*0096*/"See all the contributions of" => "Veja todas as contribuições de", + /*0097*/"My website" => "Minha página da Web", + /*0098*/"My real name" => "Meu nome verdadeiro", + /*0099*/"My e-mail address" => "Meu endereço de e-mail", + /*0100*/"I'm from" => "Sou de", + /*0101*/"Birthdate" => "Data de nascimento", + /*0102*/"My favourite distribution" => "Minha distribuição favorita", + /*0103*/"Free software projects I'm working on" => "Projetos de software livre que eu colaboro", + /*0104*/"My description" => "Minha descrição", + /*0105*/"contributions" => "contribuições", + /*0106*/"contributions of" => "contribuições de", + /*0107*/"No sound cards found" => "Nenhuma placa de som encontrada", + /*0108*/"LAST UPDATE" => "ÚLTIMA ATUALIZAÇÃO", + /*0109*/"search by" => "Pesquisar por", + /*0110*/"analyze the output of the lspci command" => "Analisar o resultado do comando lspci", + /*0111*/"paste the output of the lspci command" => "Cole o resultado do comando lspci", + /*0112*/"works, but without 3D acceleration" => "funciona, mas sem aceleração 3D", + /*0113*/"the text submitted by you does not seem the lspci -vmmnn output. Please check the text and try again" => "o texto enviado por você não parece o resultado do comando lspci -vmmnn. Verifique o texto e tente novamente", + /*0114*/"Search form" => "Formulário de pesquisa", + /*0115*/"write here the output of lspci -vmmnn" => "digite o resultado do comando lspci -vmmnn", + /*0116*/"The following devices has been found in the database" => "Os dispositivos a seguir foram encontrados no banco de dados", + /*0117*/"yes" => "sim", + /*0118*/"no" => "não", + /*0119*/"The following devices has not been found in the database" => "Os dispositivos a seguir não foram encontrados no banco de dados", + /*0120*/"can you please insert them?" => "Você pode inseri-los?", + /*0121*/"No webcams found" => "Nenhuma webcam encontrada", + /*0122*/"Download the xml file of all the database" => "Baixar o arquivo xml do banco de dados completo", + /*0123*/"Download the xml file of all the notebooks in the database" => "Baixar o arquivo xml de todos os notebooks existentes no banco de dados", + /*0124*/"Download the xml file of all the wifi cards in the database" => "Baixar o arquivo xml de todas as placas wifi existentes no banco de dados", + /*0125*/"Download the xml file of all the video cards in the database" => "Baixar o arquivo xml de todas as placas de vídeo existentes no banco de dados", + /*0126*/"Download the xml file of all the printers in the database" => "Baixar o arquivo xml de todas as impressoras existentes no banco de dados", + /*0127*/"Download the xml file of all the 3G cards in the database" => "Baixar o arquivo xml de todos os dispositivos 3G existentes no banco de dados", + /*0128*/"Download the xml file of all the sound cards in the database" => "Baixar o arquivo xml de todas as placas de som existentes no banco de dados", + /*0129*/"Download the xml file of all the webcams in the database" => "Baixar o arquivo xml de todas as webcams existentes no banco de dados", + /*0130*/"You can download all the h-node database in one unique xml file in order to parse its contents by means of some proper script (for example a Python or Perl or PHP script)" => "Você pode baixa todo o conteúdo do banco de dados do h-node em um único arquivo xml, a fim de analisar todo o seu conteúdo através de um script adequado (por exemplo, um script em Python, Perl ou PHP)", + /*0131*/"Download the h-node hardware database in xml format" => "Baixar o banco de dados de hardware do h-node em formato xml", + /*0132*/"Database modifications" => "Modificações no banco de dados", + /*0133*/"List of the database modifications carried out by users" => "Lista das modificações no banco de dados realizadas por usuários", + /*0134*/"the model" => "o modelo", + /*0135*/"has been inserted by" => "foi inserido por", + /*0136*/"has been updated by" => "foi atualizado por", + /*0137*/"at" => "em", + /*0138*/"last modifications" => "últimas modificações", + /*0139*/"watch all modifications" => "ver todas as modificações", + /*0140*/"the title" => "o título", + /*0141*/"the text of the wiki page" => "o texto da página wiki", + /*0142*/"the wiki page has not been found" => "a página wiki não foi encontrada", + /*0143*/"Page not-found" => "Página não encontrada", + /*0144*/"Insert" => "Inserir", + /*0145*/"Update" => "Atualizar", + /*0146*/"History" => "Histórico", + /*0147*/"Revision" => "Versão", + /*0148*/"Differences" => "Diferenças", + /*0149*/"Insert a new wiki page" => "Insere uma nova página wiki", + /*0150*/"Edit the wiki page" => "Edita a página wiki", + /*0151*/"Make current" => "Tornar a atual", + /*0152*/"I want to make this revision the current revision" => "Quero fazer desta versão a atual", + /*0153*/"Confirm" => "Confirmar", + /*0154*/"Make this revision the current revision of the page" => "Tornar esta versão a versão atual da página", + /*0155*/"This wiki page has been deleted" => "Esta página wiki foi excluída", + /*0156*/"Talk" => "Discussão", + /*0157*/"Talk page of the wiki page" => "Página de discussão da página wiki", + /*0158*/"a page with the same title already exists" => "já existe uma página com o mesmo título", + /*0159*/"title is too long" => "o título é muito grande", + /*0160*/"the page text is too long" => "o texto da página é muito grande", + /*0161*/"History of the wiki page" => "Histórico da página wiki", + /*0162*/"Would you like to insert it?" => "Gostaria de inseri-la?", + /*0163*/"Wiki modifications" => "Modificações da wiki", + /*0164*/"List of the wiki modifications carried out by users" => "Lista das modificações da wiki realizadas pelos usuários", + /*0165*/"list of pages" => "lista de páginas", + /*0166*/"List of wiki pages" => "Lista de páginas da wiki", + /*0167*/"This wiki page has been blocked" => "Esta página da wiki foi bloqueada", + /*0168*/"unblock the wiki page" => "desbloqueia a página da wiki", + /*0169*/"block the wiki page" => "bloqueia a página da wiki", + /*0170*/"show the wiki page" => "mostra a página da wiki", + /*0171*/"hide the wiki page" => "oculta a página da wiki", + /*0172*/"list of deleted pages" => "lista as páginas excluídas", + /*0173*/"restore the wiki page" => "restaura a página da wiki", + /*0174*/"delete the wiki page" => "exclui a página da wiki", + /*0175*/"list of blocked pages" => "lista de páginas bloqueadas", + /*0176*/"special pages" => "páginas especiais", + /*0177*/"Actions carried out by administrators" => "Ações realizadas pelos administradores", + /*0178*/"No bluetooth devices found" => "Nenhom dispositivo bluetooth encontrado", + /*0179*/"learn how to find it" => "aprenda a encontrá-lo", + /*0180*/"Download the xml file of all the bluetooth devices in the database" => "Baixar o arquivo xml de todos os dispositivos bluetooth existentes no banco de dados", + /*0181*/"License information" => "Informações sobre a licença", + /*0182*/"No acquisition card found" => "Nenhum placa de captura encontrada", + /*0183*/"No fingerprint readers found" => "Nenhum leitor de impressão digital encontrado", + /*0184*/"Download the xml file of all the acquisition cards in the database" => "Baixar o arquivo xml de todas as placas de captura existentes no banco de dados", + /*0185*/"Download the xml file of all the fingerprint readers in the database" => "Baixar o arquivo xml de todos os leitores de impressão digital existentes no banco de dados", + /*0186*/"architecture" => "arquitetura", + /*0187*/"Add here the device name as written on the device itself or on the device box. Add it only if it is different from the model name already inserted inside the above entry. Add the new name in such a way that there is one name per row." => "Adicione aqui o nome do dispositivo como escrito nele próprio ou na caixa. Adicione-o apenas se ele for diferente do nome do dispositivo já inserido no campo acima. Adicione o novo nome em uma única linha.", + /*0188*/"Write here the model name obtained by the lspci or lsusb command." => "Digite aqui o nome do modelo, conforme obtido através do comando lspci ou lsusb.", + /*0189*/"This is the name of the chipset of your device." => "Este é o nome do chipset do seu dispositivo.", + /*0190*/"possible other names of the device" => "outros possíveis nomes do dispositivo", + /*0191*/"Description entry preview" => "Visualização do campo descrição", + /*0192*/"Page preview" => "Visualização da página", + /*0193*/"This device page has been hidden" => "Esta página do dispositivo foi ocultada", + /*0194*/"restore the device page" => "restaurar a página do dispositivo", + /*0195*/"hide the device page" => "ocultar a página do dispositivo", + /*0196*/"Download the xml file of all the scanners in the database" => "Baixar o arquivo xml de todos os scanners existentes no banco de dados", + /*0197*/"Special pages for administrators" => "Páginas especiais para administradores", + /*0198*/"Special pages for moderators" => "Páginas especiais para moderadores", + /*0199*/"see the page" => "veja a página", + /*0200*/"hidden device pages" => "Páginas ocultas do dispositivo", + /*0201*/"panel" => "painel", + /*0202*/"List of hidden device pages" => "Lista das páginas ocultas do dispositivo", + /*0203*/"approve the device page" => "aprovar a página do dispositivo", + /*0204*/"This device page has not been approved yet" => "Esta página do dispositivo ainda não foi aprovada", + /*0205*/"Device pages that have to be approved" => "Páginas do dispositivo que foram aprovadas", + /*0206*/"The device page has to be approved by an administrator of the website" => "A página do dispositivo foi aprovada por um dos administradores da página Web", + /*0207*/"permanently delete the device page" => "excluir permanentemente a página do dispositivo", + /*0208*/"This page has been permanently deleted by an administrator of the website" => "Esta página foi excluída de forma permanente por um dos administradores da página Web", + /*0209*/"No ethernet devices found" => "Nenhum dispositivo ethernet encontrado", + /*0210*/"free BIOS" => "BIOS livre", + /*0211*/"You are not a registered user or you have not logged in. Your contribution won't be published until an administrator approves it. If you want your contributions to be automatically published please log in or create an account." => "Você não é um usuário registrado ou não está autenticado. A sua contribuição não será publicada até que seja aprovada por um administrador. Se você deseja que suas contribuições seja publicadas automaticamente, por favor, autentique-se ou crie uma conta.", + /*0212*/"has been inserted by an anonymous user, it has to be approved by an administrator in order to be published" => "foi inserida por um usuário anônimo, ela precisa ser aprovada por um administrador para ser publicada", + /*0213*/"you can also subscribe to the feed in order to receive the new modifications that need a moderation" => "você também pode assinar a fonte de notícias (feed) para receber novas notificações que precisam de moderação", + /*0214*/"you need javascript enabled in order to correctly use the language's tabs (see below)" => "você precisa ativar o javascript para usar corretamente as abas de idiomas (veja abaixo)", + /*0215*/"yes" => "sim", + /*0216*/"works with 3D acceleration" => "funciona com aceleração 3D", + /*0217*/"works, but without 3D acceleration" => "funciona, mas sem aceleração 3D", + /*0218*/"it does not work" => "não funciona", + /*0219*/"Notebooks, netbooks, tablet PC" => "Notebooks, netbooks, tablet PC", + /*0220*/"Wifi cards" => "Placas wifi", + /*0221*/"Video cards" => "Placas de vídeo", + /*0222*/"Printers and multifunction" => "Impressoras e multifuncionais", + /*0223*/"Scanners" => "Scanners", + /*0224*/"3G cards" => "Dispositivos 3G", + /*0225*/"Sound cards" => "Placas de som", + /*0226*/"Webcams" => "Webcams", + /*0227*/"Bluetooth devices" => "Dispositivos bluetooth", + /*0228*/"TV/Video/FM acquisition cards" => "Placas de captura de vídeo/TV/FM", + /*0229*/"Fingerprint readers" => "Leitores de impressão digital", + /*0230*/"Ethernet cards" => "Placas de rede", + /*0231*/"Hardware" => "Hardware", + /*0232*/"Issues" => "Discussões", + /*0233*/"Search" => "Pesquisar", + /*0234*/"News" => "Novidades", + /*0235*/"Download" => "Download", + /*0236*/"Help" => "Ajuda", + /*0237*/"List of" => "Lista de", + /*0238*/"talk messages" => "mensagens", + /*0239*/"History" => "Histórico", + /*0240*/"Revision" => "Versões", + /*0241*/"This is an old revision of this page, as edited by" => "Esta é uma versão antiga desta página, editada por", + /*0242*/"It may differ significantly from the" => "Ela pode ser muito diferente da", + /*0243*/"Differences between the revision of" => "Diferenças entre a versão de", + /*0244*/"created by" => "criada por", + /*0245*/"and the revision of" => "e a versão de", + /*0246*/"Notice: the text in red has been deleted from the previous revision, the text in green has been added in this revision and the text in gray has not been changed." => "Aviso: o texto em vermelho foi excluído da versão anterior, o texto em verde foi adicionado nesta versão e o texto em cinza não foi alterado.", + /*0247*/"Insert" => "Inserir", + /*0248*/"Edit" => "Editar", + /*0249*/"Talk page" => "Pagina de discussões", + /*0250*/"Download the xml file of all the ethernet cards in the database" => "Baixar o arquivo xml de todas as placas de rede existentes no banco de dados", + /*0251*/"No SD card readers found" => "Nenhum leitor de cartão SD encontrado", + /*0252*/"SD card readers" => "Leitores de cartão SD", + /*0253*/"Download the xml file of all the SD card readers in the database" => "Baixar o arquivo xml de todos os leitores de cartão SD existentes no banco de dados", + /*0254*/"There are no devices in the database with the vendorid:productid code specified by you." => "Não há dispositivos no banco de dados com o código vendorid:productid indicado.", + /*0255*/"Would you like to add it to the database?" => "Gostaria de adicioná-lo ao banco de dados?", + /*0256*/"can free operating systems be installed?" => "É possível instalar sistemas operacionais livres?", + /*0257*/"This issue has been deleted" => "Esta discussão foi excluída", + /*0258*/"hidden for those who are not moderators" => "Oculto para os que não forem moderadores", + /*0259*/"This issue is hidden for all the users that are not moderators" => "Esta discussão foi oculta para todos os usuários que não são moderadores", + /*0260*/"hide the issue" => "ocultar esta discussão", + /*0261*/"show the issue" => "mostrar esta discussão", + /*0262*/"open the issue again" => "abrir a discussão novamente", + /*0263*/"close the issue" => "fechar a discussão", + /*0264*/"This issue is closed" => "Esta discussão está fechada", + /*0265*/"This issue is opened" => "Esta discussão está aberta", + /*0266*/"does it adopt any techniques to track users?" => "Ela adota alguma técnica para controlar usuários?", + /*0267*/"Actions carried out by users" => "Ações realizadas por usuários", + /*0268*/"No modems found" => "Nenhum modem encontrado", + /*0269*/"Download the xml file of all the modems in the database" => "Baixar o arquivo xml de todos os modems existentes no banco de dados", + /*0270*/"Modems and ADSL cards" => "Modems e placas ADSL", + /*0271*/"Table of contents" => "Índice", + /*0272*/"by" => "ciado por", + /*0273*/"Add a message" => "Adicionar uma mensagem", + /*0274*/"Save" => "Salvar", + /*0275*/"Revision of the wiki page" => "Versão da página wiki", + /*0276*/"Preview" => "Visualizar", + /*0277*/"January" => "Janeiro", + /*0278*/"February" => "Fevereiro", + /*0279*/"March" => "Março", + /*0280*/"April" => "Abril", + /*0281*/"May" => "Maio", + /*0282*/"June" => "Junho", + /*0283*/"July" => "Julho", + /*0284*/"August" => "Agosto", + /*0285*/"September" => "Setembro", + /*0286*/"October" => "Outubro", + /*0287*/"November" => "Novembro", + /*0288*/"December" => "Dezembro", + /*0289*/"not-specified" => "não especificado", + /*0290*/"last-inserted" => "inserido por último", + /*0291*/"last inserted" => "inserido por último", + /*0292*/"alphabetically" => "ordem alfabética", + /*0293*/"alphabetically-desc" => "ordem alfabética decrescente", + /*0294*/"alphabetically desc" => "ordem alfabética decrescente", + /*0295*/"undef" => "indefinido", + /*0296*/"All" => "Todos", + /*0297*/"inkjet" => "jato de tinta", + /*0298*/"A-Full" => "A-Total", + /*0299*/"B-Partial" => "B-Parcial", + /*0300*/"C-None" => "C-Nenhuma", + /*0301*/"A-platinum" => "A-Platina", + /*0302*/"B-gold" => "B-Ouro", + /*0303*/"C-silver" => "C-Prata", + /*0304*/"D-bronze" => "D-Bronze", + /*0305*/"E-garbage" => "E-Nenhuma", + /*0306*/"not specified how it works" => "o funcionamento não foi indicado", + /*0307*/"there is no wifi card" => "não há placa wifi", + /*0308*/"there is no webcam" => "não há webcam", + /*0309*/"it works" => "funciona", + /*0310*/"does_not_work" => "não funciona", + /*0311*/"works_without_3D" => "funciona sem 3D", + /*0312*/"works_with_3D" => "funciona com 3D", + /*0313*/"list of languages" => "lista de idiomas", + /*0314*/"Choose the language" => "Escolha o idioma", + /*0315*/"back" => "voltar", + /*0316*/"next" => "próximo", + /*0317*/"previous" => "anterior", + /*0318*/"type" => "tipo", + /*0319*/"contact us" => "entre em contato", + /*0320*/"credits" => "créditos", + /*0321*/"desktop version" => "versão para desktop", + /*0322*/"RAID adapters" => "Adaptadores RAID", + /*0323*/"No RAID adapter found" => "Nenhum adptador RAID encontrado", + /*0324*/"Download the xml file of all the RAID adapters in the database" => "Baixar o arquivo xml de todos os adaptadores RAID existentes no banco de dados", + /*0325*/"No PCMCIA Controller found" => "Nenhum controlador PCMCIA encontrado", + /*0326*/"PCMCIA Controllers" => "Controladores PCMCIA", + /*0327*/"Download the xml file of all the PCMCIA Controllers in the database" => "Baixar o arquivo xml de todos os controladores PCMCIA existentes no banco de dados", + /*0328*/"notebook" => "notebook", + /*0329*/"netbook" => "netbook", + /*0330*/"motherboard" => "placa-mãe", + /*0331*/"tablet" => "tablet", + /*0332*/"netbooks" => "netbook", + /*0333*/"Notebooks" => "Notebook", + /*0334*/"tablet PC" => "Tablet PC", + /*0335*/"motherboards" => "placas-mãe", + /*0336*/"Write a comma-separated list of kernel versions" => "Escreva uma lista de versões do kernel separadas por vírgula", + /*0337*/"Example" => "Exemplo", + /*0338*/"free boot firmware?" => "Firmware com boot livre?", + /*0339*/"can be installed" => "pode ser instalado", + /*0340*/"does it have a free boot firmware (BIOS,UEFI,...) ?" => "tem um firmware com boot livre (BIOS, UEFI,...)?", + /*0341*/"Hello,\n\nyou have registered an account at"=>"Olá!\n\nVocê tem uma conta registrada em", + /*0342*/"with the following data:\nusername: " => "com os seguintes dados:\nnome de usuário: ", + /*0343*/"in order to confirm the registration of the new account please follow the link below" => "a fim de confirmar o registro da nova conta,\nsiga o link abaixo", + /*0344*/"If you don't want to confirm the account registration\nthen wait one hour and your username and e-mail will be deleted from the database" => "Se não quiser confirmar o registro da conta,\nentão aguarde por uma hora para que seu nome de usuário e senha sejam excluídos do banco de dados", + /*0345*/"If you received this e-mail for error, please simply disregard this message" => "Se recebeu este e-mail por engano, por favor, simplesmente ignore esta mensagem", + /*0346*/"account registration" => "Controlador de host", + /*0347*/"Host Controllers" => "Controladores de host", + /*0348*/"No Host Controller found" => "Nenhum controlador de host encontrado", + /*0349*/"Download the xml file of all the Host Controllers in the database" => "Baixar o arquivo xml de todos os Controladores de host do banco de dados", + /*0350*/"PCMCIA Controller" => "Controlador PCMCIA", + /*0351*/"USB Controller" => "Controlador USB", + /*0352*/"Firewire Controller" => "Controlador Firewire", + /*0353*/"HECI Controller" => "Controlador HECI", + /*0354*/"device type" => "tipo de dispositivo", + /*0355*/"Thanks for your contribution!" => "Obrigado pela sua contribuição!", + /*0356*/"does the device prevent installing wifi cards not-approved by the vendor?" => "o dispositivo evita a instalação de placas wi-fi não aprovados pelo vendedor?", + /*0357*/"see the details inside the description entry" => "veja os detalhes dentro da entrada da descrição", + /*0358*/"Thanks for helping the h-node project and the free software movement!" => "Grazie per aver aiutato il progetto h-node e il movimento del software libero!", + /*0359*/"You have just inserted a new notebook into the database. Can you please insert its devices separately too? Thanks!" => "Obrigado por ajudar o Projeto H-node e o movimento Software Livre!?", + /*0360*/"insert" => "inserir", + /*0361*/"List of allowed fully free distributions" => "Lista de distribuições consideradas totalmente livres", + /*0362*/"Insert a new distro" => "Inserir uma nova distribuição", + /*0363*/"DISTRO-CODE" => "CÓDIGO DA DISTRIBUIÇÃO", + ), + ); + + public static $singular = array( + 'en' => array( + /*01*/'notebooks' => 'notebook', + /*02*/'wifi' => 'wifi card', + /*03*/'videocards' => 'video card', + /*04*/'printers' => 'printer', + /*05*/'scanners' => 'scanner', + /*06*/'threegcards' => '3G-card', + /*07*/'soundcards' => 'soundcard', + /*08*/'webcams' => 'webcam', + /*09*/'bluetooth' => 'bluetooth device', + /*10*/'acquisitioncards' => 'acquisition card', + /*11*/'fingerprintreaders' => 'fingerprint reader', + /*12*/'ethernetcards' => 'ethernet card', + /*13*/'sdcardreaders' => 'sd card reader', + /*14*/'modems' => 'modem', + /*15*/'raidadapters' => 'RAID adapter', + /*16*/'hostcontrollers' => 'host controller', + ), + 'it' => array( + /*01*/'notebooks' => 'notebook', + /*02*/'wifi' => 'scheda wifi', + /*03*/'videocards' => 'scheda video', + /*04*/'printers' => 'stampante', + /*05*/'scanners' => 'scanner', + /*06*/'threegcards' => 'scheda 3G', + /*07*/'soundcards' => 'scheda audio', + /*08*/'webcams' => 'webcam', + /*09*/'bluetooth' => 'dispositivo bluetooth', + /*10*/'acquisitioncards' => 'scheda di acquisizione', + /*11*/'fingerprintreaders' => 'lettore di impronte digitali', + /*12*/'ethernetcards' => 'scheda ethernet', + /*13*/'sdcardreaders' => 'lettore di schede sd', + /*14*/'modems' => 'modem', + /*15*/'raidadapters' => 'adattatore RAID', + /*16*/'hostcontrollers' => 'host controller', + ), + 'es' => array( + /*01*/'notebooks' => 'portátil', + /*02*/'wifi' => 'tarjeta wifi', + /*03*/'videocards' => 'tarjeta de video', + /*04*/'printers' => 'impresora', + /*05*/'scanners' => 'escáner', + /*06*/'threegcards' => 'tarjeta 3G', + /*07*/'soundcards' => 'tarjeta de audio', + /*08*/'webcams' => 'camara web', + /*09*/'bluetooth' => 'dispositivo bluetooth', + /*10*/'acquisitioncards' => 'tarjeta de adquisición', + /*11*/'fingerprintreaders' => 'lector de huella digital', + /*12*/'ethernetcards' => 'tarjeta de ethernet', + /*13*/'sdcardreaders' => 'lector de tarjetas sd', + /*14*/'modems' => 'modem', + /*15*/'raidadapters' => 'adaptador RAID', + /*16*/'hostcontrollers' => 'host controller', + ), + 'fr' => array( + /*01*/'notebooks' => 'notebook', + /*02*/'wifi' => 'carte wifi', + /*03*/'videocards' => 'carte graphique', + /*04*/'printers' => 'imprimante', + /*05*/'scanners' => 'scanneur', + /*06*/'threegcards' => 'carte 3G', + /*07*/'soundcards' => 'carte son', + /*08*/'webcams' => 'webcam', + /*09*/'bluetooth' => 'périphérique bluetooth', + /*10*/'acquisitioncards' => 'carte d\'acquisition', + /*11*/'fingerprintreaders' => 'lecteur d\'empreintes digitales', + /*12*/'ethernetcards' => 'carte ethernet', + /*13*/'sdcardreaders' => 'lecteur de carte SD', + /*14*/'modem' => 'modem', + /*15*/'raidadapters' => 'Adaptateur RAID', + /*16*/'hostcontrollers' => 'contrôleur hôte', + ), + 'de' => array( + /*01*/'notebooks' => 'notebook', + /*02*/'wifi' => 'wifi card', + /*03*/'videocards' => 'video card', + /*04*/'printers' => 'printer', + /*05*/'scanners' => 'scanner', + /*06*/'threegcards' => '3G-card', + /*07*/'soundcards' => 'soundcard', + /*08*/'webcams' => 'webcam', + /*09*/'bluetooth' => 'bluetooth device', + /*10*/'acquisitioncards' => 'acquisition card', + /*11*/'fingerprintreaders' => 'fingerprint reader', + /*12*/'ethernetcards' => 'ethernet card', + /*13*/'sdcardreaders' => 'sd card reader', + /*14*/'modems' => 'modem', + /*15*/'raidadapters' => 'RAID adapter', + /*16*/'hostcontrollers' => 'host controller', + ), + 'gr' => array( + /*01*/'notebooks' => 'Υπο-φορητοί υπολογιστές', + /*02*/'wifi' => 'Κάρτες wifi', + /*03*/'videocards' => 'Κάρτες γραφικών', + /*04*/'printers' => 'Εκτυπωτές', + /*05*/'scanners' => 'Σαρωτές', + /*06*/'threegcards' => 'Κάρτες 3G', + /*07*/'soundcards' => 'Κάρτες ήχου', + /*08*/'webcams' => 'Διαδικτυακές κάμερες', + /*09*/'bluetooth' => 'Συσκευές bluetooth', + /*10*/'acquisitioncards' => 'Κάρτες λήψης', + /*11*/'fingerprintreaders' => 'Συσκευές ανάγνωσης δακτυλικών αποτυπωμάτων', + /*12*/'ethernetcards' => 'Κάρτες ethernet', + /*13*/'sdcardreaders' => 'Συσκευές ανάγνωσης καρτών sd', + /*14*/'modems' => 'Συσκευές modem', + /*15*/'raidadapters' => 'RAID adapter', + /*16*/'hostcontrollers' => 'host controller', + ), + 'pt' => array( + /*01*/'notebooks' => 'notebook', + /*02*/'wifi' => 'wifi', + /*03*/'videocards' => 'placas de vídeo', + /*04*/'printers' => 'impressoras', + /*05*/'scanners' => 'scanners', + /*06*/'threegcards' => 'dispositivos 3G', + /*07*/'soundcards' => 'placas de som', + /*08*/'webcams' => 'webcams', + /*09*/'bluetooth' => 'dispositivos bluetooth', + /*10*/'acquisitioncards' => 'placas de captura', + /*11*/'fingerprintreaders' => 'leitores de impressão digital', + /*12*/'ethernetcards' => 'placas de rede', + /*13*/'sdcardreaders' => 'leitores de cartão SD', + /*14*/'modems' => 'modems', + /*15*/'raidadapters' => 'adaptadores RAID', + /*16*/'hostcontrollers' => 'controlador de host', + ), + ); + + public static $plural = array( + 'en' => array( + /*01*/'notebooks' => 'notebooks', + /*02*/'wifi' => 'wifi cards', + /*03*/'videocards' => 'video cards', + /*04*/'printers' => 'printers', + /*05*/'scanners' => 'scanners', + /*06*/'threegcards' => '3G-cards', + /*07*/'soundcards' => 'soundcards', + /*08*/'webcams' => 'webcams', + /*09*/'bluetooth' => 'bluetooth devices', + /*10*/'acquisitioncards' => 'acquisition cards', + /*11*/'fingerprintreaders' => 'fingerprint readers', + /*12*/'ethernetcards' => 'ethernet cards', + /*13*/'sdcardreaders' => 'sd card readers', + /*14*/'modems' => 'modems', + /*15*/'raidadapters' => 'RAID adapters', + /*16*/'hostcontrollers' => 'host controllers', + ), + 'it' => array( + /*01*/'notebooks' => 'notebook', + /*02*/'wifi' => 'schede wifi', + /*03*/'videocards' => 'schede video', + /*04*/'printers' => 'stampanti', + /*05*/'scanners' => 'scanner', + /*06*/'threegcards' => 'schede 3G', + /*07*/'soundcards' => 'schede audio', + /*08*/'webcams' => 'webcam', + /*09*/'bluetooth' => 'dispositivi bluetooth', + /*10*/'acquisitioncards' => 'schede di acquisizione', + /*11*/'fingerprintreaders' => 'lettori di impronte digitali', + /*12*/'ethernetcards' => 'schede ethernet', + /*13*/'sdcardreaders' => 'lettori di schede sd', + /*14*/'modems' => 'modem', + /*15*/'raidadapters' => 'adattatori RAID', + /*16*/'hostcontrollers' => 'host controller', + ), + 'es' => array( + /*01*/'notebooks' => 'portátiles', + /*02*/'wifi' => 'tarjetas wifi', + /*03*/'videocards' => 'tarjetas de video', + /*04*/'printers' => 'impresoras', + /*05*/'scanners' => 'escáneres', + /*06*/'threegcards' => 'tarjetas 3G', + /*07*/'soundcards' => 'tarjetas de audio', + /*08*/'webcams' => 'cámaras web', + /*09*/'bluetooth' => 'dispositivos bluetooth', + /*10*/'acquisitioncards' => 'tarjetas de adquisición', + /*11*/'fingerprintreaders' => 'lectores de huella digital', + /*12*/'ethernetcards' => 'tarjetas de ethernet', + /*13*/'sdcardreaders' => 'lectores de tarjetas sd', + /*14*/'modems' => 'modems', + /*15*/'raidadapters' => 'adaptadores RAID', + /*16*/'hostcontrollers' => 'host controllers', + ), + 'fr' => array( + /*01*/'notebooks' => 'notebooks', + /*02*/'wifi' => 'cartes wifi', + /*03*/'videocards' => 'cartes graphiques', + /*04*/'printers' => 'imprimantes', + /*05*/'scanners' => 'scanneurs', + /*06*/'threegcards' => 'cartes 3G', + /*07*/'soundcards' => 'cartes son', + /*08*/'webcams' => 'webcams', + /*09*/'bluetooth' => 'périphériques bluetooth', + /*10*/'acquisitioncards' => 'cartes d\'acquisition', + /*11*/'fingerprintreaders' => 'lecteurs d\'empreintes digitales ', + /*12*/'ethernetcards' => 'cartes ethernet', + /*13*/'sdcardreaders' => 'lecteurs de cartes SD', + /*14*/'modems' => 'modems', + /*15*/'raidadapters' => 'Adaptateurs RAID', + /*16*/'hostcontrollers' => 'contrôleurs hôte', + + ), + 'de' => array( + /*01*/'notebooks' => 'notebooks', + /*02*/'wifi' => 'wifi cards', + /*03*/'videocards' => 'video cards', + /*04*/'printers' => 'printers', + /*05*/'scanners' => 'scanners', + /*06*/'threegcards' => '3G-cards', + /*07*/'soundcards' => 'soundcards', + /*08*/'webcams' => 'webcams', + /*09*/'bluetooth' => 'bluetooth devices', + /*10*/'acquisitioncards' => 'acquisition cards', + /*11*/'fingerprintreaders' => 'fingerprint readers', + /*12*/'ethernetcards' => 'ethernet cards', + /*13*/'sdcardreaders' => 'sd card readers', + /*14*/'modems' => 'modems', + /*15*/'raidadapters' => 'RAID adapters', + /*16*/'hostcontrollers' => 'host controllers', + ), + 'gr' => array( + /*01*/'notebooks' => 'Υπο-φορητοί υπολογιστές', + /*02*/'wifi' => 'Κάρτες wifi', + /*03*/'videocards' => 'Κάρτες γραφικών', + /*04*/'printers' => 'Εκτυπωτές', + /*05*/'scanners' => 'Σαρωτές', + /*06*/'threegcards' => 'Κάρτες 3G', + /*07*/'soundcards' => 'Κάρτες ήχου', + /*08*/'webcams' => 'Διαδικτυακές κάμερες', + /*09*/'bluetooth' => 'Συσκευές bluetooth', + /*10*/'acquisitioncards' => 'Κάρτες λήψης', + /*11*/'fingerprintreaders' => 'Συσκευές ανάγνωσης δακτυλικών αποτυπωμάτων', + /*12*/'ethernetcards' => 'Κάρτες ethernet', + /*13*/'sdcardreaders' => 'Συσκευές ανάγνωσης καρτών sd', + /*14*/'modems' => 'Συσκευές modem', + /*15*/'raidadapters' => 'RAID adapters', + /*16*/'hostcontrollers' => 'host controllers', + ), + 'pt' => array( + /*01*/'notebooks' => 'notebooks', + /*02*/'wifi' => 'wifi', + /*03*/'videocards' => 'placas de vídeo', + /*04*/'printers' => 'impressoras', + /*05*/'scanners' => 'scanners', + /*06*/'threegcards' => 'dispositivos 3G', + /*07*/'soundcards' => 'placas de som', + /*08*/'webcams' => 'webcams', + /*09*/'bluetooth' => 'dispositivos bluetooth', + /*10*/'acquisitioncards' => 'placas de captura', + /*11*/'fingerprintreaders' => 'leitores de impressão digital', + /*12*/'ethernetcards' => 'placas de rede', + /*13*/'sdcardreaders' => 'leitores de cartão SD', + /*14*/'modems' => 'modems', + /*15*/'raidadapters' => 'adaptadores RAID', + /*16*/'hostcontrollers' => 'controladores de host', + ), + ); + + public static function sanitize($lang = 'en') + { + return (in_array($lang,self::$allowed)) ? sanitizeAll($lang) : 'en'; + } +} + +class Go +{ + + public static function toHardwareType($type) + { + return Url::getRoot().Hardware::getControllerFromType($type)."/catalogue/".Lang::$current; + } + + public static function toHardwareInsert($type) + { + return Url::getRoot().Hardware::getControllerFromType($type)."/insert/".Lang::$current; + } + + //go to the page of one device from the id of that device + public static function toHardwarePage($idHard = 0) + { + $clean['idHard'] = (int)$idHard; + $urls = getUrlsFromIdHard($clean['idHard']); + return $urls['urlView']; + } + +} + +class MyStrings +{ + + public static $view = array( + + ); + + //type => controller + public static $reverse = array( + 'notebook' => 'notebooks', + 'wifi' => 'wifi', + 'videocard' => 'videocards', + 'printer' => 'printers', + 'scanner' => 'scanners', + '3G-card' => 'threegcards', + 'soundcard' => 'soundcards', + 'webcam' => 'webcams', + 'bluetooth' => 'bluetooth', + 'acquisition-card' => 'acquisitioncards', + 'fingerprint-reader' => 'fingerprintreaders', + 'ethernet-card' => 'ethernetcards', + 'sd-card-reader' => 'sdcardreaders', + 'modem' => 'modems', + ); + + public static function getTypes() + { + return implode(',',array_keys(self::$reverse)); + } + +} diff --git a/Application/Include/license.php b/Application/Include/license.php new file mode 100644 index 0000000..08a6a2c --- /dev/null +++ b/Application/Include/license.php @@ -0,0 +1,93 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class License +{ + + //license notice that does appear at the bottom of each hardware and wiki page + public static $bottom = array( + 'en' => "The contents of this page are in the Public Domain. (see the CC0 page for detailed information). Anyone is free to copy, modify, publish, use, sell, or distribute the text for any purpose, commercial or non-commercial, and by any means.", + 'it' => "I contenuti di questa pagina sono di Pubblico Dominio. (leggi la pagina CC0 per informazioni dettagliate). Chiunque è libero di copiare, modificare, pubblicare, usare, vendere, o distribuire tale contenuto per qualsiasi fine, commerciale o non commerciale, e con ogni mezzo.", + 'es' => "El contenido de esta página está en Dominio Público. (vea la página CC0 para información detallada). Cualquiera es libre de copiar, modificar, publicar, usar, vender o distribuir el texto para cualquier propósito, comercial o no comercial, y por cualquier medio.", + 'fr' => "Le contenu de cette page est dans le Domaine Public (voir la page CC0 pour plus d'informations). Quiquonque est libre de copier, modifier, publier, utiliser, vendre ou distribuer le texte , quelques soit le but et le moyen.", + ); + + //license notice that does appear inside the xml download page + public static $insideXml = array( + 'en' => "The contents of this page are in the Public Domain. (see the CC0 page at http://creativecommons.org/publicdomain/zero/1.0/ for detailed information). Anyone is free to copy, modify, publish, use, sell, or distribute the text for any purpose, commercial or non-commercial, and by any means.", + 'it' => "I contenuti di questa pagina sono di Pubblico Dominio. (leggi la pagina CC0 all'indirizzo http://creativecommons.org/publicdomain/zero/1.0/deed.it per informazioni dettagliate). Chiunque è libero di copiare, modificare, pubblicare, usare, vendere, o distribuire tale contenuto per qualsiasi fine, commerciale o non commerciale, e con ogni mezzo.", + 'es' => "El contenido de esta página está en Dominio Público. (vea la página CC0 http://creativecommons.org/publicdomain/zero/1.0/deed.es_ES para información detallada). Cualquiera es libre de copiar, modificar, publicar, usar, vender o distribuir el texto para cualquier propósito, comercial o no comercial, y por cualquier medio.", + 'fr' => "Le contenu de cette page est dans le Domaine Public (voir la page CC0 http://creativecommons.org/publicdomain/zero/1.0/deed.fr pour plus d'informations). Quiquonque est libre de copier, modifier, publier, utiliser, vendre ou distribuer le texte , quelques soit le but et le moyen.", + ); + + //license notice that does appear before the submission of each hardware and wiki page + public static $submissionNotice = array( + 'en' => "Any text submitted by you will be put in the Public Domain (see the CC0 page for detailed information).", + 'it' => "Ogni testo da te inviato diventerà di Pubblico Dominio. (leggi la pagina CC0 per informazioni dettagliate).", + 'es' => "Cualquier texto agregado por usted será colocado en el Dominio Público (vea la página CC0 para información detallada).", + 'fr' => "Chaque texte que vous soumettrez seront placés dans le Domaine Public (voir la page CC0 pour plus d'informations)" + ); + + //license notice that does appear before the submission of each hardware page from the h-node client (h-client) + public static $submissionNoticeClient = array( + 'en' => "Any text submitted by you will be put in the Public Domain (see the CC0 page at \nhttp://creativecommons.org/publicdomain/zero/1.0/ for detailed information).", + 'it' => "Ogni testo da te inviato diventerà di Pubblico Dominio. (leggi la pagina CC0 all'indirizzo \nhttp://creativecommons.org/publicdomain/zero/1.0/deed.it per informazioni dettagliate).", + 'es' => "Cualquier texto agregado por usted será colocado en el Dominio Público (vea la página CC0 \nhttp://creativecommons.org/publicdomain/zero/1.0/deed.es_ES para información detallada).", + 'fr' => "Chaque texte que vous soumettrez seront placés dans le Domaine Public (voir la page CC0 \nhttp://creativecommons.org/publicdomain/zero/1.0/deed.fr pour plus d'informations)" + ); + + public static function getNotice($noticeArray) + { + if (array_key_exists(Lang::$current,$noticeArray)) + { + return $noticeArray[Lang::$current]; + } + else + { + return $noticeArray['en']; + } + } + + //get the bottom notice + public static function getBottom() + { + return self::getNotice(self::$bottom); + } + + //get the submission notice + public static function getSubmissionNotice() + { + return self::getNotice(self::$submissionNotice); + } + + //get the license notice insidethe xml download page + public static function getInsideXml() + { + return self::getNotice(self::$insideXml); + } + + //get the notice for the client + public static function getClientNotice() + { + return self::getNotice(self::$submissionNoticeClient); + } +} \ No newline at end of file diff --git a/Application/Include/myFunctions.php b/Application/Include/myFunctions.php new file mode 100644 index 0000000..b121424 --- /dev/null +++ b/Application/Include/myFunctions.php @@ -0,0 +1,542 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +function encodeUrl($url) +{ + $url = str_replace(' ','-',$url); + $url = str_replace('.','-',$url); + $url = str_replace(',','-',$url); + $url = str_replace('[','-',$url); + $url = str_replace(']','-',$url); + $url = str_replace('(','-',$url); + $url = str_replace(')','-',$url); + $url = str_replace('/','-',$url); + $url = str_replace(''','-',$url); + $url = str_replace('@','-at-',$url); + $url = str_replace('?','-',$url); + +// $temp = null; +// for ($i=0;$i $ovalue) + { + $nkeys = array_keys($new, $ovalue); +// echo memory_get_peak_usage(true)."
"; + foreach($nkeys as $nindex) + { + $matrix[$oindex][$nindex] = isset($matrix[$oindex - 1][$nindex - 1]) ? + $matrix[$oindex - 1][$nindex - 1] + 1 : 1; + if($matrix[$oindex][$nindex] > $maxlen) + { + $maxlen = $matrix[$oindex][$nindex]; + $omax = $oindex + 1 - $maxlen; + $nmax = $nindex + 1 - $maxlen; + } + } + } + if($maxlen == 0) return array(array('d'=>$old, 'i'=>$new)); + return array_merge( + diff(array_slice($old, 0, $omax), array_slice($new, 0, $nmax)), + array_slice($new, $nmax, $maxlen), + diff(array_slice($old, $omax + $maxlen), array_slice($new, $nmax + $maxlen))); +} + +function htmlDiff($old, $new) +{ + $old = str_replace("\r\n"," \r\n ",$old); + $new = str_replace("\r\n"," \r\n ",$new); + + $ret = null; + $diff = diff(removeEmptyStrings(explode(' ', $old)),removeEmptyStrings(explode(' ', $new))); + foreach($diff as $k) + { + if(is_array($k)) + $ret .= (!empty($k['d'])?"".implode(' ',$k['d'])." ":''). + (!empty($k['i'])?"".implode(' ',$k['i'])." ":''); + else $ret .= $k . ' '; + } + return $ret; +} + + +function applyBreaks($values,$fields) +{ + $fieldsArray = explode(',',$fields); + + foreach ($fieldsArray as $field) + { + if (array_key_exists($field,$values)) + { + $values[$field] = nl2br($values[$field]); + } + } + return $values; +} + + +function getLinkToUser($user) +{ + if (strstr($user,'__')) + { + return str_replace('__',null,$user); + } + else + { + return "$user"; + } +} + +function getUserName($id_user = 0) +{ + $clean['id_user'] = (int)$id_user; + $u = new UsersModel(); + return $u->getUser($clean['id_user']); +} + +function getMotivation($row,$controller) +{ + if (strcmp($row['deletion']['object'],'duplication') === 0) + { + $clean['id_hard'] = (int)$row['deletion']['id_duplicate']; + $hardware = new HardwareModel(); + $name = encodeUrl($hardware->getTheModelName($clean['id_hard'])); + return "duplication of the model having id ".$clean['id_hard'].""; + } + else + { + return "".$row['deletion']['object'].""; + } +} + +//get the text in the right language +function gtext($string) +{ + if (isset(Lang::$i18n[Lang::$current][$string])) + { + return Lang::$i18n[Lang::$current][$string]; + } + return $string; +} + +function singular($string) +{ + if (isset(Lang::$singular[Lang::$current][$string])) + { + return Lang::$singular[Lang::$current][$string]; + } + return $string; +} + +function plural($string) +{ + if (isset(Lang::$plural[Lang::$current][$string])) + { + return Lang::$plural[Lang::$current][$string]; + } + return $string; +} + +//get the hardware info from the talk id +function getHardwareInfoFromTalkId($id = 0) +{ + $clean['id'] = (int)$id; + $talk = new TalkModel(); + $res = $talk->select('hardware.type,hardware.id_hard')->from('hardware inner join talk')->using('id_hard')->where(array('id_talk'=>$clean['id']))->send(); + return count($res) > 0 ? $res[0]['hardware'] : null; +} + +//get hardware info from id +function getHardwareInfoFromId($id = 0) +{ + $clean['id'] = (int)$id; + $hw = new HardwareModel(); + $res = $hw->select()->where(array('id_hard'=>$clean['id']))->send(); + $controller = 'home/index/en'; + $model = ''; + if (count($res) > 0) + { + $controller = Hardware::getControllerFromType($res[0]['hardware']['type']); + $controller = strcmp($controller,'') !== 0 ? $controller : 'home/index/en'; + $model = $res[0]['hardware']['model']; + } + + return array('controller'=>$controller,'model'=>$model); +} + +//get the wiki page info from the talk id +function getWikiPageInfoFromTalkId($id = 0) +{ + $clean['id'] = (int)$id; + $talk = new WikitalkModel(); + $res = $talk->select('wiki.id_wiki')->from('wiki inner join wiki_talk')->using('id_wiki')->where(array('id_talk'=>$clean['id']))->send(); + return count($res) > 0 ? $res[0]['wiki']['id_wiki'] : ''; +} + +//get the issue info from the message id +function getIssueNumberFromMessageId($id = 0) +{ + $clean['id'] = (int)$id; + $mess = new MessagesModel(); + $res = $mess->select('issues.id_issue')->from('issues inner join messages')->using('id_issue')->where(array('id_mes'=>$clean['id']))->toList('issues.id_issue')->send(); + return count($res) > 0 ? $res[0] : ''; +} + +//get thw wiki name from the id +function getWikiNameFromId($id = 0) +{ + $clean['id'] = (int)$id; + $wiki = new WikiModel(); + $name = $wiki->getTheModelName($clean['id']); + return $name; +} + +//return the URL to the moderated object page +function goToModeratedItem( $row = array() ) +{ + $url = null; + + switch ($row['type']) + { + case 'message': + $url = 'issues/view/'.Lang::$current.'/'.getIssueNumberFromMessageId($row['id']).'#message-'.$row['id']; + break; + case 'talk': + $hardInfo = getHardwareInfoFromTalkId($row['id']); + if (isset($hardInfo)) + { + $controller = Hardware::$typeToController[$hardInfo['type']]; + $url = $controller.'/talk/'.Lang::$current.'/'.$hardInfo['id_hard'].'#talk-'.$row['id']; + } + else + { + $url = 'last/modactions/'.Lang::$current; + } + break; + case 'user': + $url = 'meet/user/'.Lang::$current.'/'.getUserName($row['id']); + break; + case 'issue': + $url = 'issues/view/'.Lang::$current.'/'.$row['id']; + break; + case 'issue_del': + $url = 'issues/view/'.Lang::$current.'/'.$row['id']; + break; + case 'wiki_talk': + $url = 'wiki/talk/'.Lang::$current.'/'.getWikiPageInfoFromTalkId($row['id']).'#wiki-talk-'.$row['id']; + break; + case 'page': + $url = 'wiki/page/'.Lang::$current.'/'.encodeUrl(getWikiNameFromId($row['id'])); + break; + case 'page_del': + $url = 'wiki/page/'.Lang::$current.'/'.encodeUrl(getWikiNameFromId($row['id'])); + break; + case 'device': + $hardInfo = getHardwareInfoFromId($row['id']); + $url = $hardInfo['controller'].'/view/'.Lang::$current.'/'.$row['id'].'/'.encodeUrl($hardInfo['model']); + break; + case 'device_app': + $hardInfo = getHardwareInfoFromId($row['id']); + $url = $hardInfo['controller'].'/view/'.Lang::$current.'/'.$row['id'].'/'.encodeUrl($hardInfo['model']); + break; + case 'device_cl': + $hardInfo = getHardwareInfoFromId($row['id']); + $url = $hardInfo['controller'].'/view/'.Lang::$current.'/'.$row['id'].'/'.encodeUrl($hardInfo['model']); + break; + case 'message_ins': + $url = 'issues/view/'.Lang::$current.'/'.getIssueNumberFromMessageId($row['id']).'#message-'.$row['id']; + break; + case 'wiki_talk_ins': + $url = 'wiki/talk/'.Lang::$current.'/'.getWikiPageInfoFromTalkId($row['id']).'#wiki-talk-'.$row['id']; + break; + case 'issue_ins': + $url = 'issues/view/'.Lang::$current.'/'.$row['id']; + break; + case 'talk_ins': + $hardInfo = getHardwareInfoFromTalkId($row['id']); + if (isset($hardInfo)) + { + $controller = Hardware::$typeToController[$hardInfo['type']]; + $url = $controller.'/talk/'.Lang::$current.'/'.$hardInfo['id_hard'].'#talk-'.$row['id']; + } + else + { + $url = 'last/modactions/'.Lang::$current; + } + break; + case 'hardware': + $hardInfo = getHardwareInfoFromId($row['id']); + $url = $hardInfo['controller'].'/view/'.Lang::$current.'/'.$row['id'].'/'.encodeUrl($hardInfo['model']); + break; + case 'wiki': + $url = 'wiki/page/'.Lang::$current.'/'.encodeUrl(getWikiNameFromId($row['id'])); + break; + } + return Url::getRoot($url); +} + +function getUrlsFromIdHard($id_hard) +{ + $clean['id_hard'] = (int)$id_hard; + + $urlView = $urlTalk = Url::getRoot(); + + $deviceName = null; + + $hard = new HardwareModel(); + $res = $hard->select('type,model')->where(array('id_hard'=>$clean['id_hard']))->send(); + if (count($res) > 0) + { + $urlView = Url::getRoot().Hardware::$typeToController[$res[0]['hardware']['type']]."/view/".Lang::$current."/".$clean['id_hard']."/".encodeUrl($res[0]['hardware']['model']); + + $urlTalk = Url::getRoot().Hardware::$typeToController[$res[0]['hardware']['type']]."/talk/".Lang::$current."/".$clean['id_hard']; + + $deviceName = $res[0]['hardware']['model']; + } + + return array('urlView'=>$urlView,'urlTalk'=>$urlTalk,'modelName'=>$deviceName); + +} + +function getDiffArray($associativeArray, $oldArray, $newArray) +{ + $diffArray = array(); + foreach ($associativeArray as $field => $label) + { + if (array_key_exists($field,$oldArray) and array_key_exists($field,$newArray)) + { + $diffArray[$label] = htmlDiff($oldArray[$field], $newArray[$field]); + } + } + return $diffArray; +} + +//get the translation function +function getTranslationFunction($fieldName) +{ + $fieldsFunc = array( + "vendor" => "betterVendor", + "interface" => "translate_and_gtext", + "subtype" => "translate_and_gtext", + ); + + if (array_key_exists($fieldName,$fieldsFunc)) + { + return $fieldsFunc[$fieldName]; + } + + return "gtext"; +} + +//Map db type names to display names +function displayName($name) { + switch ($name) { + case '3G-card': + $name = '3G cards'; + break; + case 'bluetooth': + $name = 'Bluetooth'; + break; + case 'ethernet-card': + $name = 'Ethernet cards'; + break; + case 'fingerprint-reader': + $name = 'Fingerprint readers'; + break; + case 'host-controller': + $name = 'Host Controllers'; + break; + case 'modem': + $name = 'Modems'; + break; + case 'notebook': + $name = 'Notebooks'; + break; + case 'printer': + $name = 'Printers'; + break; + case 'RAID-adapter'; + $name = 'RAID adapters'; + break; + case 'scanner': + $name = 'Scanners'; + break; + case 'sd-card-reader': + $name = 'SD card readers'; + break; + case 'soundcard': + $name = 'Sound cards'; + break; + case 'videocard': + $name = 'Video cards'; + break; + case 'webcam': + $name = 'Webcams'; + break; + case 'wifi': + $name = 'Wifi cards'; + break; + case 'acquisition-card': + $name = 'Acquisition cards'; + break; + } + return $name; +} diff --git a/Application/Include/params.php b/Application/Include/params.php new file mode 100644 index 0000000..5ab28df --- /dev/null +++ b/Application/Include/params.php @@ -0,0 +1,228 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Website +{ + static public $generalMail = ""; + + static public $fromEmail = "noreply@h-node.org"; + + static public $generalName = "h-node.org"; + + static public $projectName = "h-node"; + + static public $mailServer = ""; + + static public $mailPassword = ""; + + static public $allowAnonymousSubmission = "yes"; + + static public $statusnetGroupText = ""; + + static public $useSMTP = true; + + //use a xml file the modules of the website? + static public $useXmlConfigFile = true; + + //folder of the xml configuration file + //the constant ROOT contains the path to the root folder of your installaton of h-source + static public $xmlConfigFileFolder = ROOT; +} + +class Account +{ + + static public $confirmTime = 3600; + + public static function getTransport() + { + if (Website::$useSMTP) + { + return Swift_SmtpTransport::newInstance(Website::$mailServer, 25)->setUsername(Website::$generalMail)->setPassword(Website::$mailPassword); + } + else + { + return Swift_MailTransport::newInstance(); + } + } + + static public function confirm($username,$e_mail,$id_user,$token) + { + require_once (ROOT.'/External/swiftmailer/lib/swift_required.php'); + + $clean['username'] = sanitizeAll($username); + $clean['id_user'] = (int)$id_user; + $clean['token'] = sanitizeAll($token); + + $siteName = Website::$generalName; + $siteMail = Website::$generalMail; + + $mess = gtext("Hello,\n\nyou have registered an account at")." $siteName ".gtext("with the following data:\nusername: ").$clean['username']."\n\n".gtext("in order to confirm the registration of the new account please follow the link below")."\n".Url::getRoot()."users/confirm/".Lang::$current."/".$clean['id_user']."/".$clean['token']."\n\n".gtext("If you don't want to confirm the account registration\nthen wait one hour and your username and e-mail will be deleted from the database")."\n\n".gtext("If you received this e-mail for error, please simply disregard this message"); + + $message = Swift_Message::newInstance()->setSubject('['.Website::$projectName.'] '.gtext("account registration"))->setFrom(array(Website::$fromEmail => $siteName))->setTo(array($e_mail))->setBody($mess); + + //Create the Transport + $transport = self::getTransport(); + + //Create the Mailer using your created Transport + $mailer = Swift_Mailer::newInstance($transport); + + //Send the message + $result = $mailer->send($message); + + if ($result) + { + return true; + } + else + { + return false; + } + + } + + static public function sendnew($username,$e_mail,$id_user,$token) + { + require_once (ROOT.'/External/swiftmailer/lib/swift_required.php'); + + $clean['username'] = sanitizeAll($username); + $clean['id_user'] = (int)$id_user; + $clean['token'] = sanitizeAll($token); + + $siteName = Website::$generalName; + $siteMail = Website::$generalMail; + + $mess = "Hello,\n\nyou have requested a new password for your account at $siteName.\nYour username is:\n".$clean['username']."\n\nin order to obtain a new password for your account follow the link below\n".Url::getRoot()."users/change/".Lang::$current."/".$clean['id_user']."/".$clean['token']."\n\nIf you don't want to change the password then disregard this mail\n"; + + $message = Swift_Message::newInstance()->setSubject('['.Website::$projectName.'] request a new password')->setFrom(array(Website::$fromEmail => $siteName))->setTo(array($e_mail))->setBody($mess); + + //Create the Transport + $transport = self::getTransport(); + + //Create the Mailer using your created Transport + $mailer = Swift_Mailer::newInstance($transport); + + //Send the message + $result = $mailer->send($message); + + if ($result) + { + return true; + } + else + { + return false; + } + + } + + static public function sendpassword($username,$e_mail,$password) + { + require_once (ROOT.'/External/swiftmailer/lib/swift_required.php'); + + $clean['username'] = sanitizeAll($username); + $clean['password'] = sanitizeAll($password); + + $siteName = Website::$generalName; + $siteMail = Website::$generalMail; + + $mess = "Hello,\n\nyou have requested a new password for your account to $siteName.\nYour username is:\n".$clean['username']."\n\nYour new password is:\n".$clean['password']."\n"; + + $message = Swift_Message::newInstance()->setSubject('['.Website::$projectName.'] get your new password ')->setFrom(array(Website::$fromEmail => $siteName))->setTo(array($e_mail))->setBody($mess); + + //Create the Transport + $transport = self::getTransport(); + + //Create the Mailer using your created Transport + $mailer = Swift_Mailer::newInstance($transport); + + //Send the message + $result = $mailer->send($message); + + if ($result) + { + return true; + } + else + { + return false; + } + + } + + static public function sendTalkNotice($who,$e_mails,$id_hard) + { + require_once (ROOT.'/External/swiftmailer/lib/swift_required.php'); + + $who = sanitizeAll($who); + $id_hard = (int)$id_hard; + + $siteName = Website::$generalName; + $siteMail = Website::$generalMail; + + $urls = getUrlsFromIdHard($id_hard); + + $mess = "$who has added a message to the talk page of a device you have contributed to maintain at $siteName\n\nThe whole conversation is here:\n\n".$urls['urlTalk']."\n\nThe device page is here:\n\n".$urls['urlView']."\n\nBest regards\nthe ".Website::$projectName." team\n\nP.S: you can disable the mail notifications in the profile page of your control panel"; + + $message = Swift_Message::newInstance()->setSubject("[".Website::$projectName."] $who sent a notice to your attention")->setFrom(array(Website::$fromEmail => $siteName))->setTo($e_mails)->setBody($mess); + + //Create the Transport + $transport = self::getTransport(); + + //Create the Mailer using your created Transport + $mailer = Swift_Mailer::newInstance($transport); + + //Send the message + $result = $mailer->batchSend($message); + + } + + static public function sendWikiTalkNotice($who,$e_mails,$id_wiki) + { + require_once (ROOT.'/External/swiftmailer/lib/swift_required.php'); + + $who = sanitizeAll($who); + $id_wiki = (int)$id_wiki; + + $siteName = Website::$generalName; + $siteMail = Website::$generalMail; + + $wiki = new WikiModel(); + $pageUrl = $wiki->toWikiPage($id_wiki); + $domainName = rtrim(Url::getRoot(),"/"); + $talkUrl = $domainName."/wiki/talk/".Lang::$current."/$id_wiki"; + + $mess = "$who has added a message to the talk page of a wiki page you have contributed to maintain at $siteName\n\nThe whole conversation is here:\n\n".$talkUrl."\n\nThe wiki page is here:\n\n".$pageUrl."\n\nBest regards\nthe ".Website::$projectName." team\n\nP.S: you can disable the mail notifications in the profile page of your control panel"; + + $message = Swift_Message::newInstance()->setSubject("[".Website::$projectName."] $who sent a notice to your attention")->setFrom(array(Website::$fromEmail => $siteName))->setTo($e_mails)->setBody($mess); + + //Create the Transport + $transport = self::getTransport(); + + //Create the Mailer using your created Transport + $mailer = Swift_Mailer::newInstance($transport); + + //Send the message + $result = $mailer->batchSend($message); + + } +} diff --git a/Application/Include/vendorTranslations.php b/Application/Include/vendorTranslations.php new file mode 100644 index 0000000..bb86b76 --- /dev/null +++ b/Application/Include/vendorTranslations.php @@ -0,0 +1,4247 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//rewrite the vendor name +function betterVendor($string) +{ + if ($string === 'undef') + { + return gtext($string); + } + + $vendors = new VendorsModel(); + + $exceptions = array( + "One-Laptop-per-Child-Non-Profit" => "One Laptop per Child (Non-Profit)", + "ZaReason-Inc" => "ZaReason, Inc", + "Blue-Light" => "Blue Light", + "Openpandora-Ltd" => "Openpandora Ltd.", + "Packard-Bell" => "Packard Bell", + ); + + return (array_key_exists($string,$exceptions)) ? $exceptions[$string] : $vendors->getFullName($string); + +// $names = array( +// "One-Laptop-per-Child-Non-Profit" => "One Laptop per Child (Non-Profit)", +// "AT-T" => "AT&T", +// "Franklin-Wireless-Corporation" => "Franklin Wireless Corporation", +// "Novatel-Wireless" => "Novatel Wireless", +// "Sierra-Wireless" => "Sierra Wireless", +// "ALi-Corporation" => "ALi Corporation", +// "Advanced-Micro-Devices" => "Advanced Micro Devices (AMD)", +// "Analog-Devices" => "Analog Devices", +// "ATI-Technologies-Inc" => "ATI Technologies Inc", +// "Aureal-Semiconductor" => "Aureal Semiconductor", +// "Avance-Logic-Inc" => "Avance Logic Inc (ALI)", +// "Aztech-System-Ltd" => "Aztech System Ltd", +// "Brooktree-Corporation" => "Brooktree Corporation", +// "C-Media-Electronics-Inc" => "C-Media Electronics Inc", +// "Cirrus-Logic" => "Cirrus Logic", +// "Creative-Labs" => "Creative Labs", +// "Ensoniq" => "Ensoniq", +// "ESS-Technology" => "ESS Technology", +// "ForteMedia-Inc" => "ForteMedia Inc", +// "Intel-Corporation" => "Intel Corporation", +// "Motorola" => "Motorola", +// "National-Semiconductor-Corporation" => "National Semiconductor Corporation", +// "Neomagic-Corp" => "Neomagic Corp", +// "nVidia-Corporation" => "nVidia Corporation", +// "RME" => "RME", +// "S3 Inc" => "S3-Inc", +// "Silicon-Integrated-Systems" => "Silicon Integrated Systems (SiS)", +// "Trident-Microsystems" => "Trident Microsystems", +// "VIA-Technologies-Inc" => "VIA Technologies Inc", +// "Xilinx-Corporation" => "Xilinx Corporation", +// "Yamaha-Corporation" => "Yamaha Corporation", +// "Aiptek-Inc" => "Aiptek Inc", +// "Arkmicro-Technologies-Inc" => "Arkmicro Technologies Inc", +// "Askey-Computer-Corporation" => "Askey Computer Corporation", +// "Chicony-Electronics-CO" => "Chicony Electronics CO", +// "Conexant-Systems-Inc" => "Conexant Systems, Inc", +// "Creative-Technology-Ltd" => "Creative Technology, Ltd", +// "eMPIA-Technology-Inc" => "eMPIA Technology, Inc", +// "Genesys-Logic-Inc" => "Genesys Logic, Inc", +// "Hama-Trading-Co" => "Hama Trading Co", +// "Hewlett-Packard" => "Hewlett Packard", +// "IMC-Networks" => "IMC Networks", +// "iPassion-Technology-Inc" => "iPassion Technology Inc", +// "KYE-Systems-Corp" => "KYE Systems Corp", +// "LG-Electronics" => "LG Electronics", +// "OmniVision-Technologies-Inc" => "OmniVision Technologies, Inc", +// "PixArt-Imaging-Inc" => "PixArt Imaging Inc", +// "Primax-Electronics-Ltd" => "Primax Electronics Ltd", +// "Quanta-Computer-Inc" => "Quanta Computer Inc.", +// "Ricoh-Company-Ltd" => "Ricoh Company, Ltd", +// "Sony-Corporation" => "Sony Corporation", +// "Syntek-Semiconductor-Ltd" => "Syntek Semiconductor Ltd", +// "Sunplus-Technology-Co" => "Sunplus Technology Co", +// "Tekom-Technologies-Inc" => "Tekom Technologies, Inc", +// "Trust-International" => "Trust International", +// "ViewQuest-Technologies-Inc" => "ViewQuest Technologies, Inc", +// "Vista-Imaging-Inc" => "Vista Imaging, Inc", +// "Z-Star-Microelectronics-Corporation" => "Z-Star Microelectronics Corporation", +// "Micro-Star-International" => "Micro Star International", +// "VIA-Technologies-Inc" => "VIA Technologies, Inc", +// "ALFA-NETWORK-Inc" => "ALFA NETWORK Inc", +// "Amigo-Technology-Inc" => "Amigo Technology Inc", +// "amit-Inc" => "amit Inc", +// "Atlantis_S-p-A" => "Atlantis S.p.A.", +// "Buffalo-Technology-Ltd" => "Buffalo Technology, Ltd", +// "Compex-Systems-Pte-Ltd" => "Compex Systems Pte Ltd", +// "Encore-Electronics-Inc" => "Encore Electronics Inc", +// "JAHT-Technologies-Corp" => "JAHT Technologies Corp", +// "Micronet-Communications-Inc" => "Micronet Communications, Inc", +// "Minitar-Corporation" => "Minitar Corporation", +// "OvisLink-Technologies-Corp" => "OvisLink Technologies Corp", +// "PRO-NETS_Technology_Corp" => "PRO-NETS Technology Corp", +// "Sparklan-comunications-Inc" => "Sparklan comunications, Inc", +// "Unex-Technology-Corp" => "Unex Technology Corp", +// "Vimicro-Corp" => "Vimicro Corp", +// "LOREX-Technology-Inc" => "LOREX Technology Inc", +// "ADOMAX-technology" => "ADOMAX technology", +// "Omega-Technology-Corp" => "Omega Technology Corp", +// "Shenzhen-Vigor-Electronic" => "Shenzhen Vigor Electronic", +// "Astak-Inc" => "Astak Inc", +// "iMicro-Electronics" => "iMicro Electronics", +// "Active-Pixel" => "Active Pixel", +// "Microdia-Ltd" => "Microdia Ltd", +// "Silicon-Integrated-Systems-Corp" => "Silicon Integrated Systems Corp", +// 'Allied-Telesis-Inc' => 'Allied Telesis, Inc', +// 'Ascend-Communications-Inc.' => 'Ascend Communications, Inc.', +// 'PEAK-System-Technik-GmbH' => 'PEAK-System Technik GmbH', +// 'Paradyne-corp.' => 'Paradyne corp.', +// 'Lockheed-Martin-Marietta-Corp' => 'Lockheed Martin-Marietta Corp', +// 'Hauppauge-computer-works-Inc.' => 'Hauppauge computer works Inc.', +// 'Nebula-Electronics-Ltd.' => 'Nebula Electronics Ltd.', +// 'BFG-Technologies-Inc.' => 'BFG Technologies, Inc.', +// 'Ncipher-Corp-Ltd' => 'Ncipher Corp Ltd', +// 'General-Dynamics' => 'General Dynamics', +// 'Davicom-Semiconductor-Inc.' => 'Davicom Semiconductor, Inc.', +// 'XFX-Pine-Group-Inc' => 'XFX Pine Group Inc', +// 'SK-Electronics-Co.-Ltd.' => 'SK-Electronics Co., Ltd.', +// 'TTTech-AG' => 'TTTech AG', +// 'Trigem-Computer-Inc.' => 'Trigem Computer Inc.', +// 'SCM-Microsystems-Inc.' => 'SCM Microsystems, Inc.', +// 'Microsoft' => 'Microsoft', +// 'Kyocera' => 'Kyocera', +// 'Myson-Century-Inc' => 'Myson Century, Inc', +// 'Belkin' => 'Belkin', +// 'Alcor-Micro-Corporation' => 'Alcor Micro Corporation', +// 'OmniVision' => 'OmniVision', +// 'CyberDoor' => 'CyberDoor', +// 'Sigmatel-Inc.' => 'Sigmatel Inc.', +// 'Dynalink' => 'Dynalink', +// 'Hughes-Network-Systems-HNS' => 'Hughes Network Systems (HNS)', +// 'Sapphire-Inc.' => 'Sapphire, Inc.', +// 'Wired-Inc.' => 'Wired Inc.', +// 'AVerMedia-Technologies-Inc.' => 'AVerMedia Technologies Inc.', +// 'ITT-Geospatial-Systems' => 'ITT Geospatial Systems', +// 'AuthenTec' => 'AuthenTec', +// 'PixArt-Imaging-Inc.' => 'PixArt Imaging Inc.', +// 'Arris' => 'Arris', +// 'BREA-Technologies-Inc' => 'BREA Technologies Inc', +// 'ZyDAS' => 'ZyDAS', +// 'Rhino-Equipment-Corp.' => 'Rhino Equipment Corp.', +// 'Brontes-Technologies' => 'Brontes Technologies', +// 'ASCII-Corporation' => 'ASCII Corporation', +// 'TerraTec-Electronic-GmbH' => 'TerraTec Electronic GmbH', +// 'Compaq-Computer-Corporation' => 'Compaq Computer Corporation', +// 'Cowon-Systems-Inc.' => 'Cowon Systems, Inc.', +// 'HaSoTec-GmbH' => 'HaSoTec GmbH', +// 'Acrox-Technologies-Co.-Ltd.' => 'Acrox Technologies Co., Ltd.', +// 'Kolter-Electronic' => 'Kolter Electronic', +// 'ATI-Technologies-Inc' => 'ATI Technologies Inc', +// 'ULSI-Systems' => 'ULSI Systems', +// 'VLSI-Technology-Inc' => 'VLSI Technology Inc', +// 'Avance-Logic-Inc.-ALI' => 'Avance Logic Inc. [ALI]', +// 'Reply-Group' => 'Reply Group', +// 'NetFrame-Systems-Inc' => 'NetFrame Systems Inc', +// 'Epson' => 'Epson', +// 'Phoenix-Technologies' => 'Phoenix Technologies', +// 'Tseng-Labs-Inc' => 'Tseng Labs Inc', +// 'AST-Research-Inc' => 'AST Research Inc', +// 'Weitek' => 'Weitek', +// 'Video-Logic-Ltd.' => 'Video Logic, Ltd.', +// 'Digital-Equipment-Corporation' => 'Digital Equipment Corporation', +// 'Micronics-Computers-Inc' => 'Micronics Computers Inc', +// 'Cirrus-Logic' => 'Cirrus Logic', +// 'IBM' => 'IBM', +// 'LSI-Logic-Corp-of-Canada' => 'LSI Logic Corp of Canada', +// 'ICL-Personal-Systems' => 'ICL Personal Systems', +// 'SPEA-Software-AG' => 'SPEA Software AG', +// 'Unisys-Systems' => 'Unisys Systems', +// 'Elitegroup-Computer-Systems' => 'Elitegroup Computer Systems', +// 'AT-T-GIS-NCR' => 'AT&T GIS (NCR)', +// 'Vitesse-Semiconductor' => 'Vitesse Semiconductor', +// 'Western-Digital' => 'Western Digital', +// 'American-Megatrends-Inc.' => 'American Megatrends Inc.', +// 'PictureTel' => 'PictureTel', +// 'Hitachi-Computer-Products' => 'Hitachi Computer Products', +// 'Advanced-Micro-Devices-AMD' => 'Advanced Micro Devices [AMD]', +// 'Trident-Microsystems' => 'Trident Microsystems', +// 'Zenith-Data-Systems' => 'Zenith Data Systems', +// 'Acer-Incorporated-ALI' => 'Acer Incorporated [ALI]', +// 'Dell' => 'Dell', +// 'Siemens-Nixdorf-IS' => 'Siemens Nixdorf IS', +// 'LSI-Logic' => 'LSI Logic', +// 'Matrox-Graphics-Inc.' => 'Matrox Graphics, Inc.', +// 'Chips-and-Technologies' => 'Chips and Technologies', +// 'Wyse-Technology-Inc.' => 'Wyse Technology Inc.', +// 'Olivetti-Advanced-Technology' => 'Olivetti Advanced Technology', +// 'Toshiba-America' => 'Toshiba America', +// 'TMC-Research' => 'TMC Research', +// 'Miro-Computer-Products-AG' => 'Miro Computer Products AG', +// 'Compaq' => 'Compaq', +// 'NEC-Corporation' => 'NEC Corporation', +// 'Framatome-Connectors-USA-Inc.' => 'Framatome Connectors USA Inc.', +// 'Comp.---Comm.-Research-Lab' => 'Comp. & Comm. Research Lab', +// 'Future-Domain-Corp.' => 'Future Domain Corp.', +// 'Hitachi-Micro-Systems' => 'Hitachi Micro Systems', +// 'AMP-Inc' => 'AMP, Inc', +// 'Seiko-Epson-Corporation' => 'Seiko Epson Corporation', +// 'Tatung-Corp.-Of-America' => 'Tatung Corp. Of America', +// 'Hewlett-Packard-Company' => 'Hewlett-Packard Company', +// 'Solliday-Engineering' => 'Solliday Engineering', +// 'Synopsys-Logic-Modeling-Group' => 'Synopsys/Logic Modeling Group', +// 'Accelgraphics-Inc.' => 'Accelgraphics Inc.', +// 'Computrend' => 'Computrend', +// 'Micron' => 'Micron', +// 'ASUSTeK-Computer-Inc.' => 'ASUSTeK Computer Inc.', +// 'Adaptec-formerly-DPT' => 'Adaptec (formerly DPT)', +// 'OPTi-Inc.' => 'OPTi Inc.', +// 'IPC-Corporation-Ltd.' => 'IPC Corporation, Ltd.', +// 'Genoa-Systems-Corp' => 'Genoa Systems Corp', +// 'Elsa-AG' => 'Elsa AG', +// 'Fountain-Technologies-Inc.' => 'Fountain Technologies, Inc.', +// 'BusLogic' => 'BusLogic', +// 'Texas-Instruments' => 'Texas Instruments', +// 'Sony-Corporation' => 'Sony Corporation', +// 'Oak-Technology-Inc' => 'Oak Technology, Inc', +// 'Co-time-Computer-Ltd' => 'Co-time Computer Ltd', +// 'Winbond-Electronics-Corp' => 'Winbond Electronics Corp', +// 'Anigma-Inc.' => 'Anigma, Inc.', +// '-Young-Micro-Systems' => '?Young Micro Systems', +// 'Young-Micro-Systems' => 'Young Micro Systems', +// 'Hitachi-Ltd' => 'Hitachi, Ltd', +// 'Efar-Microsystems' => 'Efar Microsystems', +// 'ICL' => 'ICL', +// 'Promise-Technology-Inc.' => 'Promise Technology, Inc.', +// 'Foxconn-International-Inc.' => 'Foxconn International, Inc.', +// 'Wipro-Infotech-Limited' => 'Wipro Infotech Limited', +// 'Number-9-Computer-Company' => 'Number 9 Computer Company', +// 'Vtech-Computers-Ltd' => 'Vtech Computers Ltd', +// 'Infotronic-America-Inc' => 'Infotronic America Inc', +// 'United-Microelectronics-UMC' => 'United Microelectronics [UMC]', +// 'I.I.T.' => 'I.I.T.', +// 'Maspar-Computer-Corp' => 'Maspar Computer Corp', +// 'Ocean-Office-Automation' => 'Ocean Office Automation', +// 'Alcatel' => 'Alcatel', +// 'Texas-Microsystems' => 'Texas Microsystems', +// 'PicoPower-Technology' => 'PicoPower Technology', +// 'Mitsubishi-Electric' => 'Mitsubishi Electric', +// 'Diversified-Technology' => 'Diversified Technology', +// 'Mylex-Corporation' => 'Mylex Corporation', +// 'Aten-Research-Inc' => 'Aten Research Inc', +// 'Apple-Computer-Inc.' => 'Apple Computer Inc.', +// 'Hynix-Semiconductor' => 'Hynix Semiconductor', +// 'Sequent-Computer-Systems' => 'Sequent Computer Systems', +// 'DFI-Inc' => 'DFI, Inc', +// 'City-Gate-Development-Ltd' => 'City Gate Development Ltd', +// 'Daewoo-Telecom-Ltd' => 'Daewoo Telecom Ltd', +// 'Mitac' => 'Mitac', +// 'GIT-Co-Ltd' => 'GIT Co Ltd', +// 'Yamaha-Corporation' => 'Yamaha Corporation', +// 'NexGen-Microsystems' => 'NexGen Microsystems', +// 'Chaintech-Computer-Co.-Ltd' => 'Chaintech Computer Co. Ltd', +// 'QLogic-Corp.' => 'QLogic Corp.', +// 'Cyrix-Corporation' => 'Cyrix Corporation', +// 'I-Bus' => 'I-Bus', +// 'NetWorth' => 'NetWorth', +// 'Gateway-2000' => 'Gateway 2000', +// 'LeadTek-Research-Inc.' => 'LeadTek Research Inc.', +// 'Interphase-Corporation' => 'Interphase Corporation', +// 'Data-Technology-Corporation' => 'Data Technology Corporation', +// 'Contaq-Microsystems' => 'Contaq Microsystems', +// 'Supermac-Technology' => 'Supermac Technology', +// 'EFA-Corporation-of-America' => 'EFA Corporation of America', +// 'Forex-Computer-Corporation' => 'Forex Computer Corporation', +// 'Parador' => 'Parador', +// 'Tulip-Computers-Int.B.V.' => 'Tulip Computers Int.B.V.', +// 'J.-Bond-Computer-Systems' => 'J. Bond Computer Systems', +// 'Cache-Computer' => 'Cache Computer', +// 'Microcomputer-Systems-M-Son' => 'Microcomputer Systems (M) Son', +// 'Data-General-Corporation' => 'Data General Corporation', +// 'Oakleigh-Systems-Inc.' => 'Oakleigh Systems Inc.', +// 'Olicom' => 'Olicom', +// 'Systemsoft' => 'Systemsoft', +// 'Intergraph-Corporation' => 'Intergraph Corporation', +// 'Diamond-Multimedia-Systems' => 'Diamond Multimedia Systems', +// 'National-Instruments' => 'National Instruments', +// 'Alacron' => 'Alacron', +// 'Appian-Technology' => 'Appian Technology', +// 'Quantum-Designs-H.K.-Ltd' => 'Quantum Designs (H.K.) Ltd', +// 'Samsung-Electronics-Co.-Ltd' => 'Samsung Electronics Co., Ltd', +// 'Packard-Bell' => 'Packard Bell', +// 'Gemlight-Computer-Ltd.' => 'Gemlight Computer Ltd.', +// 'Megachips-Corporation' => 'Megachips Corporation', +// 'Zida-Technologies-Ltd.' => 'Zida Technologies Ltd.', +// 'Brooktree-Corporation' => 'Brooktree Corporation', +// 'Trigem-Computer-Inc.' => 'Trigem Computer Inc.', +// 'Meidensha-Corporation' => 'Meidensha Corporation', +// 'Juko-Electronics-Ind.-Co.-Ltd' => 'Juko Electronics Ind. Co. Ltd', +// 'Quantum-Corporation' => 'Quantum Corporation', +// 'Everex-Systems-Inc' => 'Everex Systems Inc', +// 'Globe-Manufacturing-Sales' => 'Globe Manufacturing Sales', +// 'Smart-Link-Ltd.' => 'Smart Link Ltd.', +// 'Informtech-Industrial-Ltd.' => 'Informtech Industrial Ltd.', +// 'Benchmarq-Microelectronics' => 'Benchmarq Microelectronics', +// 'Sierra-Semiconductor' => 'Sierra Semiconductor', +// 'Silicon-Graphics-Inc.' => 'Silicon Graphics, Inc.', +// 'ACC-Microelectronics' => 'ACC Microelectronics', +// 'Digicom' => 'Digicom', +// 'Honeywell-IAC' => 'Honeywell IAC', +// 'Symphony-Labs' => 'Symphony Labs', +// 'Cornerstone-Technology' => 'Cornerstone Technology', +// 'Micro-Computer-Systems-Inc' => 'Micro Computer Systems Inc', +// 'CardExpert-Technology' => 'CardExpert Technology', +// 'Cabletron-Systems-Inc' => 'Cabletron Systems Inc', +// 'Raytheon-Company' => 'Raytheon Company', +// 'Databook-Inc' => 'Databook Inc', +// 'STB-Systems-Inc' => 'STB Systems Inc', +// 'PLX-Technology-Inc.' => 'PLX Technology, Inc.', +// 'Madge-Networks' => 'Madge Networks', +// '3Com-Corporation' => '3Com Corporation', +// 'ALi-Corporation' => 'ALi Corporation', +// 'Mitsubishi-Electric-Corp.' => 'Mitsubishi Electric Corp.', +// 'Dapha-Electronics-Corporation' => 'Dapha Electronics Corporation', +// 'Advanced-Logic-Research' => 'Advanced Logic Research', +// 'Surecom-Technology' => 'Surecom Technology', +// 'Tseng-Labs-International-Co.' => 'Tseng Labs International Co.', +// 'Most-Inc' => 'Most Inc', +// 'Boca-Research-Inc.' => 'Boca Research Inc.', +// 'ICM-Co.-Ltd.' => 'ICM Co., Ltd.', +// 'Auspex-Systems-Inc.' => 'Auspex Systems Inc.', +// 'Samsung-Semiconductors-Inc.' => 'Samsung Semiconductors, Inc.', +// 'Xerox-Corporation' => 'Xerox Corporation', +// 'Rambus-Inc.' => 'Rambus Inc.', +// 'Media-Vision' => 'Media Vision', +// 'Neomagic-Corporation' => 'Neomagic Corporation', +// 'Dataexpert-Corporation' => 'Dataexpert Corporation', +// 'Fujitsu-Microelectr.-Inc.' => 'Fujitsu Microelectr., Inc.', +// 'Omron-Corporation' => 'Omron Corporation', +// 'Advanced-System-Products-Inc' => 'Advanced System Products, Inc', +// 'Radius' => 'Radius', +// 'FuturePlus-Systems-Corp.' => 'FuturePlus Systems Corp.', +// 'Molex-Incorporated' => 'Molex Incorporated', +// 'Jabil-Circuit-Inc' => 'Jabil Circuit Inc', +// 'Hualon-Microelectronics' => 'Hualon Microelectronics', +// 'Autologic-Inc.' => 'Autologic Inc.', +// 'Cetia' => 'Cetia', +// 'BCM-Advanced-Research' => 'BCM Advanced Research', +// 'Advanced-Peripherals-Labs' => 'Advanced Peripherals Labs', +// 'Macronix-Inc.-MXIC' => 'Macronix, Inc. [MXIC]', +// 'Compaq-IPG-Austin' => 'Compaq IPG-Austin', +// 'Rohm-LSI-Systems-Inc.' => 'Rohm LSI Systems, Inc.', +// 'CERN-ECP-EDU' => 'CERN/ECP/EDU', +// 'Evans---Sutherland' => 'Evans & Sutherland', +// 'nVidia-Corporation' => 'nVidia Corporation', +// 'Emulex-Corporation' => 'Emulex Corporation', +// 'Tekram-Technology-Co.Ltd.' => 'Tekram Technology Co.,Ltd.', +// 'Aptix-Corporation' => 'Aptix Corporation', +// 'Tundra-Semiconductor-Corp.' => 'Tundra Semiconductor Corp.', +// 'Tandem-Computers' => 'Tandem Computers', +// 'Micro-Industries-Corporation' => 'Micro Industries Corporation', +// 'Vadem' => 'Vadem', +// 'Applied-Micro-Circuits-Corp.' => 'Applied Micro Circuits Corp.', +// 'Alps-Electric-Co.-Ltd.' => 'Alps Electric Co., Ltd.', +// 'Integraphics' => 'Integraphics', +// 'Artists-Graphics' => 'Artists Graphics', +// 'Ascii-Corporation' => 'Ascii Corporation', +// 'Xilinx-Corporation' => 'Xilinx Corporation', +// 'Peritek-Corporation' => 'Peritek Corporation', +// 'Tyan-Computer' => 'Tyan Computer', +// 'Achme-Computer-Inc.' => 'Achme Computer, Inc.', +// 'Alaris-Inc.' => 'Alaris, Inc.', +// 'S-MOS-Systems-Inc.' => 'S-MOS Systems, Inc.', +// 'NKK-Corporation' => 'NKK Corporation', +// 'Altos-India-Ltd' => 'Altos India Ltd', +// 'PC-Direct' => 'PC Direct', +// 'Truevision' => 'Truevision', +// 'I-O-Data-Device-Inc.' => 'I-O Data Device, Inc.', +// 'Soyo-Computer-Inc' => 'Soyo Computer, Inc', +// 'Fast-Multimedia-AG' => 'Fast Multimedia AG', +// 'NCube' => 'NCube', +// 'Jazz-Multimedia' => 'Jazz Multimedia', +// 'Initio-Corporation' => 'Initio Corporation', +// 'Creative-Labs' => 'Creative Labs', +// 'RasterOps-Corp.' => 'RasterOps Corp.', +// 'Sigma-Designs-Inc.' => 'Sigma Designs, Inc.', +// 'VIA-Technologies-Inc.' => 'VIA Technologies, Inc.', +// 'Stratus-Computers' => 'Stratus Computers', +// 'Proteon-Inc.' => 'Proteon, Inc.', +// 'Siemens-Nixdorf-AG' => 'Siemens Nixdorf AG', +// 'Chromatic-Research-Inc.' => 'Chromatic Research Inc.', +// 'Mini-Max-Technology-Inc.' => 'Mini-Max Technology, Inc.', +// 'Znyx-Advanced-Systems' => 'Znyx Advanced Systems', +// 'CPU-Technology' => 'CPU Technology', +// 'Ross-Technology' => 'Ross Technology', +// 'Powerhouse-Systems' => 'Powerhouse Systems', +// 'Santa-Cruz-Operation' => 'Santa Cruz Operation', +// 'Accton-Technology-Corporation' => 'Accton Technology Corporation', +// 'Atmel-Corporation' => 'Atmel Corporation', +// '3D-Labs' => '3D Labs', +// 'Data-Translation' => 'Data Translation', +// 'Datacube-Inc' => 'Datacube, Inc', +// 'Berg-Electronics' => 'Berg Electronics', +// 'Efficient-Networks-Inc' => 'Efficient Networks, Inc', +// 'Teledyne-Electronic-Systems' => 'Teledyne Electronic Systems', +// 'Tricord-Systems-Inc.' => 'Tricord Systems Inc.', +// 'Eldec' => 'Eldec', +// 'Precision-Digital-Images' => 'Precision Digital Images', +// 'EMC-Corporation' => 'EMC Corporation', +// 'Zilog' => 'Zilog', +// 'Multi-tech-Systems-Inc.' => 'Multi-tech Systems, Inc.', +// 'Excellent-Design-Inc.' => 'Excellent Design, Inc.', +// 'Leutron-Vision-AG' => 'Leutron Vision AG', +// 'Eurocore' => 'Eurocore', +// 'Vigra' => 'Vigra', +// 'FORE-Systems-Inc' => 'FORE Systems Inc', +// 'Firmworks' => 'Firmworks', +// 'Linotype---Hell-AG' => 'Linotype - Hell AG', +// 'Zenith-Data-Systems' => 'Zenith Data Systems', +// 'Ravicad' => 'Ravicad', +// 'Dalsa-Inc.' => 'Dalsa Inc.', +// 'Computervision' => 'Computervision', +// 'Philips-Semiconductors' => 'Philips Semiconductors', +// 'Mitel-Corp.' => 'Mitel Corp.', +// 'Dialogic-Corporation' => 'Dialogic Corporation', +// 'Mercury-Computer-Systems' => 'Mercury Computer Systems', +// 'Fuji-Xerox-Co-Ltd' => 'Fuji Xerox Co Ltd', +// 'Momentum-Data-Systems' => 'Momentum Data Systems', +// 'Cisco-Systems-Inc' => 'Cisco Systems Inc', +// 'Ziatech-Corporation' => 'Ziatech Corporation', +// 'Dynamic-Pictures-Inc' => 'Dynamic Pictures, Inc', +// 'FWB-Inc' => 'FWB Inc', +// 'Network-Computing-Devices' => 'Network Computing Devices', +// 'Cyclone-Microsystems-Inc.' => 'Cyclone Microsystems, Inc.', +// 'Leading-Edge-Products-Inc' => 'Leading Edge Products Inc', +// 'Equinox-Systems-Inc.' => 'Equinox Systems, Inc.', +// 'Intervoice-Inc' => 'Intervoice Inc', +// 'Crest-Microsystem-Inc' => 'Crest Microsystem Inc', +// 'NetPower-Inc' => 'NetPower, Inc', +// 'Cincinnati-Milacron' => 'Cincinnati Milacron', +// 'Workbit-Corporation' => 'Workbit Corporation', +// 'Force-Computers' => 'Force Computers', +// 'Interface-Corp' => 'Interface Corp', +// 'Win-System-Corporation' => 'Win System Corporation', +// 'VMIC' => 'VMIC', +// 'Canopus-Co.-Ltd' => 'Canopus Co., Ltd', +// 'Annabooks' => 'Annabooks', +// 'IC-Corporation' => 'IC Corporation', +// 'Nikon-Systems-Inc' => 'Nikon Systems Inc', +// 'Digi-International' => 'Digi International', +// 'Thinking-Machines-Corp' => 'Thinking Machines Corp', +// 'JAE-Electronics-Inc.' => 'JAE Electronics Inc.', +// 'Megatek' => 'Megatek', +// 'Land-Win-Electronic-Corp' => 'Land Win Electronic Corp', +// 'Melco-Inc' => 'Melco Inc', +// 'Pine-Technology-Ltd' => 'Pine Technology Ltd', +// 'Periscope-Engineering' => 'Periscope Engineering', +// 'Avsys-Corporation' => 'Avsys Corporation', +// 'Voarx-R---D-Inc' => 'Voarx R & D Inc', +// 'Mutech-Corp' => 'Mutech Corp', +// 'Harlequin-Ltd' => 'Harlequin Ltd', +// 'Parallax-Graphics' => 'Parallax Graphics', +// 'Photron-Ltd.' => 'Photron Ltd.', +// 'Xircom' => 'Xircom', +// 'Peer-Protocols-Inc' => 'Peer Protocols Inc', +// 'Maxtor-Corporation' => 'Maxtor Corporation', +// 'Megasoft-Inc' => 'Megasoft Inc', +// 'PFU-Limited' => 'PFU Limited', +// 'OA-Laboratory-Co-Ltd' => 'OA Laboratory Co Ltd', +// 'Rendition' => 'Rendition', +// 'Imagraph-Corporation' => 'Imagraph Corporation', +// 'Broadcom nee-ServerWorks' => 'Broadcom nee ServerWorks', +// 'Mutoh-Industries-Inc' => 'Mutoh Industries Inc', +// 'Thine-Electronics-Inc' => 'Thine Electronics Inc', +// 'Connectware-Inc' => 'Connectware Inc', +// 'Martin-Marietta' => 'Martin-Marietta', +// 'Electronics-for-Imaging' => 'Electronics for Imaging', +// 'Workstation-Technology' => 'Workstation Technology', +// 'Inventec-Corporation' => 'Inventec Corporation', +// 'Loughborough-Sound-Images-Plc' => 'Loughborough Sound Images Plc', +// 'Altera-Corporation' => 'Altera Corporation', +// 'Adobe-Systems-Inc' => 'Adobe Systems, Inc', +// 'Bridgeport-Machines' => 'Bridgeport Machines', +// 'Mitron-Computer-Inc.' => 'Mitron Computer Inc.', +// 'SBE-Incorporated' => 'SBE Incorporated', +// 'Silicon-Engineering' => 'Silicon Engineering', +// 'Alfa-Inc.' => 'Alfa, Inc.', +// 'Toshiba-America-Info-Systems' => 'Toshiba America Info Systems', +// 'A-Trend-Technology' => 'A-Trend Technology', +// 'L-G-Electronics-Inc.' => 'L G Electronics, Inc.', +// 'Atto-Technology' => 'Atto Technology', +// 'Becton---Dickinson' => 'Becton & Dickinson', +// 'T-R-Systems' => 'T/R Systems', +// 'Integrated-Circuit-Systems' => 'Integrated Circuit Systems', +// 'Ricoh-Co-Ltd' => 'Ricoh Co Ltd', +// 'Telmatics-International' => 'Telmatics International', +// 'Fujikura-Ltd' => 'Fujikura Ltd', +// 'Forks-Inc' => 'Forks Inc', +// 'Dataworld-International-Ltd' => 'Dataworld International Ltd', +// 'D-Link-System-Inc' => 'D-Link System Inc', +// 'Matsushita-Electronics-Co-Ltd' => 'Matsushita Electronics Co Ltd', +// 'Hilevel-Technology' => 'Hilevel Technology', +// 'Hypertec-Pty-Limited' => 'Hypertec Pty Limited', +// 'Corollary-Inc' => 'Corollary, Inc', +// 'BitFlow-Inc' => 'BitFlow Inc', +// 'Hermstedt-GmbH' => 'Hermstedt GmbH', +// 'Green-Logic' => 'Green Logic', +// 'Tripace' => 'Tripace', +// 'Artop-Electronic-Corp' => 'Artop Electronic Corp', +// 'Densan-Company-Ltd' => 'Densan Company Ltd', +// 'Zeitnet-Inc.' => 'Zeitnet Inc.', +// 'Toucan-Technology' => 'Toucan Technology', +// 'Ratoc-System-Inc' => 'Ratoc System Inc', +// 'Hytec-Electronics-Ltd' => 'Hytec Electronics Ltd', +// 'Gage-Applied-Sciences-Inc.' => 'Gage Applied Sciences, Inc.', +// 'Lambda-Systems-Inc' => 'Lambda Systems Inc', +// 'Attachmate-Corporation' => 'Attachmate Corporation', +// 'Mind-Share-Inc.' => 'Mind Share, Inc.', +// 'Omega-Micro-Inc.' => 'Omega Micro Inc.', +// 'Information-Technology-Inst.' => 'Information Technology Inst.', +// 'Bug-Inc.-Sapporo-Japan' => 'Bug, Inc. Sapporo Japan', +// 'Fujitsu-Microelectronics-Ltd.' => 'Fujitsu Microelectronics Ltd.', +// 'Bull-HN-Information-Systems' => 'Bull HN Information Systems', +// 'Convex-Computer-Corporation' => 'Convex Computer Corporation', +// 'Hamamatsu-Photonics-K.K.' => 'Hamamatsu Photonics K.K.', +// 'Barco-Graphics-NV' => 'Barco Graphics NV', +// 'Microunity-Systems-Eng.-Inc' => 'Microunity Systems Eng. Inc', +// 'Pure-Data-Ltd.' => 'Pure Data Ltd.', +// 'Power-Computing-Corp.' => 'Power Computing Corp.', +// 'Systech-Corp.' => 'Systech Corp.', +// 'InnoSys-Inc.' => 'InnoSys Inc.', +// 'Actel' => 'Actel', +// 'Lite-On-Communications-Inc' => 'Lite-On Communications Inc', +// 'Aztech-System-Ltd' => 'Aztech System Ltd', +// 'Avid-Technology-Inc.' => 'Avid Technology Inc.', +// 'V3-Semiconductor-Inc.' => 'V3 Semiconductor Inc.', +// 'Apricot-Computers' => 'Apricot Computers', +// 'Eastman-Kodak' => 'Eastman Kodak', +// 'Barr-Systems-Inc.' => 'Barr Systems Inc.', +// 'Radstone-Technology-Plc' => 'Radstone Technology Plc', +// 'United-Video-Corp' => 'United Video Corp', +// 'Motorola' => 'Motorola', +// 'XPoint-Technologies-Inc' => 'XPoint Technologies, Inc', +// 'Pathlight-Technology-Inc.' => 'Pathlight Technology Inc.', +// 'Videotron-Corp' => 'Videotron Corp', +// 'Pyramid-Technology' => 'Pyramid Technology', +// 'Network-Peripherals-Inc' => 'Network Peripherals Inc', +// 'Pinnacle-Systems-Inc.' => 'Pinnacle Systems Inc.', +// 'Astrodesign-Inc.' => 'Astrodesign, Inc.', +// 'Hewlett-Packard' => 'Hewlett Packard', +// 'Sand-Microelectronics' => 'Sand Microelectronics', +// 'NEC-Corporation' => 'NEC Corporation', +// 'Document-Technologies-Inc' => 'Document Technologies, Inc', +// 'Shiva-Corporation' => 'Shiva Corporation', +// 'Dainippon-Screen-Mfg.-Co.-Ltd' => 'Dainippon Screen Mfg. Co. Ltd', +// 'D.C.M.-Data-Systems' => 'D.C.M. Data Systems', +// 'Magma' => 'Magma', +// 'LSI-Systems-Inc' => 'LSI Systems, Inc', +// 'Specialix-Research-Ltd.' => 'Specialix Research Ltd.', +// 'HAL-Computer-Systems-Inc.' => 'HAL Computer Systems, Inc.', +// 'Netaccess' => 'Netaccess', +// 'Auravision' => 'Auravision', +// 'Intercom-Inc.' => 'Intercom Inc.', +// 'Trancell-Systems-Inc' => 'Trancell Systems Inc', +// 'Analog-Devices' => 'Analog Devices', +// 'Ikon-Corporation' => 'Ikon Corporation', +// 'Tekelec-Telecom' => 'Tekelec Telecom', +// 'Trenton-Technology-Inc.' => 'Trenton Technology, Inc.', +// 'TEC-Corporation' => 'TEC Corporation', +// 'Novell' => 'Novell', +// 'Sega-Enterprises-Ltd' => 'Sega Enterprises Ltd', +// 'Questra-Corporation' => 'Questra Corporation', +// 'Crosfield-Electronics-Limited' => 'Crosfield Electronics Limited', +// 'Zoran-Corporation' => 'Zoran Corporation', +// 'New-Wave-PDG' => 'New Wave PDG', +// 'Cray-Communications-A-S' => 'Cray Communications A/S', +// 'GEC-Plessey-Semi-Inc.' => 'GEC Plessey Semi Inc.', +// 'Quicklogic-Corporation' => 'Quicklogic Corporation', +// 'Second-Wave-Inc' => 'Second Wave Inc', +// 'IIX-Consulting' => 'IIX Consulting', +// 'Mitsui-Zosen-System-Research' => 'Mitsui-Zosen System Research', +// 'Highwater-Designs-Ltd.' => 'Highwater Designs Ltd.', +// 'Elsag-Bailey' => 'Elsag Bailey', +// 'Formation-Inc.' => 'Formation Inc.', +// 'Coreco-Inc' => 'Coreco Inc', +// 'Mediamatics' => 'Mediamatics', +// 'Dome-Imaging-Systems-Inc' => 'Dome Imaging Systems Inc', +// 'Nicolet-Technologies-B.V.' => 'Nicolet Technologies B.V.', +// 'Compu-Shack' => 'Compu-Shack', +// 'Symbios-Logic-Inc' => 'Symbios Logic Inc', +// 'Picture-Tel-Japan-K.K.' => 'Picture Tel Japan K.K.', +// 'Keithley-Metrabyte' => 'Keithley Metrabyte', +// 'Kinetic-Systems-Corporation' => 'Kinetic Systems Corporation', +// 'Compex' => 'Compex', +// 'Scientific-Atlanta' => 'Scientific Atlanta', +// 'PMC-Sierra-Inc.' => 'PMC-Sierra Inc.', +// 'I-Cube-Inc' => 'I-Cube Inc', +// 'Datel-Inc' => 'Datel Inc', +// 'Silicon-Magic' => 'Silicon Magic', +// 'High-Street-Consultants' => 'High Street Consultants', +// 'Comtrol-Corporation' => 'Comtrol Corporation', +// 'Scion-Corporation' => 'Scion Corporation', +// 'CSS-Corporation' => 'CSS Corporation', +// 'Vista-Controls-Corp' => 'Vista Controls Corp', +// 'Network-General-Corp.' => 'Network General Corp.', +// 'Array-Corporation' => 'Array Corporation', +// 'Amdahl-Corporation' => 'Amdahl Corporation', +// 'Parsytec-GmbH' => 'Parsytec GmbH', +// 'SCI-Systems-Inc' => 'SCI Systems Inc', +// 'Synaptel' => 'Synaptel', +// 'Adaptive-Solutions' => 'Adaptive Solutions', +// 'Technical-Corp.' => 'Technical Corp.', +// 'Compression-Labs-Inc.' => 'Compression Labs, Inc.', +// 'Cyclades-Corporation' => 'Cyclades Corporation', +// 'Essential-Communications' => 'Essential Communications', +// 'Hyperparallel-Technologies' => 'Hyperparallel Technologies', +// 'Braintech-Inc' => 'Braintech Inc', +// 'Kingston-Technology-Corp.' => 'Kingston Technology Corp.', +// 'Interware-Co.-Ltd' => 'Interware Co., Ltd', +// 'Purup-Prepress-A-S' => 'Purup Prepress A/S', +// 'O2-Micro-Inc.' => 'O2 Micro, Inc.', +// 'Hybricon-Corp.' => 'Hybricon Corp.', +// 'First-Virtual-Corporation' => 'First Virtual Corporation', +// '3Dfx-Interactive-Inc.' => '3Dfx Interactive, Inc.', +// 'Nippon-Texaco.-Ltd' => 'Nippon Texaco., Ltd', +// 'CSPI' => 'CSPI', +// 'Arcus-Technology-Inc.' => 'Arcus Technology, Inc.', +// 'Ariel-Corporation' => 'Ariel Corporation', +// 'Contec-Co.-Ltd' => 'Contec Co., Ltd', +// 'Ancor-Communications-Inc.' => 'Ancor Communications, Inc.', +// 'Interactive-Images' => 'Interactive Images', +// 'Power-I-O-Inc.' => 'Power I/O, Inc.', +// 'Tech-Source' => 'Tech-Source', +// 'Norsk-Elektro-Optikk-A-S' => 'Norsk Elektro Optikk A/S', +// 'Data-Kinesis-Inc.' => 'Data Kinesis Inc.', +// 'Integrated-Telecom' => 'Integrated Telecom', +// 'Sican-GmbH' => 'Sican GmbH', +// 'Aztech-System-Ltd' => 'Aztech System Ltd', +// 'Xyratex' => 'Xyratex', +// 'Andrew-Corporation' => 'Andrew Corporation', +// 'Fishcamp-Engineering' => 'Fishcamp Engineering', +// 'Woodward-McCoach-Inc.' => 'Woodward McCoach, Inc.', +// 'GPT-Limited' => 'GPT Limited', +// 'Bus-Tech-Inc.' => 'Bus-Tech, Inc.', +// 'Risq-Modular-Systems-Inc.' => 'Risq Modular Systems, Inc.', +// 'Sigma-Designs-Corporation' => 'Sigma Designs Corporation', +// 'Alta-Technology-Corporation' => 'Alta Technology Corporation', +// 'Adtran' => 'Adtran', +// '3DO-Company' => '3DO Company', +// 'Visicom-Laboratories-Inc.' => 'Visicom Laboratories, Inc.', +// 'Seeq-Technology-Inc.' => 'Seeq Technology, Inc.', +// 'Century-Systems-Inc.' => 'Century Systems, Inc.', +// 'Engineering-Design-Team-Inc.' => 'Engineering Design Team, Inc.', +// 'Simutech-Inc.' => 'Simutech, Inc.', +// 'C-Cube-Microsystems' => 'C-Cube Microsystems', +// 'Marathon-Technologies-Corp.' => 'Marathon Technologies Corp.', +// 'DSC-Communications' => 'DSC Communications', +// 'Delphax' => 'Delphax', +// 'A.P.D.-S.A.' => 'A.P.D., S.A.', +// 'Dipix-Technologies-Inc.' => 'Dipix Technologies, Inc.', +// 'Xylon-Research-Inc.' => 'Xylon Research, Inc.', +// 'Central-Data-Corporation' => 'Central Data Corporation', +// 'Samsung-Electronics-Co.-Ltd.' => 'Samsung Electronics Co., Ltd.', +// 'AEG-Electrocom-GmbH' => 'AEG Electrocom GmbH', +// 'SBS-Greenspring-Modular-I-O' => 'SBS/Greenspring Modular I/O', +// 'Solitron-Technologies-Inc.' => 'Solitron Technologies, Inc.', +// 'Stallion-Technologies-Inc.' => 'Stallion Technologies, Inc.', +// 'Cylink' => 'Cylink', +// 'Infortrend-Technology-Inc.' => 'Infortrend Technology, Inc.', +// 'VLSI-Solutions-Oy' => 'VLSI Solutions Oy', +// 'Guzik-Technical-Enterprises' => 'Guzik Technical Enterprises', +// 'Linear-Systems-Ltd.' => 'Linear Systems Ltd.', +// 'Optibase-Ltd' => 'Optibase Ltd', +// 'Perceptive-Solutions-Inc.' => 'Perceptive Solutions, Inc.', +// 'Vertex-Networks-Inc.' => 'Vertex Networks, Inc.', +// 'Gilbarco-Inc.' => 'Gilbarco, Inc.', +// 'Allied-Telesyn-International' => 'Allied Telesyn International', +// 'ABB-Power-Systems' => 'ABB Power Systems', +// 'Asix-Electronics-Corporation' => 'Asix Electronics Corporation', +// 'Aurora-Technologies-Inc.' => 'Aurora Technologies, Inc.', +// 'ESS-Technology' => 'ESS Technology', +// 'Specialvideo-Engineering-SRL' => 'Specialvideo Engineering SRL', +// 'Concurrent-Technologies-Inc.' => 'Concurrent Technologies, Inc.', +// 'Intersil-Corporation' => 'Intersil Corporation', +// 'ES-Computer-Company-Ltd.' => 'ES Computer Company, Ltd.', +// 'Sonic-Solutions' => 'Sonic Solutions', +// 'Aval-Nagasaki-Corporation' => 'Aval Nagasaki Corporation', +// 'Casio-Computer-Co.-Ltd.' => 'Casio Computer Co., Ltd.', +// 'Microdyne-Corporation' => 'Microdyne Corporation', +// 'S.-A.-Telecommunications' => 'S. A. Telecommunications', +// 'Tektronix' => 'Tektronix', +// 'Thomson-CSF-TTM' => 'Thomson-CSF/TTM', +// 'Lexmark-International-Inc.' => 'Lexmark International, Inc.', +// 'Adax-Inc.' => 'Adax, Inc.', +// 'Northern-Telecom' => 'Northern Telecom', +// 'Splash-Technology-Inc.' => 'Splash Technology, Inc.', +// 'Silicon-Motion-Inc.' => 'Silicon Motion, Inc.', +// 'Olympus-Optical-Co.-Ltd.' => 'Olympus Optical Co., Ltd.', +// 'GW-Instruments' => 'GW Instruments', +// 'Telematics-International' => 'Telematics International', +// 'Hughes-Network-Systems' => 'Hughes Network Systems', +// 'Ensoniq' => 'Ensoniq', +// 'Network-Appliance-Corporation' => 'Network Appliance Corporation', +// 'Comstream' => 'Comstream', +// 'Transmeta-Corporation' => 'Transmeta Corporation', +// 'Rockwell-International' => 'Rockwell International', +// 'Pixera-Corporation' => 'Pixera Corporation', +// 'Crosspoint-Solutions-Inc.' => 'Crosspoint Solutions, Inc.', +// 'Vela-Research' => 'Vela Research', +// 'Winnov-L.P.' => 'Winnov, L.P.', +// 'Fujifilm' => 'Fujifilm', +// 'Photoscript-Group-Ltd.' => 'Photoscript Group Ltd.', +// 'Yokogawa-Electric-Corporation' => 'Yokogawa Electric Corporation', +// 'Davicom-Semiconductor-Inc.' => 'Davicom Semiconductor, Inc.', +// 'Sahara-Networks-Inc.' => 'Sahara Networks, Inc.', +// 'Platform-Technologies-Inc.' => 'Platform Technologies, Inc.', +// 'Mazet-GmbH' => 'Mazet GmbH', +// 'M-Pact-Inc.' => 'M-Pact, Inc.', +// 'Timestep-Corporation' => 'Timestep Corporation', +// 'AVC-Technology-Inc.' => 'AVC Technology, Inc.', +// 'Asante-Technologies-Inc.' => 'Asante Technologies, Inc.', +// 'Transwitch-Corporation' => 'Transwitch Corporation', +// 'Retix-Corporation' => 'Retix Corporation', +// 'G2-Networks-Inc.' => 'G2 Networks, Inc.', +// 'Tateno-Dennou-Inc.' => 'Tateno Dennou, Inc.', +// 'Sord-Computer-Corporation' => 'Sord Computer Corporation', +// 'NCS-Computer-Italia' => 'NCS Computer Italia', +// 'Tritech-Microelectronics-Inc' => 'Tritech Microelectronics Inc', +// 'Media-Reality-Technology' => 'Media Reality Technology', +// 'Rhetorex-Inc.' => 'Rhetorex, Inc.', +// 'Imagenation-Corporation' => 'Imagenation Corporation', +// 'Kofax-Image-Products' => 'Kofax Image Products', +// 'Knowledge-Technology-Lab.' => 'Knowledge Technology Lab.', +// 'VMetro-inc.' => 'VMetro, inc.', +// 'Image-Access' => 'Image Access', +// 'Jaycor' => 'Jaycor', +// 'Compcore-Multimedia-Inc.' => 'Compcore Multimedia, Inc.', +// 'Victor-Company-of-Japan-Ltd.' => 'Victor Company of Japan, Ltd.', +// 'OEC-Medical-Systems-Inc.' => 'OEC Medical Systems, Inc.', +// 'Allen-Bradley-Company' => 'Allen-Bradley Company', +// 'Simpact-Associates-Inc.' => 'Simpact Associates, Inc.', +// 'Newgen-Systems-Corporation' => 'Newgen Systems Corporation', +// 'Lucent-Technologies' => 'Lucent Technologies', +// 'Vision-Dynamics-Ltd.' => 'Vision Dynamics Ltd.', +// 'Scalable-Networks-Inc.' => 'Scalable Networks, Inc.', +// 'AMO-GmbH' => 'AMO GmbH', +// 'News-Datacom' => 'News Datacom', +// 'Xiotech-Corporation' => 'Xiotech Corporation', +// 'SDL-Communications-Inc.' => 'SDL Communications, Inc.', +// 'Measurex-Corporation' => 'Measurex Corporation', +// 'Multidata-GmbH' => 'Multidata GmbH', +// 'Alteon-Networks-Inc.' => 'Alteon Networks Inc.', +// 'TDK-USA-Corp' => 'TDK USA Corp', +// 'Jorge-Scientific-Corp' => 'Jorge Scientific Corp', +// 'GammaLink' => 'GammaLink', +// 'General-Signal-Networks' => 'General Signal Networks', +// 'Inter-Face-Co-Ltd' => 'Inter-Face Co Ltd', +// 'FutureTel-Inc' => 'FutureTel Inc', +// 'Granite-Systems-Inc.' => 'Granite Systems Inc.', +// 'Natural-Microsystems' => 'Natural Microsystems', +// 'Korg' => 'Korg', +// 'BittWare-Inc.' => 'BittWare, Inc.', +// 'Nippon-Unisoft-Corporation' => 'Nippon Unisoft Corporation', +// 'Array-Microsystems' => 'Array Microsystems', +// 'Computerm-Corp.' => 'Computerm Corp.', +// 'Anchor-Chips-Inc.' => 'Anchor Chips Inc.', +// 'Fujifilm-Microdevices' => 'Fujifilm Microdevices', +// 'Infimed' => 'Infimed', +// 'GMM-Research-Corp' => 'GMM Research Corp', +// 'Mentec-Limited' => 'Mentec Limited', +// 'Holtek-Microelectronics-Inc' => 'Holtek Microelectronics Inc', +// 'Connect-Tech-Inc' => 'Connect Tech Inc', +// 'Picture-Elements-Incorporated' => 'Picture Elements Incorporated', +// 'Mitani-Corporation' => 'Mitani Corporation', +// 'Dialogic-Corp' => 'Dialogic Corp', +// 'G-Force-Co-Ltd' => 'G Force Co, Ltd', +// 'Gigi-Operations' => 'Gigi Operations', +// 'Integrated-Computing-Engines' => 'Integrated Computing Engines', +// 'Antex-Electronics-Corporation' => 'Antex Electronics Corporation', +// 'Aims-Lab' => 'Aims Lab', +// 'Netspeed-Inc.' => 'Netspeed Inc.', +// 'Prophet-Systems-Inc.' => 'Prophet Systems, Inc.', +// 'GDE-Systems-Inc.' => 'GDE Systems, Inc.', +// 'PSITech' => 'PSITech', +// 'Vingmed-Sound-A-S' => 'Vingmed Sound A/S', +// 'Ulticom-Formerly-DGM-S' => 'Ulticom (Formerly DGM&S)', +// 'Equator-Technologies-Inc' => 'Equator Technologies Inc', +// 'Analogic-Corp' => 'Analogic Corp', +// 'Biotronic-SRL' => 'Biotronic SRL', +// 'Pericom-Semiconductor' => 'Pericom Semiconductor', +// 'Aculab-PLC' => 'Aculab PLC', +// 'True-Time-Inc.' => 'True Time Inc.', +// 'Annapolis-Micro-Systems-Inc' => 'Annapolis Micro Systems, Inc', +// 'Management-Graphics' => 'Management Graphics', +// 'Rainbow-Technologies' => 'Rainbow Technologies', +// 'SBS-Technologies-Inc' => 'SBS Technologies Inc', +// 'Chase-Research' => 'Chase Research', +// 'Nintendo-Co-Ltd' => 'Nintendo Co, Ltd', +// 'Brooktrout-Technology-Inc' => 'Brooktrout Technology Inc', +// 'Apex-Semiconductor-Inc' => 'Apex Semiconductor Inc', +// 'Cirel-Systems' => 'Cirel Systems', +// 'Sunsgroup-Corporation' => 'Sunsgroup Corporation', +// 'Crisc-Corp' => 'Crisc Corp', +// 'GE-Spacenet' => 'GE Spacenet', +// 'Zuken' => 'Zuken', +// 'Aureal-Semiconductor' => 'Aureal Semiconductor', +// '3A-International-Inc.' => '3A International, Inc.', +// 'Optivision-Inc.' => 'Optivision Inc.', +// 'Orange-Micro' => 'Orange Micro', +// 'Vienna-Systems' => 'Vienna Systems', +// 'Pentek' => 'Pentek', +// 'Sorenson-Vision-Inc' => 'Sorenson Vision Inc', +// 'Gammagraphx-Inc.' => 'Gammagraphx, Inc.', +// 'Radstone-Technology' => 'Radstone Technology', +// 'Megatel' => 'Megatel', +// 'Forks' => 'Forks', +// 'Dawson-France' => 'Dawson France', +// 'Cognex' => 'Cognex', +// 'Electronic-Design-GmbH' => 'Electronic Design GmbH', +// 'Four-Fold-Ltd' => 'Four Fold Ltd', +// 'Spectrum-Signal-Processing' => 'Spectrum Signal Processing', +// 'Capital-Equipment-Corp' => 'Capital Equipment Corp', +// 'I2S' => 'I2S', +// 'Lexicon' => 'Lexicon', +// 'Computer-Sciences-Corp' => 'Computer Sciences Corp', +// 'Innovative-Integration' => 'Innovative Integration', +// 'Juniper-Networks' => 'Juniper Networks', +// 'Netphone-Inc' => 'Netphone, Inc', +// 'Duet-Technologies' => 'Duet Technologies', +// 'Jato-Technologies-Inc.' => 'Jato Technologies Inc.', +// 'AB-Semiconductor-Ltd' => 'AB Semiconductor Ltd', +// 'Ambex-Technologies-Inc' => 'Ambex Technologies, Inc', +// 'Accelerix-Inc' => 'Accelerix Inc', +// 'Yamatake-Honeywell-Co.-Ltd' => 'Yamatake-Honeywell Co. Ltd', +// 'Advanet-Inc' => 'Advanet Inc', +// 'Gespac' => 'Gespac', +// 'Videoserver-Inc' => 'Videoserver, Inc', +// 'Acuity-Imaging-Inc' => 'Acuity Imaging, Inc', +// 'Yaskawa-Electric-Co.' => 'Yaskawa Electric Co.', +// 'Wavesat' => 'Wavesat', +// 'Teradyne-Inc' => 'Teradyne Inc', +// 'ADMtek' => 'ADMtek', +// 'Packet-Engines-Inc.' => 'Packet Engines Inc.', +// 'Fortemedia-Inc' => 'Fortemedia, Inc', +// 'Finisar-Corp.' => 'Finisar Corp.', +// 'Sysmic-Inc.' => 'Sysmic, Inc.', +// 'Xinex-Networks-Inc' => 'Xinex Networks Inc', +// 'Siig-Inc' => 'Siig Inc', +// 'Crypto-AG' => 'Crypto AG', +// 'Arcobel-Graphics-BV' => 'Arcobel Graphics BV', +// 'MTT-Co.-Ltd' => 'MTT Co., Ltd', +// 'Dome-Inc' => 'Dome Inc', +// 'Sphere-Communications' => 'Sphere Communications', +// 'Salix-Technologies-Inc' => 'Salix Technologies, Inc', +// 'Seachange-international' => 'Seachange international', +// 'Voss-scientific' => 'Voss scientific', +// 'quadrant-international' => 'quadrant international', +// 'Productivity-Enhancement' => 'Productivity Enhancement', +// 'Microcom-Inc.' => 'Microcom Inc.', +// 'Broadband-Technologies' => 'Broadband Technologies', +// 'Micrel-Inc' => 'Micrel Inc', +// 'MMC-Networks' => 'MMC Networks', +// 'RadiSys-Corporation' => 'RadiSys Corporation', +// 'Micro-Memory' => 'Micro Memory', +// 'Redcreek-Communications-Inc' => 'Redcreek Communications, Inc', +// 'Videomail-Inc' => 'Videomail, Inc', +// 'Third-Planet-Publishing' => 'Third Planet Publishing', +// 'BT-Electronics' => 'BT Electronics', +// 'Vtel-Corp' => 'Vtel Corp', +// 'Softcom-Microsystems' => 'Softcom Microsystems', +// 'Holontech-Corp' => 'Holontech Corp', +// 'SS-Technologies' => 'SS Technologies', +// 'Virtual-Computer-Corp' => 'Virtual Computer Corp', +// 'SCM-Microsystems' => 'SCM Microsystems', +// 'Atalla-Corp' => 'Atalla Corp', +// 'Kyoto-Microcomputer-Co' => 'Kyoto Microcomputer Co', +// 'Promax-Systems-Inc' => 'Promax Systems Inc', +// 'Phylon-Communications-Inc' => 'Phylon Communications Inc', +// 'Arescom-Inc' => 'Arescom Inc', +// 'Odetics' => 'Odetics', +// 'DTC-Technology-Corp.' => 'DTC Technology Corp.', +// 'ARK-Research-Corp.' => 'ARK Research Corp.', +// 'Chori-Joho-System-Co.-Ltd' => 'Chori Joho System Co. Ltd', +// 'PCTel-Inc' => 'PCTel Inc', +// 'CSTI' => 'CSTI', +// 'Algo-System-Co-Ltd' => 'Algo System Co Ltd', +// 'Systec-Co.-Ltd' => 'Systec Co. Ltd', +// 'Sonix-Inc' => 'Sonix Inc', +// 'Thales-Idatys' => 'Thales Idatys', +// 'Dwave-System-Inc' => 'Dwave System Inc', +// 'Kratos-Analytical-Ltd' => 'Kratos Analytical Ltd', +// 'The-Logical-Co' => 'The Logical Co', +// 'Prisa-Networks' => 'Prisa Networks', +// 'Brain-Boxes' => 'Brain Boxes', +// 'Giganet-Inc' => 'Giganet Inc', +// 'Quatech-Inc' => 'Quatech Inc', +// 'ABB-Network-Partner-AB' => 'ABB Network Partner AB', +// 'Sealevel-Systems-Inc' => 'Sealevel Systems Inc', +// 'I-Data-International-A-S' => 'I-Data International A-S', +// 'Meinberg-Funkuhren' => 'Meinberg Funkuhren', +// 'Soliton-Systems-K.K.' => 'Soliton Systems K.K.', +// 'Fujifacom-Corporation' => 'Fujifacom Corporation', +// 'Phoenix-Technology-Ltd' => 'Phoenix Technology Ltd', +// 'ATM-Communications-Inc' => 'ATM Communications Inc', +// 'Hypercope-GmbH' => 'Hypercope GmbH', +// 'Teijin-Seiki-Co.-Ltd' => 'Teijin Seiki Co. Ltd', +// 'Hitachi-Zosen-Corporation' => 'Hitachi Zosen Corporation', +// 'Skyware-Corporation' => 'Skyware Corporation', +// 'Digigram' => 'Digigram', +// 'High-Soft-Tech' => 'High Soft Tech', +// 'Kawasaki-Steel-Corporation' => 'Kawasaki Steel Corporation', +// 'Adtek-System-Science-Co-Ltd' => 'Adtek System Science Co Ltd', +// 'Gigalabs-Inc' => 'Gigalabs Inc', +// 'Applied-Magic-Inc' => 'Applied Magic Inc', +// 'ATL-Products' => 'ATL Products', +// 'CNet-Technology-Inc' => 'CNet Technology Inc', +// 'Silicon-Vision-Inc' => 'Silicon Vision Inc', +// 'Silicom-Ltd.' => 'Silicom Ltd.', +// 'Argosystems-Inc' => 'Argosystems Inc', +// 'LMC' => 'LMC', +// 'Telemann-Co.-Ltd' => 'Telemann Co. Ltd', +// 'Mark-of-the-Unicorn-Inc' => 'Mark of the Unicorn Inc', +// 'PPT-Vision' => 'PPT Vision', +// 'Iwatsu-Electric-Co-Ltd' => 'Iwatsu Electric Co Ltd', +// 'Dynachip-Corporation' => 'Dynachip Corporation', +// 'Japan-Satellite-Systems-Inc' => 'Japan Satellite Systems Inc', +// 'Sanritz-Automation-Co-Ltd' => 'Sanritz Automation Co Ltd', +// 'Brains-Co.-Ltd' => 'Brains Co. Ltd', +// 'Controlnet-Inc' => 'Controlnet Inc', +// 'Netgear' => 'Netgear', +// 'Video-Domain-Technologies' => 'Video Domain Technologies', +// 'Systran-Corp' => 'Systran Corp', +// 'Applicom-International' => 'Applicom International', +// 'Fusion-Micromedia-Corp' => 'Fusion Micromedia Corp', +// 'Tokimec-Inc' => 'Tokimec Inc', +// 'Silicon-Reality' => 'Silicon Reality', +// 'Future-Techno-Designs-pte-Ltd' => 'Future Techno Designs pte Ltd', +// 'Basler-GmbH' => 'Basler GmbH', +// 'Patapsco-Designs-Inc' => 'Patapsco Designs Inc', +// 'Concept-Development-Inc' => 'Concept Development Inc', +// 'Development-Concepts-Inc' => 'Development Concepts Inc', +// 'Medialight-Inc' => 'Medialight Inc', +// 'Moxa-Technologies-Co-Ltd' => 'Moxa Technologies Co Ltd', +// 'Level-One-Communications' => 'Level One Communications', +// 'Ambicom-Inc' => 'Ambicom Inc', +// 'Cipher-Systems-Inc' => 'Cipher Systems Inc', +// 'Cologne-Chip-Designs-GmbH' => 'Cologne Chip Designs GmbH', +// 'Clarion-co.-Ltd' => 'Clarion co. Ltd', +// 'Rios-systems-Co-Ltd' => 'Rios systems Co Ltd', +// 'Alacritech-Inc' => 'Alacritech Inc', +// 'Quantum-3d-Inc' => 'Quantum 3d Inc', +// 'EPL-limited' => 'EPL limited', +// 'Media4' => 'Media4', +// 'Aethra-s.r.l.' => 'Aethra s.r.l.', +// 'Crystal-Group-Inc' => 'Crystal Group Inc', +// 'Kawasaki-Heavy-Industries-Ltd' => 'Kawasaki Heavy Industries Ltd', +// 'Ositech-Communications-Inc' => 'Ositech Communications Inc', +// 'Hifn-Inc.' => 'Hifn Inc.', +// 'Rascom-Inc' => 'Rascom Inc', +// 'Audio-Digital-Imaging-Inc' => 'Audio Digital Imaging Inc', +// 'Videonics-Inc' => 'Videonics Inc', +// 'Teles-AG' => 'Teles AG', +// 'Exar-Corp.' => 'Exar Corp.', +// 'Broadband-Networks-Inc' => 'Broadband Networks Inc', +// 'Arcom-Control-Systems-Ltd' => 'Arcom Control Systems Ltd', +// 'Motion-Media-Technology-Ltd' => 'Motion Media Technology Ltd', +// 'Nexus-Inc' => 'Nexus Inc', +// 'ALD-Technology-Ltd' => 'ALD Technology Ltd', +// 'T.Sqware' => 'T.Sqware', +// 'Maxspeed-Corp' => 'Maxspeed Corp', +// 'Tamura-corporation' => 'Tamura corporation', +// 'Techno-Chips-Co.-Ltd' => 'Techno Chips Co. Ltd', +// 'Lanart-Corporation' => 'Lanart Corporation', +// 'Wellbean-Co-Inc' => 'Wellbean Co Inc', +// 'ARM' => 'ARM', +// 'Dlog-GmbH' => 'Dlog GmbH', +// 'Logic-Devices-Inc' => 'Logic Devices Inc', +// 'Nokia-Telecommunications-oy' => 'Nokia Telecommunications oy', +// 'Elecom-Co-Ltd' => 'Elecom Co Ltd', +// 'Oxford-Instruments' => 'Oxford Instruments', +// 'Sanyo-Technosound-Co-Ltd' => 'Sanyo Technosound Co Ltd', +// 'Bitran-Corporation' => 'Bitran Corporation', +// 'Sharp-corporation' => 'Sharp corporation', +// 'Miroku-Jyoho-Service-Co.-Ltd' => 'Miroku Jyoho Service Co. Ltd', +// 'Sharewave-Inc' => 'Sharewave Inc', +// 'Microgate-Corporation' => 'Microgate Corporation', +// '3ware-Inc' => '3ware Inc', +// 'Janz-Computer-AG' => 'Janz Computer AG', +// 'Phase-Metrics' => 'Phase Metrics', +// 'Alphi-Technology-Corp' => 'Alphi Technology Corp', +// 'Condor-Engineering-Inc' => 'Condor Engineering Inc', +// 'Blue-Chip-Technology-Ltd' => 'Blue Chip Technology Ltd', +// 'Apptech-Inc' => 'Apptech Inc', +// 'Eaton-Corporation' => 'Eaton Corporation', +// 'Iomega-Corporation' => 'Iomega Corporation', +// 'Yano-Electric-Co-Ltd' => 'Yano Electric Co Ltd', +// 'Metheus-Corporation' => 'Metheus Corporation', +// 'Cocom-A-S' => 'Cocom A/S', +// 'Studio-Audio---Video-Ltd' => 'Studio Audio & Video Ltd', +// 'Techsan-Electronics-Co-Ltd' => 'Techsan Electronics Co Ltd', +// 'Abocom-Systems-Inc' => 'Abocom Systems Inc', +// 'Shark-Multimedia-Inc' => 'Shark Multimedia Inc', +// 'IMC-Networks' => 'IMC Networks', +// 'Graphics-Microsystems-Inc' => 'Graphics Microsystems Inc', +// 'Media-100-Inc' => 'Media 100 Inc', +// 'K.I.-Technology-Co-Ltd' => 'K.I. Technology Co Ltd', +// 'Phobos-corporation' => 'Phobos corporation', +// 'Apex-PC-Solutions-Inc' => 'Apex PC Solutions Inc', +// 'Intresource-Systems-pte-Ltd' => 'Intresource Systems pte Ltd', +// 'Netboost-Corporation' => 'Netboost Corporation', +// 'Multimedia-Bundle-Inc' => 'Multimedia Bundle Inc', +// 'ABB-Robotics-Products-AB' => 'ABB Robotics Products AB', +// 'E-Tech-Inc' => 'E-Tech Inc', +// 'GVC-Corporation' => 'GVC Corporation', +// 'Dynamics-Research-Corporation' => 'Dynamics Research Corporation', +// 'Nest-Inc' => 'Nest Inc', +// 'Calculex-Inc' => 'Calculex Inc', +// 'Telesoft-Design-Ltd' => 'Telesoft Design Ltd', +// 'Argosy-research-Inc' => 'Argosy research Inc', +// 'NAC-Incorporated' => 'NAC Incorporated', +// 'Chip-Express-Corporation' => 'Chip Express Corporation', +// 'Intraserver-Technology-Inc' => 'Intraserver Technology Inc', +// 'Dallas-Semiconductor' => 'Dallas Semiconductor', +// 'Hauppauge-Computer-Works-Inc' => 'Hauppauge Computer Works Inc', +// 'Zydacron-Inc' => 'Zydacron Inc', +// 'Raytheion-E-Systems' => 'Raytheion E-Systems', +// 'Coppercom-Inc' => 'Coppercom Inc', +// 'Oce---Technologies-B.V.' => 'Oce - Technologies B.V.', +// 'Ford-Microelectronics-Inc' => 'Ford Microelectronics Inc', +// 'Mcdata-Corporation' => 'Mcdata Corporation', +// 'Troika-Networks-Inc.' => 'Troika Networks, Inc.', +// 'Kansai-Electric-Co.-Ltd' => 'Kansai Electric Co. Ltd', +// 'C-Media-Electronics-Inc' => 'C-Media Electronics Inc', +// 'Wildfire-Communications' => 'Wildfire Communications', +// 'Ad-Lib-Multimedia-Inc' => 'Ad Lib Multimedia Inc', +// 'NTT-Advanced-Technology-Corp.' => 'NTT Advanced Technology Corp.', +// 'Pentland-Systems-Ltd' => 'Pentland Systems Ltd', +// 'Aydin-Corp' => 'Aydin Corp', +// 'Micro-Science-Inc' => 'Micro Science Inc', +// 'Advantech-Co.-Ltd' => 'Advantech Co. Ltd', +// 'Silicon-Spice-Inc' => 'Silicon Spice Inc', +// 'Artx-Inc' => 'Artx Inc', +// 'CR-Systems-A-S' => 'CR-Systems A/S', +// 'Meilhaus-Electronic-GmbH' => 'Meilhaus Electronic GmbH', +// 'Ascor-Inc' => 'Ascor Inc', +// 'Fundamental-Software-Inc' => 'Fundamental Software Inc', +// 'Excalibur-Systems-Inc' => 'Excalibur Systems Inc', +// 'Oce-Printing-Systems-GmbH' => 'Oce Printing Systems GmbH', +// 'Lava-Computer-mfg-Inc' => 'Lava Computer mfg Inc', +// 'Aloka-Co.-Ltd' => 'Aloka Co. Ltd', +// 'Timedia-Technology-Co-Ltd' => 'Timedia Technology Co Ltd', +// 'DSP-Research-Inc' => 'DSP Research Inc', +// 'Elmic-Systems-Inc' => 'Elmic Systems Inc', +// 'Matsushita-Electric-Works-Ltd' => 'Matsushita Electric Works Ltd', +// 'Goepel-Electronic-GmbH' => 'Goepel Electronic GmbH', +// 'Salient-Systems-Corp' => 'Salient Systems Corp', +// 'Midas-lab-Inc' => 'Midas lab Inc', +// 'Ikos-Systems-Inc' => 'Ikos Systems Inc', +// 'Addonics' => 'Addonics', +// 'Microsoft-Corporation' => 'Microsoft Corporation', +// 'Oxford-Semiconductor-Ltd' => 'Oxford Semiconductor Ltd', +// 'Multiwave-Innovation-pte-Ltd' => 'Multiwave Innovation pte Ltd', +// 'Convergenet-Technologies-Inc' => 'Convergenet Technologies Inc', +// 'Excel-Switching-Corp' => 'Excel Switching Corp', +// 'Apache-Micro-Peripherals-Inc' => 'Apache Micro Peripherals Inc', +// 'Zoom-Telephonics-Inc' => 'Zoom Telephonics Inc', +// 'Digitan-Systems-Inc' => 'Digitan Systems Inc', +// 'Fanuc-Ltd' => 'Fanuc Ltd', +// 'Visiontech-Ltd' => 'Visiontech Ltd', +// 'Psion-Dacom-plc' => 'Psion Dacom plc', +// 'Ads-Technologies-Inc' => 'Ads Technologies Inc', +// 'Ygrec-Systems-Co-Ltd' => 'Ygrec Systems Co Ltd', +// 'Custom-Technology-Corp.' => 'Custom Technology Corp.', +// 'Videoserver-Connections' => 'Videoserver Connections', +// 'Chelsio-Communications-Inc' => 'Chelsio Communications Inc', +// 'Storage-Technology-Corp.' => 'Storage Technology Corp.', +// 'Better-On-Line-Solutions' => 'Better On-Line Solutions', +// 'Edec-Co-Ltd' => 'Edec Co Ltd', +// 'Unex-Technology-Corp.' => 'Unex Technology Corp.', +// 'Kingmax-Technology-Inc' => 'Kingmax Technology Inc', +// 'Radiolan' => 'Radiolan', +// 'Minton-Optic-Industry-Co-Ltd' => 'Minton Optic Industry Co Ltd', +// 'Pix-stream-Inc' => 'Pix stream Inc', +// 'Vitec-Multimedia' => 'Vitec Multimedia', +// 'Radicom-Research-Inc' => 'Radicom Research Inc', +// 'Gilat-Satellite-Networks' => 'Gilat Satellite Networks', +// 'Edimax-Computer-Co.' => 'Edimax Computer Co.', +// 'Eltec-Elektronik-GmbH' => 'Eltec Elektronik GmbH', +// 'CIS-Technology-Inc' => 'CIS Technology Inc', +// 'Nissin-Inc-Co' => 'Nissin Inc Co', +// 'Atmel-dream' => 'Atmel-dream', +// 'Stargate-Solutions-Inc' => 'Stargate Solutions Inc', +// 'Amlogic-Inc' => 'Amlogic Inc', +// 'Tamarack-Microelectronics-Inc' => 'Tamarack Microelectronics Inc', +// 'Jones-Futurex-Inc' => 'Jones Futurex Inc', +// 'ALGOL-Corp.' => 'ALGOL Corp.', +// 'AGIE-Ltd' => 'AGIE Ltd', +// 'Phoenix-Contact-GmbH---Co.' => 'Phoenix Contact GmbH & Co.', +// 'Unibrain-S.A.' => 'Unibrain S.A.', +// 'TRW' => 'TRW', +// 'Logical-DO-Ltd' => 'Logical DO Ltd', +// 'Graphin-Co-Ltd' => 'Graphin Co Ltd', +// 'AIM-GmBH' => 'AIM GmBH', +// 'Alesis-Studio-Electronics' => 'Alesis Studio Electronics', +// 'TUT-Systems-Inc' => 'TUT Systems Inc', +// 'Adlink-Technology' => 'Adlink Technology', +// 'Catalina-Research-Inc' => 'Catalina Research Inc', +// 'Samsung-Electronics-Co-Ltd' => 'Samsung Electronics Co Ltd', +// 'OLITEC' => 'OLITEC', +// 'Askey-Computer-Corp.' => 'Askey Computer Corp.', +// 'Octave-Communications-Ind.' => 'Octave Communications Ind.', +// 'SP3D-Chip-Design-GmBH' => 'SP3D Chip Design GmBH', +// 'MYCOM-Inc' => 'MYCOM Inc', +// 'Altiga-Networks' => 'Altiga Networks', +// 'Logic-Plus-Plus-Inc' => 'Logic Plus Plus Inc', +// 'Nuera-Communications-Inc' => 'Nuera Communications Inc', +// 'Giga-byte-Technology' => 'Giga-byte Technology', +// 'DOOIN-Electronics' => 'DOOIN Electronics', +// 'Escalate-Networks-Inc' => 'Escalate Networks Inc', +// 'PRAIM-SRL' => 'PRAIM SRL', +// 'Cryptek' => 'Cryptek', +// 'Gallant-Computer-Inc' => 'Gallant Computer Inc', +// 'Aashima-Technology-B.V.' => 'Aashima Technology B.V.', +// 'Baldor-Electric-Company' => 'Baldor Electric Company', +// 'DYNARC-INC' => 'DYNARC INC', +// 'Avermedia-Technologies-Inc' => 'Avermedia Technologies Inc', +// 'Fast-Corporation' => 'Fast Corporation', +// 'GN-NETTEST-Telecom-DIV.' => 'GN NETTEST Telecom DIV.', +// 'Designpro-Inc.' => 'Designpro Inc.', +// 'DIGICOM-SPA' => 'DIGICOM SPA', +// 'AMBIT-Microsystem-Corp.' => 'AMBIT Microsystem Corp.', +// 'Cleveland-Motion-Controls' => 'Cleveland Motion Controls', +// 'IFR' => 'IFR', +// 'Parascan-Technologies-Ltd' => 'Parascan Technologies Ltd', +// 'Ruby-Tech-Corp.' => 'Ruby Tech Corp.', +// 'Tachyon-INC.' => 'Tachyon, INC.', +// 'Bay-Networks' => 'Bay Networks', +// 'DAIKIN-Industries-Ltd' => 'DAIKIN Industries, Ltd', +// 'ZAPEX-Technologies-Inc' => 'ZAPEX Technologies Inc', +// 'Doug-Carson---Associates' => 'Doug Carson & Associates', +// 'PICAZO-Communications' => 'PICAZO Communications', +// 'MORTARA-Instrument-Inc' => 'MORTARA Instrument Inc', +// 'Net-Insight' => 'Net Insight', +// 'DIATREND-Corporation' => 'DIATREND Corporation', +// 'TORAY-Industries-Inc' => 'TORAY Industries Inc', +// 'FORMOSA-Industrial-Computing' => 'FORMOSA Industrial Computing', +// 'ABIT-Computer-Corp.' => 'ABIT Computer Corp.', +// 'AWARE-Inc.' => 'AWARE, Inc.', +// 'Interworks-Computer-Products' => 'Interworks Computer Products', +// 'NIHON-UNISYS-Ltd.' => 'NIHON UNISYS, Ltd.', +// 'SCII-Telecom' => 'SCII Telecom', +// 'BIOPAC-Systems-Inc' => 'BIOPAC Systems Inc', +// 'LABWAY-Corporation' => 'LABWAY Corporation', +// 'Logic-Corporation' => 'Logic Corporation', +// 'ERMA---Electronic-GmBH' => 'ERMA - Electronic GmBH', +// 'MARQUETTE-Medical-Systems' => 'MARQUETTE Medical Systems', +// 'KONTRON-Electronik-GmBH' => 'KONTRON Electronik GmBH', +// 'KYE-Systems-Corporation' => 'KYE Systems Corporation', +// 'OPTO' => 'OPTO', +// 'INNOMEDIALOGIC-Inc.' => 'INNOMEDIALOGIC Inc.', +// 'C.P.-Technology-Co.-Ltd' => 'C.P. Technology Co. Ltd', +// 'DIGICOM-Systems-Inc.' => 'DIGICOM Systems, Inc.', +// 'OSI-Plus-Corporation' => 'OSI Plus Corporation', +// 'Plant-Equipment-Inc.' => 'Plant Equipment, Inc.', +// 'Stone-Microsystems-PTY-Ltd.' => 'Stone Microsystems PTY Ltd.', +// 'ZEAL-Corporation' => 'ZEAL Corporation', +// 'Time-Logic-Corporation' => 'Time Logic Corporation', +// 'MAKER-Communications' => 'MAKER Communications', +// 'WINTOP-Technology-Inc.' => 'WINTOP Technology, Inc.', +// 'JOYTECH-Computer-Co.-Ltd.' => 'JOYTECH Computer Co., Ltd.', +// 'SMA-Regelsysteme-GmBH' => 'SMA Regelsysteme GmBH', +// 'TEWS-Technologies-GmbH' => 'TEWS Technologies GmbH', +// 'EMTEC-CO.-Ltd' => 'EMTEC CO., Ltd', +// 'ANDOR-Technology-Ltd' => 'ANDOR Technology Ltd', +// 'SEIKO-Instruments-Inc' => 'SEIKO Instruments Inc', +// 'OVISLINK-Corp.' => 'OVISLINK Corp.', +// 'NEWTEK-Inc' => 'NEWTEK Inc', +// 'Mapletree-Networks-Inc.' => 'Mapletree Networks Inc.', +// 'LECTRON-Co-Ltd' => 'LECTRON Co Ltd', +// 'SOFTING-GmBH' => 'SOFTING GmBH', +// 'Systembase-Co-Ltd' => 'Systembase Co Ltd', +// 'Millennium-Engineering-Inc' => 'Millennium Engineering Inc', +// 'Maverick-Networks' => 'Maverick Networks', +// 'GVC-BCM-Advanced-Research' => 'GVC/BCM Advanced Research', +// 'INOVA-Computers-GmBH---Co-KG' => 'INOVA Computers GmBH & Co KG', +// 'MYTHOS-Systems-Inc' => 'MYTHOS Systems Inc', +// 'HIVERTEC-Inc' => 'HIVERTEC Inc', +// 'Advanced-MOS-Technology-Inc' => 'Advanced MOS Technology Inc', +// 'Mentor-Graphics-Corp.' => 'Mentor Graphics Corp.', +// 'Novaweb-Technologies-Inc' => 'Novaweb Technologies Inc', +// 'Time-Space-Radio-AB' => 'Time Space Radio AB', +// 'CTI-Inc' => 'CTI, Inc', +// 'Guillemot-Corporation' => 'Guillemot Corporation', +// 'Nextcom-K.K.' => 'Nextcom K.K.', +// 'ENNOVATE-Networks-Inc' => 'ENNOVATE Networks Inc', +// 'XPEED-Inc' => 'XPEED Inc', +// 'Creamware-GmBH' => 'Creamware GmBH', +// 'Quantum-Data-Corp.' => 'Quantum Data Corp.', +// 'PROXIM-Inc' => 'PROXIM Inc', +// 'Techsoft-Technology-Co-Ltd' => 'Techsoft Technology Co Ltd', +// 'INTERNIX-Inc.' => 'INTERNIX Inc.', +// 'SEMTECH-Corporation' => 'SEMTECH Corporation', +// 'Globespan-Semiconductor-Inc.' => 'Globespan Semiconductor Inc.', +// 'CARDIO-Control-N.V.' => 'CARDIO Control N.V.', +// 'L3-Communications' => 'L3 Communications', +// 'SPIDER-Communications-Inc.' => 'SPIDER Communications Inc.', +// 'COMPAL-Electronics-Inc' => 'COMPAL Electronics Inc', +// 'MYRICOM-Inc.' => 'MYRICOM Inc.', +// 'DTK-Computer' => 'DTK Computer', +// 'MEDIATEK-Corp.' => 'MEDIATEK Corp.', +// 'Automation-Products-AB' => 'Automation Products AB', +// 'Data-Race-Inc' => 'Data Race Inc', +// 'Turbocomm-Tech.-Inc.' => 'Turbocomm Tech. Inc.', +// 'ODIN-Telesystems-Inc' => 'ODIN Telesystems Inc', +// 'PE-Logic-Corp.' => 'PE Logic Corp.', +// 'Billionton-Systems-Inc' => 'Billionton Systems Inc', +// 'NAKAYO-Telecommunications-Inc' => 'NAKAYO Telecommunications Inc', +// 'Universal-Scientific-Ind.' => 'Universal Scientific Ind.', +// 'Whistle-Communications' => 'Whistle Communications', +// 'TEK-Microsystems-Inc.' => 'TEK Microsystems Inc.', +// 'Ericsson-Axe-R---D' => 'Ericsson Axe R & D', +// 'Computer-Hi-Tech-Co-Ltd' => 'Computer Hi-Tech Co Ltd', +// 'Titan-Electronics-Inc' => 'Titan Electronics Inc', +// 'CIRTECH-UK-Ltd' => 'CIRTECH (UK) Ltd', +// 'Panacom-Technology-Corp' => 'Panacom Technology Corp', +// 'Nitsuko-Corporation' => 'Nitsuko Corporation', +// 'Accusys-Inc' => 'Accusys Inc', +// 'Hirakawa-Hewtech-Corp' => 'Hirakawa Hewtech Corp', +// 'HOPF-Elektronik-GmBH' => 'HOPF Elektronik GmBH', +// 'AFAVLAB-Technology-Inc' => 'AFAVLAB Technology Inc', +// 'Amplicon-Liveline-Ltd' => 'Amplicon Liveline Ltd', +// 'Boulder-Design-Labs-Inc' => 'Boulder Design Labs Inc', +// 'ASIC-Communications-Corp' => 'ASIC Communications Corp', +// 'INVERTEX' => 'INVERTEX', +// 'INFOLIBRIA' => 'INFOLIBRIA', +// 'AMTELCO' => 'AMTELCO', +// 'Broadcom-Corporation' => 'Broadcom Corporation', +// 'Pixelfusion-Ltd' => 'Pixelfusion Ltd', +// 'SHINING-Technology-Inc' => 'SHINING Technology Inc', +// '3CX' => '3CX', +// 'RAYCER-Inc' => 'RAYCER Inc', +// 'GARNETS-System-CO-Ltd' => 'GARNETS System CO Ltd', +// 'Planex-Communications-Inc' => 'Planex Communications, Inc', +// 'SEIKO-EPSON-Corp' => 'SEIKO EPSON Corp', +// 'ACQIRIS' => 'ACQIRIS', +// 'DATAKINETICS-Ltd' => 'DATAKINETICS Ltd', +// 'MASPRO-KENKOH-Corp' => 'MASPRO KENKOH Corp', +// 'CARRY-Computer-ENG.-CO-Ltd' => 'CARRY Computer ENG. CO Ltd', +// 'CANON-RESEACH-CENTRE-FRANCE' => 'CANON RESEACH CENTRE FRANCE', +// 'Conexant-Systems-Inc.' => 'Conexant Systems, Inc.', +// 'MOBILITY-Electronics' => 'MOBILITY Electronics', +// 'BroadLogic' => 'BroadLogic', +// 'SOPAC-Ltd' => 'SOPAC Ltd', +// 'COYOTE-Technologies-LLC' => 'COYOTE Technologies LLC', +// 'WOLF-Technology-Inc' => 'WOLF Technology Inc', +// 'AUDIOCODES-Inc' => 'AUDIOCODES Inc', +// 'AG-COMMUNICATIONS' => 'AG COMMUNICATIONS', +// 'WANDEL---GOLTERMANN' => 'WANDEL & GOLTERMANN', +// 'TRANSAS-MARINE-UK-Ltd' => 'TRANSAS MARINE (UK) Ltd', +// 'Quadrics-Ltd' => 'Quadrics Ltd', +// 'JAPAN-Computer-Industry-Inc' => 'JAPAN Computer Industry Inc', +// 'ARCHTEK-TELECOM-Corp' => 'ARCHTEK TELECOM Corp', +// 'TWINHEAD-INTERNATIONAL-Corp' => 'TWINHEAD INTERNATIONAL Corp', +// 'DELTA-Electronics-Inc' => 'DELTA Electronics, Inc', +// 'BANKSOFT-CANADA-Ltd' => 'BANKSOFT CANADA Ltd', +// 'KAWASAKI-LSI-USA-Inc' => 'KAWASAKI LSI USA Inc', +// 'KAISER-Electronics' => 'KAISER Electronics', +// 'CHAMELEON-Systems-Inc' => 'CHAMELEON Systems Inc', +// 'FORVUS-RESEARCH-Inc' => 'FORVUS RESEARCH Inc', +// 'YAMASHITA-Systems-Corp' => 'YAMASHITA Systems Corp', +// 'KYOPAL-CO-Ltd' => 'KYOPAL CO Ltd', +// 'WARPSPPED-Inc' => 'WARPSPPED Inc', +// 'C-PORT-Corp' => 'C-PORT Corp', +// 'INTEC-GmbH' => 'INTEC GmbH', +// 'BEHAVIOR-TECH-Computer-Corp' => 'BEHAVIOR TECH Computer Corp', +// 'CENTILLIUM-Technology-Corp' => 'CENTILLIUM Technology Corp', +// 'ROSUN-Technologies-Inc' => 'ROSUN Technologies Inc', +// 'Raychem' => 'Raychem', +// 'TFL-LAN-Inc' => 'TFL LAN Inc', +// 'Advent-design' => 'Advent design', +// 'MYSON-Technology-Inc' => 'MYSON Technology Inc', +// 'ECHOTEK-Corp' => 'ECHOTEK Corp', +// 'Globetek' => 'Globetek', +// 'COMBOX-Ltd' => 'COMBOX Ltd', +// 'DIGITAL-AUDIO-LABS-Inc' => 'DIGITAL AUDIO LABS Inc', +// 'MATRIX-Corp' => 'MATRIX Corp', +// 'TOPIC-SEMICONDUCTOR-Corp' => 'TOPIC SEMICONDUCTOR Corp', +// 'CHAPLET-System-Inc' => 'CHAPLET System Inc', +// 'BELL-Corp' => 'BELL Corp', +// 'MainPine-Ltd' => 'MainPine Ltd', +// 'MUSIC-Semiconductors' => 'MUSIC Semiconductors', +// 'ENE-Technology-Inc' => 'ENE Technology Inc', +// 'IMPACT-Technologies' => 'IMPACT Technologies', +// 'ISS-Inc' => 'ISS, Inc', +// 'SOLECTRON' => 'SOLECTRON', +// 'ACKSYS' => 'ACKSYS', +// 'AMERICAN-MICROSystems-Inc' => 'AMERICAN MICROSystems Inc', +// 'QUICKTURN-DESIGN-Systems' => 'QUICKTURN DESIGN Systems', +// 'FLYTECH-Technology-CO-Ltd' => 'FLYTECH Technology CO Ltd', +// 'MACRAIGOR-Systems-LLC' => 'MACRAIGOR Systems LLC', +// 'QUANTA-Computer-Inc' => 'QUANTA Computer Inc', +// 'MELEC-Inc' => 'MELEC Inc', +// 'PHILIPS---CRYPTO' => 'PHILIPS - CRYPTO', +// 'ACQIS-Technology-Inc' => 'ACQIS Technology Inc', +// 'CHRYON-Corp' => 'CHRYON Corp', +// 'ECHELON-Corp' => 'ECHELON Corp', +// 'BALTIMORE' => 'BALTIMORE', +// 'ROAD-Corp' => 'ROAD Corp', +// 'EVERGREEN-Technologies-Inc' => 'EVERGREEN Technologies Inc', +// 'ACTIS-Computer' => 'ACTIS Computer', +// 'DATALEX-COMMUNCATIONS' => 'DATALEX COMMUNCATIONS', +// 'ARALION-Inc' => 'ARALION Inc', +// 'ONO-SOKKI' => 'ONO SOKKI', +// 'TERRATEC-Electronic-GmbH' => 'TERRATEC Electronic GmbH', +// 'ANTAL-Electronic' => 'ANTAL Electronic', +// 'FILANET-Corp' => 'FILANET Corp', +// 'TECHWELL-Inc' => 'TECHWELL Inc', +// 'MIPS-Technologies-Inc.' => 'MIPS Technologies, Inc.', +// 'PROVIDEO-MULTIMEDIA-Co-Ltd' => 'PROVIDEO MULTIMEDIA Co Ltd', +// 'MACHONE-Communications' => 'MACHONE Communications', +// 'SILICON-Laboratories' => 'SILICON Laboratories', +// 'DCM-DATA-Systems' => 'DCM DATA Systems', +// 'VISIONTEK' => 'VISIONTEK', +// 'IOI-Technology-Corp' => 'IOI Technology Corp', +// 'MITUTOYO-Corp' => 'MITUTOYO Corp', +// 'JET-PROPULSION-Laboratory' => 'JET PROPULSION Laboratory', +// 'MAX-Technologies-Inc' => 'MAX Technologies Inc', +// 'COMPUTEX-Co-Ltd' => 'COMPUTEX Co Ltd', +// 'VISUAL-Technology-Inc' => 'VISUAL Technology Inc', +// 'SERVOTEST-Ltd' => 'SERVOTEST Ltd', +// 'STRATABEAM-Technology' => 'STRATABEAM Technology', +// 'OPEN-NETWORK-Co-Ltd' => 'OPEN NETWORK Co Ltd', +// 'RACAL-AIRTECH-Ltd' => 'RACAL AIRTECH Ltd', +// 'CHICONY-Electronics-Co-Ltd' => 'CHICONY Electronics Co Ltd', +// 'PROLINK-Microsystems-Corp' => 'PROLINK Microsystems Corp', +// 'GESYTEC-GmBH' => 'GESYTEC GmBH', +// 'PLD-APPLICATIONS' => 'PLD APPLICATIONS', +// 'MEDIASTAR-Co-Ltd' => 'MEDIASTAR Co Ltd', +// 'CLEVO-KAPOK-Computer' => 'CLEVO/KAPOK Computer', +// 'SI-LOGIC-Ltd' => 'SI LOGIC Ltd', +// 'INNOMEDIA-Inc' => 'INNOMEDIA Inc', +// 'PROTAC-INTERNATIONAL-Corp' => 'PROTAC INTERNATIONAL Corp', +// 'Cemax-Icon-Inc' => 'Cemax-Icon Inc', +// 'Mac-System-Co-Ltd' => 'Mac System Co Ltd', +// 'LP-Elektronik-GmbH' => 'LP Elektronik GmbH', +// 'Perle-Systems-Ltd' => 'Perle Systems Ltd', +// 'Viewgraphics-Inc' => 'Viewgraphics Inc', +// 'Symbol-Technologies' => 'Symbol Technologies', +// 'A-Trend-Technology-Co-Ltd' => 'A-Trend Technology Co Ltd', +// 'Biostar-Microtech-Intl-Corp' => 'Biostar Microtech Intl Corp', +// 'Ardent-Technologies-Inc' => 'Ardent Technologies Inc', +// 'Jungsoft' => 'Jungsoft', +// 'DDK-Electronics-Inc' => 'DDK Electronics Inc', +// 'Palit-Microsystems-Inc.' => 'Palit Microsystems Inc.', +// 'Avtec-Systems' => 'Avtec Systems', +// '2wire-Inc' => '2wire Inc', +// 'Vidac-Electronics-GmbH' => 'Vidac Electronics GmbH', +// 'Alpha-Top-Corp' => 'Alpha-Top Corp', +// 'Alfa-Inc' => 'Alfa Inc', +// 'Lecroy-Corp' => 'Lecroy Corp', +// 'Contemporary-Controls' => 'Contemporary Controls', +// 'Otis-Elevator-Company' => 'Otis Elevator Company', +// 'Lattice---Vantis' => 'Lattice - Vantis', +// 'Fairchild-Semiconductor' => 'Fairchild Semiconductor', +// 'Viewcast-COM' => 'Viewcast COM', +// 'HITT' => 'HITT', +// 'Dual-Technology-Corp' => 'Dual Technology Corp', +// 'Japan-Elecronics-Ind-Inc' => 'Japan Elecronics Ind Inc', +// 'Star-Multimedia-Corp' => 'Star Multimedia Corp', +// 'Eurosoft-UK' => 'Eurosoft (UK)', +// 'Gemflex-Networks' => 'Gemflex Networks', +// 'Transition-Networks' => 'Transition Networks', +// 'PX-Instruments-Technology-Ltd' => 'PX Instruments Technology Ltd', +// 'Primex-Aerospace-Co' => 'Primex Aerospace Co', +// 'SEH-Computertechnik-GmbH' => 'SEH Computertechnik GmbH', +// 'Cytec-Corp' => 'Cytec Corp', +// 'Inet-Technologies-Inc' => 'Inet Technologies Inc', +// 'Uniwill-Computer-Corp' => 'Uniwill Computer Corp', +// 'Logitron' => 'Logitron', +// 'Lancast-Inc' => 'Lancast Inc', +// 'Konica-Corp' => 'Konica Corp', +// 'Solidum-Systems-Corp' => 'Solidum Systems Corp', +// 'Atlantek-Microsystems-Pty-Ltd' => 'Atlantek Microsystems Pty Ltd', +// 'Digalog-Systems-Inc' => 'Digalog Systems Inc', +// 'Allied-Data-Technologies' => 'Allied Data Technologies', +// 'Point-Multimedia-Systems' => 'Point Multimedia Systems', +// 'Lara-Technology-Inc' => 'Lara Technology Inc', +// 'Ditect-Coop' => 'Ditect Coop', +// '3PAR-Inc.' => '3PAR Inc.', +// 'ARN' => 'ARN', +// 'Syba-Tech-Ltd' => 'Syba Tech Ltd', +// 'Bops-Inc' => 'Bops Inc', +// 'Netgame-Ltd' => 'Netgame Ltd', +// 'Diva-Systems-Corp' => 'Diva Systems Corp', +// 'Folsom-Research-Inc' => 'Folsom Research Inc', +// 'Memec-Design-Services' => 'Memec Design Services', +// 'Granite-Microsystems' => 'Granite Microsystems', +// 'Delta-Electronics-Inc' => 'Delta Electronics Inc', +// 'General-Instrument' => 'General Instrument', +// 'Faraday-Technology-Corp' => 'Faraday Technology Corp', +// 'Stratus-Computer-Systems' => 'Stratus Computer Systems', +// 'A-Max-Technology-Co-Ltd' => 'A-Max Technology Co Ltd', +// 'Galea-Network-Security' => 'Galea Network Security', +// 'Compumaster-SRL' => 'Compumaster SRL', +// 'Geocast-Network-Systems' => 'Geocast Network Systems', +// 'Catalyst-Enterprises-Inc' => 'Catalyst Enterprises Inc', +// 'Italtel' => 'Italtel', +// 'X-Net-OY' => 'X-Net OY', +// 'Toyota-Macs-Inc' => 'Toyota Macs Inc', +// 'SSE-Telecom-Inc' => 'SSE Telecom Inc', +// 'Moreton-Bay' => 'Moreton Bay', +// 'Bluesteel-Networks-Inc' => 'Bluesteel Networks Inc', +// 'North-Atlantic-Instruments' => 'North Atlantic Instruments', +// 'VMware' => 'VMware', +// 'Amersham-Pharmacia-Biotech' => 'Amersham Pharmacia Biotech', +// 'Zoltrix-International-Ltd' => 'Zoltrix International Ltd', +// 'Source-Technology-Inc' => 'Source Technology Inc', +// 'Mosaid-Technologies-Inc' => 'Mosaid Technologies Inc', +// 'Mellanox-Technologies' => 'Mellanox Technologies', +// 'CCI-TRIAD' => 'CCI/TRIAD', +// 'Cimetrics-Inc' => 'Cimetrics Inc', +// 'Texas-Memory-Systems-Inc' => 'Texas Memory Systems Inc', +// 'Sandisk-Corp' => 'Sandisk Corp', +// 'ADDI-DATA-GmbH' => 'ADDI-DATA GmbH', +// 'Impacct-Technology-Corp' => 'Impacct Technology Corp', +// 'Portwell-Inc' => 'Portwell Inc', +// 'Agilent-Technologies' => 'Agilent Technologies', +// 'DFI-Inc' => 'DFI Inc', +// 'Sola-Electronics' => 'Sola Electronics', +// 'High-Tech-Computer-Corp-HTC' => 'High Tech Computer Corp (HTC)', +// 'BVM-Ltd' => 'BVM Ltd', +// 'Quantel' => 'Quantel', +// 'Newer-Technology-Inc' => 'Newer Technology Inc', +// 'Taiwan-Mycomp-Co-Ltd' => 'Taiwan Mycomp Co Ltd', +// 'EVSX-Inc' => 'EVSX Inc', +// 'Procomp-Informatics-Ltd' => 'Procomp Informatics Ltd', +// 'Penta-Media-Co-Ltd' => 'Penta Media Co Ltd', +// 'Serome-Technology-Inc' => 'Serome Technology Inc', +// 'Bitboys-OY' => 'Bitboys OY', +// 'AG-Electronics-Ltd' => 'AG Electronics Ltd', +// 'Hotrail-Inc' => 'Hotrail Inc', +// 'Dreamtech-Co-Ltd' => 'Dreamtech Co Ltd', +// 'Genrad-Inc' => 'Genrad Inc', +// 'Hilscher-GmbH' => 'Hilscher GmbH', +// 'Infineon-Technologies-AG' => 'Infineon Technologies AG', +// 'NDS-Technologies-Israel-Ltd' => 'NDS Technologies Israel Ltd', +// 'Iwill-Corp' => 'Iwill Corp', +// 'Tatung-Co' => 'Tatung Co', +// 'Entridia-Corp' => 'Entridia Corp', +// 'Rockwell-Collins-Inc' => 'Rockwell-Collins Inc', +// 'Cybernetics-Technology-Co-Ltd' => 'Cybernetics Technology Co Ltd', +// 'Super-Micro-Computer-Inc' => 'Super Micro Computer Inc', +// 'Cyberfirm-Inc' => 'Cyberfirm Inc', +// 'Applied-Computing-Systems-Inc' => 'Applied Computing Systems Inc', +// 'Litronic-Inc' => 'Litronic Inc', +// 'Sigmatel-Inc' => 'Sigmatel Inc', +// 'Malleable-Technologies-Inc' => 'Malleable Technologies Inc', +// 'Infinilink-Corp' => 'Infinilink Corp', +// 'Cacheflow-Inc' => 'Cacheflow Inc', +// 'Voice-Technologies-Group-Inc' => 'Voice Technologies Group Inc', +// 'Quicknet-Technologies-Inc' => 'Quicknet Technologies Inc', +// 'Networth-Technologies-Inc' => 'Networth Technologies Inc', +// 'VSN-Systemen-BV' => 'VSN Systemen BV', +// 'Valley-technologies-Inc' => 'Valley technologies Inc', +// 'Agere-Inc' => 'Agere Inc', +// 'Get-Engineering-Corp' => 'Get Engineering Corp', +// 'National-Datacomm-Corp' => 'National Datacomm Corp', +// 'Pacific-Digital-Corp' => 'Pacific Digital Corp', +// 'Tokyo-Denshi-Sekei-K.K.' => 'Tokyo Denshi Sekei K.K.', +// 'Beckhoff-GmbH' => 'Beckhoff GmbH', +// 'Macrolink-Inc' => 'Macrolink Inc', +// 'In-Win-Development-Inc' => 'In Win Development Inc', +// 'Intelligent-Paradigm-Inc' => 'Intelligent Paradigm Inc', +// 'B-Tree-Systems-Inc' => 'B-Tree Systems Inc', +// 'Times-N-Systems-Inc' => 'Times N Systems Inc', +// 'Diagnostic-Instruments-Inc' => 'Diagnostic Instruments Inc', +// 'Digitmedia-Corp' => 'Digitmedia Corp', +// 'Valuesoft' => 'Valuesoft', +// 'Power-Micro-Research' => 'Power Micro Research', +// 'Extreme-Packet-Device-Inc' => 'Extreme Packet Device Inc', +// 'Banctec' => 'Banctec', +// 'Koga-Electronics-Co' => 'Koga Electronics Co', +// 'Zenith-Electronics-Corp' => 'Zenith Electronics Corp', +// 'J.P.-Axzam-Corp' => 'J.P. Axzam Corp', +// 'Zilog-Inc' => 'Zilog Inc', +// 'Techsan-Electronics-Co-Ltd' => 'Techsan Electronics Co Ltd', +// 'N-CUBED.NET' => 'N-CUBED.NET', +// 'Kinpo-Electronics-Inc' => 'Kinpo Electronics Inc', +// 'Fastpoint-Technologies-Inc' => 'Fastpoint Technologies Inc', +// 'Northrop-Grumman---Canada-Ltd' => 'Northrop Grumman - Canada Ltd', +// 'Tenta-Technology' => 'Tenta Technology', +// 'Prosys-tec-Inc' => 'Prosys-tec Inc', +// 'Nokia-Wireless-Communications' => 'Nokia Wireless Communications', +// 'Pairgain-Technologies' => 'Pairgain Technologies', +// 'Europop-AG' => 'Europop AG', +// 'Scimetric-Instruments-Inc' => 'Scimetric Instruments Inc', +// 'Telesynergy-Research-Inc.' => 'Telesynergy Research Inc.', +// 'Stone-Ridge-Technology' => 'Stone Ridge Technology', +// 'FarSite-Communications-Ltd' => 'FarSite Communications Ltd', +// 'Rioworks' => 'Rioworks', +// 'TDK-Semiconductor-Corp.' => 'TDK Semiconductor Corp.', +// 'Kongsberg-Spacetec-AS' => 'Kongsberg Spacetec AS', +// 'Packard-Bell-B.V.' => 'Packard Bell B.V.', +// 'Smart-Link-Ltd.' => 'Smart Link Ltd.', +// 'MKNet-Corp.' => 'MKNet Corp.', +// 'Epix-Inc' => 'Epix Inc', +// 'Linux-Media-Labs-LLC' => 'Linux Media Labs, LLC', +// 'Worldspace-Corp.' => 'Worldspace Corp.', +// 'Actiontec-Electronics-Inc' => 'Actiontec Electronics Inc', +// 'Bernecker-+-Rainer' => 'Bernecker + Rainer', +// 'NetEffect' => 'NetEffect', +// 'Tokyo-Electron-Device-Ltd.' => 'Tokyo Electron Device Ltd.', +// 'ZyDAS-Technology-Corp.' => 'ZyDAS Technology Corp.', +// 'ONNTO-Corp.' => 'ONNTO Corp.', +// 'Hercules' => 'Hercules', +// 'XFX-Pine-Group-Inc.' => 'XFX Pine Group Inc.', +// 'CastleNet-Technology-Inc.' => 'CastleNet Technology Inc.', +// 'Atheros-Communications-Inc.' => 'Atheros Communications Inc.', +// 'EPoX-Computer-Co.-Ltd.' => 'EPoX Computer Co., Ltd.', +// 'Netcell-Corporation' => 'Netcell Corporation', +// 'Tekram-Technology-Co.Ltd.' => 'Tekram Technology Co.,Ltd.', +// 'Global-Sun-Technology-Inc' => 'Global Sun Technology Inc', +// 'SafeNet-Inc' => 'SafeNet Inc', +// 'SparkLAN-Communications-Inc.' => 'SparkLAN Communications, Inc.', +// 'Aspex-Semiconductor-Ltd' => 'Aspex Semiconductor Ltd', +// 'Sonnet-Technologies-Inc.' => 'Sonnet Technologies, Inc.', +// 'Creatix-Polymedia-GmbH' => 'Creatix Polymedia GmbH', +// 'Micrel-Kendin' => 'Micrel-Kendin', +// 'Octasic-Inc.' => 'Octasic Inc.', +// 'EONIC-B.V.-The-Netherlands' => 'EONIC B.V. The Netherlands', +// 'CENATEK-Inc' => 'CENATEK Inc', +// 'Densitron-Technologies' => 'Densitron Technologies', +// 'Roland-Corp.' => 'Roland Corp.', +// 'Acromag-Inc.' => 'Acromag, Inc.', +// 'Advantech-Co.-Ltd.' => 'Advantech Co., Ltd.', +// 'PIKA-Technologies-Inc.' => 'PIKA Technologies Inc.', +// 'Geotest-MTS' => 'Geotest-MTS', +// 'European-Space-Agency' => 'European Space Agency', +// 'Intellon-Corp.' => 'Intellon Corp.', +// 'U.S.-Robotics' => 'U.S. Robotics', +// 'Sycron-N.-V.' => 'Sycron N. V.', +// 'Jetway-Information-Co.-Ltd.' => 'Jetway Information Co., Ltd.', +// 'Vweb-Corp' => 'Vweb Corp', +// 'VideoTele.com-Inc.' => 'VideoTele.com, Inc.', +// 'Digital-First-Inc.' => 'Digital First, Inc.', +// 'NetOctave' => 'NetOctave', +// 'YottaYotta-Inc.' => 'YottaYotta Inc.', +// 'EZChip-Technologies' => 'EZChip Technologies', +// 'Accelerated-Encryption' => 'Accelerated Encryption', +// 'Fujitsu-Technology-Solutions' => 'Fujitsu Technology Solutions', +// 'Aten-International-Co.-Ltd.' => 'Aten International Co. Ltd.', +// 'Linksys' => 'Linksys', +// 'Altima-nee-Broadcom' => 'Altima (nee Broadcom)', +// 'Peppercon-AG' => 'Peppercon AG', +// 'ViXS-Systems-Inc.' => 'ViXS Systems, Inc.', +// 'RLX-Technologies' => 'RLX Technologies', +// 'PC-Partner-Limited' => 'PC Partner Limited', +// 'WellX-Telecom-SA' => 'WellX Telecom SA', +// 'AudioScience-Inc' => 'AudioScience Inc', +// 'Sanera-Systems-Inc.' => 'Sanera Systems, Inc.', +// 'TEDIA-spol.-s-r.-o.' => 'TEDIA spol. s r. o.', +// 'InnoVISION-Multimedia-Ltd.' => 'InnoVISION Multimedia Ltd.', +// 'Cavium-Networks' => 'Cavium Networks', +// 'Ennyah-Technologies-Corp.' => 'Ennyah Technologies Corp.', +// 'Techwell-Inc.' => 'Techwell Inc.', +// 'Belkin' => 'Belkin', +// 'id-Quantique' => 'id Quantique', +// 'Data-Patterns' => 'Data Patterns', +// 'Genesys-Logic-Inc' => 'Genesys Logic, Inc', +// 'Lenovo' => 'Lenovo', +// 'Phillips-Components' => 'Phillips Components', +// 'Hawking-Technologies' => 'Hawking Technologies', +// 'Indra-Networks-Inc.' => 'Indra Networks, Inc.', +// 'Wistron-Corp.' => 'Wistron Corp.', +// 'Newisys-Inc.' => 'Newisys, Inc.', +// 'Airgo-Networks-Inc' => 'Airgo Networks Inc', +// 'NetChip-Technology-Inc' => 'NetChip Technology, Inc', +// 'Z-Com-Inc.' => 'Z-Com, Inc.', +// 'Areca-Technology-Corp.' => 'Areca Technology Corp.', +// 'Cray-Inc' => 'Cray Inc', +// 'KWorld-Computer-Co.-Ltd.' => 'KWorld Computer Co. Ltd.', +// 'Sectra-AB' => 'Sectra AB', +// 'Entropic-Communications-Inc.' => 'Entropic Communications Inc.', +// 'Connect-Components-Ltd' => 'Connect Components Ltd', +// 'Albatron-Corp.' => 'Albatron Corp.', +// 'RDC-Semiconductor-Inc.' => 'RDC Semiconductor, Inc.', +// 'Topdek-Semiconductor-Inc.' => 'Topdek Semiconductor Inc.', +// 'InProComm-Inc.' => 'InProComm Inc.', +// 'Benq-Corporation' => 'Benq Corporation', +// 'ProdaSafe-GmbH' => 'ProdaSafe GmbH', +// 'Euresys-S.A.' => 'Euresys S.A.', +// 'Lumanate-Inc.' => 'Lumanate, Inc.', +// 'Ambient-Technologies-Inc' => 'Ambient Technologies Inc', +// 'RaLink' => 'RaLink', +// 'Devolo-AG' => 'Devolo AG', +// 'InfiniCon-Systems-Inc.' => 'InfiniCon Systems Inc.', +// 'Twinhan-Technology-Co.-Ltd' => 'Twinhan Technology Co. Ltd', +// 'SiteCom-Europe-BV' => 'SiteCom Europe BV', +// 'Raza-Microelectronics-Inc.' => 'Raza Microelectronics, Inc.', +// 'Credence-Systems-Corporation' => 'Credence Systems Corporation', +// 'MikroM-GmbH' => 'MikroM GmbH', +// 'ASRock-Incorporation' => 'ASRock Incorporation', +// 'Thales-Computers' => 'Thales Computers', +// 'Microtune-Inc.' => 'Microtune, Inc.', +// 'Anritsu-Corp.' => 'Anritsu Corp.', +// 'LG-Electronics-Inc.' => 'LG Electronics, Inc.', +// 'Compro-Technology-Inc.' => 'Compro Technology, Inc.', +// 'Wistron-NeWeb-Corp.' => 'Wistron NeWeb Corp.', +// 'SilverBack' => 'SilverBack', +// 'Topspin-Communications' => 'Topspin Communications', +// 'Humusoft-s.r.o.' => 'Humusoft, s.r.o.', +// 'WiNRADiO-Communications' => 'WiNRADiO Communications', +// 'L-3-Communications' => 'L-3 Communications', +// 'Avvida-Systems-Inc.' => 'Avvida Systems Inc.', +// 'Varisys-Ltd' => 'Varisys Ltd', +// 'Ample-Communications-Inc' => 'Ample Communications, Inc', +// 'Egenera-Inc.' => 'Egenera, Inc.', +// 'KNC-One' => 'KNC One', +// 'AMtek' => 'AMtek', +// 'Astute-Networks-Inc.' => 'Astute Networks Inc.', +// 'Stretch-Inc.' => 'Stretch Inc.', +// 'AT-T' => 'AT&T', +// 'DViCO-Corporation' => 'DViCO Corporation', +// 'Ammasso' => 'Ammasso', +// 'Info-Tek-Corp.' => 'Info-Tek Corp.', +// 'Cray-Inc Nee-Octigabay-System' => 'Cray Inc Nee Octigabay System', +// 'ARVOO-Engineering-BV' => 'ARVOO Engineering BV', +// 'Sitecom' => 'Sitecom', +// 'Dialogue-Technology-Corp.' => 'Dialogue Technology Corp.', +// 'Artimi-Inc' => 'Artimi Inc', +// 'MPL-AG' => 'MPL AG', +// 'Cesnet-z.s.p.o.' => 'Cesnet, z.s.p.o.', +// 'Chenming-Mold-Ind.-Corp.' => 'Chenming Mold Ind. Corp.', +// 'Spectrum-GmbH' => 'Spectrum GmbH', +// 'Napatech-A-S' => 'Napatech A/S', +// 'NextIO' => 'NextIO', +// 'Commtech-Inc.' => 'Commtech, Inc.', +// 'Resilience-Corporation' => 'Resilience Corporation', +// 'Micronas-USA-Inc.' => 'Micronas USA, Inc.', +// 'Renesas-Technology-Corp.' => 'Renesas Technology Corp.', +// 'Soltek-Computer-Inc.' => 'Soltek Computer Inc.', +// 'Sangoma-Technologies-Corp.' => 'Sangoma Technologies Corp.', +// 'Solarflare-Communications' => 'Solarflare Communications', +// 'TransDimension' => 'TransDimension', +// 'Option-N.V.' => 'Option N.V.', +// 'DiBcom' => 'DiBcom', +// 'MAXIM-Integrated-Products' => 'MAXIM Integrated Products', +// 'Comtech-AHA-Corp.' => 'Comtech AHA Corp.', +// 'ClearSpeed-Technology-plc' => 'ClearSpeed Technology plc', +// 'C-guys-Inc.' => 'C-guys, Inc.', +// 'Enterasys-Networks' => 'Enterasys Networks', +// 'DapTechnology-B.V.' => 'DapTechnology B.V.', +// 'Curtis-Inc.' => 'Curtis, Inc.', +// 'Freescale-Semiconductor-Inc' => 'Freescale Semiconductor Inc', +// 'Faster-Technology-LLC.' => 'Faster Technology, LLC.', +// 'PA-Semi-Inc' => 'PA Semi, Inc', +// 'Orad-Hi-Tec-Systems' => 'Orad Hi-Tec Systems', +// 'Sensory-Networks-Inc.' => 'Sensory Networks Inc.', +// 'Club-3D-BV' => 'Club-3D BV', +// 'AGEIA-Technologies-Inc.' => 'AGEIA Technologies, Inc.', +// 'Parsec' => 'Parsec', +// 'JMicron-Technology-Corp.' => 'JMicron Technology Corp.', +// 'Montilio-Inc.' => 'Montilio Inc.', +// 'Nallatech-Ltd.' => 'Nallatech Ltd.', +// 'Pulse-LINK-Inc.' => 'Pulse-LINK, Inc.', +// 'Xsigo-Systems' => 'Xsigo Systems', +// 'Auvitek' => 'Auvitek', +// 'DAQDATA-GmbH' => 'DAQDATA GmbH', +// 'Kasten-Chase-Applied-Research' => 'Kasten Chase Applied Research', +// 'Progeny-Systems-Corporation' => 'Progeny Systems Corporation', +// 'Exegy-Inc.' => 'Exegy Inc.', +// 'Quixant-Limited' => 'Quixant Limited', +// 'Pico-Computing' => 'Pico Computing', +// 'Vector-Informatik-GmbH' => 'Vector Informatik GmbH', +// 'DDRdrive-LLC' => 'DDRdrive LLC', +// 'Netronome-Systems-Inc.' => 'Netronome Systems, Inc.', +// 'ASPEED-Technology-Inc.' => 'ASPEED Technology, Inc.', +// 'Kvaser-AB' => 'Kvaser AB', +// 'Sierra-semiconductor' => 'Sierra semiconductor', +// 'DekTec-Digital-Video-B.V.' => 'DekTec Digital Video B.V.', +// 'Force10-Networks-Inc.' => 'Force10 Networks, Inc.', +// 'GFaI-e.V.' => 'GFaI e.V.', +// '3Leaf-Systems-Inc.' => '3Leaf Systems, Inc.', +// 'Ambric-Inc.' => 'Ambric Inc.', +// 'Fortinet-Inc.' => 'Fortinet, Inc.', +// 'Ascom-AG' => 'Ascom AG', +// 'AzureWave' => 'AzureWave', +// 'Hectronic-AB' => 'Hectronic AB', +// 'Bigfoot-Networks-Inc.' => 'Bigfoot Networks, Inc.', +// 'Highly-Reliable-Systems' => 'Highly Reliable Systems', +// 'Razer-USA-Ltd.' => 'Razer USA Ltd.', +// 'Celoxica' => 'Celoxica', +// 'Aprius-Inc.' => 'Aprius Inc.', +// 'System-TALKS-Inc.' => 'System TALKS Inc.', +// 'VirtenSys-Limited' => 'VirtenSys Limited', +// 'XenSource-Inc.' => 'XenSource, Inc.', +// 'Violin-Memory-Inc' => 'Violin Memory, Inc', +// 'Wavesat' => 'Wavesat', +// 'Lightfleet-Corporation' => 'Lightfleet Corporation', +// 'Virident-Systems-Inc.' => 'Virident Systems Inc.', +// 'Commex-Technologies' => 'Commex Technologies', +// 'MEN-Mikro-Elektronik' => 'MEN Mikro Elektronik', +// 'Verigy-Pte.-Ltd.' => 'Verigy Pte. Ltd.', +// 'DRS-Technologies' => 'DRS Technologies', +// 'Ciprico-Inc.' => 'Ciprico, Inc.', +// 'Global-Velocity-Inc.' => 'Global Velocity, Inc.', +// 'CalDigit-Inc.' => 'CalDigit, Inc.', +// 'Espia-Srl' => 'Espia Srl', +// 'Spectracom-Corporation' => 'Spectracom Corporation', +// 'Spin-Master-Ltd.' => 'Spin Master Ltd.', +// 'Google-Inc.' => 'Google, Inc.', +// 'Silicon-Software-GmbH' => 'Silicon Software GmbH', +// 'Wolfson-Microelectronics' => 'Wolfson Microelectronics', +// 'Fusion-io' => 'Fusion-io', +// 'Caustic-Graphics-Inc.' => 'Caustic Graphics Inc.', +// 'Netezza-Corp.' => 'Netezza Corp.', +// 'J---W-Electronics-Co.-Ltd.' => 'J & W Electronics Co., Ltd.', +// 'Magnum-Semiconductor-Inc' => 'Magnum Semiconductor, Inc,', +// 'Jaton-Corp' => 'Jaton Corp', +// 'K-F-Computing-Research-Co.' => 'K&F Computing Research Co.', +// 'Red-Hat-Inc.' => 'Red Hat, Inc.', +// 'Westar-Display-Technologies' => 'Westar Display Technologies', +// 'Teradata-Corp.' => 'Teradata Corp.', +// 'Marvell-Technology-Group-Ltd.' => 'Marvell Technology Group Ltd.', +// 'NetUP-Inc.' => 'NetUP Inc.', +// 'Fresco-Logic' => 'Fresco Logic', +// 'ReFLEX-CES' => 'ReFLEX CES', +// 'Bluecherry' => 'Bluecherry', +// 'VTI-Instruments-Corporation' => 'VTI Instruments Corporation', +// 'Symphony' => 'Symphony', +// 'DPT' => 'DPT', +// 'Tekram-Technology-Co.Ltd.' => 'Tekram Technology Co.,Ltd.', +// 'Tehuti-Networks-Ltd.' => 'Tehuti Networks Ltd.', +// 'Cognio-Inc.' => 'Cognio Inc.', +// 'SUNIX-Co.-Ltd.' => 'SUNIX Co., Ltd.', +// 'Smart-Link-Ltd.' => 'Smart Link Ltd.', +// 'Temporal-Research-Ltd' => 'Temporal Research Ltd', +// 'Smart-Link-Ltd.' => 'Smart Link Ltd.', +// 'Smart-Link-Ltd.' => 'Smart Link Ltd.', +// 'ZyDAS-Technology-Corp.' => 'ZyDAS Technology Corp.', +// '21st-Century-Computer-Corp.' => '21st Century Computer Corp.', +// 'Racore' => 'Racore', +// 'Kingston-Technologies' => 'Kingston Technologies', +// 'Xantel-Corporation' => 'Xantel Corporation', +// 'Chaintech-Computer-Co.-Ltd' => 'Chaintech Computer Co. Ltd', +// 'AVID-Technology-Inc.' => 'AVID Technology Inc.', +// '82q35-Express-MEI-Controller' => '82q35 Express MEI Controller', +// '3D-Vision---' => '3D Vision(???)', +// 'Hansol-Electronics-Inc.' => 'Hansol Electronics Inc.', +// 'Post-Impression-Systems.' => 'Post Impression Systems.', +// 'Hint-Corp' => 'Hint Corp', +// 'Quantum-Designs-H.K.-Inc' => 'Quantum Designs (H.K.) Inc', +// 'Bihl+Wiedemann-GmbH' => 'Bihl+Wiedemann GmbH', +// 'Arastra-Inc.' => 'Arastra Inc.', +// 'ARCOM-Control-Systems-Ltd' => 'ARCOM Control Systems Ltd', +// 'eVga.com.-Corp.' => 'eVga.com. Corp.', +// '4Links' => '4Links', +// '3DLabs' => '3DLabs', +// 'Avance-Logic-Inc.' => 'Avance Logic Inc.', +// 'Addtron-Technology-Co-Inc.' => 'Addtron Technology Co, Inc.', +// 'NetXen-Incorporated' => 'NetXen Incorporated', +// 'Digital-Equipment-Corp' => 'Digital Equipment Corp', +// 'Alpha-Data' => 'Alpha Data', +// 'ONA-Electroerosion' => 'ONA Electroerosion', +// 'Auzentech-Inc.' => 'Auzentech, Inc.', +// 'Aladdin-Knowledge-Systems' => 'Aladdin Knowledge Systems', +// 'CAST-Navigation-LLC' => 'CAST Navigation LLC', +// 'Internext-Compression-Inc' => 'Internext Compression Inc', +// 'Bridgeport-machines' => 'Bridgeport machines', +// 'Cogetec-Informatique-Inc' => 'Cogetec Informatique Inc', +// 'Baldor-Electric-Company' => 'Baldor Electric Company', +// 'Umax-Computer-Corp' => 'Umax Computer Corp', +// 'RedCreek-Communications-Inc' => 'RedCreek Communications Inc', +// 'Growth-Networks' => 'Growth Networks', +// 'ACCES-I-O-Products-Inc.' => 'ACCES I/O Products, Inc.', +// 'Axil-Computer-Inc' => 'Axil Computer Inc', +// 'NetVin' => 'NetVin', +// 'Buslogic-Inc.' => 'Buslogic Inc.', +// 'LUNG-HWA-Electronics' => 'LUNG HWA Electronics', +// 'SBS-Technologies' => 'SBS Technologies', +// 'Seanix-Technology-Inc' => 'Seanix Technology Inc', +// 'MediaQ-Inc.' => 'MediaQ Inc.', +// 'Microtechnica-Co-Ltd' => 'Microtechnica Co Ltd', +// 'MATRIX-VISION-GmbH' => 'MATRIX VISION GmbH', +// 'ILC-Data-Device-Corp' => 'ILC Data Device Corp', +// 'University-of-Toronto' => 'University of Toronto', +// 'GemTek-Technology-Corporation' => 'GemTek Technology Corporation', +// 'Voyetra-Technologies' => 'Voyetra Technologies', +// 'TerraTec-Electronic-GmbH' => 'TerraTec Electronic GmbH', +// 'S-S-Technologies' => 'S S Technologies', +// 'Qualcomm-Inc' => 'Qualcomm Inc', +// 'Ensoniq-Old' => 'Ensoniq (Old)', +// 'Animation-Technologies-Inc.' => 'Animation Technologies Inc.', +// 'Alliance-Semiconductor-Corp.' => 'Alliance Semiconductor Corp.', +// 'S3-Inc.' => 'S3 Inc.', +// 'AuzenTech-Inc.' => 'AuzenTech, Inc.', +// 'Teralogic-Inc' => 'Teralogic Inc', +// 'Technische-University-Berlin' => 'Technische University Berlin', +// 'GoTView' => 'GoTView', +// 'Cnet-Technologies-Inc.' => 'Cnet Technologies, Inc.', +// 'Dunord-Technologies' => 'Dunord Technologies', +// 'Genroco-Inc' => 'Genroco, Inc', +// 'Vector-Fabrics-BV' => 'Vector Fabrics BV', +// 'VoiceTronix-Pty-Ltd' => 'VoiceTronix Pty Ltd', +// 'Netpower' => 'Netpower', +// 'AuzenTech-Co.-Ltd.' => 'AuzenTech Co., Ltd.', +// 'Exacq-Technologies' => 'Exacq Technologies', +// 'XenSource-Inc.' => 'XenSource, Inc.', +// 'Beholder-International-Ltd.' => 'Beholder International Ltd.', +// 'SmartInfra-Ltd' => 'SmartInfra Ltd', +// 'UltraStor' => 'UltraStor', +// 'Logitec-Corp.' => 'Logitec Corp.', +// 'Teradici-Corp.' => 'Teradici Corp.', +// 'Red-Hat-Inc. nee-Qumranet' => 'Red Hat, Inc. nee Qumranet', +// 'pcHDTV' => 'pcHDTV', +// 'HT-OMEGA-Inc.' => 'HT OMEGA Inc.', +// 'O.N.-Electronic-Co-Ltd.' => 'O.N. Electronic Co Ltd.', +// 'MIDAC-Corporation' => 'MIDAC Corporation', +// 'PowerTV' => 'PowerTV', +// 'Quancom-Electronic-GmbH' => 'Quancom Electronic GmbH', +// 'Intel-Corporation' => 'Intel Corporation', +// 'InnoTek-Systemberatung-GmbH' => 'InnoTek Systemberatung GmbH', +// 'Sodick-America-Corp.' => 'Sodick America Corp.', +// 'SigmaTel' => 'SigmaTel', +// 'TRENDware-International-Inc.' => 'TRENDware International Inc.', +// 'ScaleMP' => 'ScaleMP', +// 'Trigem-Computer-Inc.' => 'Trigem Computer Inc.', +// 'T-Square-Design-Inc.' => 'T-Square Design Inc.', +// 'Silicon-Magic' => 'Silicon Magic', +// 'TRX' => 'TRX', +// 'Computone-Corporation' => 'Computone Corporation', +// 'KTI' => 'KTI', +// 'Adaptec' => 'Adaptec', +// 'Adaptec' => 'Adaptec', +// 'Atronics' => 'Atronics', +// 'Gigapixel-Corp' => 'Gigapixel Corp', +// 'Holtek' => 'Holtek', +// 'Omni-Media-Technology-Inc' => 'Omni Media Technology Inc', +// 'NetMos-Technology' => 'NetMos Technology', +// 'Stargen-Inc.' => 'Stargen Inc.', +// 'AOPEN-Inc.' => 'AOPEN Inc.', +// 'UNISYS-Corporation' => 'UNISYS Corporation', +// 'NEC-Corporation' => 'NEC Corporation', +// 'Hewlett-Packard' => 'Hewlett Packard', +// 'Hewlett-Packard-GmbH-PL24-MKT' => 'Hewlett Packard GmbH PL24-MKT', +// 'Sony' => 'Sony', +// '3Com-Corporation' => '3Com Corporation', +// 'Scitex-Digital-Video' => 'Scitex Digital Video', +// 'Ncomputing-X300-PCI-Engine' => 'Ncomputing X300 PCI-Engine', +// 'Adnaco-Technology-Inc.' => 'Adnaco Technology Inc.', +// 'Vadatech-Inc.' => 'Vadatech Inc.', +// 'Actuality-Systems' => 'Actuality Systems', +// 'Alta-Data-Technologies-LLC' => 'Alta Data Technologies LLC', +// 'Shiva-Europe-Limited' => 'Shiva Europe Limited', +// 'Blackmagic-Design' => 'Blackmagic Design', +// 'TSI-Telsys' => 'TSI Telsys', +// 'Micron-Crucial-Technology' => 'Micron/Crucial Technology', +// 'Motorola' => 'Motorola', +// 'Motion-Engineering-Inc.' => 'Motion Engineering, Inc.', +// 'Varian-Australia-Pty-Ltd' => 'Varian Australia Pty Ltd', +// 'CACE-Technologies-Inc.' => 'CACE Technologies, Inc.', +// 'Chrysalis-ITS' => 'Chrysalis-ITS', +// 'Catapult-Communications' => 'Catapult Communications', +// 'Tyzx-Inc.' => 'Tyzx, Inc.', +// 'KEBA-AG' => 'KEBA AG', +// 'Digium-Inc.' => 'Digium, Inc.', +// 'Dy4-Systems-Inc' => 'Dy4 Systems Inc', +// 'I+ME-ACTIA-GmbH' => 'I+ME ACTIA GmbH', +// 'Exsys' => 'Exsys', +// 'Diablo-Technologies' => 'Diablo Technologies', +// 'Indigita-Corporation' => 'Indigita Corporation', +// 'Middle-Digital-Inc.' => 'Middle Digital Inc.', +// 'SoftHard-Technology-Ltd.' => 'SoftHard Technology Ltd.', +// 'Winbond' => 'Winbond', +// 'Tiger-Jet-Network-Inc.' => 'Tiger Jet Network Inc.', +// 'EKF-Elektronik-GmbH' => 'EKF Elektronik GmbH', +// 'Essence-Technology-Inc.' => 'Essence Technology, Inc.', +// 'Eagle-Technology' => 'Eagle Technology', +// 'Aashima-Technology-B.V.' => 'Aashima Technology B.V.', +// 'Belkin-Corporation' => 'Belkin Corporation', +// 'ARK-Logic-Inc' => 'ARK Logic Inc', +// 'AJA-Video' => 'AJA Video', +// 'F5-Networks-Inc.' => 'F5 Networks, Inc.', +// 'Interagon-AS' => 'Interagon AS', +// 'Fabric7-Systems-Inc.' => 'Fabric7 Systems, Inc.', +// 'Ultraview-Corp.' => 'Ultraview Corp.', +// 'Broadcom-Inc Nee-Epigram' => 'Broadcom Inc Nee Epigram', +// 'Fedetec-Inc.' => 'Fedetec Inc.', +// 'XenSource-Inc.' => 'XenSource, Inc.', +// 'Frys-Electronics' => 'Frys Electronics', +// 'Ingram' => 'Ingram', +// 'Club-Mac' => 'Club Mac', +// 'Nebraska-Furniture-Mart' => 'Nebraska Furniture Mart', +// 'Planex' => 'Planex', +// 'DragonRise-Inc.' => 'DragonRise Inc.', +// 'Trust-International-B.V.' => 'Trust International B.V.', +// 'Unknown' => 'Unknown', +// 'LW154-Wireless-150N-Adapter' => 'LW154 Wireless 150N Adapter', +// 'Hangzhou-Worlde' => 'Hangzhou Worlde', +// 'HUMAX-Co.-Ltd.' => 'HUMAX Co., Ltd.', +// 'MM300-eBook-Reader' => 'MM300 eBook Reader', +// 'OCZ-Technology-Inc' => 'OCZ Technology Inc', +// 'OCZ-Technology-Inc' => 'OCZ Technology Inc', +// 'LTS' => 'LTS', +// 'EndPoints-Inc.' => 'EndPoints, Inc.', +// 'Thesys-Microelectronics' => 'Thesys Microelectronics', +// 'Data-Broadcasting-Corp.' => 'Data Broadcasting Corp.', +// 'Atmel-Corp.' => 'Atmel Corp.', +// 'Iwatsu-America-Inc.' => 'Iwatsu America, Inc.', +// 'Mitel-Corp.' => 'Mitel Corp.', +// 'Mitsumi' => 'Mitsumi', +// 'Hewlett-Packard' => 'Hewlett-Packard', +// 'Genoa-Technology' => 'Genoa Technology', +// 'Oak-Technology-Inc.' => 'Oak Technology, Inc.', +// 'Adaptec-Inc.' => 'Adaptec, Inc.', +// 'Diebold-Inc.' => 'Diebold, Inc.', +// 'Siemens-Electromechanical' => 'Siemens Electromechanical', +// 'KeyTronic-Corp.' => 'KeyTronic Corp.', +// 'OPTi-Inc.' => 'OPTi, Inc.', +// 'Elitegroup-Computer-Systems' => 'Elitegroup Computer Systems', +// 'Xilinx-Inc.' => 'Xilinx, Inc.', +// 'Farallon-Comunications' => 'Farallon Comunications', +// 'National-Semiconductor-Corp.' => 'National Semiconductor Corp.', +// 'National-Registry-Inc.' => 'National Registry, Inc.', +// 'ALi-Corp.' => 'ALi Corp.', +// 'NCR-Corp.' => 'NCR Corp.', +// 'Synopsys-Inc.' => 'Synopsys, Inc.', +// 'Fujitsu-ICL-Computers' => 'Fujitsu-ICL Computers', +// 'Quanta-Computer-Inc.' => 'Quanta Computer, Inc.', +// 'NEC-Corp.' => 'NEC Corp.', +// 'Kodak-Co.' => 'Kodak Co.', +// 'Weltrend-Semiconductor' => 'Weltrend Semiconductor', +// 'VTech-Computers-Ltd' => 'VTech Computers, Ltd', +// 'VIA-Technologies-Inc.' => 'VIA Technologies, Inc.', +// 'MCCI' => 'MCCI', +// 'Echo-Speech-Corp.' => 'Echo Speech Corp.', +// 'Award-Software-International' => 'Award Software International', +// 'Leadtek-Research-Inc.' => 'Leadtek Research, Inc.', +// 'Giga-Byte-Technology-Co.-Ltd' => 'Giga-Byte Technology Co., Ltd', +// 'Winbond-Electronics-Corp.' => 'Winbond Electronics Corp.', +// 'Symbios-Logic' => 'Symbios Logic', +// 'AST-Research' => 'AST Research', +// 'Phoenix-Technologies-Ltd' => 'Phoenix Technologies, Ltd', +// 'dTV' => 'dTV', +// 'S3-Inc.' => 'S3, Inc.', +// 'Creative-Technology-Ltd' => 'Creative Technology, Ltd', +// 'LCS-Telegraphics' => 'LCS Telegraphics', +// 'Chips-and-Technologies' => 'Chips and Technologies', +// 'Nokia-Mobile-Phones' => 'Nokia Mobile Phones', +// 'ADI-Systems-Inc.' => 'ADI Systems, Inc.', +// 'Standard-Microsystems-Corp.' => 'Standard Microsystems Corp.', +// 'Cirrus-Logic' => 'Cirrus Logic', +// 'Ericsson-Austrian-AG' => 'Ericsson Austrian, AG', +// 'Intel-Corp.' => 'Intel Corp.', +// 'Micronics' => 'Micronics', +// 'Acer-Inc.' => 'Acer, Inc.', +// 'Molex-Inc.' => 'Molex, Inc.', +// 'Sun-Microsystems-Inc.' => 'Sun Microsystems, Inc.', +// 'Itac-Systems-Inc.' => 'Itac Systems, Inc.', +// 'Unisys-Corp.' => 'Unisys Corp.', +// 'Alps-Electric-Inc.' => 'Alps Electric, Inc.', +// 'Hyundai-Electronics-America' => 'Hyundai Electronics America', +// 'Taugagreining-HF' => 'Taugagreining HF', +// 'Framatome-Connectors-USA' => 'Framatome Connectors USA', +// 'Advanced-Micro-Devices-Inc.' => 'Advanced Micro Devices, Inc.', +// 'Voice-Technologies-Group' => 'Voice Technologies Group', +// 'Lexmark-International-Inc.' => 'Lexmark International, Inc.', +// 'LG-Electronics-USA-Inc.' => 'LG Electronics USA, Inc.', +// 'RadiSys-Corp.' => 'RadiSys Corp.', +// 'Eizo-Nanao-Corp.' => 'Eizo Nanao Corp.', +// 'Winbond-Systems-Lab.' => 'Winbond Systems Lab.', +// 'Ericsson-Inc.' => 'Ericsson, Inc.', +// 'Gateway-Inc.' => 'Gateway, Inc.', +// 'Lucent-Technologies-Inc.' => 'Lucent Technologies, Inc.', +// 'NMB-Technologies-Corp.' => 'NMB Technologies Corp.', +// 'Momentum-Microsystems' => 'Momentum Microsystems', +// 'Shamrock-Tech.-Co.-Ltd' => 'Shamrock Tech. Co., Ltd', +// 'WSI' => 'WSI', +// 'CCL-ITRI' => 'CCL/ITRI', +// 'Siemens-Nixdorf-AG' => 'Siemens Nixdorf AG', +// 'Alps-Electric-Co.-Ltd' => 'Alps Electric Co., Ltd', +// 'ThrustMaster-Inc.' => 'ThrustMaster, Inc.', +// 'DFI-Inc.' => 'DFI, Inc.', +// 'Texas-Instruments-Inc.' => 'Texas Instruments, Inc.', +// 'CMD-Technology' => 'CMD Technology', +// 'Vobis-Microcomputer-AG' => 'Vobis Microcomputer AG', +// 'Analog-Devices-Inc.' => 'Analog Devices, Inc.', +// 'Adobe-Systems-Inc.' => 'Adobe Systems, Inc.', +// 'SONICblue-Inc.' => 'SONICblue, Inc.', +// 'Hitachi-Ltd' => 'Hitachi, Ltd', +// 'Nortel-Networks-Ltd' => 'Nortel Networks, Ltd', +// 'Microsoft-Corp.' => 'Microsoft Corp.', +// 'Ace-Cad-Enterprise-Co.-Ltd' => 'Ace Cad Enterprise Co., Ltd', +// 'Primax-Electronics-Ltd' => 'Primax Electronics, Ltd', +// 'MGE-UPS-Systems' => 'MGE UPS Systems', +// 'AMP-Tycoelectronics-Corp.' => 'AMP/Tycoelectronics Corp.', +// 'AT-T-Paradyne' => 'AT&T Paradyne', +// 'Wieson-Technologies-Co.-Ltd' => 'Wieson Technologies Co., Ltd', +// 'Cherry-GmbH' => 'Cherry GmbH', +// 'American-Megatrends-Inc.' => 'American Megatrends, Inc.', +// 'Logitech-Inc.' => 'Logitech, Inc.', +// 'Behavior-Tech.-Computer-Corp.' => 'Behavior Tech. Computer Corp.', +// 'Crystal-Semiconductor' => 'Crystal Semiconductor', +// 'Philips-or-NXP' => 'Philips (or NXP)', +// 'Chicony-Electronics-Co.-Ltd' => 'Chicony Electronics Co., Ltd', +// 'Sanyo-Electric-Co.-Ltd' => 'Sanyo Electric Co., Ltd', +// 'AESP' => 'AESP', +// 'Seagate-Technology-Inc.' => 'Seagate Technology, Inc.', +// 'Connectix-Corp.' => 'Connectix Corp.', +// 'Semtech-Corp.' => 'Semtech Corp.', +// 'Silitek-Corp.' => 'Silitek Corp.', +// 'Dell-Computer-Corp.' => 'Dell Computer Corp.', +// 'Kensington' => 'Kensington', +// 'Agere-Systems-Inc.-Lucent' => 'Agere Systems, Inc. (Lucent)', +// 'Plantronics-Inc.' => 'Plantronics, Inc.', +// 'Zenith-Data-Systems' => 'Zenith Data Systems', +// 'Kyocera-Corp.' => 'Kyocera Corp.', +// 'SGS-Thomson-Microelectronics' => 'SGS Thomson Microelectronics', +// 'Specialix' => 'Specialix', +// 'Nokia-Monitors' => 'Nokia Monitors', +// 'ASUS-Computers-Inc.' => 'ASUS Computers, Inc.', +// 'Stewart-Connector' => 'Stewart Connector', +// 'Cirque-Corp.' => 'Cirque Corp.', +// 'Foxconn---Hon-Hai' => 'Foxconn / Hon Hai', +// 'S-MOS-Systems-Inc.' => 'S-MOS Systems, Inc.', +// 'Alps-Electric-Ireland-Ltd' => 'Alps Electric Ireland, Ltd', +// 'Eicon-Tech.' => 'Eicon Tech.', +// 'United-Microelectronics-Corp.' => 'United Microelectronics Corp.', +// 'Capetronic' => 'Capetronic', +// 'Samsung-SemiConductor-Inc.' => 'Samsung SemiConductor, Inc.', +// 'MAG-Technology-Co.-Ltd' => 'MAG Technology Co., Ltd', +// 'ESS-Technology-Inc.' => 'ESS Technology, Inc.', +// 'Micron-Electronics' => 'Micron Electronics', +// 'Smile-International' => 'Smile International', +// 'Capetronic-Kaohsiung-Corp.' => 'Capetronic (Kaohsiung) Corp.', +// 'Yamaha-Corp.' => 'Yamaha Corp.', +// 'Gandalf-Technologies-Ltd' => 'Gandalf Technologies, Ltd', +// 'Curtis-Computer-Products' => 'Curtis Computer Products', +// 'Acer-Advanced-Labs-Inc.' => 'Acer Advanced Labs, Inc.', +// 'VLSI-Technology' => 'VLSI Technology', +// 'Compaq-Computer-Corp.' => 'Compaq Computer Corp.', +// 'Digital-Equipment-Corp.' => 'Digital Equipment Corp.', +// 'SystemSoft-Corp.' => 'SystemSoft Corp.', +// 'FirePower-Systems' => 'FirePower Systems', +// 'Trident-Microsystems-Inc.' => 'Trident Microsystems, Inc.', +// 'Hitachi-Ltd' => 'Hitachi, Ltd', +// 'Nokia-Display-Products' => 'Nokia Display Products', +// 'Visioneer' => 'Visioneer', +// 'Multivideo-Labs-Inc.' => 'Multivideo Labs, Inc.', +// 'Canon-Inc.' => 'Canon, Inc.', +// 'DaeWoo-Telecom-Ltd' => 'DaeWoo Telecom, Ltd', +// 'Chromatic-Research' => 'Chromatic Research', +// 'Micro-Audiometrics-Corp.' => 'Micro Audiometrics Corp.', +// 'Dooin-Electronics' => 'Dooin Electronics', +// 'Winnov-L.P.' => 'Winnov L.P.', +// 'Nikon-Corp.' => 'Nikon Corp.', +// 'Pan-International' => 'Pan International', +// 'IBM-Corp.' => 'IBM Corp.', +// 'Cypress-Semiconductor-Corp.' => 'Cypress Semiconductor Corp.', +// 'ROHM-LSI-Systems-USA-LLC' => 'ROHM LSI Systems USA, LLC', +// 'Hint-Corp.' => 'Hint Corp.', +// 'Compal-Electronics-Inc.' => 'Compal Electronics, Inc.', +// 'Seiko-Epson-Corp.' => 'Seiko Epson Corp.', +// 'Rainbow-Technologies-Inc.' => 'Rainbow Technologies, Inc.', +// 'Toucan-Systems-Ltd' => 'Toucan Systems, Ltd', +// 'I-O-Data-Device-Inc.' => 'I-O Data Device, Inc.', +// 'Telia-Research-AB' => 'Telia Research AB', +// 'TDK-Corp.' => 'TDK Corp.', +// 'U.S.-Robotics-3Com' => 'U.S. Robotics (3Com)', +// 'Maxi-Switch-Inc.' => 'Maxi Switch, Inc.', +// 'Fujitsu-Ltd' => 'Fujitsu, Ltd', +// 'Micro-Macro-Technologies' => 'Micro Macro Technologies', +// 'Konica-Corp.' => 'Konica Corp.', +// 'Lite-On-Technology-Corp.' => 'Lite-On Technology Corp.', +// 'Fuji-Photo-Film-Co.-Ltd' => 'Fuji Photo Film Co., Ltd', +// 'ST-Ericsson' => 'ST-Ericsson', +// 'Tatung-Co.-Of-America' => 'Tatung Co. Of America', +// 'ScanLogic-Corp.' => 'ScanLogic Corp.', +// 'Myson-Century-Inc.' => 'Myson Century, Inc.', +// 'Digi-International' => 'Digi International', +// 'ITT-Canon' => 'ITT Canon', +// 'Altec-Lansing-Technologies' => 'Altec Lansing Technologies', +// 'VidUS-Inc.' => 'VidUS, Inc.', +// 'LSI-Logic-Inc.' => 'LSI Logic, Inc.', +// 'Forte-Technologies-Inc.' => 'Forte Technologies, Inc.', +// 'Mentor-Graphics' => 'Mentor Graphics', +// 'Oki-Semiconductor' => 'Oki Semiconductor', +// 'Microchip-Technology-Inc.' => 'Microchip Technology, Inc.', +// 'Holtek-Semiconductor-Inc.' => 'Holtek Semiconductor, Inc.', +// 'Panasonic-Matsushita' => 'Panasonic (Matsushita)', +// 'Hypertec-Pty-Ltd' => 'Hypertec Pty, Ltd', +// 'Huan-Hsin-Holdings-Ltd' => 'Huan Hsin Holdings, Ltd', +// 'Sharp-Corp.' => 'Sharp Corp.', +// 'MindShare-Inc.' => 'MindShare, Inc.', +// 'Interlink-Electronics' => 'Interlink Electronics', +// 'Iiyama-North-America-Inc.' => 'Iiyama North America, Inc.', +// 'Exar-Corp.' => 'Exar Corp.', +// 'Zilog-Inc.' => 'Zilog, Inc.', +// 'ACC-Microelectronics' => 'ACC Microelectronics', +// 'Promise-Technology' => 'Promise Technology', +// 'SCM-Microsystems-Inc.' => 'SCM Microsystems, Inc.', +// 'Elo-TouchSystems' => 'Elo TouchSystems', +// 'Samsung-Electronics-Co.-Ltd' => 'Samsung Electronics Co., Ltd', +// 'PC-Tel-Inc.' => 'PC-Tel, Inc.', +// 'Brooktree-Corp.' => 'Brooktree Corp.', +// 'Northstar-Systems-Inc.' => 'Northstar Systems, Inc.', +// 'Tokyo-Electron-Device-Ltd' => 'Tokyo Electron Device, Ltd', +// 'Annabooks' => 'Annabooks', +// 'Daewoo-Electronics-Co.-Ltd' => 'Daewoo Electronics Co., Ltd', +// 'Victor-Company-of-Japan-Ltd' => 'Victor Company of Japan, Ltd', +// 'Chicony-Electronics-Co.-Ltd' => 'Chicony Electronics Co., Ltd', +// 'Elan-Microelectronics-Corp.' => 'Elan Microelectronics Corp.', +// 'Harting-Elektronik-Inc.' => 'Harting Elektronik, Inc.', +// 'Fujitsu-ICL-Systems-Inc.' => 'Fujitsu-ICL Systems, Inc.', +// 'Norand-Corp.' => 'Norand Corp.', +// 'Newnex-Technology-Corp.' => 'Newnex Technology Corp.', +// 'FuturePlus-Systems' => 'FuturePlus Systems', +// 'Brother-Industries-Ltd' => 'Brother Industries, Ltd', +// 'Dallas-Semiconductor' => 'Dallas Semiconductor', +// 'Sunplus-Technology-Co.-Ltd' => 'Sunplus Technology Co., Ltd', +// 'Soliton-Systems-K.K.' => 'Soliton Systems, K.K.', +// 'PFU-Ltd' => 'PFU, Ltd', +// 'E-CMOS-Corp.' => 'E-CMOS Corp.', +// 'Siam-United-Hi-Tech' => 'Siam United Hi-Tech', +// 'Fujikura-DDK-Ltd' => 'Fujikura DDK, Ltd', +// 'Acer-Inc.' => 'Acer, Inc.', +// 'Hitachi-America-Ltd' => 'Hitachi America, Ltd', +// 'Hayes-Microcomputer-Products' => 'Hayes Microcomputer Products', +// '3Com-Corp.' => '3Com Corp.', +// 'Hosiden-Corp.' => 'Hosiden Corp.', +// 'Clarion-Co.-Ltd' => 'Clarion Co., Ltd', +// 'Aztech-Systems-Ltd' => 'Aztech Systems, Ltd', +// 'Cinch-Connectors' => 'Cinch Connectors', +// 'Cable-System-International' => 'Cable System International', +// 'InnoMedia-Inc.' => 'InnoMedia, Inc.', +// 'Belkin-Components' => 'Belkin Components', +// 'Neon-Technology-Inc.' => 'Neon Technology, Inc.', +// 'KC-Technology-Inc.' => 'KC Technology, Inc.', +// 'Sejin-Electron-Inc.' => 'Sejin Electron, Inc.', +// 'Hualon-Microelectronics-Corp.' => 'Hualon Microelectronics Corp.', +// 'digital-X-Inc.' => 'digital-X, Inc.', +// 'FCI-Electronics' => 'FCI Electronics', +// 'ACTC' => 'ACTC', +// 'Longwell-Electronics' => 'Longwell Electronics', +// 'Butterfly-Communications' => 'Butterfly Communications', +// 'EzKEY-Corp.' => 'EzKEY Corp.', +// 'Star-Micronics-Co.-Ltd' => 'Star Micronics Co., Ltd', +// 'WYSE-Technology' => 'WYSE Technology', +// 'Silicon-Graphics' => 'Silicon Graphics', +// 'Shuttle-Inc.' => 'Shuttle, Inc.', +// 'American-Power-Conversion' => 'American Power Conversion', +// 'Scientific-Atlanta-Inc.' => 'Scientific Atlanta, Inc.', +// 'Airborn-Connectors' => 'Airborn Connectors', +// 'Advanced-Connectek-Inc.' => 'Advanced Connectek, Inc.', +// 'ATEN-GmbH' => 'ATEN GmbH', +// 'Sola-Electronics' => 'Sola Electronics', +// 'Netchip-Technology-Inc.' => 'Netchip Technology, Inc.', +// 'Temic-MHS-S.A.' => 'Temic MHS S.A.', +// 'ALTRA' => 'ALTRA', +// 'ATI-Technologies-Inc.' => 'ATI Technologies, Inc.', +// 'Aladdin-Knowledge-Systems' => 'Aladdin Knowledge Systems', +// 'Crescent-Heart-Software' => 'Crescent Heart Software', +// 'Tekom-Technologies-Inc.' => 'Tekom Technologies, Inc.', +// 'Avid-Electronics-Corp.' => 'Avid Electronics Corp.', +// 'Standard-Microsystems-Corp.' => 'Standard Microsystems Corp.', +// 'Unicore-Software-Inc.' => 'Unicore Software, Inc.', +// 'American-Microsystems-Inc.' => 'American Microsystems, Inc.', +// 'Wacom-Technology-Corp.' => 'Wacom Technology Corp.', +// 'Systech-Corp.' => 'Systech Corp.', +// 'Alcatel-Mobile-Phones' => 'Alcatel Mobile Phones', +// 'Motorola-Inc.' => 'Motorola, Inc.', +// 'LIH-TZU-Electric-Co.-Ltd' => 'LIH TZU Electric Co., Ltd', +// 'Inventec-Corp.' => 'Inventec Corp.', +// 'Shyh-Shiun-Terminals-Co.-Ltd' => 'Shyh Shiun Terminals Co., Ltd', +// 'PrehKeyTec-GmbH' => 'PrehKeyTec GmbH', +// 'Global-Village-Communication' => 'Global Village Communication', +// 'Silicon-Architect' => 'Silicon Architect', +// 'Mobility-Electronics' => 'Mobility Electronics', +// 'Synopsys-Inc.' => 'Synopsys, Inc.', +// 'UniAccess-AB' => 'UniAccess AB', +// 'Sirf-Technology-Inc.' => 'Sirf Technology, Inc.', +// 'ViewSonic-Corp.' => 'ViewSonic Corp.', +// 'Cristie-Electronics-Ltd' => 'Cristie Electronics, Ltd', +// 'Xirlink-Inc.' => 'Xirlink, Inc.', +// 'Polaroid-Corp.' => 'Polaroid Corp.', +// 'Anchor-Chips-Inc.' => 'Anchor Chips, Inc.', +// 'Tyan-Computer-Corp.' => 'Tyan Computer Corp.', +// 'Pixera-Corp.' => 'Pixera Corp.', +// 'New-Media-Corp.' => 'New Media Corp.', +// 'Sony-Corp.' => 'Sony Corp.', +// 'Try-Corp.' => 'Try Corp.', +// 'Proside-Corp.' => 'Proside Corp.', +// 'WYSE-Technology-Taiwan' => 'WYSE Technology Taiwan', +// 'Fuji-Xerox-Co.-Ltd' => 'Fuji Xerox Co., Ltd', +// 'CompuTrend-Systems-Inc.' => 'CompuTrend Systems, Inc.', +// 'Philips-Monitors' => 'Philips Monitors', +// 'Dictaphone-Corp.' => 'Dictaphone Corp.', +// 'ANAM-S-T-Co.-Ltd' => 'ANAM S&T Co., Ltd', +// 'ATEN-International-Co.-Ltd' => 'ATEN International Co., Ltd', +// 'Truevision-Inc.' => 'Truevision, Inc.', +// 'Cadence-Design-Systems-Inc.' => 'Cadence Design Systems, Inc.', +// 'Kenwood-USA' => 'Kenwood USA', +// 'KnowledgeTek-Inc.' => 'KnowledgeTek, Inc.', +// 'Proton-Electronic-Ind.' => 'Proton Electronic Ind.', +// 'Samsung-Electro-Mechanics-Co.' => 'Samsung Electro-Mechanics Co.', +// 'CTX-Opto-Electronics-Corp.' => 'CTX Opto-Electronics Corp.', +// 'Mustek-Systems-Inc.' => 'Mustek Systems, Inc.', +// 'Interface-Corp.' => 'Interface Corp.', +// 'Oasis-Design-Inc.' => 'Oasis Design, Inc.', +// 'Telex-Communications-Inc.' => 'Telex Communications, Inc.', +// 'Immersion-Corp.' => 'Immersion Corp.', +// 'Peracom-Networks-Inc.' => 'Peracom Networks, Inc.', +// 'Monterey-International-Corp.' => 'Monterey International Corp.', +// 'Xyratex-International-Ltd' => 'Xyratex International, Ltd', +// 'Quartz-Ingenierie' => 'Quartz Ingenierie', +// 'SegaSoft' => 'SegaSoft', +// 'Wacom-Co.-Ltd' => 'Wacom Co., Ltd', +// 'Decicon-Inc.' => 'Decicon, Inc.', +// 'eTEK-Labs' => 'eTEK Labs', +// 'EIZO-Corp.' => 'EIZO Corp.', +// 'Elecom-Co.-Ltd' => 'Elecom Co., Ltd', +// 'Korea-Data-Systems-Co.-Ltd' => 'Korea Data Systems Co., Ltd', +// 'Epson-America' => 'Epson America', +// 'Interex-Inc.' => 'Interex, Inc.', +// 'City-University-of-Hong-Kong' => 'City University of Hong Kong', +// 'ELSA' => 'ELSA', +// 'Intrinsix-Corp.' => 'Intrinsix Corp.', +// 'GVC-Corp.' => 'GVC Corp.', +// 'Samsung-Electronics-America' => 'Samsung Electronics America', +// 'Y-E-Data-Inc.' => 'Y-E Data, Inc.', +// 'AVM-GmbH' => 'AVM GmbH', +// 'Shark-Multimedia-Inc.' => 'Shark Multimedia, Inc.', +// 'Nintendo-Co.-Ltd' => 'Nintendo Co., Ltd', +// 'QuickShot-Ltd' => 'QuickShot, Ltd', +// 'Denron-Inc.' => 'Denron, Inc.', +// 'Racal-Data-Group' => 'Racal Data Group', +// 'Roland-Corp.' => 'Roland Corp.', +// 'Padix-Co.-Ltd-Rockfire' => 'Padix Co., Ltd (Rockfire)', +// 'RATOC-System-Inc.' => 'RATOC System, Inc.', +// 'FlashPoint-Technology-Inc.' => 'FlashPoint Technology, Inc.', +// 'ZyXEL-Communications-Corp.' => 'ZyXEL Communications Corp.', +// 'Sapien-Design' => 'Sapien Design', +// 'Victron' => 'Victron', +// 'Nohau-Corp.' => 'Nohau Corp.', +// 'Infineon-Technologies' => 'Infineon Technologies', +// 'In-Focus-Systems' => 'In Focus Systems', +// 'Micrel-Semiconductor' => 'Micrel Semiconductor', +// 'Tripath-Technology-Inc.' => 'Tripath Technology, Inc.', +// 'Alcor-Micro-Corp.' => 'Alcor Micro Corp.', +// 'Omron-Corp.' => 'Omron Corp.', +// 'Questra-Consulting' => 'Questra Consulting', +// 'Powerware-Corp.' => 'Powerware Corp.', +// 'Incite' => 'Incite', +// 'Princeton-Graphic-Systems' => 'Princeton Graphic Systems', +// 'Zoran-Microelectronics-Ltd' => 'Zoran Microelectronics, Ltd', +// 'MicroTouch-Systems-Inc.' => 'MicroTouch Systems, Inc.', +// 'Trisignal-Communications' => 'Trisignal Communications', +// 'Niigata-Canotec-Co.-Inc.' => 'Niigata Canotec Co., Inc.', +// 'Iomega-Corp.' => 'Iomega Corp.', +// 'A-Trend-Technology-Co.-Ltd' => 'A-Trend Technology Co., Ltd', +// 'Advanced-Input-Devices' => 'Advanced Input Devices', +// 'Intelligent-Instrumentation' => 'Intelligent Instrumentation', +// 'LaCie-Ltd' => 'LaCie, Ltd', +// 'Vetronix-Corp.' => 'Vetronix Corp.', +// 'USC-Corp.' => 'USC Corp.', +// 'ARC-International' => 'ARC International', +// 'Ortek-Technology-Inc.' => 'Ortek Technology, Inc.', +// 'Sampo-Technology-Corp.' => 'Sampo Technology Corp.', +// 'Cisco-Systems-Inc.' => 'Cisco Systems, Inc.', +// 'Bose-Corp.' => 'Bose Corp.', +// 'Spacetec-IMC-Corp.' => 'Spacetec IMC Corp.', +// 'OmniVision-Technologies-Inc.' => 'OmniVision Technologies, Inc.', +// 'Utilux-South-China-Ltd' => 'Utilux South China, Ltd', +// 'In-System-Design' => 'In-System Design', +// 'Apple-Inc.' => 'Apple, Inc.', +// 'Y.C.-Cable-U.S.A.-Inc.' => 'Y.C. Cable U.S.A., Inc.', +// 'Synopsys-Inc.' => 'Synopsys, Inc.', +// 'Jing-Mold-Enterprise-Co.-Ltd' => 'Jing-Mold Enterprise Co., Ltd', +// 'Fountain-Technologies-Inc.' => 'Fountain Technologies, Inc.', +// 'LG-Semicon-Co.-Ltd' => 'LG Semicon Co., Ltd', +// 'Dialogic-Corp.' => 'Dialogic Corp.', +// 'Proxima-Corp.' => 'Proxima Corp.', +// 'Medianix-Semiconductor-Inc.' => 'Medianix Semiconductor, Inc.', +// 'Agiler-Inc.' => 'Agiler, Inc.', +// 'Philips-Research-Laboratories' => 'Philips Research Laboratories', +// 'DigitalPersona-Inc.' => 'DigitalPersona, Inc.', +// 'Grey-Cell-Systems' => 'Grey Cell Systems', +// '3G-Green-Green-Globe-Co.-Ltd' => '3G Green Green Globe Co., Ltd', +// 'RAFI-GmbH---Co.-KG' => 'RAFI GmbH & Co. KG', +// 'Tyco-Electronics-Raychem' => 'Tyco Electronics (Raychem)', +// 'S---S-Research' => 'S & S Research', +// 'Keil-Software' => 'Keil Software', +// 'Media-Phonics-Suisse-S.A.' => 'Media Phonics (Suisse) S.A.', +// 'Digi-International-Inc.' => 'Digi International, Inc.', +// 'Qualcomm-Inc.' => 'Qualcomm, Inc.', +// 'Qtronix-Corp.' => 'Qtronix Corp.', +// 'Semtech-Corp.' => 'Semtech Corp.', +// 'Ricoh-Co.-Ltd' => 'Ricoh Co., Ltd', +// 'ELSA-AG' => 'ELSA AG', +// 'Silicom-Ltd' => 'Silicom, Ltd', +// 'sci-worx-GmbH' => 'sci-worx GmbH', +// 'Sung-Forn-Co.-Ltd' => 'Sung Forn Co., Ltd', +// 'GE-Medical-Systems-Lunar' => 'GE Medical Systems Lunar', +// 'Brainboxes-Ltd' => 'Brainboxes, Ltd', +// 'Wave-Systems-Corp.' => 'Wave Systems Corp.', +// 'Tohoku-Ricoh-Co.-Ltd' => 'Tohoku Ricoh Co., Ltd', +// 'Philips-Semiconductors-CICT' => 'Philips Semiconductors, CICT', +// 'Thomas---Betts-Corp.' => 'Thomas & Betts Corp.', +// 'Ultima-Electronics-Corp.' => 'Ultima Electronics Corp.', +// 'Axiohm-Transaction-Solutions' => 'Axiohm Transaction Solutions', +// 'Microtek-International-Inc.' => 'Microtek International, Inc.', +// 'Sun-Corp.-Suntac-' => 'Sun Corp. (Suntac?)', +// 'Lexar-Media-Inc.' => 'Lexar Media, Inc.', +// 'Delta-Electronics-Inc.' => 'Delta Electronics, Inc.', +// 'Silicon-Vision-Inc.' => 'Silicon Vision, Inc.', +// 'Symbol-Technologies' => 'Symbol Technologies', +// 'Syntek-Semiconductor-Co.-Ltd' => 'Syntek Semiconductor Co., Ltd', +// 'ElecVision-Inc.' => 'ElecVision, Inc.', +// 'Genesys-Logic-Inc.' => 'Genesys Logic, Inc.', +// 'Red-Wing-Corp.' => 'Red Wing Corp.', +// 'Fuji-Electric-Co.-Ltd' => 'Fuji Electric Co., Ltd', +// 'Keithley-Instruments' => 'Keithley Instruments', +// 'ICC-Inc.' => 'ICC, Inc.', +// 'Kawasaki-LSI' => 'Kawasaki LSI', +// 'FFC-Ltd' => 'FFC, Ltd', +// 'COM21-Inc.' => 'COM21, Inc.', +// 'Cytechinfo-Inc.' => 'Cytechinfo Inc.', +// 'AVB-Inc.-anko-' => 'AVB, Inc. [anko?]', +// 'Canopus-Co.-Ltd' => 'Canopus Co., Ltd', +// 'Compass-Communications' => 'Compass Communications', +// 'Dexin-Corp.-Ltd' => 'Dexin Corp., Ltd', +// 'PI-Engineering-Inc.' => 'PI Engineering, Inc.', +// 'Unixtar-Technology-Inc.' => 'Unixtar Technology, Inc.', +// 'AOC-International' => 'AOC International', +// 'RFC-Distributions-PTE-Ltd' => 'RFC Distribution(s) PTE, Ltd', +// 'PSC-Scanning-Inc.' => 'PSC Scanning, Inc.', +// 'Harman-Multimedia' => 'Harman Multimedia', +// 'InterAct-Inc.' => 'InterAct, Inc.', +// 'Chic-Technology-Corp.' => 'Chic Technology Corp.', +// 'LeCroy-Corp.' => 'LeCroy Corp.', +// 'Barco-Display-Systems' => 'Barco Display Systems', +// 'Jazz-Hipster-Corp.' => 'Jazz Hipster Corp.', +// 'Vista-Imaging-Inc.' => 'Vista Imaging, Inc.', +// 'Jean-Co.-Ltd' => 'Jean Co., Ltd', +// 'Anchor-C-C-Co.-Ltd' => 'Anchor C&C Co., Ltd', +// 'Bridge-Information-Co.-Ltd' => 'Bridge Information Co., Ltd', +// 'Genrad-Ads' => 'Genrad Ads', +// 'SMK-Manufacturing-Inc.' => 'SMK Manufacturing, Inc.', +// 'Solid-Year' => 'Solid Year', +// 'EEH-Datalink-GmbH' => 'EEH Datalink GmbH', +// 'Auctor-Corp.' => 'Auctor Corp.', +// 'Transmonde-Technologies-Inc.' => 'Transmonde Technologies, Inc.', +// 'Costar-Electronics-Inc.' => 'Costar Electronics, Inc.', +// 'Totoku-Electric-Co.-Ltd' => 'Totoku Electric Co., Ltd', +// 'TransAct-Technologies-Inc.' => 'TransAct Technologies, Inc.', +// 'Bio-Rad-Laboratories' => 'Bio-Rad Laboratories', +// 'MacAlly' => 'MacAlly', +// 'Seiko-Instruments-Inc.' => 'Seiko Instruments, Inc.', +// 'Veridicom-International-Inc.' => 'Veridicom International, Inc.', +// 'Promptus-Communications-Inc.' => 'Promptus Communications, Inc.', +// 'Act-Labs-Ltd' => 'Act Labs, Ltd', +// 'Quatech-Inc.' => 'Quatech, Inc.', +// 'Nissei-Electric-Co.' => 'Nissei Electric Co.', +// 'Alaris-Inc.' => 'Alaris, Inc.', +// 'Iotech-Inc.' => 'Iotech, Inc.', +// 'Littelfuse-Inc.' => 'Littelfuse, Inc.', +// 'Avocent-Corp.' => 'Avocent Corp.', +// 'TiMedia-Technology-Co.-Ltd' => 'TiMedia Technology Co., Ltd', +// 'Adomax-Technology-Co.-Ltd' => 'Adomax Technology Co., Ltd', +// 'Tasking-Software-Inc.' => 'Tasking Software, Inc.', +// 'Zida-Technologies-Ltd' => 'Zida Technologies, Ltd', +// 'Creative-Labs' => 'Creative Labs', +// 'JUJO-Electronics-Corp.' => 'JUJO Electronics Corp.', +// 'Cyrix-Corp.' => 'Cyrix Corp.', +// 'Micron-Technology-Inc.' => 'Micron Technology, Inc.', +// 'Methode-Electronics-Inc.' => 'Methode Electronics, Inc.', +// 'Sierra-Imaging-Inc.' => 'Sierra Imaging, Inc.', +// 'Avision-Inc.' => 'Avision, Inc.', +// 'Chrontel-Inc.' => 'Chrontel, Inc.', +// 'Techwin-Corp.' => 'Techwin Corp.', +// 'Taugagreining-HF' => 'Taugagreining HF', +// 'Fong-Kai-Industrial-Co.-Ltd' => 'Fong Kai Industrial Co., Ltd', +// 'RealMedia-Technology-Inc.' => 'RealMedia Technology, Inc.', +// 'New-Technology-Cable-Ltd' => 'New Technology Cable, Ltd', +// 'Hitex-Development-Tools' => 'Hitex Development Tools', +// 'Woods-Industries-Inc.' => 'Woods Industries, Inc.', +// 'VIA-Medical-Corp.' => 'VIA Medical Corp.', +// 'TEAC-Corp.' => 'TEAC Corp.', +// 'Who--Vision-Systems-Inc.' => 'Who? Vision Systems, Inc.', +// 'UMAX' => 'UMAX', +// 'Acton-Research-Corp.' => 'Acton Research Corp.', +// 'Inside-Out-Networks' => 'Inside Out Networks', +// 'Weli-Science-Co.-Ltd' => 'Weli Science Co., Ltd', +// 'Ji-Haw-Industrial-Co.-Ltd' => 'Ji-Haw Industrial Co., Ltd', +// 'TriTech-Microelectronics-Ltd' => 'TriTech Microelectronics, Ltd', +// 'Suyin-Corp.' => 'Suyin Corp.', +// 'WIBU-Systems-AG' => 'WIBU-Systems AG', +// 'Dynapro-Systems' => 'Dynapro Systems', +// 'Likom-Technology-Sdn.-Bhd.' => 'Likom Technology Sdn. Bhd.', +// 'Stargate-Solutions-Inc.' => 'Stargate Solutions, Inc.', +// 'CNF-Inc.' => 'CNF, Inc.', +// 'Granite-Microsystems-Inc.' => 'Granite Microsystems, Inc.', +// 'Glory-Mark-Electronic-Ltd' => 'Glory Mark Electronic, Ltd', +// 'Tekcon-Electronics-Corp.' => 'Tekcon Electronics Corp.', +// 'Sigma-Designs-Inc.' => 'Sigma Designs, Inc.', +// 'Aethra' => 'Aethra', +// 'Optoelectronics-Co.-Ltd' => 'Optoelectronics Co., Ltd', +// 'Tracewell-Systems' => 'Tracewell Systems', +// 'Silicon-Graphics' => 'Silicon Graphics', +// 'Hamamatsu-Photonics-K.K.' => 'Hamamatsu Photonics K.K.', +// 'Kansai-Electric-Co.-Ltd' => 'Kansai Electric Co., Ltd', +// 'Topmax-Electronic-Co.-Ltd' => 'Topmax Electronic Co., Ltd', +// 'Groovy-Technology-Corp.' => 'Groovy Technology Corp.', +// 'Cypress-Semiconductor' => 'Cypress Semiconductor', +// 'Aiwa-Co.-Ltd' => 'Aiwa Co., Ltd', +// 'WordWand' => 'WordWand', +// 'Oce-Printing-Systems-GmbH' => 'Oce Printing Systems GmbH', +// 'Total-Technologies-Ltd' => 'Total Technologies, Ltd', +// 'Linksys-Inc.' => 'Linksys, Inc.', +// 'Entrega-Inc.' => 'Entrega, Inc.', +// 'SigmaTel-Inc.' => 'SigmaTel, Inc.', +// 'Sequel-Imaging' => 'Sequel Imaging', +// 'Labtec-Inc.' => 'Labtec, Inc.', +// 'HCL' => 'HCL', +// 'DrayTek-Corp.' => 'DrayTek Corp.', +// 'Teles-AG' => 'Teles AG', +// 'Aiwa-Co.-Ltd' => 'Aiwa Co., Ltd', +// 'ACard-Technology-Corp.' => 'ACard Technology Corp.', +// 'Prolific-Technology-Inc.' => 'Prolific Technology, Inc.', +// 'Efficient-Networks-Inc.' => 'Efficient Networks, Inc.', +// 'Hohner-Corp.' => 'Hohner Corp.', +// 'Intermec-Technologies-Corp.' => 'Intermec Technologies Corp.', +// 'Virata-Ltd' => 'Virata, Ltd', +// 'Victor-Company-of-Japan-Ltd' => 'Victor Company of Japan, Ltd', +// 'Actiontec-Electronics-Inc.' => 'Actiontec Electronics, Inc.', +// 'Minolta-Co.-Ltd' => 'Minolta Co., Ltd', +// 'Pertech-Inc.' => 'Pertech, Inc.', +// 'Potrans-International-Inc.' => 'Potrans International, Inc.', +// 'CH-Products-Inc.' => 'CH Products, Inc.', +// 'Golden-Bridge-Electech-Inc.' => 'Golden Bridge Electech, Inc.', +// 'Hagiwara-Sys-Com-Co.-Ltd' => 'Hagiwara Sys-Com Co., Ltd', +// 'Lego-Group' => 'Lego Group', +// 'Chuntex-CTX' => 'Chuntex (CTX)', +// 'Tektronix-Inc.' => 'Tektronix, Inc.', +// 'Askey-Computer-Corp.' => 'Askey Computer Corp.', +// 'Thomson-Inc.' => 'Thomson, Inc.', +// 'Hughes-Network-Systems-HNS' => 'Hughes Network Systems (HNS)', +// 'Marx' => 'Marx', +// 'Allied-Data-Technologies-BV' => 'Allied Data Technologies BV', +// 'Topro-Technology-Inc.' => 'Topro Technology, Inc.', +// 'Saitek-PLC' => 'Saitek PLC', +// 'Divio' => 'Divio', +// 'MicroStore-Inc.' => 'MicroStore, Inc.', +// 'Topaz-Systems-Inc.' => 'Topaz Systems, Inc.', +// 'Westell' => 'Westell', +// 'Sysgration-Ltd' => 'Sysgration, Ltd', +// 'Pixela-Corp.' => 'Pixela Corp.', +// 'Alcatel-Telecom' => 'Alcatel Telecom', +// 'EDA-Inc.' => 'EDA, Inc.', +// 'Oki-Data-Corp.' => 'Oki Data Corp.', +// 'AGFA-Gevaert-NV' => 'AGFA-Gevaert NV', +// 'Leoco-Corp.' => 'Leoco Corp.', +// 'Phidgets-Inc.-formerly-GLAB' => 'Phidgets Inc. (formerly GLAB)', +// 'Bizlink-International-Corp.' => 'Bizlink International Corp.', +// 'Hagenuk-GmbH' => 'Hagenuk, GmbH', +// 'Infowave-Software-Inc.' => 'Infowave Software, Inc.', +// 'SIIG-Inc.' => 'SIIG, Inc.', +// 'Taxan-Europe-Ltd' => 'Taxan (Europe), Ltd', +// 'Newer-Technology-Inc.' => 'Newer Technology, Inc.', +// 'Synaptics-Inc.' => 'Synaptics, Inc.', +// 'Terayon-Communication-Systems' => 'Terayon Communication Systems', +// 'Keyspan' => 'Keyspan', +// 'SpheronVR-AG' => 'SpheronVR AG', +// 'LapLink-Inc.' => 'LapLink, Inc.', +// 'Daewoo-Electronics-Co.-Ltd' => 'Daewoo Electronics Co., Ltd', +// 'Mitsubishi-Electric-Corp.' => 'Mitsubishi Electric Corp.', +// 'Cisco-Systems' => 'Cisco Systems', +// 'Toshiba' => 'Toshiba', +// 'Aashima-Technology-B.V.' => 'Aashima Technology B.V.', +// 'Phoenixtec-Power-Co.-Ltd' => 'Phoenixtec Power Co., Ltd', +// 'Paradyne' => 'Paradyne', +// 'Heisei-Electronics-Co.-Ltd' => 'Heisei Electronics Co., Ltd', +// 'Multi-Tech-Systems-Inc.' => 'Multi-Tech Systems, Inc.', +// 'ADS-Technologies-Inc.' => 'ADS Technologies, Inc.', +// 'Alcatel-Microelectronics' => 'Alcatel Microelectronics', +// 'Tiger-Jet-Network-Inc.' => 'Tiger Jet Network, Inc.', +// 'Sirius-Technologies' => 'Sirius Technologies', +// 'PC-Expert-Tech.-Co.-Ltd' => 'PC Expert Tech. Co., Ltd', +// 'T.N.C-Industrial-Co.-Ltd' => 'T.N.C Industrial Co., Ltd', +// 'Opcode-Systems-Inc.' => 'Opcode Systems, Inc.', +// 'Emine-Technology-Co.' => 'Emine Technology Co.', +// 'Wintrend-Technology-Co.-Ltd' => 'Wintrend Technology Co., Ltd', +// 'Wailly-Technology-Ltd' => 'Wailly Technology Ltd', +// 'Guillemot-Corp.' => 'Guillemot Corp.', +// 'ASYST-electronic-d.o.o.' => 'ASYST electronic d.o.o.', +// 'HSD-S.r.L' => 'HSD S.r.L', +// 'Boston-Acoustics' => 'Boston Acoustics', +// 'Gallant-Computer-Inc.' => 'Gallant Computer, Inc.', +// 'Bvtech-Industry-Inc.' => 'Bvtech Industry, Inc.', +// 'NKK-Corp.' => 'NKK Corp.', +// 'Ariel-Corp.' => 'Ariel Corp.', +// 'Standard-Microsystems-Corp.' => 'Standard Microsystems Corp.', +// 'Putercom-Co.-Ltd' => 'Putercom Co., Ltd', +// 'Silicon-Systems-Ltd-SSL' => 'Silicon Systems, Ltd (SSL)', +// 'Comoss-Electronic-Co.-Ltd' => 'Comoss Electronic Co., Ltd', +// 'Connect-Tech-Inc.' => 'Connect Tech, Inc.', +// 'Interval-Research-Corp.' => 'Interval Research Corp.', +// 'NewMotion-Inc.' => 'NewMotion, Inc.', +// 'ZNK-Corp.' => 'ZNK Corp.', +// 'Imation-Corp.' => 'Imation Corp.', +// 'Tremon-Enterprises-Co.-Ltd' => 'Tremon Enterprises Co., Ltd', +// 'Domain-Technologies-Inc.' => 'Domain Technologies, Inc.', +// 'Eicon-Networks-Corp.' => 'Eicon Networks Corp.', +// 'Ariston-Technologies' => 'Ariston Technologies', +// 'Amitm' => 'Amitm', +// 'Sunix-Co.-Ltd' => 'Sunix Co., Ltd', +// 'Advanced-Card-Systems-Ltd' => 'Advanced Card Systems, Ltd', +// 'Susteen-Inc.' => 'Susteen, Inc.', +// 'ViewQuest-Technologies-Inc.' => 'ViewQuest Technologies, Inc.', +// 'Lasat-Communications-A-S' => 'Lasat Communications A/S', +// 'Asuscom-Network' => 'Asuscom Network', +// 'Lorom-Industrial-Co.-Ltd' => 'Lorom Industrial Co., Ltd', +// 'Mad-Catz-Inc.' => 'Mad Catz, Inc.', +// 'Chaplet-Systems-Inc.' => 'Chaplet Systems, Inc.', +// 'Suncom-Technologies' => 'Suncom Technologies', +// 'Eutron-S.p.a.' => 'Eutron S.p.a.', +// 'NEC-Inc.' => 'NEC, Inc.', +// 'Syntech-Information-Co.-Ltd' => 'Syntech Information Co., Ltd', +// 'Onkyo-Corp.' => 'Onkyo Corp.', +// 'Labway-Corp.' => 'Labway Corp.', +// 'EVer-Electronics-Corp.' => 'EVer Electronics Corp.', +// 'Polestar-Tech.-Corp.' => 'Polestar Tech. Corp.', +// 'C-C-C-Group-PLC' => 'C-C-C Group PLC', +// 'Micronas-GmbH' => 'Micronas GmbH', +// 'Digital-Stream-Corp.' => 'Digital Stream Corp.', +// 'Aureal-Semiconductor' => 'Aureal Semiconductor', +// 'Network-Technologies-Inc.' => 'Network Technologies, Inc.', +// 'Sophisticated-Circuits-Inc.' => 'Sophisticated Circuits, Inc.', +// 'Midiman' => 'Midiman', +// 'Cyber-Power-System-Inc.' => 'Cyber Power System, Inc.', +// 'X-Rite-Inc.' => 'X-Rite, Inc.', +// 'Jess-Link-Products-Co.-Ltd' => 'Jess-Link Products Co., Ltd', +// 'Tokheim-Corp.' => 'Tokheim Corp.', +// 'Camtel-Technology-Corp.' => 'Camtel Technology Corp.', +// 'Surecom-Technology-Corp.' => 'Surecom Technology Corp.', +// 'OmniKey-AG' => 'OmniKey AG', +// 'Partner-Tech' => 'Partner Tech', +// 'Denso-Corp.' => 'Denso Corp.', +// 'Kuan-Tech-Enterprise-Co.-Ltd' => 'Kuan Tech Enterprise Co., Ltd', +// 'Jhen-Vei-Electronic-Co.-Ltd' => 'Jhen Vei Electronic Co., Ltd', +// 'Observator-Instruments-BV' => 'Observator Instruments BV', +// 'AmTRAN-Technology-Co.-Ltd' => 'AmTRAN Technology Co., Ltd', +// 'Longshine-Electronics-Corp.' => 'Longshine Electronics Corp.', +// 'Inalways-Corp.' => 'Inalways Corp.', +// 'Comda-Enterprise-Corp.' => 'Comda Enterprise Corp.', +// 'Volex-Inc.' => 'Volex, Inc.', +// 'Fairchild-Semiconductor' => 'Fairchild Semiconductor', +// 'Sankyo-Seiki-Mfg.-Co.-Ltd' => 'Sankyo Seiki Mfg. Co., Ltd', +// 'Linksys' => 'Linksys', +// 'Forward-Electronics-Co.-Ltd' => 'Forward Electronics Co., Ltd', +// 'Griffin-Technology' => 'Griffin Technology', +// 'Well-Excellent---Most-Corp.' => 'Well Excellent & Most Corp.', +// 'Sagem-Monetel-GmbH' => 'Sagem Monetel GmbH', +// 'SanDisk-Corp.' => 'SanDisk Corp.', +// 'Trackerball' => 'Trackerball', +// 'C3PO' => 'C3PO', +// 'Vivitar-Inc.' => 'Vivitar, Inc.', +// 'NTT-ME' => 'NTT-ME', +// 'Logitec-Corp.' => 'Logitec Corp.', +// 'Happ-Controls-Inc.' => 'Happ Controls, Inc.', +// 'GTCO-CalComp' => 'GTCO/CalComp', +// 'Brincom-Inc.' => 'Brincom, Inc.', +// 'Axis-Communications-AB' => 'Axis Communications AB', +// 'Wha-Yu-Industrial-Co.-Ltd' => 'Wha Yu Industrial Co., Ltd', +// 'ABL-Electronics-Corp.' => 'ABL Electronics Corp.', +// 'RealChip-Inc.' => 'RealChip, Inc.', +// 'Certicom-Corp.' => 'Certicom Corp.', +// 'Grandtech-Semiconductor-Corp.' => 'Grandtech Semiconductor Corp.', +// 'Optelec' => 'Optelec', +// 'Altera' => 'Altera', +// 'Sagem' => 'Sagem', +// 'Alfadata-Computer-Corp.' => 'Alfadata Computer Corp.', +// 'Digicom-S.p.A.' => 'Digicom S.p.A.', +// 'National-Technical-Systems' => 'National Technical Systems', +// 'Onnto-Corp.' => 'Onnto Corp.', +// 'Be-Inc.' => 'Be, Inc.', +// 'ADMtek-Inc.' => 'ADMtek, Inc.', +// 'Corega-K.K.' => 'Corega K.K.', +// 'Freecom-Technologies' => 'Freecom Technologies', +// 'Microtech' => 'Microtech', +// 'Trust-Technologies' => 'Trust Technologies', +// 'IMP-Inc.' => 'IMP, Inc.', +// 'Motorola-BCS-Inc.' => 'Motorola BCS, Inc.', +// 'Plustek-Inc.' => 'Plustek, Inc.', +// 'Olympus-Optical-Co.-Ltd' => 'Olympus Optical Co., Ltd', +// 'Mega-World-International-Ltd' => 'Mega World International, Ltd', +// 'Marubun-Corp.' => 'Marubun Corp.', +// 'TIME-Interconnect-Ltd' => 'TIME Interconnect, Ltd', +// 'AboCom-Systems-Inc' => 'AboCom Systems Inc', +// 'Canon-Computer-Systems-Inc.' => 'Canon Computer Systems, Inc.', +// 'Webgear-Inc.' => 'Webgear, Inc.', +// 'Veridicom' => 'Veridicom', +// 'Keisokugiken' => 'Keisokugiken', +// 'Datafab-Systems-Inc.' => 'Datafab Systems, Inc.', +// 'APG-Cash-Drawer' => 'APG Cash Drawer', +// 'ShareWave-Inc.' => 'ShareWave, Inc.', +// 'Powertech-Industrial-Co.-Ltd' => 'Powertech Industrial Co., Ltd', +// 'B.U.G.-Inc.' => 'B.U.G., Inc.', +// 'Allied-Telesyn-International' => 'Allied Telesyn International', +// 'AVerMedia-Technologies-Inc.' => 'AVerMedia Technologies, Inc.', +// 'Kingmax-Technology-Inc.' => 'Kingmax Technology, Inc.', +// 'Carry-Computer-Eng.-Co.-Ltd' => 'Carry Computer Eng., Co., Ltd', +// 'Elektor' => 'Elektor', +// 'Casio-Computer-Co.-Ltd' => 'Casio Computer Co., Ltd', +// 'Dazzle' => 'Dazzle', +// 'D-Link-System' => 'D-Link System', +// 'Aptio-Products-Inc.' => 'Aptio Products, Inc.', +// 'Cyberdata-Corp.' => 'Cyberdata Corp.', +// 'Radiant-Systems' => 'Radiant Systems', +// 'GCC-Technologies-Inc.' => 'GCC Technologies, Inc.', +// 'Arasan-Chip-Systems' => 'Arasan Chip Systems', +// 'Diamond-Multimedia' => 'Diamond Multimedia', +// 'David-Electronics-Co.-Ltd' => 'David Electronics Co., Ltd', +// 'Ambient-Technologies-Inc.' => 'Ambient Technologies, Inc.', +// 'Elmeg-GmbH---Co.-Ltd' => 'Elmeg GmbH & Co., Ltd', +// 'Planex-Communications-Inc.' => 'Planex Communications, Inc.', +// 'Movado-Enterprise-Co.-Ltd' => 'Movado Enterprise Co., Ltd', +// 'QPS-Inc.' => 'QPS, Inc.', +// 'Allied-Cable-Corp.' => 'Allied Cable Corp.', +// 'Mirvo-Toys-Inc.' => 'Mirvo Toys, Inc.', +// 'Labsystems' => 'Labsystems', +// 'Iwatsu-Electric-Co.-Ltd' => 'Iwatsu Electric Co., Ltd', +// 'Double-H-Technology-Co.-Ltd' => 'Double-H Technology Co., Ltd', +// 'STSN' => 'STSN', +// 'Circuit-Assembly-Corp.' => 'Circuit Assembly Corp.', +// 'Century-Corp.' => 'Century Corp.', +// 'Dotop-Technology-Inc.' => 'Dotop Technology, Inc.', +// 'DrayTek-Corp.' => 'DrayTek Corp.', +// 'Mark-of-the-Unicorn' => 'Mark of the Unicorn', +// 'Unknown' => 'Unknown', +// 'Mag-Tek' => 'Mag-Tek', +// 'Mako-Technologies-LLC' => 'Mako Technologies, LLC', +// 'Zoom-Telephonics-Inc.' => 'Zoom Telephonics, Inc.', +// 'Genicom-Technology-Inc.' => 'Genicom Technology, Inc.', +// 'Evermuch-Technology-Co.-Ltd' => 'Evermuch Technology Co., Ltd', +// 'Cross-Match-Technologies' => 'Cross Match Technologies', +// 'Datalogic-S.p.A.' => 'Datalogic S.p.A.', +// 'Teco-Image-Systems-Co.-Ltd' => 'Teco Image Systems Co., Ltd', +// 'Mattel-Inc.' => 'Mattel, Inc.', +// 'eLicenser' => 'eLicenser', +// 'MG-Logic' => 'MG Logic', +// 'Indigita-Corp.' => 'Indigita Corp.', +// 'Mipsys' => 'Mipsys', +// 'AlphaSmart-Inc.' => 'AlphaSmart, Inc.', +// 'Reudo-Corp.' => 'Reudo Corp.', +// 'GC-Protronics' => 'GC Protronics', +// 'Data-Transit' => 'Data Transit', +// 'BroadLogic-Inc.' => 'BroadLogic, Inc.', +// 'Sato-Corp.' => 'Sato Corp.', +// 'Handspring' => 'Handspring', +// 'Palm-Inc.' => 'Palm, Inc.', +// 'Kouwell-Electronics-Corp.' => 'Kouwell Electronics Corp.', +// 'Sourcenext-Corp.' => 'Sourcenext Corp.', +// 'Samsung-Techwin-Co.-Ltd' => 'Samsung Techwin Co., Ltd', +// 'Accton-Technology-Corp.' => 'Accton Technology Corp.', +// 'Global-Village' => 'Global Village', +// 'Argosy-Research-Inc.' => 'Argosy Research, Inc.', +// 'Rioport.com-Inc.' => 'Rioport.com, Inc.', +// 'Welland-Industrial-Co.-Ltd' => 'Welland Industrial Co., Ltd', +// 'NetGear-Inc.' => 'NetGear, Inc.', +// 'KB-Gear' => 'KB Gear', +// 'Empeg' => 'Empeg', +// 'Fast-Point-Technologies-Inc.' => 'Fast Point Technologies, Inc.', +// 'CSEM' => 'CSEM', +// 'Topre-Corporation' => 'Topre Corporation', +// 'ActiveWire-Inc.' => 'ActiveWire, Inc.', +// 'B-B-Electronics' => 'B&B Electronics', +// 'Hitachi-Maxell-Ltd' => 'Hitachi Maxell, Ltd', +// 'Xircom' => 'Xircom', +// 'ColorVision-Inc.' => 'ColorVision, Inc.', +// 'Teletrol-Systems-Inc.' => 'Teletrol Systems, Inc.', +// 'Filanet-Corp.' => 'Filanet Corp.', +// 'NetGear-Inc.' => 'NetGear, Inc.', +// 'Data-Translation-Inc.' => 'Data Translation, Inc.', +// 'System-TALKS-Inc.' => 'System TALKS, Inc.', +// 'MEC-IMEX-Inc.' => 'MEC IMEX, Inc.', +// 'Metricom' => 'Metricom', +// 'SanDisk-Inc.' => 'SanDisk, Inc.', +// 'Xpeed-Inc.' => 'Xpeed, Inc.', +// 'A-Tec-Subsystem-Inc.' => 'A-Tec Subsystem, Inc.', +// 'Comtrol-Corp.' => 'Comtrol Corp.', +// 'Adesso-Kbtek-America-Inc.' => 'Adesso/Kbtek America, Inc.', +// 'Jaton-Corp.' => 'Jaton Corp.', +// 'Virtual-IP-Group-Inc.' => 'Virtual IP Group, Inc.', +// 'APT-Technologies-Inc.' => 'APT Technologies, Inc.', +// 'Boca-Research-Inc.' => 'Boca Research, Inc.', +// 'XAC-Automation-Corp.' => 'XAC Automation Corp.', +// 'Hannstar-Electronics-Corp.' => 'Hannstar Electronics Corp.', +// 'MassWorks-Inc.' => 'MassWorks, Inc.', +// 'Swecoin-AB' => 'Swecoin AB', +// 'iLok' => 'iLok', +// 'DioGraphy-Inc.' => 'DioGraphy, Inc.', +// 'Lauterbach' => 'Lauterbach', +// 'Icron-Technologies-Corp.' => 'Icron Technologies Corp.', +// 'NST-Co.-Ltd' => 'NST Co., Ltd', +// 'Primex-Aerospace-Co.' => 'Primex Aerospace Co.', +// 'e9-Inc.' => 'e9, Inc.', +// 'Andrea-Electronics' => 'Andrea Electronics', +// 'Macally-Mace-Group-Inc.' => 'Macally (Mace Group, Inc.)', +// 'Sorenson-Vision-Inc.' => 'Sorenson Vision, Inc.', +// 'NATSU' => 'NATSU', +// 'RadioShack-Corp.-Tandy' => 'RadioShack Corp. (Tandy)', +// 'Texas-Instruments-Japan' => 'Texas Instruments Japan', +// 'Citizen-Watch-Co.-Ltd' => 'Citizen Watch Co., Ltd', +// 'Precise-Biometrics' => 'Precise Biometrics', +// 'Proxim-Inc.' => 'Proxim, Inc.', +// 'Key-Nice-Enterprise-Co.-Ltd' => 'Key Nice Enterprise Co., Ltd', +// '2Wire-Inc.' => '2Wire, Inc.', +// 'Aiptek-International-Inc.' => 'Aiptek International, Inc.', +// 'Jue-Hsun-Ind.-Corp.' => 'Jue Hsun Ind. Corp.', +// 'Long-Well-Electronics-Corp.' => 'Long Well Electronics Corp.', +// 'smartBridges-Inc.' => 'smartBridges, Inc.', +// 'Virtual-Ink' => 'Virtual Ink', +// 'Fujitsu-Siemens-Computers' => 'Fujitsu Siemens Computers', +// 'IXXAT-Automation-GmbH' => 'IXXAT Automation GmbH', +// 'Increment-P-Corp.' => 'Increment P Corp.', +// 'Billionton-Systems-Inc.' => 'Billionton Systems, Inc.', +// '---' => '???', +// 'Spyrus-Inc.' => 'Spyrus, Inc.', +// 'Olitec-Inc.' => 'Olitec, Inc.', +// 'Pioneer-Corp.' => 'Pioneer Corp.', +// 'Litronic' => 'Litronic', +// 'Gemplus' => 'Gemplus', +// 'Integrated-Memory-Logic' => 'Integrated Memory Logic', +// 'Extended-Systems-Inc.' => 'Extended Systems, Inc.', +// 'M-Systems-Flash-Disk-Pioneers' => 'M-Systems Flash Disk Pioneers', +// 'MediaTek-Inc.' => 'MediaTek Inc.', +// 'CCSI-Hesso' => 'CCSI/Hesso', +// 'Corex-Technologies' => 'Corex Technologies', +// 'CTI-Electronics-Corp.' => 'CTI Electronics Corp.', +// 'Gotop-Information-Inc.' => 'Gotop Information Inc.', +// 'SysTec-Co.-Ltd' => 'SysTec Co., Ltd', +// 'Logic-3-International-Ltd' => 'Logic 3 International, Ltd', +// 'Vernier' => 'Vernier', +// 'Wipro-Technologies' => 'Wipro Technologies', +// 'Caere' => 'Caere', +// 'Socket-Communications' => 'Socket Communications', +// 'Digianswer-A-S' => 'Digianswer A/S', +// 'AuthenTec-Inc.' => 'AuthenTec, Inc.', +// 'Pinnacle-Systems-Inc.' => 'Pinnacle Systems, Inc.', +// 'VST-Technologies' => 'VST Technologies', +// 'Faraday-Technology-Corp.' => 'Faraday Technology Corp.', +// 'Audio-Technica-Corp.' => 'Audio-Technica Corp.', +// 'Neurosmith' => 'Neurosmith', +// 'Shining-Technology-Inc.' => 'Shining Technology, Inc.', +// 'Fujitsu-Devices-Inc.' => 'Fujitsu Devices, Inc.', +// 'Alation-Systems-Inc.' => 'Alation Systems, Inc.', +// 'Philips-Speech-Processing' => 'Philips Speech Processing', +// 'Voquette-Inc.' => 'Voquette, Inc.', +// 'GlobeSpan-Inc.' => 'GlobeSpan, Inc.', +// 'SmartDisk-Corp.' => 'SmartDisk Corp.', +// 'Tiger-Electronics' => 'Tiger Electronics', +// 'Garmin-International' => 'Garmin International', +// 'Echelon-Co.' => 'Echelon Co.', +// 'GoHubs-Inc.' => 'GoHubs, Inc.', +// 'Dymo-CoStar-Corp.' => 'Dymo-CoStar Corp.', +// 'IC-Media-Corp.' => 'IC Media Corp.', +// 'Xerox' => 'Xerox', +// 'Lakeview-Research' => 'Lakeview Research', +// 'Summus-Ltd' => 'Summus, Ltd', +// 'Oxford-Semiconductor-Ltd' => 'Oxford Semiconductor, Ltd', +// 'American-Biometric-Co.' => 'American Biometric Co.', +// 'Sena-Technologies-Inc.' => 'Sena Technologies, Inc.', +// 'Toshiba-Corp.' => 'Toshiba Corp.', +// 'Harmonic-Data-Systems-Ltd' => 'Harmonic Data Systems, Ltd', +// 'Crescentec-Corp.' => 'Crescentec Corp.', +// 'Quantum-Corp.' => 'Quantum Corp.', +// 'Netcom-Systems' => 'Netcom Systems', +// 'NuTesla' => 'NuTesla', +// 'Lumberg-Inc.' => 'Lumberg, Inc.', +// 'Pixart-Imaging-Inc.' => 'Pixart Imaging, Inc.', +// 'Plextor-Corp.' => 'Plextor Corp.', +// 'InnoSync-Inc.' => 'InnoSync, Inc.', +// 'J.S.T.-Mfg.-Co.-Ltd' => 'J.S.T. Mfg. Co., Ltd', +// 'Photobit-Corp.' => 'Photobit Corp.', +// 'i2Go.com-LLC' => 'i2Go.com, LLC', +// 'KORG-Inc.' => 'KORG, Inc.', +// 'Pasco-Scientific' => 'Pasco Scientific', +// 'Kronauer-music-in-digital' => 'Kronauer music in digital', +// 'Linkup-Systems-Corp.' => 'Linkup Systems Corp.', +// 'Cable-Television-Laboratories' => 'Cable Television Laboratories', +// 'Yano' => 'Yano', +// 'Kingston-Technology' => 'Kingston Technology', +// 'RPM-Systems-Corp.' => 'RPM Systems Corp.', +// 'NVidia-Corp.' => 'NVidia Corp.', +// 'BSquare-Corp.' => 'BSquare Corp.', +// 'Agilent-Technologies-Inc.' => 'Agilent Technologies, Inc.', +// 'CompuLink-Research-Inc.' => 'CompuLink Research, Inc.', +// 'Cologne-Chip-AG' => 'Cologne Chip AG', +// 'Portsmith' => 'Portsmith', +// 'Medialogic-Corp.' => 'Medialogic Corp.', +// 'K-Tec-Electronics' => 'K-Tec Electronics', +// 'Polycom-Inc.' => 'Polycom, Inc.', +// 'Acer---' => 'Acer (??)', +// 'Catalyst-Enterprises-Inc.' => 'Catalyst Enterprises, Inc.', +// 'Feitian-Technologies-Inc.' => 'Feitian Technologies, Inc.', +// 'Gretag-Macbeth-AG' => 'Gretag-Macbeth AG', +// 'Schlumberger' => 'Schlumberger', +// 'OLE-Communications-Inc.' => 'OLE Communications, Inc.', +// 'Adirondack-Wire---Cable' => 'Adirondack Wire & Cable', +// 'Lightsurf-Technologies' => 'Lightsurf Technologies', +// 'Beckhoff-GmbH' => 'Beckhoff GmbH', +// 'Jeilin-Technology-Corp.-Ltd' => 'Jeilin Technology Corp., Ltd', +// 'Minds-At-Work-LLC' => 'Minds At Work LLC', +// 'Knudsen-Engineering-Ltd' => 'Knudsen Engineering, Ltd', +// 'Marunix-Co.-Ltd' => 'Marunix Co., Ltd', +// 'Rosun-Technologies-Inc.' => 'Rosun Technologies, Inc.', +// 'Barun-Electronics-Co.-Ltd' => 'Barun Electronics Co., Ltd', +// 'Oak-Technology-Ltd' => 'Oak Technology, Ltd', +// 'Apricorn' => 'Apricorn', +// 'Vitana-Corp.' => 'Vitana Corp.', +// 'INDesign' => 'INDesign', +// 'Kenwood-TMI-Corp.' => 'Kenwood TMI Corp.', +// 'Gemstar-eBook-Group-Ltd' => 'Gemstar eBook Group, Ltd', +// 'Zippy-Technology-Corp.' => 'Zippy Technology Corp.', +// 'PairGain-Technologies' => 'PairGain Technologies', +// 'Contech-Research-Inc.' => 'Contech Research, Inc.', +// 'VCON-Telecommunications' => 'VCON Telecommunications', +// 'Poinchips' => 'Poinchips', +// 'Intersil-Corp.' => 'Intersil Corp.', +// 'Japan-Cash-Machine-Co.-Ltd.' => 'Japan Cash Machine Co., Ltd.', +// 'Tripp-Lite' => 'Tripp Lite', +// 'Altius-Solutions-Inc.' => 'Altius Solutions, Inc.', +// 'MDS-Telephone-Systems' => 'MDS Telephone Systems', +// 'Celltrix-Technology-Co.-Ltd' => 'Celltrix Technology Co., Ltd', +// 'Grundig' => 'Grundig', +// 'MySmart.Com' => 'MySmart.Com', +// 'Auerswald-GmbH---Co.-KG' => 'Auerswald GmbH & Co. KG', +// 'Arris-Interactive-LLC' => 'Arris Interactive LLC', +// 'Nisca-Corp.' => 'Nisca Corp.', +// 'ActivCard-Inc.' => 'ActivCard, Inc.', +// 'ACTiSYS-Corp.' => 'ACTiSYS Corp.', +// 'Memory-Corp.' => 'Memory Corp.', +// 'Workbit-Corp.' => 'Workbit Corp.', +// 'City-Electronics-Ltd' => 'City Electronics, Ltd', +// 'NeoMagic-Inc.' => 'NeoMagic, Inc.', +// 'Vreelin-Engineering-Inc.' => 'Vreelin Engineering, Inc.', +// 'Com-One' => 'Com One', +// 'Novatel-Wireless' => 'Novatel Wireless', +// 'KRF-Tech-Ltd' => 'KRF Tech, Ltd', +// 'A4-Tech-Co.-Ltd' => 'A4 Tech Co., Ltd', +// 'Measurement-Computing-Corp.' => 'Measurement Computing Corp.', +// 'Aimex-Corp.' => 'Aimex Corp.', +// 'Fellowes-Inc.' => 'Fellowes, Inc.', +// 'Addonics-Technologies-Corp.' => 'Addonics Technologies Corp.', +// 'Intellon-Corp.' => 'Intellon Corp.', +// 'Jo-Dan-International-Inc.' => 'Jo-Dan International, Inc.', +// 'Silutia-Inc.' => 'Silutia, Inc.', +// 'Real-3D-Inc.' => 'Real 3D, Inc.', +// 'AKAI-Professional-M.I.-Corp.' => 'AKAI Professional M.I. Corp.', +// 'Chen-Source-Inc.' => 'Chen-Source, Inc.', +// 'IM-Networks-Inc.' => 'IM Networks, Inc.', +// 'Xitel' => 'Xitel', +// 'GoFlight-Inc.' => 'GoFlight, Inc.', +// 'AresCom' => 'AresCom', +// 'RocketChips-Inc.' => 'RocketChips, Inc.', +// 'Edu-Science-H.K.-Ltd' => 'Edu-Science (H.K.), Ltd', +// 'SoftConnex-Technologies-Inc.' => 'SoftConnex Technologies, Inc.', +// 'Bay-Associates' => 'Bay Associates', +// 'Mtek-Vision' => 'Mtek Vision', +// 'Altera' => 'Altera', +// 'Gain-Technology-Corp.' => 'Gain Technology Corp.', +// 'Liquid-Audio' => 'Liquid Audio', +// 'ViA-Inc.' => 'ViA, Inc.', +// 'Ontrak-Control-Systems-Inc.' => 'Ontrak Control Systems Inc.', +// 'Cybex-Computer-Products-Co.' => 'Cybex Computer Products Co.', +// 'Xentec-Inc.' => 'Xentec, Inc.', +// 'Cambridge-Silicon-Radio-Ltd' => 'Cambridge Silicon Radio, Ltd', +// 'Telebyte-Inc.' => 'Telebyte, Inc.', +// 'Spacelabs-Medical-Inc.' => 'Spacelabs Medical, Inc.', +// 'Scalar-Corp.' => 'Scalar Corp.', +// 'Trek-Technology-S-PTE-Ltd' => 'Trek Technology (S) PTE, Ltd', +// 'Pentax-Corp.' => 'Pentax Corp.', +// 'Hua-Geng-Technologies-Inc.' => 'Hua Geng Technologies, Inc.', +// 'Datacard-Group' => 'Datacard Group', +// 'AK-Modul-Bus-Computer-GmbH' => 'AK-Modul-Bus Computer GmbH', +// 'TG3-Electronics-Inc.' => 'TG3 Electronics, Inc.', +// 'Radikal-Technologies' => 'Radikal Technologies', +// 'Gilat-Satellite-Networks-Ltd' => 'Gilat Satellite Networks, Ltd', +// 'PentaMedia-Co.-Ltd' => 'PentaMedia Co., Ltd', +// 'NTT-DoCoMo-Inc.' => 'NTT DoCoMo, Inc.', +// 'Varo-Vision' => 'Varo Vision', +// 'Swissonic-AG' => 'Swissonic AG', +// 'Boca-Systems-Inc.' => 'Boca Systems, Inc.', +// 'Davicom-Semiconductor-Inc.' => 'Davicom Semiconductor, Inc.', +// 'Hirose-Electric' => 'Hirose Electric', +// 'I-O-Interconnect' => 'I/O Interconnect', +// 'Fujitsu-Media-Devices-Ltd' => 'Fujitsu Media Devices, Ltd', +// 'Computex-Co.-Ltd' => 'Computex Co., Ltd', +// 'Evolution-Electronics-Ltd' => 'Evolution Electronics, Ltd', +// 'Litton-Systems-Inc.' => 'Litton Systems, Inc.', +// 'Mimaki-Engineering-Co.-Ltd' => 'Mimaki Engineering Co., Ltd', +// 'Sony-Electronics-Inc.' => 'Sony Electronics, Inc.', +// 'Jebsee-Electronics-Co.-Ltd' => 'Jebsee Electronics Co., Ltd', +// 'Portable-Peripheral-Co.-Ltd' => 'Portable Peripheral Co., Ltd', +// 'Electronics-For-Imaging-Inc.' => 'Electronics For Imaging, Inc.', +// 'EAsics-NV' => 'EAsics NV', +// 'Broadcom-Corp.' => 'Broadcom Corp.', +// 'Diatrend-Corp.' => 'Diatrend Corp.', +// 'Zebra' => 'Zebra', +// 'MPMan' => 'MPMan', +// 'ClearCube-Technology' => 'ClearCube Technology', +// 'Medeli-Electronics-Co.-Ltd' => 'Medeli Electronics Co., Ltd', +// 'Comaide-Corp.' => 'Comaide Corp.', +// 'Chroma-ate-Inc.' => 'Chroma ate, Inc.', +// 'Green-House-Co.-Ltd' => 'Green House Co., Ltd', +// 'UPS-Manufacturing' => 'UPS Manufacturing', +// 'Benwin' => 'Benwin', +// 'Core-Technology-Inc.' => 'Core Technology, Inc.', +// 'International-Game-Technology' => 'International Game Technology', +// 'Sanwa-Denshi' => 'Sanwa Denshi', +// 'NSTL-Inc.' => 'NSTL, Inc.', +// 'Octagon-Systems-Corp.' => 'Octagon Systems Corp.', +// 'Rexon-Technology-Corp.-Ltd' => 'Rexon Technology Corp., Ltd', +// 'Chesen-Electronics-Corp.' => 'Chesen Electronics Corp.', +// 'Syscan' => 'Syscan', +// 'NextComm-Inc.' => 'NextComm, Inc.', +// 'Maui-Innovative-Peripherals' => 'Maui Innovative Peripherals', +// 'Idexx-Labs' => 'Idexx Labs', +// 'NITGen-Co.-Ltd' => 'NITGen Co., Ltd', +// 'Picturetel' => 'Picturetel', +// 'Candy-Technology-Co.-Ltd' => 'Candy Technology Co., Ltd', +// 'Globlink-Technology-Inc.' => 'Globlink Technology, Inc.', +// 'EGO-SYStems-Inc.' => 'EGO SYStems, Inc.', +// 'C-Technologies-AB' => 'C Technologies AB', +// 'Intersense' => 'Intersense', +// 'Lava-Computer-Mfg.-Inc.' => 'Lava Computer Mfg., Inc.', +// 'Develco-Elektronik' => 'Develco Elektronik', +// 'First-International-Digital' => 'First International Digital', +// 'Perception-Digital-Ltd' => 'Perception Digital, Ltd', +// 'TriGem-Computer-Inc.' => 'TriGem Computer, Inc.', +// 'Baromtec-Co.' => 'Baromtec Co.', +// 'Japan-CBM-Corp.' => 'Japan CBM Corp.', +// 'Vision-Shape-Europe-SA' => 'Vision Shape Europe SA', +// 'iCompression-Inc.' => 'iCompression, Inc.', +// 'Rohde---Schwarz-GmbH---Co.-KG' => 'Rohde & Schwarz GmbH & Co. KG', +// 'NEC-infrontia-Corp.-Nitsuko' => 'NEC infrontia Corp. (Nitsuko)', +// 'Digitalway-Co.-Ltd' => 'Digitalway Co., Ltd', +// 'FEIG-ELECTRONIC-GmbH' => 'FEIG ELECTRONIC GmbH', +// 'Ellisys' => 'Ellisys', +// 'Stereo-Link' => 'Stereo-Link', +// 'Diolan' => 'Diolan', +// 'Leco-Corp.' => 'Leco Corp.', +// 'I---C-Corp.' => 'I & C Corp.', +// 'Singing-Electrons-Inc.' => 'Singing Electrons, Inc.', +// 'Panwest-Corp.' => 'Panwest Corp.', +// 'Z-Star-Microelectronics-Corp.' => 'Z-Star Microelectronics Corp.', +// 'Micro-Solutions-Inc.' => 'Micro Solutions, Inc.', +// 'OPEN-Networks-Ltd' => 'OPEN Networks Ltd', +// 'Koga-Electronics-Co.' => 'Koga Electronics Co.', +// 'ID-Tech' => 'ID Tech', +// 'ZyDAS' => 'ZyDAS', +// 'Intoto-Inc.' => 'Intoto, Inc.', +// 'Intellix-Corp.' => 'Intellix Corp.', +// 'Remotec-Technology-Ltd' => 'Remotec Technology, Ltd', +// 'Data-Encryption-Systems-Ltd.' => 'Data Encryption Systems Ltd.', +// 'Allion-Computer-Inc.' => 'Allion Computer, Inc.', +// 'Taito-Corp.' => 'Taito Corp.', +// 'Neodym-Systems-Inc.' => 'Neodym Systems, Inc.', +// 'System-Support-Co.-Ltd' => 'System Support Co., Ltd', +// 'SciEssence-LLC' => 'SciEssence, LLC', +// 'TTP-Communications-Ltd' => 'TTP Communications, Ltd', +// 'Neodio-Technologies-Corp.' => 'Neodio Technologies Corp.', +// 'Option' => 'Option', +// 'Silver-I-Co.-Ltd' => 'Silver I Co., Ltd', +// 'B2C2-Inc.' => 'B2C2, Inc.', +// 'Hama-Inc.' => 'Hama, Inc.', +// 'Zaptronix-Ltd' => 'Zaptronix Ltd', +// 'Tateno-Dennou-Inc.' => 'Tateno Dennou, Inc.', +// 'Cummins-Engine-Co.' => 'Cummins Engine Co.', +// 'INGENICO' => 'INGENICO', +// 'ASUSTek-Computer-Inc.' => 'ASUSTek Computer, Inc.', +// 'Datamax-ONeil' => 'Datamax-ONeil', +// 'Todos-AB' => 'Todos AB', +// 'ProjectLab' => 'ProjectLab', +// 'GN-Netcom' => 'GN Netcom', +// 'AVID-Technology' => 'AVID Technology', +// 'Pcally' => 'Pcally', +// 'I-Tech-Solutions-Co.-Ltd' => 'I Tech Solutions Co., Ltd', +// 'Insyde-Software-Corp.' => 'Insyde Software Corp.', +// 'TransDimension-Inc.' => 'TransDimension, Inc.', +// 'Yokogawa-Electric-Corp.' => 'Yokogawa Electric Corp.', +// 'Pan-Asia-Electronics-Co.-Ltd' => 'Pan-Asia Electronics Co., Ltd', +// 'Link-Evolution-Corp.' => 'Link Evolution Corp.', +// 'Ritek-Corp.' => 'Ritek Corp.', +// 'Kenwood-Corp.' => 'Kenwood Corp.', +// 'Village-Center-Inc.' => 'Village Center, Inc.', +// 'PNY-Technologies-Inc.' => 'PNY Technologies, Inc.', +// 'Contour-Design-Inc.' => 'Contour Design, Inc.', +// 'Hitachi-ULSI-Systems-Co.-Ltd' => 'Hitachi ULSI Systems Co., Ltd', +// 'Gear-Head' => 'Gear Head', +// 'IPaxess' => 'IPaxess', +// 'Tekram-Technology-Co.-Ltd' => 'Tekram Technology Co., Ltd', +// 'Olivetti-Techcenter' => 'Olivetti Techcenter', +// 'Kikusui-Electronics-Corp.' => 'Kikusui Electronics Corp.', +// 'Hal-Corp.' => 'Hal Corp.', +// 'Play.com-Inc.' => 'Play.com, Inc.', +// 'Sportbug.com-Inc.' => 'Sportbug.com, Inc.', +// 'TechnoTrend-AG' => 'TechnoTrend AG', +// 'ASCII-Corp.' => 'ASCII Corp.', +// 'Pine-Corp.-Ltd.' => 'Pine Corp. Ltd.', +// 'Graphtec-America-Inc.' => 'Graphtec America, Inc.', +// 'Musical-Electronics-Ltd' => 'Musical Electronics, Ltd', +// 'Dumpries-Co.-Ltd' => 'Dumpries Co., Ltd', +// 'Comfort-Keyboard-Co.' => 'Comfort Keyboard Co.', +// 'Colorado-MicroDisplay-Inc.' => 'Colorado MicroDisplay, Inc.', +// 'Sinbon-Electronics-Co.-Ltd' => 'Sinbon Electronics Co., Ltd', +// 'TYI-Systems-Ltd' => 'TYI Systems, Ltd', +// 'Lake-Communications-Ltd' => 'Lake Communications, Ltd', +// 'Corel-Corp.' => 'Corel Corp.', +// 'Green-Electronics-Co.-Ltd' => 'Green Electronics Co., Ltd', +// 'Nsine-Ltd' => 'Nsine, Ltd', +// 'NEC-Viewtechnology-Ltd' => 'NEC Viewtechnology, Ltd', +// 'Orange-Micro-Inc.' => 'Orange Micro, Inc.', +// 'ADLink-Technology-Inc.' => 'ADLink Technology, Inc.', +// 'Wonderful-Wire-Cable-Co.-Ltd' => 'Wonderful Wire Cable Co., Ltd', +// 'Expert-Magnetics-Corp.' => 'Expert Magnetics Corp.', +// 'CacheVision' => 'CacheVision', +// 'Maxim-Integrated-Products' => 'Maxim Integrated Products', +// 'Nagano-Japan-Radio-Co.-Ltd' => 'Nagano Japan Radio Co., Ltd', +// 'PortalPlayer-Inc.' => 'PortalPlayer, Inc.', +// 'SHIN-EI-Sangyo-Co.-Ltd' => 'SHIN-EI Sangyo Co., Ltd', +// 'Computone-Corp.' => 'Computone Corp.', +// 'Roland-DG-Corp.' => 'Roland DG Corp.', +// 'Sunrise-Telecom-Inc.' => 'Sunrise Telecom, Inc.', +// 'Zeevo-Inc.' => 'Zeevo, Inc.', +// 'Taiko-Denki-Co.-Ltd' => 'Taiko Denki Co., Ltd', +// 'ITRAN-Communications-Ltd' => 'ITRAN Communications, Ltd', +// 'Astrodesign-Inc.' => 'Astrodesign, Inc.', +// 'id3-Semiconductors' => 'id3 Semiconductors', +// 'Rextron-Technology-Inc.' => 'Rextron Technology, Inc.', +// 'Elkat-Electronics-Sdn.-Bhd.' => 'Elkat Electronics, Sdn., Bhd.', +// 'Exputer-Systems-Inc.' => 'Exputer Systems, Inc.', +// 'Plus-One-I---T-Inc.' => 'Plus-One I & T, Inc.', +// 'SMART-Technologies-Inc.' => 'SMART Technologies Inc.', +// 'ASIX-Electronics-Corp.' => 'ASIX Electronics Corp.', +// 'Sewon-Telecom' => 'Sewon Telecom', +// 'O2-Micro-Inc.' => 'O2 Micro, Inc.', +// 'Playmates-Toys-Inc.' => 'Playmates Toys, Inc.', +// 'Audio-International-Inc.' => 'Audio International, Inc.', +// 'Dipl.-Ing.-Stefan-Kunde' => 'Dipl.-Ing. Stefan Kunde', +// 'Softprotec-Co.' => 'Softprotec Co.', +// 'Chippo-Technologies' => 'Chippo Technologies', +// 'U.S.-Robotics' => 'U.S. Robotics', +// 'Concord-Camera-Corp.' => 'Concord Camera Corp.', +// 'Infinilink-Corp.' => 'Infinilink Corp.', +// 'Ambit-Microsystems-Corp.' => 'Ambit Microsystems Corp.', +// 'Ofuji-Technology' => 'Ofuji Technology', +// 'High-Tech-Computer-Corp.' => 'High Tech Computer Corp.', +// 'Murata-Manufacturing-Co.-Ltd' => 'Murata Manufacturing Co., Ltd', +// 'Network-Alchemy' => 'Network Alchemy', +// 'Joytech-Computer-Co.-Ltd' => 'Joytech Computer Co., Ltd', +// 'Eiger-M-C-Co.-Ltd' => 'Eiger M&C Co., Ltd', +// 'ZAccess-Systems' => 'ZAccess Systems', +// 'General-Meters-Corp.' => 'General Meters Corp.', +// 'Assistive-Technology-Inc.' => 'Assistive Technology, Inc.', +// 'System-Connection-Inc.' => 'System Connection, Inc.', +// 'Knilink-Technology-Inc.' => 'Knilink Technology, Inc.', +// 'Fuw-Yng-Electronics-Co.-Ltd' => 'Fuw Yng Electronics Co., Ltd', +// 'Seagate-RSS-LLC' => 'Seagate RSS LLC', +// 'IPWireless-Inc.' => 'IPWireless, Inc.', +// 'Microcube-Corp.' => 'Microcube Corp.', +// 'JCN-Co.-Ltd' => 'JCN Co., Ltd', +// 'ExWAY-Inc.' => 'ExWAY, Inc.', +// 'X10-Wireless-Technology-Inc.' => 'X10 Wireless Technology, Inc.', +// 'Telmax-Communications' => 'Telmax Communications', +// 'ECI-Telecom-Ltd' => 'ECI Telecom, Ltd', +// 'Startek-Engineering-Inc.' => 'Startek Engineering, Inc.', +// 'Andrew-Pargeter---Associates' => 'Andrew Pargeter & Associates', +// 'Realtek-Semiconductor-Corp.' => 'Realtek Semiconductor Corp.', +// 'Y-Media-Corp.' => 'Y Media Corp.', +// 'Orange-PCS' => 'Orange PCS', +// 'Kanda-Tsushin-Kogyo-Co.-Ltd' => 'Kanda Tsushin Kogyo Co., Ltd', +// 'TOYO-Corp.' => 'TOYO Corp.', +// 'Elka-International-Ltd' => 'Elka International, Ltd', +// 'DOME-imaging-systems-Inc.' => 'DOME imaging systems, Inc.', +// 'Silicon-Labs' => 'Silicon Labs', +// 'LTK-Industries-Ltd' => 'LTK Industries, Ltd', +// 'Way2Call-Communications' => 'Way2Call Communications', +// 'Pace-Micro-Technology-PLC' => 'Pace Micro Technology PLC', +// 'Intracom-S.A.' => 'Intracom S.A.', +// 'Konexx' => 'Konexx', +// 'Addonics-Technologies-Inc.' => 'Addonics Technologies, Inc.', +// 'Sunny-Giken-Inc.' => 'Sunny Giken, Inc.', +// 'Fujitsu-Siemens-Computers' => 'Fujitsu Siemens Computers', +// 'MOTO-Development-Group-Inc.' => 'MOTO Development Group, Inc.', +// 'Appian-Graphics' => 'Appian Graphics', +// 'Hasbro-Games-Inc.' => 'Hasbro Games, Inc.', +// 'Infinite-Data-Storage-Ltd' => 'Infinite Data Storage, Ltd', +// 'Agate' => 'Agate', +// 'Comjet-Information-System' => 'Comjet Information System', +// 'Highpoint-Technologies-Inc.' => 'Highpoint Technologies, Inc.', +// 'Dura-Micro-Inc.-Acomdata' => 'Dura Micro, Inc. (Acomdata)', +// 'Zeroplus' => 'Zeroplus', +// 'Iris-Graphics' => 'Iris Graphics', +// 'Gyration-Inc.' => 'Gyration, Inc.', +// 'Cyberboard-A-S' => 'Cyberboard A/S', +// 'SynerTek-Korea-Inc.' => 'SynerTek Korea, Inc.', +// 'cyberPIXIE-Inc.' => 'cyberPIXIE, Inc.', +// 'Silicon-Motion-Inc.' => 'Silicon Motion, Inc.', +// 'MIPS-Technologies' => 'MIPS Technologies', +// 'Tally-Printer-Corp.' => 'Tally Printer Corp.', +// 'Lernout-+-Hauspie' => 'Lernout + Hauspie', +// 'Taiyo-Yuden' => 'Taiyo Yuden', +// 'Sampo-Corp.' => 'Sampo Corp.', +// 'Prolific-Technology-Inc.' => 'Prolific Technology Inc.', +// 'RFIDeas-Inc' => 'RFIDeas, Inc', +// 'Metro' => 'Metro', +// 'Eagletron-Inc.' => 'Eagletron, Inc.', +// 'E-Ink-Corp.' => 'E Ink Corp.', +// 'e.Digital' => 'e.Digital', +// 'IFR' => 'IFR', +// 'Komatsu-Ltd' => 'Komatsu, Ltd', +// 'Radius-Co.-Ltd' => 'Radius Co., Ltd', +// 'Innocom-Inc.' => 'Innocom, Inc.', +// 'Nextcell-Inc.' => 'Nextcell, Inc.', +// 'Motorola-iDEN' => 'Motorola iDEN', +// 'Microdia' => 'Microdia', +// 'Reiner-SCT-Kartensysteme-GmbH' => 'Reiner SCT Kartensysteme GmbH', +// 'Sealevel-Systems-Inc.' => 'Sealevel Systems, Inc.', +// 'ViewPLUS-Inc.' => 'ViewPLUS, Inc.', +// 'Glory-Ltd' => 'Glory, Ltd', +// 'Spectrum-Digital-Inc.' => 'Spectrum Digital, Inc.', +// 'Billion-Bright-Ltd' => 'Billion Bright, Ltd', +// 'Vidar-Systems-Corp.' => 'Vidar Systems Corp.', +// 'TRS-International-Mfg.-Inc.' => 'TRS International Mfg., Inc.', +// 'Xytronix-Research---Design' => 'Xytronix Research & Design', +// 'Apogee-Electronics-Corp.' => 'Apogee Electronics Corp.', +// 'Chant-Sincere-Co.-Ltd' => 'Chant Sincere Co., Ltd', +// 'Toko-Inc.' => 'Toko, Inc.', +// 'Eminence-Enterprise-Co.-Ltd' => 'Eminence Enterprise Co., Ltd', +// 'Rexon-Electronics-Corp.' => 'Rexon Electronics Corp.', +// 'Concept-Telecom-Ltd' => 'Concept Telecom, Ltd', +// 'MCT-Elektronikladen' => 'MCT Elektronikladen', +// 'Optronic-Laboratories-Inc.' => 'Optronic Laboratories Inc.', +// 'JMTek-LLC.' => 'JMTek, LLC.', +// 'Sipix-Group-Ltd' => 'Sipix Group, Ltd', +// 'Detto-Corp.' => 'Detto Corp.', +// 'Wing-Span-Enterprise-Co.-Ltd' => 'Wing-Span Enterprise Co., Ltd', +// 'NDA-Technologies-Inc.' => 'NDA Technologies, Inc.', +// 'Kyocera-Wireless-Corp.' => 'Kyocera Wireless Corp.', +// 'Honda-Tsushin-Kogyo-Co.-Ltd' => 'Honda Tsushin Kogyo Co., Ltd', +// 'Pathway-Connectivity-Inc.' => 'Pathway Connectivity, Inc.', +// 'Wavefly-Corp.' => 'Wavefly Corp.', +// 'Coactive-Networks' => 'Coactive Networks', +// 'Tempo' => 'Tempo', +// 'Cesscom-Co.-Ltd' => 'Cesscom Co., Ltd', +// 'Applied-Microsystems' => 'Applied Microsystems', +// 'Berkshire-Products-Inc.' => 'Berkshire Products, Inc.', +// 'Innochips-Co.-Ltd' => 'Innochips Co., Ltd', +// 'Hanwool-Robotics-Corp.' => 'Hanwool Robotics Corp.', +// 'Jobin-Yvon-Inc.' => 'Jobin Yvon, Inc.', +// 'SemTek' => 'SemTek', +// 'Zyfer' => 'Zyfer', +// 'Sega-Corp.' => 'Sega Corp.', +// 'ST-T-Instrument-Corp.' => 'ST&T Instrument Corp.', +// 'BAE-Systems-Canada-Inc.' => 'BAE Systems Canada, Inc.', +// 'Castles-Technology-Co.-Ltd' => 'Castles Technology Co., Ltd', +// 'Motorola-CGISS' => 'Motorola CGISS', +// 'Ascom-Business-Systems-Ltd' => 'Ascom Business Systems, Ltd', +// 'Buslink' => 'Buslink', +// 'Flying-Pig-Systems' => 'Flying Pig Systems', +// 'Innovonics-Inc.' => 'Innovonics, Inc.', +// 'Celestix-Networks-Pte.-Ltd' => 'Celestix Networks, Pte., Ltd', +// 'Singatron-Enterprise-Co.-Ltd' => 'Singatron Enterprise Co., Ltd', +// 'Opticis-Co.-Ltd' => 'Opticis Co., Ltd', +// 'Palmax-Technology-Co.-Ltd' => 'Palmax Technology Co., Ltd', +// 'Keryx-Technologies-Inc.' => 'Keryx Technologies, Inc.', +// 'Kuon-Yi-Industrial-Corp.' => 'Kuon Yi Industrial Corp.', +// 'Given-Imaging-Ltd' => 'Given Imaging, Ltd', +// 'Timex-Corp.' => 'Timex Corp.', +// 'Rimage-Corp.' => 'Rimage Corp.', +// 'emsys-GmbH' => 'emsys GmbH', +// 'Sendo' => 'Sendo', +// 'Intermagic-Corp.' => 'Intermagic Corp.', +// 'Kontron-Medical-AG' => 'Kontron Medical AG', +// 'Technotools-Corp.' => 'Technotools Corp.', +// 'BroadMAX-Technologies-Inc.' => 'BroadMAX Technologies, Inc.', +// 'Amphenol' => 'Amphenol', +// 'SKNet-Co.-Ltd' => 'SKNet Co., Ltd', +// 'Domex-Technology-Corp.' => 'Domex Technology Corp.', +// 'TerraTec-Electronic-GmbH' => 'TerraTec Electronic GmbH', +// 'Bang-Olufsen' => 'Bang Olufsen', +// 'LabJack-Corporation' => 'LabJack Corporation', +// 'NewChip-S.r.l.' => 'NewChip S.r.l.', +// 'JS-Digitech-Inc.' => 'JS Digitech, Inc.', +// 'Hitachi-Shin-Din-Cable-Ltd' => 'Hitachi Shin Din Cable, Ltd', +// 'Z-Com' => 'Z-Com', +// 'pico-Technology' => 'pico Technology', +// 'e-Conn-Electronic-Co.-Ltd' => 'e-Conn Electronic Co., Ltd', +// 'ENE-Technology-Inc.' => 'ENE Technology, Inc.', +// 'Atheros-Communications-Inc.' => 'Atheros Communications, Inc.', +// 'Fomtex-Corp.' => 'Fomtex Corp.', +// 'Cellink-Co.-Ltd' => 'Cellink Co., Ltd', +// 'Compucable-Corp.' => 'Compucable Corp.', +// 'ishoni-Networks' => 'ishoni Networks', +// 'Clarisys-Inc.' => 'Clarisys, Inc.', +// 'Inviso-Inc.' => 'Inviso, Inc.', +// 'Minolta-QMS-Inc.' => 'Minolta-QMS, Inc.', +// 'SAFA-MEDIA-Co.-Ltd.' => 'SAFA MEDIA Co., Ltd.', +// 'UTStarcom' => 'UTStarcom', +// 'Contemporary-Controls' => 'Contemporary Controls', +// 'Astron-Electronics-Co.-Ltd' => 'Astron Electronics Co., Ltd', +// 'MKNet-Corp.' => 'MKNet Corp.', +// 'Hybrid-Networks-Inc.' => 'Hybrid Networks, Inc.', +// 'Feng-Shin-Cable-Co.-Ltd' => 'Feng Shin Cable Co., Ltd', +// 'Elastic-Networks' => 'Elastic Networks', +// 'Maspro-Denkoh-Corp.' => 'Maspro Denkoh Corp.', +// 'Hansol-Electronics-Inc.' => 'Hansol Electronics, Inc.', +// 'BMF-Corp.' => 'BMF Corp.', +// 'Array-Comm-Inc.' => 'Array Comm, Inc.', +// 'OnStream-b.v.' => 'OnStream b.v.', +// 'NALTEC-Inc.' => 'NALTEC, Inc.', +// 'coaXmedia' => 'coaXmedia', +// 'NXP' => 'NXP', +// 'AirSpeak-Inc.' => 'AirSpeak, Inc.', +// 'Rearden-Steel-Technologies' => 'Rearden Steel Technologies', +// 'Dah-Kun-Co.-Ltd' => 'Dah Kun Co., Ltd', +// 'Posiflex-Technologies-Inc.' => 'Posiflex Technologies, Inc.', +// 'Sri-Cable-Technology-Ltd' => 'Sri Cable Technology, Ltd', +// 'Tangtop-Technology-Co.-Ltd' => 'Tangtop Technology Co., Ltd', +// 'Fitcom-inc.' => 'Fitcom, inc.', +// 'MTS-Systems-Corp.' => 'MTS Systems Corp.', +// 'Ascor-Inc.' => 'Ascor, Inc.', +// 'Full-Der-Co.-Ltd' => 'Full Der Co., Ltd', +// 'Kobil-Systems-GmbH' => 'Kobil Systems GmbH', +// 'Maxtor' => 'Maxtor', +// 'NF-Corp.' => 'NF Corp.', +// 'Grape-Systems-Inc.' => 'Grape Systems, Inc.', +// 'Tedas-AG' => 'Tedas AG', +// 'Coherent-Inc.' => 'Coherent, Inc.', +// 'Agere-Systems-Netherland-BV' => 'Agere Systems Netherland BV', +// 'EADS-Airbus-France' => 'EADS Airbus France', +// 'Cleware-GmbH' => 'Cleware GmbH', +// 'Volex-Asia-Pte.-Ltd' => 'Volex (Asia) Pte., Ltd', +// 'HMI-Co.-Ltd' => 'HMI Co., Ltd', +// 'Holon-Corp.' => 'Holon Corp.', +// 'ASKA-Technologies-Inc.' => 'ASKA Technologies, Inc.', +// 'AVLAB-Technology-Inc.' => 'AVLAB Technology, Inc.', +// 'Solomon-Microtech-Ltd' => 'Solomon Microtech, Ltd', +// 'SMC-Networks-Inc.' => 'SMC Networks, Inc.', +// 'Myacom-Ltd' => 'Myacom, Ltd', +// 'CSI-Inc.' => 'CSI, Inc.', +// 'IVL-Technologies-Ltd' => 'IVL Technologies, Ltd', +// 'Darfon-Electronics-Corp.' => 'Darfon Electronics Corp.', +// 'Fritz-Gegauf-AG' => 'Fritz Gegauf AG', +// 'DXG-Technology-Corp.' => 'DXG Technology Corp.', +// 'KMJP-Co.-Ltd' => 'KMJP Co., Ltd', +// 'TMT' => 'TMT', +// 'Advanet-Inc.' => 'Advanet, Inc.', +// 'NSI' => 'NSI', +// 'Megapower-International-Corp.' => 'Megapower International Corp.', +// 'And-Or-Logic' => 'And-Or Logic', +// 'Try-Computer-Co.-Ltd' => 'Try Computer Co., Ltd', +// 'Hirakawa-Hewtech-Corp.' => 'Hirakawa Hewtech Corp.', +// 'Winmate-Communication-Inc.' => 'Winmate Communication, Inc.', +// 'Hits-Communications-Inc.' => 'Hits Communications, Inc.', +// 'MFP-Korea-Inc.' => 'MFP Korea, Inc.', +// 'Power-Sentry-Newpoint' => 'Power Sentry/Newpoint', +// 'Japan-Distributor-Corp.' => 'Japan Distributor Corp.', +// 'MARX-Datentechnik-GmbH' => 'MARX Datentechnik GmbH', +// 'Wellco-Technology-Co.-Ltd' => 'Wellco Technology Co., Ltd', +// 'Phison-Electronics-Corp.' => 'Phison Electronics Corp.', +// 'Essential-Reality-LLC' => 'Essential Reality LLC', +// 'TechnoVision' => 'TechnoVision', +// 'Think-Outside-Inc.' => 'Think Outside, Inc.', +// 'Dolby-Laboratories-Inc.' => 'Dolby Laboratories Inc.', +// 'Oz-Software' => 'Oz Software', +// 'King-Jim-Co.-Ltd' => 'King Jim Co., Ltd', +// 'Ascom-Telecommunications-Ltd' => 'Ascom Telecommunications, Ltd', +// 'C-Media-Electronics-Inc.' => 'C-Media Electronics, Inc.', +// 'Global-Sun-Technology-Inc.' => 'Global Sun Technology, Inc.', +// 'Pitney-Bowes' => 'Pitney Bowes', +// 'Sure-Fire-Electrical-Corp.' => 'Sure-Fire Electrical Corp.', +// 'Skanhex-Technology-Inc.' => 'Skanhex Technology, Inc.', +// 'Mars-Semiconductor-Corp.' => 'Mars Semiconductor Corp.', +// 'Trazer-Technologies-Inc.' => 'Trazer Technologies, Inc.', +// 'RTX-Telecom-AS' => 'RTX Telecom AS', +// 'Tat-Shing-Electrical-Co.' => 'Tat Shing Electrical Co.', +// 'Sanwa-Supply-Inc.' => 'Sanwa Supply, Inc.', +// 'Avaya' => 'Avaya', +// 'Powercom-Co.-Ltd' => 'Powercom Co., Ltd', +// 'Danger-Research' => 'Danger Research', +// 'Polar-Electro-OY' => 'Polar Electro OY', +// 'IOGear-Inc.' => 'IOGear, Inc.', +// 'softDSP-Co.-Ltd' => 'softDSP Co., Ltd', +// 'Cubig-Group' => 'Cubig Group', +// 'Westover-Scientific' => 'Westover Scientific', +// 'Micro-Star-International' => 'Micro Star International', +// 'Wen-Te-Electronics-Co.-Ltd' => 'Wen Te Electronics Co., Ltd', +// 'Tekram-Technology-Co.-Ltd' => 'Tekram Technology Co., Ltd', +// 'ELCON-Systemtechnik' => 'ELCON Systemtechnik', +// 'A-D-Medical' => 'A&D Medical', +// 'Quik-Tech-Solutions' => 'Quik Tech Solutions', +// 'Tamagawa-Seiki-Co.-Ltd' => 'Tamagawa Seiki Co., Ltd', +// 'Macpower-Peripherals-Ltd' => 'Macpower Peripherals, Ltd', +// 'SDK-Co.-Ltd' => 'SDK Co., Ltd', +// 'First-Cable-Line-Inc.' => 'First Cable Line, Inc.', +// 'NetworkFab-Corp.' => 'NetworkFab Corp.', +// 'Access-Solutions' => 'Access Solutions', +// 'Contek-Electronics-Co.-Ltd' => 'Contek Electronics Co., Ltd', +// 'MediaQ' => 'MediaQ', +// 'Custom-Engineering-SPA' => 'Custom Engineering SPA', +// 'California-Micro-Devices' => 'California Micro Devices', +// 'Kocom-Co.-Ltd' => 'Kocom Co., Ltd', +// 'Netac-Technology-Co.-Ltd' => 'Netac Technology Co., Ltd', +// 'HighSpeed-Surfing' => 'HighSpeed Surfing', +// 'Tamarack-Inc.' => 'Tamarack, Inc.', +// 'Datelink-Technology-Co.-Ltd' => 'Datelink Technology Co., Ltd', +// 'Ubicom-Inc.' => 'Ubicom, Inc.', +// 'BD-Consumer-Healthcare' => 'BD Consumer Healthcare', +// 'Novasonics' => 'Novasonics', +// 'Lifetime-Memory-Products' => 'Lifetime Memory Products', +// 'Full-Rise-Electronic-Co.-Ltd' => 'Full Rise Electronic Co., Ltd', +// 'NET-SYS' => 'NET&SYS', +// 'Sitecom-Europe-B.V.' => 'Sitecom Europe B.V.', +// 'Nippon-Systemware-Co.-Ltd' => 'Nippon Systemware Co., Ltd', +// 'Winbest-Technology-Co.-Ltd' => 'Winbest Technology Co., Ltd', +// 'Amigo-Technology-Inc.' => 'Amigo Technology Inc.', +// 'Gesytec' => 'Gesytec', +// 'VMware-Inc.' => 'VMware, Inc.', +// 'JMTek-LLC' => 'JMTek, LLC', +// 'Walex-Electronic-Ltd' => 'Walex Electronic, Ltd', +// 'Crewave' => 'Crewave', +// 'Pegasus-Technologies-Ltd.' => 'Pegasus Technologies Ltd.', +// 'Cowon-Systems-Inc.' => 'Cowon Systems, Inc.', +// 'Symbian-Ltd.' => 'Symbian Ltd.', +// 'VinChip-Systems-Inc.' => 'VinChip Systems, Inc.', +// 'J-Phone-East-Co.-Ltd' => 'J-Phone East Co., Ltd', +// 'HeartMath-LLC' => 'HeartMath LLC', +// 'Micro-Computer-Control-Corp.' => 'Micro Computer Control Corp.', +// '3Pea-Technologies-Inc.' => '3Pea Technologies, Inc.', +// 'TiePie-engineering' => 'TiePie engineering', +// 'Stratitec-Inc.' => 'Stratitec, Inc.', +// 'Neostar-Technology-Co.-Ltd' => 'Neostar Technology Co., Ltd', +// 'Mansella-Ltd' => 'Mansella, Ltd', +// 'Line6-Inc.' => 'Line6, Inc.', +// 'Julia-Corp.-Ltd' => 'Julia Corp., Ltd', +// 'Radica-Games-Ltd' => 'Radica Games, Ltd', +// 'Speed-Dragon-Multimedia-Ltd' => 'Speed Dragon Multimedia, Ltd', +// 'Active-Co.-Ltd' => 'Active Co., Ltd', +// 'Neltron-Industrial-Co.-Ltd' => 'Neltron Industrial Co., Ltd', +// 'Conwise-Technology-Co.-Ltd.' => 'Conwise Technology Co., Ltd.', +// 'Hawking-Technologies' => 'Hawking Technologies', +// 'Fossil-Inc.' => 'Fossil, Inc.', +// 'Megawin-Technology-Co.-Ltd' => 'Megawin Technology Co., Ltd', +// 'Logic3' => 'Logic3', +// 'Hsi-Chin-Electronics-Co.-Ltd' => 'Hsi-Chin Electronics Co., Ltd', +// 'TVS-Electronics-Ltd' => 'TVS Electronics, Ltd', +// 'Archos-Inc.' => 'Archos, Inc.', +// 'On-Tech-Industry-Co.-Ltd' => 'On-Tech Industry Co., Ltd', +// 'Gmate-Inc.' => 'Gmate, Inc.', +// 'Shin-An-Wire---Cable-Co.' => 'Shin An Wire & Cable Co.', +// 'MediaTek-Inc.' => 'MediaTek Inc.', +// 'GreenAsia-Inc.' => 'GreenAsia Inc.', +// 'WiebeTech-LLC' => 'WiebeTech, LLC', +// 'VTech-Engineering-Canada-Ltd' => 'VTech Engineering Canada, Ltd', +// 'Cs-Glory-Enterprise-Co.-Ltd' => 'Cs Glory Enterprise Co., Ltd', +// 'eM-Technics-Co.-Ltd' => 'eM Technics Co., Ltd', +// 'Future-Technology-Co.-Ltd' => 'Future Technology Co., Ltd', +// 'Aplux-Communications-Ltd' => 'Aplux Communications, Ltd', +// 'Fingerworks-Inc.' => 'Fingerworks, Inc.', +// 'Parallel-Dice-Co.-Ltd' => 'Parallel Dice Co., Ltd', +// 'TA-HSING-Industries-Ltd' => 'TA HSING Industries, Ltd', +// 'ADTEC-Corp.' => 'ADTEC Corp.', +// 'Streamzap-Inc.' => 'Streamzap, Inc.', +// 'Tamura-Corp.' => 'Tamura Corp.', +// 'Ours-Technology-Inc.' => 'Ours Technology, Inc.', +// 'Nihon-Computer-Co.-Ltd' => 'Nihon Computer Co., Ltd', +// 'MSL-Enterprises-Corp.' => 'MSL Enterprises Corp.', +// 'CenDyne-Inc.' => 'CenDyne, Inc.', +// 'Humax-Co.-Ltd' => 'Humax Co., Ltd', +// 'NovaTech' => 'NovaTech', +// 'WIS-Technologies-Inc.' => 'WIS Technologies, Inc.', +// 'Y-S-Electronic-Co.-Ltd' => 'Y-S Electronic Co., Ltd', +// 'Saint-Technology-Corp.' => 'Saint Technology Corp.', +// 'Endor-AG' => 'Endor AG', +// 'VWeb-Corp.' => 'VWeb Corp.', +// 'Abit-Computer-Corp.' => 'Abit Computer Corp.', +// 'Sweetray-Industrial-Ltd' => 'Sweetray Industrial, Ltd', +// 'Axell-Co.-Ltd' => 'Axell Co., Ltd', +// 'Ballracing-Developments-Ltd' => 'Ballracing Developments, Ltd', +// 'InnoVISION-Multimedia-Ltd' => 'InnoVISION Multimedia, Ltd', +// 'Theta-Link-Corp.' => 'Theta Link Corp.', +// 'Lite-On-IT-Corp.' => 'Lite-On IT Corp.', +// 'TaiSol-Electronics-Co.-Ltd' => 'TaiSol Electronics Co., Ltd', +// 'Phogenix-Imaging-LLC' => 'Phogenix Imaging, LLC', +// 'WinMaxGroup' => 'WinMaxGroup', +// 'Kyoto-Micro-Computer-Co.-Ltd' => 'Kyoto Micro Computer Co., Ltd', +// 'Wing-Tech-Enterprise-Co.-Ltd' => 'Wing-Tech Enterprise Co., Ltd', +// 'Fiberbyte' => 'Fiberbyte', +// 'Noriake-Itron-Corp.' => 'Noriake Itron Corp.', +// 'e-MDT-Co.-Ltd' => 'e-MDT Co., Ltd', +// 'Shima-Seiki-Mfg.-Ltd' => 'Shima Seiki Mfg., Ltd', +// 'Sarotech-Co.-Ltd' => 'Sarotech Co., Ltd', +// 'AMI-Semiconductor-Inc.' => 'AMI Semiconductor, Inc.', +// 'ComTrue-Technology-Corp.' => 'ComTrue Technology Corp.', +// 'Sunrich-Technology-Ltd' => 'Sunrich Technology, Ltd', +// 'D-WAV-Scientific-Co.-Ltd' => 'D-WAV Scientific Co., Ltd', +// 'Hitachi-Cable-Ltd' => 'Hitachi Cable, Ltd', +// 'Aichi-Micro-Intelligent-Corp.' => 'Aichi Micro Intelligent Corp.', +// 'I-O-Magic-Corp.' => 'I/O Magic Corp.', +// 'Lynn-Products-Inc.' => 'Lynn Products, Inc.', +// 'DSI-Datotech' => 'DSI Datotech', +// 'PointChips' => 'PointChips', +// 'Yield-Microelectronics-Corp.' => 'Yield Microelectronics Corp.', +// 'SM-Tech-Co.-Ltd-Tulip' => 'SM Tech Co., Ltd (Tulip)', +// 'Oasis-Semiconductor' => 'Oasis Semiconductor', +// 'Wem-Technology-Inc.' => 'Wem Technology, Inc.', +// 'CAS-Corp.' => 'CAS Corp.', +// 'Hori-Co.-Ltd' => 'Hori Co., Ltd', +// 'Energy-Full-Corp.' => 'Energy Full Corp.', +// 'LD-Didactic-GmbH' => 'LD Didactic GmbH', +// 'Mars-Engineering-Corp.' => 'Mars Engineering Corp.', +// 'Acetek-Technology-Co.-Ltd' => 'Acetek Technology Co., Ltd', +// 'Finger-Lakes-Instrumentation' => 'Finger Lakes Instrumentation', +// 'Oracom-Co.-Ltd' => 'Oracom Co., Ltd', +// 'Onset-Computer-Corp.' => 'Onset Computer Corp.', +// 'Funai-Electric-Co.-Ltd' => 'Funai Electric Co., Ltd', +// 'Iwill-Corp.' => 'Iwill Corp.', +// 'IOI-Technology-Corp.' => 'IOI Technology Corp.', +// 'Senior-Industries-Inc.' => 'Senior Industries, Inc.', +// 'Flex-P-Industries-Snd.-Bhd.' => 'Flex-P Industries, Snd., Bhd.', +// 'ViPower-Inc.' => 'ViPower, Inc.', +// 'Priva-Design-Services' => 'Priva Design Services', +// 'Jess-Technology-Co.-Ltd' => 'Jess Technology Co., Ltd', +// 'Chrysalis-Development' => 'Chrysalis Development', +// 'Kokuyo-Co.-Ltd' => 'Kokuyo Co., Ltd', +// 'Nien-Yi-Industrial-Corp.' => 'Nien-Yi Industrial Corp.', +// 'Airprime-Incorporated' => 'Airprime, Incorporated', +// 'RDC-Semiconductor-Co.-Ltd' => 'RDC Semiconductor Co., Ltd', +// 'Polhemus' => 'Polhemus', +// 'St.-John-Technology-Co.-Ltd' => 'St. John Technology Co., Ltd', +// 'WorldWide-Cable-Opto-Corp.' => 'WorldWide Cable Opto Corp.', +// 'Microtune-Inc.' => 'Microtune, Inc.', +// 'Freedom-Scientific' => 'Freedom Scientific', +// 'Wing-Key-Electrical-Co.-Ltd' => 'Wing Key Electrical Co., Ltd', +// 'AmbiCom-Inc.' => 'AmbiCom, Inc.', +// 'Prairiecomm-Inc.' => 'Prairiecomm, Inc.', +// 'NewAge-International-LLC' => 'NewAge International, LLC', +// 'Key-Technology-Corp.' => 'Key Technology Corp.', +// 'NTK-Ltd' => 'NTK, Ltd', +// 'Varian-Inc.' => 'Varian, Inc.', +// 'Acrox-Technologies-Co.-Ltd' => 'Acrox Technologies Co., Ltd', +// 'LeapFrog-Enterprises' => 'LeapFrog Enterprises', +// 'Kobe-Steel-Ltd' => 'Kobe Steel, Ltd', +// 'Dionex-Corp.' => 'Dionex Corp.', +// 'Vibren-Technologies-Inc.' => 'Vibren Technologies, Inc.', +// 'INTELLIGENT-SYSTEMS' => 'INTELLIGENT SYSTEMS', +// 'DFI' => 'DFI', +// 'DQ-Technology-Inc.' => 'DQ Technology, Inc.', +// 'NetBotz-Inc.' => 'NetBotz, Inc.', +// 'Fluke-Corp.' => 'Fluke Corp.', +// 'VTech-Holdings-Ltd' => 'VTech Holdings, Ltd', +// 'Yazaki-Corp.' => 'Yazaki Corp.', +// 'Uniwill-Computer-Corp.' => 'Uniwill Computer Corp.', +// 'Kingnet-Technology-Co.-Ltd' => 'Kingnet Technology Co., Ltd', +// 'Soma-Networks' => 'Soma Networks', +// 'CviLux-Corp.' => 'CviLux Corp.', +// 'CyberBank-Corp.' => 'CyberBank Corp.', +// 'Hyun-Won-Inc.' => 'Hyun Won, Inc.', +// 'Lucent-Technologies' => 'Lucent Technologies', +// 'Starconn-Electronic-Co.-Ltd' => 'Starconn Electronic Co., Ltd', +// 'ATL-Technology' => 'ATL Technology', +// 'Sotec-Co.-Ltd' => 'Sotec Co., Ltd', +// 'Epox-Computer-Co.-Ltd' => 'Epox Computer Co., Ltd', +// 'Logic-Controls-Inc.' => 'Logic Controls, Inc.', +// 'Winpoint-Electronic-Corp.' => 'Winpoint Electronic Corp.', +// 'Inclose-Design-Inc.' => 'Inclose Design, Inc.', +// 'Wistron-Corp.' => 'Wistron Corp.', +// 'AACom-Corp.' => 'AACom Corp.', +// 'Bitwise-Systems-Inc.' => 'Bitwise Systems, Inc.', +// 'Mitac-Internatinal-Corp.' => 'Mitac Internatinal Corp.', +// 'Delcom-Engineering' => 'Delcom Engineering', +// 'Dataplus-Supplies-Inc.' => 'Dataplus Supplies, Inc.', +// 'Research-In-Motion-Ltd.' => 'Research In Motion, Ltd.', +// 'Dynastream-Innovations-Inc.' => 'Dynastream Innovations, Inc.', +// 'Tulip-Computers-B.V.' => 'Tulip Computers B.V.', +// 'Giant-Electronics-Ltd.' => 'Giant Electronics Ltd.', +// 'Tenovis-GmbH---Co.-KG' => 'Tenovis GmbH & Co., KG', +// 'Micro-Plus' => 'Micro Plus', +// 'IN-Tech-Electronics-Ltd' => 'IN-Tech Electronics, Ltd', +// 'Greenconn-U.S.A.-Inc.' => 'Greenconn (U.S.A.), Inc.', +// 'DVICO' => 'DVICO', +// 'United-Computer-Accessories' => 'United Computer Accessories', +// 'CRS-Electronic-Co.-Ltd' => 'CRS Electronic Co., Ltd', +// 'UMC-Electronics-Co.-Ltd' => 'UMC Electronics Co., Ltd', +// 'Access-Co.-Ltd' => 'Access Co., Ltd', +// 'Xsido-Corp.' => 'Xsido Corp.', +// 'MJ-Research-Inc.' => 'MJ Research, Inc.', +// 'Core-Valley-Co.-Ltd' => 'Core Valley Co., Ltd', +// 'Aopen-Inc.' => 'Aopen, Inc.', +// 'Speed-Tech-Corp.' => 'Speed Tech Corp.', +// 'Sigma-Corp.' => 'Sigma Corp.', +// 'LG-Electronics-Inc.' => 'LG Electronics, Inc.', +// 'Apacer-Technology-Inc.' => 'Apacer Technology, Inc.', +// 'iRiver-Ltd.' => 'iRiver, Ltd.', +// 'Emuzed-Inc.' => 'Emuzed, Inc.', +// 'AV-Chaseway-Ltd' => 'AV Chaseway, Ltd', +// 'Chou-Chin-Industrial-Co.-Ltd' => 'Chou Chin Industrial Co., Ltd', +// 'Netopia-Inc.' => 'Netopia, Inc.', +// 'Fukuda-Denshi-Co.-Ltd' => 'Fukuda Denshi Co., Ltd', +// 'Mobile-Media-Tech.' => 'Mobile Media Tech.', +// 'Densitron-Technologies-PLC' => 'Densitron Technologies PLC', +// 'Softronics-Pty.-Ltd' => 'Softronics Pty., Ltd', +// 'Labtec' => 'Labtec', +// 'Shinko-Shoji-Co.-Ltd' => 'Shinko Shoji Co., Ltd', +// 'Hyper-Paltek' => 'Hyper-Paltek', +// 'Newly-Corp.' => 'Newly Corp.', +// 'Time-Domain' => 'Time Domain', +// 'Inovys-Corp.' => 'Inovys Corp.', +// 'Atlantic-Coast-Telesys' => 'Atlantic Coast Telesys', +// 'Ramos-Technology-Co.-Ltd' => 'Ramos Technology Co., Ltd', +// 'Infotronic-America-Inc.' => 'Infotronic America, Inc.', +// 'Etoms-Electronics-Corp.' => 'Etoms Electronics Corp.', +// 'Winic-Corp.' => 'Winic Corp.', +// 'Comax-Technology-Inc.' => 'Comax Technology, Inc.', +// 'C-One-Technology-Corp.' => 'C-One Technology Corp.', +// 'Nucam-Corp.' => 'Nucam Corp.', +// 'Ideazon-Inc.' => 'Ideazon, Inc.', +// 'devolo-AG' => 'devolo AG', +// 'Stanton' => 'Stanton', +// 'iCreate-Technologies-Corp.' => 'iCreate Technologies Corp.', +// 'Chu-Yuen-Enterprise-Co.-Ltd' => 'Chu Yuen Enterprise Co., Ltd', +// 'Targus-Group-International' => 'Targus Group International', +// 'Mylex---Buslogic' => 'Mylex / Buslogic', +// 'AMCO-TEC-International-Inc.' => 'AMCO TEC International, Inc.', +// 'Newport-Corporation' => 'Newport Corporation', +// 'WB-Electronics' => 'WB Electronics', +// 'Yubico.com' => 'Yubico.com', +// 'Immanuel-Electronics-Co.-Ltd' => 'Immanuel Electronics Co., Ltd', +// 'BMS-International-Beheer-N.V.' => 'BMS International Beheer N.V.', +// 'Hsin-Chen-Ent-Co.-Ltd' => 'Hsin Chen Ent Co., Ltd', +// 'ON-Semiconductor' => 'ON Semiconductor', +// 'Giesecke---Devrient-GmbH' => 'Giesecke & Devrient GmbH', +// 'Delkin-Devices-Inc.' => 'Delkin Devices, Inc.', +// 'Easthome-Industrial-Co.-Ltd' => 'Easthome Industrial Co., Ltd', +// 'CCYU-Technology' => 'CCYU Technology', +// 'Loyal-Legend-Ltd' => 'Loyal Legend, Ltd', +// 'Curitel-Communications-Inc.' => 'Curitel Communications, Inc.', +// 'San-Chieh-Manufacturing-Ltd' => 'San Chieh Manufacturing, Ltd', +// 'ConectL' => 'ConectL', +// 'Money-Controls' => 'Money Controls', +// 'GCT-Semiconductor-Inc.' => 'GCT Semiconductor, Inc.', +// 'Gateway-Inc.' => 'Gateway, Inc.', +// 'Arlec-Australia-Ltd' => 'Arlec Australia, Ltd', +// 'Midoriya-Electric-Co.-Ltd' => 'Midoriya Electric Co., Ltd', +// 'KidzMouse-Inc.' => 'KidzMouse, Inc.', +// 'Shin-Etsukaken-Co.-Ltd' => 'Shin-Etsukaken Co., Ltd', +// 'Canon-Electronics-Inc.' => 'Canon Electronics, Inc.', +// 'Pantech-Co.-Ltd' => 'Pantech Co., Ltd', +// 'Chloride-Power-Protection' => 'Chloride Power Protection', +// 'Grand-tek-Technology-Co.-Ltd' => 'Grand-tek Technology Co., Ltd', +// 'Robert-Bosch-GmbH' => 'Robert Bosch GmbH', +// 'Lotes-Co.-Ltd.' => 'Lotes Co., Ltd.', +// 'Surface-Optics-Corp.' => 'Surface Optics Corp.', +// 'DATASOFT-Systems-GmbH' => 'DATASOFT Systems GmbH', +// 'eSOL-Co.-Ltd' => 'eSOL Co., Ltd', +// 'Hirotech-Inc.' => 'Hirotech, Inc.', +// 'Mitsubishi-Materials-Corp.' => 'Mitsubishi Materials Corp.', +// 'SK-Teletech-Co.-Ltd' => 'SK Teletech Co., Ltd', +// 'Cables-To-Go' => 'Cables To Go', +// 'USI-Co.-Ltd' => 'USI Co., Ltd', +// 'Honeywell-Inc.' => 'Honeywell, Inc.', +// 'Princeton-Technology-Corp.' => 'Princeton Technology Corp.', +// 'Liebert-Corp.' => 'Liebert Corp.', +// 'Comodo-PLX-' => 'Comodo (PLX?)', +// 'DiBcom' => 'DiBcom', +// 'TM-Technology-Inc.' => 'TM Technology, Inc.', +// 'Dinging-Technology-Co.-Ltd' => 'Dinging Technology Co., Ltd', +// 'TMT-Technology-Inc.' => 'TMT Technology, Inc.', +// 'SmartHome' => 'SmartHome', +// 'Sanei-Electric-Inc.' => 'Sanei Electric, Inc.', +// 'Intec-Inc.' => 'Intec, Inc.', +// 'Eratech' => 'Eratech', +// 'GBM-Connector-Co.-Ltd' => 'GBM Connector Co., Ltd', +// 'Kycon-Inc.' => 'Kycon, Inc.', +// 'Silicon-Labs' => 'Silicon Labs', +// 'Velleman-Components-Inc.' => 'Velleman Components, Inc.', +// 'Hottinger-Baldwin-Measurement' => 'Hottinger Baldwin Measurement', +// 'Man-Boon-Manufactory-Ltd' => 'Man Boon Manufactory, Ltd', +// 'Uni-Class-Technology-Co.-Ltd' => 'Uni Class Technology Co., Ltd', +// 'Authenex-Inc.' => 'Authenex, Inc.', +// 'In-Win-Development-Inc.' => 'In-Win Development, Inc.', +// 'Post-Op-Video-Inc.' => 'Post-Op Video, Inc.', +// 'CablePlus-Ltd' => 'CablePlus, Ltd', +// 'Nada-Electronics-Ltd' => 'Nada Electronics, Ltd', +// 'Vast-Technologies-Inc.' => 'Vast Technologies, Inc.', +// 'Nexio-Co.-Ltd' => 'Nexio Co., Ltd', +// 'Importek' => 'Importek', +// 'Turtle-Beach' => 'Turtle Beach', +// 'Pictos-Technologies-Inc.' => 'Pictos Technologies, Inc.', +// 'Anubis-Electronics-Ltd' => 'Anubis Electronics, Ltd', +// 'VirTouch-Ltd' => 'VirTouch, Ltd', +// 'EasyPass-Industrial-Co.-Ltd' => 'EasyPass Industrial Co., Ltd', +// 'Brightcom-Technologies-Ltd' => 'Brightcom Technologies, Ltd', +// 'Moxa-Technologies-Co.-Ltd.' => 'Moxa Technologies Co., Ltd.', +// 'Pandora-International-Ltd.' => 'Pandora International Ltd.', +// 'YM-ELECTRIC-CO.-Ltd' => 'YM ELECTRIC CO., Ltd', +// 'Medion-AG' => 'Medion AG', +// 'VSO-Electric-Co.-Ltd' => 'VSO Electric Co., Ltd', +// 'RedRat' => 'RedRat', +// 'Cellon-International-Inc.' => 'Cellon International, Inc.', +// 'Tenx-Technology-Inc.' => 'Tenx Technology, Inc.', +// 'CTS-Electronincs' => 'CTS Electronincs', +// 'Arin-Tech-Co.-Ltd' => 'Arin Tech Co., Ltd', +// 'Mapower-Electronics-Co.-Ltd' => 'Mapower Electronics Co., Ltd', +// 'V-One-Multimedia-Pte.-Ltd' => 'V One Multimedia, Pte., Ltd', +// 'CyberScan-Technologies-Inc.' => 'CyberScan Technologies, Inc.', +// 'Japan-Radio-Company' => 'Japan Radio Company', +// 'Sphairon-Access-Systems-GmbH' => 'Sphairon Access Systems GmbH', +// 'Wavecom' => 'Wavecom', +// 'Salix-Technology-Co.-Ltd.' => 'Salix Technology Co., Ltd.', +// 'Secugen-Corp.' => 'Secugen Corp.', +// 'DeLorme-Publishing-Inc.' => 'DeLorme Publishing, Inc.', +// 'Telson-Electronics-Co.-Ltd' => 'Telson Electronics Co., Ltd', +// 'Salient-Systems-Corp.' => 'Salient Systems Corp.', +// 'BizConn-International-Corp.' => 'BizConn International Corp.', +// 'Gigastorage-Corp.' => 'Gigastorage Corp.', +// 'Silicon-10-Technology-Corp.' => 'Silicon 10 Technology Corp.', +// 'Shengyih-Steel-Mold-Co.-Ltd' => 'Shengyih Steel Mold Co., Ltd', +// 'Santa-Electronic-Inc.' => 'Santa Electronic, Inc.', +// 'JNC-Inc.' => 'JNC, Inc.', +// 'Venture-Corp.-Ltd' => 'Venture Corp., Ltd', +// 'Kyocera-Elco-Corp.' => 'Kyocera Elco Corp.', +// 'Bloomberg-L.P.' => 'Bloomberg L.P.', +// 'You-Yang-Technology-Co.-Ltd' => 'You Yang Technology Co., Ltd', +// 'Tripace' => 'Tripace', +// 'Yankee-Robotics-LLC' => 'Yankee Robotics, LLC', +// 'Technoimagia-Co.-Ltd' => 'Technoimagia Co., Ltd', +// 'StarShine-Technology-Corp.' => 'StarShine Technology Corp.', +// 'Sierra-Wireless-Inc.' => 'Sierra Wireless, Inc.', +// 'ZHAN-QI-Technology-Co.-Ltd' => 'ZHAN QI Technology Co., Ltd', +// 'ruwido-austria-GmbH' => 'ruwido austria GmbH', +// 'Chipcon-AS' => 'Chipcon AS', +// 'Technovas-Co.-Ltd' => 'Technovas Co., Ltd', +// 'GlobalMedia-Group-LLC' => 'GlobalMedia Group, LLC', +// 'Exito-Electronics-Co.-Ltd' => 'Exito Electronics Co., Ltd', +// 'ATECH-FLASH-TECHNOLOGY' => 'ATECH FLASH TECHNOLOGY', +// 'Inmax' => 'Inmax', +// 'Topfield-Co.-Ltd.' => 'Topfield Co., Ltd.', +// 'K.I.-Technology-Co.-Ltd.' => 'K.I. Technology Co. Ltd.', +// 'Siemens-AG' => 'Siemens AG', +// 'Prolific' => 'Prolific', +// 'Alcatel--' => 'Alcatel (?)', +// 'InterBiometrics' => 'InterBiometrics', +// 'Hudson-Soft-Co.-Ltd' => 'Hudson Soft Co., Ltd', +// 'Magellan' => 'Magellan', +// 'DigiTech' => 'DigiTech', +// 'Jungsoft-Co.-Ltd' => 'Jungsoft Co., Ltd', +// 'Denver-Electronics' => 'Denver Electronics', +// 'Unknown' => 'Unknown', +// 'Novation-EMS' => 'Novation EMS', +// 'Belkin' => 'Belkin', +// 'AirVast' => 'AirVast', +// 'Nyko-Honey-Bee' => 'Nyko (Honey Bee)', +// 'Apogee-Inc.' => 'Apogee Inc.', +// 'A-DATA-Technology-Co.-Ltd.' => 'A-DATA Technology Co., Ltd.', +// 'Standard-Microsystems-Corp.' => 'Standard Microsystems Corp.', +// 'Covidien-Energy-based-Devices' => 'Covidien Energy-based Devices', +// 'Pirelli-Broadband-Solutions' => 'Pirelli Broadband Solutions', +// 'Logic3---SpectraVideo-plc' => 'Logic3 / SpectraVideo plc', +// 'Aristocrat-Technologies' => 'Aristocrat Technologies', +// 'Bel-Stewart' => 'Bel Stewart', +// 'Strobe-Data-Inc.' => 'Strobe Data, Inc.', +// 'TwinMOS' => 'TwinMOS', +// 'Ensoniq' => 'Ensoniq', +// 'zebris-Medical-GmbH' => 'zebris Medical GmbH', +// 'Marvell-Semiconductor-Inc.' => 'Marvell Semiconductor, Inc.', +// 'Innomedia' => 'Innomedia', +// 'Belkin-Components-hex' => 'Belkin Components [hex]', +// 'RISO-KAGAKU-CORP.' => 'RISO KAGAKU CORP.', +// 'CyberTAN-Technology' => 'CyberTAN Technology', +// 'Trendchip-Technologies-Corp.' => 'Trendchip Technologies Corp.', +// 'Autocue-Group-Ltd' => 'Autocue Group Ltd', +// 'Huawei-Technologies-Co.-Ltd.' => 'Huawei Technologies Co., Ltd.', +// 'EMS-Dr.-Thomas-Wuensche' => 'EMS Dr. Thomas Wuensche', +// 'BETTER-WIRE-FACTORY-CO.-LTD.' => 'BETTER WIRE FACTORY CO., LTD.', +// 'Waldorf-Music-GmbH' => 'Waldorf Music GmbH', +// 'Tapwave-Inc.' => 'Tapwave, Inc.', +// 'Memorex-Products-Inc.' => 'Memorex Products, Inc.', +// 'AIN-Comm.-Technology-Co.-Ltd' => 'AIN Comm. Technology Co., Ltd', +// 'Fascinating-Electronics-Inc.' => 'Fascinating Electronics, Inc.', +// 'Transcend-Information-Inc.' => 'Transcend Information, Inc.', +// 'Shuttle-Inc.' => 'Shuttle, Inc.', +// 'Roper' => 'Roper', +// 'ICS-Electronics' => 'ICS Electronics', +// 'Natural-Point' => 'Natural Point', +// 'Envara-Inc.' => 'Envara Inc.', +// 'Konica-Minolta' => 'Konica Minolta', +// 'Mobility' => 'Mobility', +// 'Sino-Lite-Technology-Corp.' => 'Sino Lite Technology Corp.', +// 'Moravian-Instruments' => 'Moravian Instruments', +// 'PanJit-International-Inc.' => 'PanJit International Inc.', +// 'P-E-Microcomputer-Systems' => 'P&E Microcomputer Systems', +// 'SEGGER' => 'SEGGER', +// 'STEC' => 'STEC', +// 'Swissbit' => 'Swissbit', +// 'CNet-Technology-Inc.' => 'CNet Technology Inc.', +// 'Vimtron-Electronics-Co.-Ltd.' => 'Vimtron Electronics Co., Ltd.', +// 'SCAPS-GmbH' => 'SCAPS GmbH', +// 'Netgear-Inc' => 'Netgear, Inc', +// 'Validity-Sensors-Inc.' => 'Validity Sensors, Inc.', +// 'Jungo-LTD' => 'Jungo LTD', +// 'TOMTOM-B.V.' => 'TOMTOM B.V.', +// 'IdealTEK-Inc.' => 'IdealTEK, Inc.', +// 'Sennheiser-Communications' => 'Sennheiser Communications', +// 'BEHRINGER-International-GmbH' => 'BEHRINGER International GmbH', +// 'Q-tec' => 'Q-tec', +// 'Baltech' => 'Baltech', +// 'PerkinElmer-Optoelectronics' => 'PerkinElmer Optoelectronics', +// 'Linksys' => 'Linksys', +// 'Alesis' => 'Alesis', +// 'Nippon-Dics-Co.-Ltd.' => 'Nippon Dics Co., Ltd.', +// 'Unknown' => 'Unknown', +// 'Ricoh-Printing-Systems-Ltd.' => 'Ricoh Printing Systems, Ltd.', +// 'Wisair-Ltd.' => 'Wisair Ltd.', +// 'Techsan-Electronics-Co.-Ltd.' => 'Techsan Electronics Co., Ltd.', +// 'Shark-Multimedia' => 'Shark Multimedia', +// 'IMC-Networks' => 'IMC Networks', +// 'ALEREON-INC.' => 'ALEREON, INC.', +// 'i.Tech-Dynamic-Limited' => 'i.Tech Dynamic Limited', +// 'Rane' => 'Rane', +// 'TechnoScope-Co.-Ltd.' => 'TechnoScope Co., Ltd.', +// 'Zydacron' => 'Zydacron', +// 'Initio-Corporation' => 'Initio Corporation', +// 'Axxion-Group-Corp.' => 'Axxion Group Corp.', +// 'Bowe-Bell---Howell' => 'Bowe Bell & Howell', +// 'Sitronix' => 'Sitronix', +// 'Telechips-Inc.' => 'Telechips, Inc.', +// 'Novatel-Wireless' => 'Novatel Wireless', +// 'ABILITY-ENTERPRISE-CO.-LTD.' => 'ABILITY ENTERPRISE CO., LTD.', +// 'Thales-E-Transactions' => 'Thales E-Transactions', +// 'Arbiter-Systems-Inc.' => 'Arbiter Systems, Inc.', +// 'RedOctane' => 'RedOctane', +// 'Pertech-Resources-Inc.' => 'Pertech Resources, Inc.', +// 'Wistron-NeWeb' => 'Wistron NeWeb', +// 'Denali-Software-Inc.' => 'Denali Software, Inc.', +// 'Altek-Corporation' => 'Altek Corporation', +// 'Digilent' => 'Digilent', +// 'Radio-Shack' => 'Radio Shack', +// 'Trust' => 'Trust', +// 'Tatung-Co.' => 'Tatung Co.', +// 'Staccato-Communications' => 'Staccato Communications', +// 'Micro-Star-International' => 'Micro Star International', +// 'Huawei-3Com' => 'Huawei-3Com', +// 'Upek' => 'Upek', +// 'Hama-GmbH---Co.-KG' => 'Hama GmbH & Co., KG', +// 'Vaillant' => 'Vaillant', +// 'Elsa-AG-hex' => 'Elsa AG [hex]', +// 'Silicom' => 'Silicom', +// 'DSP-Group-Ltd.' => 'DSP Group, Ltd.', +// 'EVATRONIX-SA' => 'EVATRONIX SA', +// 'Ralink-Technology-Corp.' => 'Ralink Technology, Corp.', +// 'Panstrong-Company-Ltd.' => 'Panstrong Company Ltd.', +// 'Microtek-International-Inc.' => 'Microtek International Inc.', +// 'Imagination-Technologies' => 'Imagination Technologies', +// 'WideView-Technology-Inc.' => 'WideView Technology Inc.', +// 'CTK-Corporation' => 'CTK Corporation', +// 'Printronix-Inc.' => 'Printronix Inc.', +// 'ATP-Electronics-Inc.' => 'ATP Electronics Inc.', +// 'StarTech.com-Ltd.' => 'StarTech.com Ltd.', +// 'Ralink-Technology-Corp.' => 'Ralink Technology, Corp.', +// 'Rockwell-Automation-Inc.' => 'Rockwell Automation, Inc.', +// 'Gemlight-Computer-Ltd' => 'Gemlight Computer, Ltd', +// 'Super-Top' => 'Super Top', +// 'JAMER-INDUSTRIES-CO.-LTD.' => 'JAMER INDUSTRIES CO., LTD.', +// 'Raritan-Computer-Inc.' => 'Raritan Computer, Inc.', +// 'Dialogue-Technology-Corp.' => 'Dialogue Technology Corp.', +// 'Planex-Communications' => 'Planex Communications', +// 'Shure-Inc.' => 'Shure Inc.', +// 'TechniSat-Digital-GmbH' => 'TechniSat Digital GmbH', +// 'Ellisys' => 'Ellisys', +// 'Pine-Tum-Enterprise-Co.-Ltd.' => 'Pine-Tum Enterprise Co., Ltd.', +// 'medMobile' => 'medMobile', +// 'Actel' => 'Actel', +// 'CompUSA' => 'CompUSA', +// 'Cheshire-Engineering-Corp.' => 'Cheshire Engineering Corp.', +// 'Bitwire-Corp.' => 'Bitwire Corp.', +// 'ENE-Technology-Inc' => 'ENE Technology Inc', +// 'Silicon-Portals' => 'Silicon Portals', +// 'UBIQUAM-Co.-Ltd.' => 'UBIQUAM Co., Ltd.', +// 'LG-HLDS' => 'LG (HLDS)', +// 'Razer-USA-Ltd' => 'Razer USA, Ltd', +// 'U-Blox-AG' => 'U-Blox AG', +// 'Celectronic-GmbH' => 'Celectronic GmbH', +// 'PNY' => 'PNY', +// 'ConnectCounty-Holdings-Berhad' => 'ConnectCounty Holdings Berhad', +// 'Prolink-Microsystems-Corp.' => 'Prolink Microsystems Corp.', +// 'OQO' => 'OQO', +// 'Sunf-Pu-Technology-Co.-Ltd' => 'Sunf Pu Technology Co., Ltd', +// 'Quantum-Corporation' => 'Quantum Corporation', +// 'ALLTOP-TECHNOLOGY-CO.-LTD.' => 'ALLTOP TECHNOLOGY CO., LTD.', +// 'Ketron-SRL' => 'Ketron SRL', +// 'TRENDnet' => 'TRENDnet', +// 'Fiberline' => 'Fiberline', +// 'SMA-Technologie-AG' => 'SMA Technologie AG', +// 'Oakley-Inc.' => 'Oakley Inc.', +// 'Freescale-Semiconductor-Inc.' => 'Freescale Semiconductor, Inc.', +// 'Afatech-Technologies-Inc.' => 'Afatech Technologies, Inc.', +// 'Teams-Power-Limited' => 'Teams Power Limited', +// 'Gemtek' => 'Gemtek', +// 'VMware-Inc.' => 'VMware Inc.', +// 'Olimex-Ltd.' => 'Olimex Ltd.', +// 'XL-Imaging' => 'XL Imaging', +// 'SoundGraph-Inc.' => 'SoundGraph Inc.', +// 'Laboratoires-MXM' => 'Laboratoires MXM', +// 'KTF-Technologies' => 'KTF Technologies', +// 'D-Box-Technologies' => 'D-Box Technologies', +// 'Textech-International-Ltd.' => 'Textech International Ltd.', +// 'Coulomb-Electronics-Ltd.' => 'Coulomb Electronics Ltd.', +// 'Trust-International-B.V.' => 'Trust International B.V.', +// 'Hynix-Semiconductor-Inc.' => 'Hynix Semiconductor Inc.', +// 'Seong-Ji-Industrial-Co.-Ltd.' => 'Seong Ji Industrial Co., Ltd.', +// 'RSA' => 'RSA', +// 'SohoWare' => 'SohoWare', +// 'Pacific-Digital-Corp.' => 'Pacific Digital Corp.', +// 'Belcarra-Technologies-Corp.' => 'Belcarra Technologies Corp.', +// 'HanfTek' => 'HanfTek', +// 'Tascam' => 'Tascam', +// 'Umax' => 'Umax', +// 'Inside-Out-Networks-hex' => 'Inside Out Networks [hex]', +// 'VIA-Technologies-Inc.' => 'VIA Technologies, Inc.', +// 'Amoi-Electronics' => 'Amoi Electronics', +// 'Wionics-Research' => 'Wionics Research', +// 'Stonestreet-One-Inc.' => 'Stonestreet One, Inc.', +// 'Airgo-Networks-Inc.' => 'Airgo Networks Inc.', +// 'WiQuest-Communications-Inc.' => 'WiQuest Communications, Inc.', +// '2Wire-Inc.' => '2Wire, Inc.', +// 'Good-Way-Technology' => 'Good Way Technology', +// 'Cross-Match-Technologies-GmbH' => 'Cross Match Technologies GmbH', +// 'SofTec-Microsystems' => 'SofTec Microsystems', +// 'ChipX' => 'ChipX', +// 'Matrix-Vision-GmbH' => 'Matrix Vision GmbH', +// 'Frontier-Design-Group' => 'Frontier Design Group', +// 'Creatix-Polymedia-GmbH' => 'Creatix Polymedia GmbH', +// 'PiKRON-Ltd.-hex' => 'PiKRON Ltd. [hex]', +// 'Total-Phase' => 'Total Phase', +// 'Golden-Bridge-Electech-Inc.' => 'Golden Bridge Electech Inc.', +// 'Prevo-Technologies-Inc.' => 'Prevo Technologies, Inc.', +// 'Godspeed-Computer-Corp.' => 'Godspeed Computer Corp.', +// 'Delock' => 'Delock', +// 'ZOOM-Corporation' => 'ZOOM Corporation', +// 'Kingmax-Digital-Inc.' => 'Kingmax Digital Inc.', +// 'Saab-AB' => 'Saab AB', +// 'Atheros-Communications' => 'Atheros Communications', +// 'Askey-Computer-Corp.-hex' => 'Askey Computer Corp. [hex]', +// 'VTec-Test-Inc.' => 'VTec Test, Inc.', +// 'Unigraf' => 'Unigraf', +// 'Global-Sun-Technology' => 'Global Sun Technology', +// 'iStation' => 'iStation', +// 'Persentec-Inc.' => 'Persentec, Inc.', +// 'VOTI' => 'VOTI', +// 'Wireless-Cables-Inc.' => 'Wireless Cables, Inc.', +// 'silex-technology-Inc.' => 'silex technology, Inc.', +// 'GrauTec' => 'GrauTec', +// 'AnyDATA-Corporation' => 'AnyDATA Corporation', +// 'JABLOCOM-s.r.o.' => 'JABLOCOM s.r.o.', +// 'CMOTECH-Co.-Ltd.' => 'CMOTECH Co., Ltd.', +// 'Wiener-Plein---Baus' => 'Wiener, Plein & Baus', +// 'GN-ReSound-A-S' => 'GN ReSound A/S', +// 'Futurelogic-Inc.' => 'Futurelogic Inc.', +// 'BlueView-Technologies-Inc.' => 'BlueView Technologies, Inc.', +// 'ARTIMI' => 'ARTIMI', +// 'Swissonic' => 'Swissonic', +// 'Avnera' => 'Avnera', +// 'Vitesse-Semiconductor' => 'Vitesse Semiconductor', +// 'Axesstel-Inc.' => 'Axesstel, Inc.', +// 'Waltop-International-Corp.' => 'Waltop International Corp.', +// 'Cellink-Technology-Co.-Ltd' => 'Cellink Technology Co., Ltd', +// 'Linksys' => 'Linksys', +// 'Senao' => 'Senao', +// 'General-Atomics' => 'General Atomics', +// 'ASMedia-Technology-Inc.' => 'ASMedia Technology Inc.', +// 'Syntek' => 'Syntek', +// 'GERTEC-Telecomunicacoes-Ltda.' => 'GERTEC Telecomunicacoes Ltda.', +// 'LucidPort-Technology-Inc.' => 'LucidPort Technology, Inc.', +// 'System-Level-Solutions-Inc.' => 'System Level Solutions, Inc.', +// 'Arowana' => 'Arowana', +// 'Sweex' => 'Sweex', +// 'Multiple-Vendors' => 'Multiple Vendors', +// 'TopSeed-Technology-Corp.' => 'TopSeed Technology Corp.', +// 'ATI-AIB' => 'ATI AIB', +// 'Printrex-Inc.' => 'Printrex, Inc.', +// 'JALCO-CO.-LTD.' => 'JALCO CO., LTD.', +// 'Belkin-Components' => 'Belkin Components', +// 'Samson-Technologies-Corp.' => 'Samson Technologies Corp.', +// 'Concept2' => 'Concept2', +// 'MICOMSOFT-CO.-LTD.' => 'MICOMSOFT CO., LTD.', +// 'Grey-Innovation' => 'Grey Innovation', +// 'Singim-International-Corp.' => 'Singim International Corp.', +// 'Native-Instruments' => 'Native Instruments', +// 'Sanford-L.P.' => 'Sanford L.P.', +// 'Korea-Techtron-Co.-Ltd.' => 'Korea Techtron Co., Ltd.', +// 'Newnham-Research' => 'Newnham Research', +// 'Cornice-Inc.' => 'Cornice, Inc.', +// 'Lenovo' => 'Lenovo', +// 'K.K.-Rocky' => 'K.K. Rocky', +// 'Unicomp-Inc' => 'Unicomp, Inc', +// 'Advantech' => 'Advantech', +// 'Twinhan' => 'Twinhan', +// 'Gwo-Jinn-Industries-Co.-Ltd.' => 'Gwo Jinn Industries Co., Ltd.', +// 'VIVOphone' => 'VIVOphone', +// 'Vaisala' => 'Vaisala', +// 'ASRock-Incorporation' => 'ASRock Incorporation', +// 'GYROCOM-C-C-Co.-LTD' => 'GYROCOM C&C Co., LTD', +// 'Memory-Devices-Ltd.' => 'Memory Devices Ltd.', +// 'Compro' => 'Compro', +// 'Teridian-Semiconductor-Corp.' => 'Teridian Semiconductor Corp.', +// 'Nexio-Co.-Ltd' => 'Nexio Co., Ltd', +// 'Aveo-Technology-Corp.' => 'Aveo Technology Corp.', +// 'Alienware-Corporation' => 'Alienware Corporation', +// 'Siano-Mobile-Silicon' => 'Siano Mobile Silicon', +// 'Vast-Technologies-Inc.' => 'Vast Technologies, Inc.', +// 'Topseed' => 'Topseed', +// 'Evertop-Wire-Cable-Co.' => 'Evertop Wire Cable Co.', +// 'Verbatim-Ltd' => 'Verbatim, Ltd', +// 'Petalynx' => 'Petalynx', +// 'e3C-Technologies' => 'e3C Technologies', +// 'Mikkon-Technology-Limited' => 'Mikkon Technology Limited', +// 'Zotek-Electronic-Co.-Ltd.' => 'Zotek Electronic Co., Ltd.', +// 'AMIT-Technology-Inc.' => 'AMIT Technology, Inc.', +// 'Ecamm' => 'Ecamm', +// 'Google-Inc.' => 'Google Inc.', +// 'Kaba' => 'Kaba', +// 'Planon-System-Solutions-Inc.' => 'Planon System Solutions Inc.', +// 'Qcom' => 'Qcom', +// 'Matrox-Graphics-Inc.' => 'Matrox Graphics, Inc.', +// 'Arkmicro-Technologies-Inc.' => 'Arkmicro Technologies Inc.', +// 'FineArch-Inc.' => 'FineArch Inc.', +// 'GEMBIRD' => 'GEMBIRD', +// 'Motorola-GSG' => 'Motorola GSG', +// 'Alco-Digital-Devices-Limited' => 'Alco Digital Devices Limited', +// 'Nordic-Semiconductor-ASA' => 'Nordic Semiconductor ASA', +// 'NextWindow' => 'NextWindow', +// 'Avago-Technologies-Pte.' => 'Avago Technologies, Pte.', +// 'Dream-Link' => 'Dream Link', +// 'Sensoray-Co.-Inc.' => 'Sensoray Co., Inc.', +// 'Lab126' => 'Lab126', +// 'Hyperstone-AG' => 'Hyperstone AG', +// 'Ironkey-Inc.' => 'Ironkey Inc.', +// 'Radiient-Technologies' => 'Radiient Technologies', +// 'Itron-Technology-iONE' => 'Itron Technology iONE', +// 'Wispro-Technology-Inc.' => 'Wispro Technology Inc.', +// 'Dane-Elec-Corp.-USA' => 'Dane-Elec Corp. USA', +// 'T-Logic' => 'T-Logic', +// 'Nuconn-Technology-Corp.' => 'Nuconn Technology Corp.', +// 'Beceem-Communications-Inc.' => 'Beceem Communications Inc.', +// 'Trillium-Technology-Pty.-Ltd.' => 'Trillium Technology Pty. Ltd.', +// 'Benica-Corporation' => 'Benica Corporation', +// 'Biforst-Technology-Inc.' => 'Biforst Technology Inc.', +// 'Bodelin' => 'Bodelin', +// 'S-Life' => 'S Life', +// 'Batronix' => 'Batronix', +// 'Celestron' => 'Celestron', +// 'B---W-Group' => 'B & W Group', +// 'Infotech-Logistic-LLC' => 'Infotech Logistic, LLC', +// 'Data-Robotics' => 'Data Robotics', +// 'Mindtribe' => 'Mindtribe', +// 'Parrot-SA' => 'Parrot SA', +// 'ONDA-Communication-S.p.A.' => 'ONDA Communication S.p.A.', +// 'RODE-Microphones' => 'RODE Microphones', +// 'Gampaq-Co.Ltd' => 'Gampaq Co.Ltd', +// 'Dynex' => 'Dynex', +// 'Bellwood-International-Inc.' => 'Bellwood International, Inc.', +// 'USB-IF-non-workshop' => 'USB-IF non-workshop', +// 'KES-Co.-Ltd.' => 'KES Co., Ltd.', +// 'Amphenol-East-Asia-Ltd.' => 'Amphenol East Asia Ltd.', +// 'Seagate-Branded-Solutions' => 'Seagate Branded Solutions', +// 'Quanta-Microsystems-Inc.' => 'Quanta Microsystems, Inc.', +// 'Biwin-Technology-Ltd.' => 'Biwin Technology Ltd.', +// 'TERMINUS-TECHNOLOGY-INC.' => 'TERMINUS TECHNOLOGY INC.', +// 'Action-Electronics-Co.-Ltd.' => 'Action Electronics Co., Ltd.', +// 'Silicon-Image' => 'Silicon Image', +// 'SafeBoot-International-B.V.' => 'SafeBoot International B.V.', +// 'Abbott-Diabetes-Care' => 'Abbott Diabetes Care', +// 'Spansion-Inc.' => 'Spansion Inc.', +// 'SamYoung-Electronics-Co.-Ltd' => 'SamYoung Electronics Co., Ltd', +// 'Global-Unichip-Corp.' => 'Global Unichip Corp.', +// 'Sagem-Orga-GmbH' => 'Sagem Orga GmbH', +// 'Bayer-Health-Care-LLC' => 'Bayer Health Care LLC', +// 'Lumberg-Connect-GmbH---Co.-KG' => 'Lumberg Connect GmbH & Co. KG', +// 'Evoluent' => 'Evoluent', +// 'QinHeng-Electronics' => 'QinHeng Electronics', +// 'Dynalith-Systems-Co.-Ltd.' => 'Dynalith Systems Co., Ltd.', +// 'SGS-Taiwan-Ltd.' => 'SGS Taiwan Ltd.', +// 'BandRich-Inc.' => 'BandRich, Inc.', +// 'Corsair-Voyager-GT-16GB' => 'Corsair Voyager GT 16GB', +// 'Leica-Camera-AG' => 'Leica Camera AG', +// 'Data-Drive-Thru-Inc.' => 'Data Drive Thru, Inc.', +// 'UBeacon-Technologies-Inc.' => 'UBeacon Technologies, Inc.', +// 'eFortune-Technology-Corp.' => 'eFortune Technology Corp.', +// 'Salcomp-Plc' => 'Salcomp Plc', +// 'Desay-Wire-Co.-Ltd.' => 'Desay Wire Co., Ltd.', +// 'X-TENSIONS' => 'X-TENSIONS', +// 'Meilhaus-Electronic-GmBH' => 'Meilhaus Electronic GmBH', +// 'MStar-Semiconductor-Inc.' => 'MStar Semiconductor, Inc.', +// 'WiLinx-Corp.' => 'WiLinx Corp.', +// 'Cellex-Power-Products-Inc.' => 'Cellex Power Products, Inc.', +// 'Current-Electronics-Inc.' => 'Current Electronics Inc.', +// 'NAVIsis-Inc.' => 'NAVIsis Inc.', +// 'Ugobe-Life-Forms-Inc.' => 'Ugobe Life Forms, Inc.', +// 'ViXS-Systems-Inc.' => 'ViXS Systems, Inc.', +// 'iPassion-Technology-Inc.' => 'iPassion Technology Inc.', +// 'Generalplus-Technology-Inc.' => 'Generalplus Technology Inc.', +// 'Energizer-Holdings-Inc.' => 'Energizer Holdings, Inc.', +// 'Plastron-Precision-Co.-Ltd.' => 'Plastron Precision Co., Ltd.', +// 'K.S.-Terminals-Inc.' => 'K.S. Terminals Inc.', +// 'ATERGI-TECHNOLOGY-CO.-LTD.' => 'ATERGI TECHNOLOGY CO., LTD.', +// 'Fresco-Logic' => 'Fresco Logic', +// 'Ovislink-Corp.' => 'Ovislink Corp.', +// 'Legend-Silicon-Corp.' => 'Legend Silicon Corp.', +// 'Afatech' => 'Afatech', +// 'Altium-Limited' => 'Altium Limited', +// 'e-MOVE-Technology-Co.-Ltd.' => 'e-MOVE Technology Co., Ltd.', +// 'Amlogic-Inc.' => 'Amlogic, Inc.', +// 'MA-LABS-Inc.' => 'MA LABS, Inc.', +// 'N-Trig' => 'N-Trig', +// 'YMax-Communications-Corp.' => 'YMax Communications Corp.', +// 'Shenzhen-Yuanchuan-Electronic' => 'Shenzhen Yuanchuan Electronic', +// 'Ember-Corporation' => 'Ember Corporation', +// 'Abilis-Systems' => 'Abilis Systems', +// 'Harmonix-Music' => 'Harmonix Music', +// 'Vuzix-Corporation' => 'Vuzix Corporation', +// 'T---A-Mobile-Phones' => 'T & A Mobile Phones', +// 'Ford-Motor-Co.' => 'Ford Motor Co.', +// 'AVIXE-Technology-China-Ltd.' => 'AVIXE Technology (China) Ltd.', +// 'P-TWO-INDUSTRIES-INC.' => 'P-TWO INDUSTRIES, INC.', +// 'RealVision-Inc.' => 'RealVision Inc.', +// 'Extranet-Systems-Inc.' => 'Extranet Systems Inc.', +// 'TouchPack' => 'TouchPack', +// 'Kreton-Corporation' => 'Kreton Corporation', +// 'QNAP-System-Inc.' => 'QNAP System Inc.', +// 'Relm-Wireless' => 'Relm Wireless', +// 'Lanterra-Industrial-Co.-Ltd.' => 'Lanterra Industrial Co., Ltd.', +// 'ALECTRONIC-LIMITED' => 'ALECTRONIC LIMITED', +// 'Datel-Electronics-Ltd.' => 'Datel Electronics Ltd.', +// 'Volkswagen-of-America-Inc.' => 'Volkswagen of America, Inc.', +// 'Goldvish-S.A.' => 'Goldvish S.A.', +// 'ADDMM-LLC' => 'ADDMM LLC', +// 'HuiYang-D---S-Cable-Co.-Ltd.' => 'HuiYang D & S Cable Co., Ltd.', +// 'LS-Cable-Ltd.' => 'LS Cable Ltd.', +// 'SpringCard' => 'SpringCard', +// 'Authorizer-Technologies-Inc.' => 'Authorizer Technologies, Inc.', +// 'NONIN-MEDICAL-INC.' => 'NONIN MEDICAL INC.', +// 'Wep-Peripherals' => 'Wep Peripherals', +// 'Cherng-Weei-Technology-Corp.' => 'Cherng Weei Technology Corp.', +// 'SiGma-Micro' => 'SiGma Micro', +// 'Skydigital-Inc.' => 'Skydigital Inc.', +// 'AMT' => 'AMT', +// 'Kaetat-Industrial-Co.-Ltd.' => 'Kaetat Industrial Co., Ltd.', +// 'Datascope-Corp.' => 'Datascope Corp.', +// 'Unigen-Corporation' => 'Unigen Corporation', +// 'LighTuning-Technology-Inc.' => 'LighTuning Technology Inc.', +// '2N-TELEKOMUNIKACE-a.s.' => '2N TELEKOMUNIKACE a.s.', +// 'Somagic-Inc.' => 'Somagic, Inc.', +// 'ASTRON-INTERNATIONAL-CORP.' => 'ASTRON INTERNATIONAL CORP.', +// 'ALPINE-ELECTRONICS-INC.' => 'ALPINE ELECTRONICS, INC.', +// 'ACCARIO-Inc.' => 'ACCARIO Inc.', +// 'Kinstone' => 'Kinstone', +// 'Aces-Electronic-Co.-Ltd.' => 'Aces Electronic Co., Ltd.', +// 'OPEX-CORPORATION' => 'OPEX CORPORATION', +// 'Luminary-Micro-Inc.' => 'Luminary Micro Inc.', +// 'PlantSense' => 'PlantSense', +// 'NextWave-Broadband-Inc.' => 'NextWave Broadband Inc.', +// 'adp-corporation' => 'adp corporation', +// 'Firecomms-Ltd.' => 'Firecomms Ltd.', +// 'WonTen-Technology-Co.-Ltd.' => 'WonTen Technology Co., Ltd.', +// 'EDIMAX-TECHNOLOGY-CO.-LTD.' => 'EDIMAX TECHNOLOGY CO., LTD.', +// 'Amphenol-KAE' => 'Amphenol KAE', +// 'ANDES-TECHNOLOGY-CORPORATION' => 'ANDES TECHNOLOGY CORPORATION', +// 'Solid-Motion' => 'Solid-Motion', +// 'ALPHA-SAT-TECHNOLOGY-LIMITED' => 'ALPHA-SAT TECHNOLOGY LIMITED', +// 'C-Thru-Music-Ltd.' => 'C-Thru Music Ltd.', +// 'Dexatek-Technology-Ltd.' => 'Dexatek Technology Ltd.', +// 'Diostech-Co.-Ltd.' => 'Diostech Co., Ltd.', +// 'SAMTACK-INC.' => 'SAMTACK INC.', +// 'PEGATRON-CORPORATION' => 'PEGATRON CORPORATION', +// 'OpenMoko-Inc.' => 'OpenMoko, Inc.', +// 'Smartronix-Inc.' => 'Smartronix, Inc.', +// 'Linux-Foundation' => 'Linux Foundation', +// 'Qualcomm---Option' => 'Qualcomm / Option', +// 'Point-Grey-Research-Inc.' => 'Point Grey Research, Inc.', +// 'Lumension-Security' => 'Lumension Security', +// 'INVIA' => 'INVIA', +// 'Festo-AG---Co.-KG' => 'Festo AG & Co. KG', +// 'Cleverscope' => 'Cleverscope', +// 'TypeMatrix' => 'TypeMatrix', +// 'TrekStor-GmbH---Co.-KG' => 'TrekStor GmbH & Co. KG', +// 'NZXT' => 'NZXT', +// 'Coby-Electronics-Corporation' => 'Coby Electronics Corporation', +// 'ROCCAT' => 'ROCCAT', +// 'NuCORE-Technology-Inc.' => 'NuCORE Technology, Inc.', +// 'AirTies-Wireless-Networks' => 'AirTies Wireless Networks', +// 'EADS-Deutschland-GmbH' => 'EADS Deutschland GmbH', +// 'Cal-Comp' => 'Cal-Comp', +// 'G-Tek-Electronics-Group' => 'G-Tek Electronics Group', +// 'TANDBERG' => 'TANDBERG', +// 'Alere-Inc.' => 'Alere, Inc.', +// 'Stantum' => 'Stantum', +// 'Delphin-Technology-AG' => 'Delphin Technology AG', +// 'NXP-Semiconductors' => 'NXP Semiconductors', +// 'Vertex-Wireless-Co.-Ltd.' => 'Vertex Wireless Co., Ltd.', +// 'D-Link-Corp.' => 'D-Link Corp.', +// 'Unknown-Pinnacle-' => 'Unknown (Pinnacle?)', +// 'PLANEX' => 'PLANEX', +// 'Hauppauge' => 'Hauppauge', +// 'Texas-Instruments' => 'Texas Instruments', +// 'Barnes---Noble' => 'Barnes & Noble', +// 'Cando' => 'Cando', +// 'Clay-Logic' => 'Clay Logic', +// 'XMOS-Ltd' => 'XMOS Ltd', +// 'Hanvon' => 'Hanvon', +// 'Qi-Hardware' => 'Qi Hardware', +// 'Simtec-Electronics' => 'Simtec Electronics', +// 'ActionStar' => 'ActionStar', +// 'Creative--' => 'Creative (?)', +// 'GW-Instek' => 'GW Instek', +// 'Emotiv-Systems-Pty.-Ltd.' => 'Emotiv Systems Pty. Ltd.', +// 'Agecodagis-SARL' => 'Agecodagis SARL', +// 'MacAlly' => 'MacAlly', +// 'SAMWOO-Enterprise' => 'SAMWOO Enterprise', +// 'RadioShack-Corporation' => 'RadioShack Corporation', +// 'Kobo-Inc.' => 'Kobo Inc.', +// 'Pie-Digital-Inc.' => 'Pie Digital, Inc.', +// 'Motorola-PCS' => 'Motorola PCS', +// 'eTurboTouch-Technology-Inc.' => 'eTurboTouch Technology, Inc.', +// 'Pinnacle-Systems-Inc.' => 'Pinnacle Systems, Inc.', +// 'Pumatronix-Ltda' => 'Pumatronix Ltda', +// 'Digit-at-lway-Inc.' => 'Digit@lway, Inc.', +// 'Tripp-Lite' => 'Tripp-Lite', +// 'TwinMOS' => 'TwinMOS', +// 'Citizen' => 'Citizen', +// 'DigitalWay' => 'DigitalWay', +// 'NHJ-Ltd' => 'NHJ, Ltd', +// 'ASUSTek-Computer-Inc.' => 'ASUSTek Computer Inc.', +// 'Toptronic-Industrial-Co.-Ltd' => 'Toptronic Industrial Co., Ltd', +// 'Planex-Communications' => 'Planex Communications', +// 'Dolphin-Peripherals' => 'Dolphin Peripherals', +// 'Fujitsu-Ltd' => 'Fujitsu, Ltd', +// 'Eagletron' => 'Eagletron', +// 'Whanam-Electronics-Co.-Ltd' => 'Whanam Electronics Co., Ltd', +// 'VidzMedia-Pte-Ltd' => 'VidzMedia Pte Ltd', +// 'AEI' => 'AEI', +// 'Yakumo' => 'Yakumo', +// 'Micro-Star' => 'Micro Star', +// 'DIVA' => 'DIVA', +// 'InVibro' => 'InVibro', +// 'WEM' => 'WEM', +// 'National-Instruments-Corp.' => 'National Instruments Corp.', +// 'I-O-Data' => 'I-O Data', +// 'i-rocks' => 'i-rocks', +// 'iRiver-Ltd.' => 'iRiver, Ltd.', +// 'Dell-Computer-Corp.' => 'Dell Computer Corp.', +// 'USBest-Technology' => 'USBest Technology', +// 'USB-Design-by-Example' => 'USB Design by Example', +// 'Broadcom-Corp.' => 'Broadcom Corp.', +// 'WinChipHead' => 'WinChipHead', +// 'Shuttle-Inc.' => 'Shuttle, Inc.', +// 'Panram' => 'Panram', +// 'EMS-Production' => 'EMS Production', +// 'Miditech' => 'Miditech', +// 'GW-Instek' => 'GW Instek', +// 'Aceeca' => 'Aceeca', +// 'Memorex' => 'Memorex', +// 'SimpleTech' => 'SimpleTech', +// 'Grandtec' => 'Grandtec', +// 'Linksys--' => 'Linksys (?)', +// 'Averatec--' => 'Averatec (?)', +// 'Sweex' => 'Sweex', +// 'I-Tetra' => 'I-Tetra', +// 'Owon' => 'Owon', +// 'Transmeta-Corp.' => 'Transmeta Corp.', +// 'UC-Logic-Technology-Corp.' => 'UC-Logic Technology Corp.', +// 'Epiphan-Systems-Inc.' => 'Epiphan Systems Inc.', +// 'OnSpec-Electronic-Inc.' => 'OnSpec Electronic, Inc.', +// 'Uni-Trend-Group-Limited' => 'Uni-Trend Group Limited', +// 'IRTOUCHSYSTEMS-Co.-Ltd.' => 'IRTOUCHSYSTEMS Co. Ltd.', +// 'Acer-Inc' => 'Acer, Inc', +// 'Zinwell' => 'Zinwell', +// 'Beholder-International-Ltd.' => 'Beholder International Ltd.', +// 'Ingenic-Semiconductor-Ltd.' => 'Ingenic Semiconductor Ltd.', +// 'Sitecom' => 'Sitecom', +// 'TwinHan-Technology-Co.-Ltd' => 'TwinHan Technology Co., Ltd', +// 'CoreLogic-Inc.' => 'CoreLogic, Inc.', +// 'Unknown-Sony-' => 'Unknown (Sony?)', +// 'Arkmicro-Technologies-Inc.' => 'Arkmicro Technologies Inc.', +// 'IRTOUCHSYSTEMS-Co.-Ltd.' => 'IRTOUCHSYSTEMS Co. Ltd.', +// 'Prototype-product-Vendor-ID' => 'Prototype product Vendor ID', +// 'WiseGroup-Ltd.' => 'WiseGroup, Ltd.', +// '3Com' => '3Com', +// 'Opera1' => 'Opera1', +// 'CME-Central-Music-Co.' => 'CME (Central Music Co.)', +// 'StackFoundry-LLC' => 'StackFoundry LLC', +// 'TBS-Technologies-China' => 'TBS Technologies China', +// 'Edimax-Technology-Co.-Ltd' => 'Edimax Technology Co., Ltd', +// 'Intel-Corp.' => 'Intel Corp.', +// 'Intel-Corp.' => 'Intel Corp.', +// 'VirtualBox' => 'VirtualBox', +// 'Keio' => 'Keio', +// 'EGO-Systems-Inc.' => 'EGO Systems, Inc.', +// 'Sitecom' => 'Sitecom', +// 'TeVii-Technology-Ltd.' => 'TeVii Technology Ltd.', +// 'GeoLab-Ltd' => 'GeoLab, Ltd', +// 'MosChip-Semiconductor' => 'MosChip Semiconductor', +// 'Grandtec' => 'Grandtec', +// 'J.-Westhues' => 'J. Westhues', +// 'AnMo-Electronics-Corporation' => 'AnMo Electronics Corporation', +// 'Asix' => 'Asix', +// '3Com' => '3Com', +// 'Unknown' => 'Unknown', +// 'Keil-Software-Inc.' => 'Keil Software, Inc.', +// 'CACE-Technologies-Inc.' => 'CACE Technologies Inc.', +// 'Ultimarc' => 'Ultimarc', +// 'Xorcom-Ltd.' => 'Xorcom Ltd.', +// 'MakingThings' => 'MakingThings', +// 'eMPIA-Technology-Inc.' => 'eMPIA Technology, Inc.', +// 'KWorld' => 'KWorld', +// 'Hewlett-Packard' => 'Hewlett Packard', +// 'Sunplus-Innovation-Technology-Inc' => 'Sunplus Innovation Technology Inc', +// 'Feiya-Technology-Corp' => 'Feiya Technology Corp.', +// "CLEVO-CO" => "CLEVO CO.", +// ); +// +// return (array_key_exists($string,$names)) ? $names[$string] : $string; +} diff --git a/Application/Include/vendors.php b/Application/Include/vendors.php new file mode 100644 index 0000000..1f2bcc3 --- /dev/null +++ b/Application/Include/vendors.php @@ -0,0 +1,4191 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Vendors +{ + + public static function getName($id,$interface) + { + if (self::check($id,$interface)) + { + $idArray = strcmp($interface,'USB') === 0 ? self::$usbId : self::$pciId; + + $temp = explode(':',$id); + $vendorId = $temp[0]; + return $idArray[$vendorId]; + } + return 'not-known'; + } + + public static function check($id,$interface = 'USB') + { + if (preg_match('/^[a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}$/',$id)) + { + $idArray = strcmp($interface,'USB') === 0 ? self::$usbId : self::$pciId; + + $temp = explode(':',$id); + $vendorId = $temp[0]; + if (array_key_exists($vendorId,$idArray)) + { + return true; + } + } + return false; + } + + public static $pciId = array( + '0010' => 'Allied-Telesis-Inc', + '001a' => 'Ascend-Communications-Inc.', + '001c' => 'PEAK-System-Technik-GmbH', + '0033' => 'Paradyne-corp.', + '003d' => 'Lockheed-Martin-Marietta-Corp', + '0070' => 'Hauppauge-computer-works-Inc.', + '0071' => 'Nebula-Electronics-Ltd.', + '00f5' => 'BFG-Technologies-Inc.', + '0100' => 'Ncipher-Corp-Ltd', + '0123' => 'General-Dynamics', + '0291' => 'Davicom-Semiconductor-Inc.', + '02e0' => 'XFX-Pine-Group-Inc', + '0315' => 'SK-Electronics-Co.-Ltd.', + '0357' => 'TTTech-AG', + '036f' => 'Trigem-Computer-Inc.', + '03f0' => 'Hewlett-Packard', + '0432' => 'SCM-Microsystems-Inc.', + '045e' => 'Microsoft', + '0482' => 'Kyocera', + '04cf' => 'Myson-Century-Inc', + '050d' => 'Belkin', + '058f' => 'Alcor-Micro-Corporation', + '05a9' => 'OmniVision', + '05e3' => 'CyberDoor', + '066f' => 'Sigmatel-Inc.', + '0675' => 'Dynalink', + '069d' => 'Hughes-Network-Systems-HNS', + '0721' => 'Sapphire-Inc.', + '0795' => 'Wired-Inc.', + '07ca' => 'AVerMedia-Technologies-Inc.', + '07d0' => 'ITT-Geospatial-Systems', + '08ff' => 'AuthenTec', + '093a' => 'PixArt-Imaging-Inc.', + '09c1' => 'Arris', + '0a89' => 'BREA-Technologies-Inc', + '0ace' => 'ZyDAS', + '0b0b' => 'Rhino-Equipment-Corp.', + '0b3d' => 'Brontes-Technologies', + '0b49' => 'ASCII-Corporation', + '0ccd' => 'TerraTec-Electronic-GmbH', + '0e11' => 'Compaq-Computer-Corporation', + '0e21' => 'Cowon-Systems-Inc.', + '0e55' => 'HaSoTec-GmbH', + '0f62' => 'Acrox-Technologies-Co.-Ltd.', + '1001' => 'Kolter-Electronic', + '1002' => 'Advanced-Micro-Devices-AMD', + '1003' => 'ULSI-Systems', + '1004' => 'VLSI-Technology-Inc', + '1005' => 'Avance-Logic-Inc.-ALI', + '1006' => 'Reply-Group', + '1007' => 'NetFrame-Systems-Inc', + '1008' => 'EPSON', + '100a' => 'Phoenix-Technologies', + '100b' => 'National-Semiconductor-Corp.', + '100c' => 'Tseng-Labs-Inc', + '100d' => 'AST-Research-Inc', + '100e' => 'Weitek', + '1010' => 'Video-Logic-Ltd.', + '1011' => 'Digital-Equipment-Corporation', + '1012' => 'Micronics-Computers-Inc', + '1013' => 'Cirrus-Logic', + '1014' => 'IBM', + '1015' => 'LSI-Logic-Corp-of-Canada', + '1016' => 'ICL-Personal-Systems', + '1017' => 'SPEA-Software-AG', + '1018' => 'Unisys-Systems', + '1019' => 'Elitegroup-Computer-Systems', + '101a' => 'AT-T-GIS-NCR', + '101b' => 'Vitesse-Semiconductor', + '101c' => 'Western-Digital', + '101e' => 'American-Megatrends-Inc.', + '101f' => 'PictureTel', + '1020' => 'Hitachi-Computer-Products', + '1022' => 'Advanced-Micro-Devices-AMD', + '1023' => 'Trident-Microsystems', + '1024' => 'Zenith-Data-Systems', + '1025' => 'Acer', + '1028' => 'Dell', + '1029' => 'Siemens-Nixdorf-IS', + '102a' => 'LSI-Logic', + '102b' => 'Matrox-Graphics-Inc.', + '102c' => 'Chips-and-Technologies', + '102d' => 'Wyse-Technology-Inc.', + '102e' => 'Olivetti-Advanced-Technology', + '102f' => 'Toshiba-America', + '1030' => 'TMC-Research', + '1031' => 'Miro-Computer-Products-AG', + '1032' => 'Compaq', + '1033' => 'NEC-Corporation', + '1034' => 'Framatome-Connectors-USA-Inc.', + '1035' => 'Comp.---Comm.-Research-Lab', + '1036' => 'Future-Domain-Corp.', + '1037' => 'Hitachi-Micro-Systems', + '1038' => 'AMP-Inc', + '103a' => 'Seiko-Epson-Corporation', + '103b' => 'Tatung-Corp.-Of-America', + '103c' => 'Hewlett-Packard', + '103e' => 'Solliday-Engineering', + '103f' => 'Synopsys-Logic-Modeling-Group', + '1040' => 'Accelgraphics-Inc.', + '1041' => 'Computrend', + '1042' => 'Micron', + '1043' => 'ASUSTeK-Computer-Inc.', + '1044' => 'Adaptec-formerly-DPT', + '1045' => 'OPTi-Inc.', + '1046' => 'IPC-Corporation-Ltd.', + '1047' => 'Genoa-Systems-Corp', + '1048' => 'Elsa-AG', + '1049' => 'Fountain-Technologies-Inc.', + '104b' => 'BusLogic', + '104c' => 'Texas-Instruments', + '104d' => 'Sony-Corporation', + '104e' => 'Oak-Technology-Inc', + '104f' => 'Co-time-Computer-Ltd', + '1050' => 'Winbond-Electronics-Corp', + '1051' => 'Anigma-Inc.', + '1052' => '-Young-Micro-Systems', + '1053' => 'Young-Micro-Systems', + '1054' => 'Hitachi-Ltd', + '1055' => 'Efar-Microsystems', + '1056' => 'ICL', + '105a' => 'Promise-Technology-Inc.', + '105b' => 'Foxconn-International-Inc.', + '105c' => 'Wipro-Infotech-Limited', + '105d' => 'Number-9-Computer-Company', + '105e' => 'Vtech-Computers-Ltd', + '105f' => 'Infotronic-America-Inc', + '1060' => 'United-Microelectronics-UMC', + '1061' => 'I.I.T.', + '1062' => 'Maspar-Computer-Corp', + '1063' => 'Ocean-Office-Automation', + '1064' => 'Alcatel', + '1065' => 'Texas-Microsystems', + '1066' => 'PicoPower-Technology', + '1067' => 'Mitsubishi-Electric', + '1068' => 'Diversified-Technology', + '1069' => 'Mylex-Corporation', + '106a' => 'Aten-Research-Inc', + '106b' => 'Apple-Computer-Inc.', + '106c' => 'Hynix-Semiconductor', + '106d' => 'Sequent-Computer-Systems', + '106e' => 'DFI-Inc', + '106f' => 'City-Gate-Development-Ltd', + '1070' => 'Daewoo-Telecom-Ltd', + '1071' => 'Mitac', + '1072' => 'GIT-Co-Ltd', + '1073' => 'Yamaha-Corporation', + '1074' => 'NexGen-Microsystems', + '1076' => 'Chaintech-Computer-Co.-Ltd', + '1077' => 'QLogic-Corp.', + '1078' => 'Cyrix-Corporation', + '1079' => 'I-Bus', + '107a' => 'NetWorth', + '107b' => 'Gateway-2000', + '107d' => 'LeadTek-Research-Inc.', + '107e' => 'Interphase-Corporation', + '107f' => 'Data-Technology-Corporation', + '1080' => 'Contaq-Microsystems', + '1081' => 'Supermac-Technology', + '1082' => 'EFA-Corporation-of-America', + '1083' => 'Forex-Computer-Corporation', + '1084' => 'Parador', + '1085' => 'Tulip-Computers-Int.B.V.', + '1086' => 'J.-Bond-Computer-Systems', + '1087' => 'Cache-Computer', + '1088' => 'Microcomputer-Systems-M-Son', + '1089' => 'Data-General-Corporation', + '108c' => 'Oakleigh-Systems-Inc.', + '108d' => 'Olicom', + '108f' => 'Systemsoft', + '1091' => 'Intergraph-Corporation', + '1092' => 'Diamond-Multimedia-Systems', + '1093' => 'National-Instruments', + '1096' => 'Alacron', + '1097' => 'Appian-Technology', + '1098' => 'Quantum-Designs-H.K.-Ltd', + '1099' => 'Samsung-Electronics-Co.-Ltd', + '109a' => 'Packard-Bell', + '109b' => 'Gemlight-Computer-Ltd.', + '109c' => 'Megachips-Corporation', + '109d' => 'Zida-Technologies-Ltd.', + '109e' => 'Brooktree-Corporation', + '109f' => 'Trigem-Computer-Inc.', + '10a0' => 'Meidensha-Corporation', + '10a1' => 'Juko-Electronics-Ind.-Co.-Ltd', + '10a2' => 'Quantum-Corporation', + '10a3' => 'Everex-Systems-Inc', + '10a4' => 'Globe-Manufacturing-Sales', + '10a5' => 'Smart-Link-Ltd.', + '10a6' => 'Informtech-Industrial-Ltd.', + '10a7' => 'Benchmarq-Microelectronics', + '10a8' => 'Sierra-Semiconductor', + '10a9' => 'Silicon-Graphics-Inc.', + '10aa' => 'ACC-Microelectronics', + '10ab' => 'Digicom', + '10ac' => 'Honeywell-IAC', + '10ad' => 'Symphony-Labs', + '10ae' => 'Cornerstone-Technology', + '10af' => 'Micro-Computer-Systems-Inc', + '10b0' => 'CardExpert-Technology', + '10b1' => 'Cabletron-Systems-Inc', + '10b2' => 'Raytheon-Company', + '10b3' => 'Databook-Inc', + '10b4' => 'STB-Systems-Inc', + '10b5' => 'PLX-Technology-Inc.', + '10b6' => 'Madge-Networks', + '10b7' => '3Com-Corporation', + '10b9' => 'ALi-Corporation', + '10ba' => 'Mitsubishi-Electric-Corp.', + '10bb' => 'Dapha-Electronics-Corporation', + '10bc' => 'Advanced-Logic-Research', + '10bd' => 'Surecom-Technology', + '10be' => 'Tseng-Labs-International-Co.', + '10bf' => 'Most-Inc', + '10c0' => 'Boca-Research-Inc.', + '10c1' => 'ICM-Co.-Ltd.', + '10c2' => 'Auspex-Systems-Inc.', + '10c3' => 'Samsung-Semiconductors-Inc.', + '10c5' => 'Xerox-Corporation', + '10c6' => 'Rambus-Inc.', + '10c7' => 'Media-Vision', + '10c8' => 'Neomagic-Corporation', + '10c9' => 'Dataexpert-Corporation', + '10ca' => 'Fujitsu-Microelectr.-Inc.', + '10cb' => 'Omron-Corporation', + '10cd' => 'Advanced-System-Products-Inc', + '10ce' => 'Radius', + '10d1' => 'FuturePlus-Systems-Corp.', + '10d2' => 'Molex-Incorporated', + '10d3' => 'Jabil-Circuit-Inc', + '10d4' => 'Hualon-Microelectronics', + '10d5' => 'Autologic-Inc.', + '10d6' => 'Cetia', + '10d7' => 'BCM-Advanced-Research', + '10d8' => 'Advanced-Peripherals-Labs', + '10d9' => 'Macronix-Inc.-MXIC', + '10da' => 'Compaq-IPG-Austin', + '10db' => 'Rohm-LSI-Systems-Inc.', + '10dc' => 'CERN-ECP-EDU', + '10dd' => 'Evans---Sutherland', + '10de' => 'NVIDIA', + '10df' => 'Emulex-Corporation', + '10e1' => 'Tekram-Technology-Co.Ltd.', + '10e2' => 'Aptix-Corporation', + '10e3' => 'Tundra-Semiconductor-Corp.', + '10e4' => 'Tandem-Computers', + '10e5' => 'Micro-Industries-Corporation', + '10e7' => 'Vadem', + '10e8' => 'Applied-Micro-Circuits-Corp.', + '10e9' => 'Alps-Electric-Co.-Ltd.', + '10ea' => 'Integraphics', + '10ec' => 'Realtek', + '10eb' => 'Artists-Graphics', + '10ed' => 'Ascii-Corporation', + '10ee' => 'Xilinx-Corporation', + '10f0' => 'Peritek-Corporation', + '10f1' => 'Tyan-Computer', + '10f2' => 'Achme-Computer-Inc.', + '10f3' => 'Alaris-Inc.', + '10f4' => 'S-MOS-Systems-Inc.', + '10f5' => 'NKK-Corporation', + '10f8' => 'Altos-India-Ltd', + '10f9' => 'PC-Direct', + '10fa' => 'Truevision', + '10fc' => 'I-O-Data-Device-Inc.', + '10fd' => 'Soyo-Computer-Inc', + '10fe' => 'Fast-Multimedia-AG', + '10ff' => 'NCube', + '1100' => 'Jazz-Multimedia', + '1101' => 'Initio-Corporation', + '1102' => 'Creative-Labs', + '1104' => 'RasterOps-Corp.', + '1105' => 'Sigma-Designs-Inc.', + '1106' => 'VIA-Technologies-Inc.', + '1107' => 'Stratus-Computers', + '1108' => 'Proteon-Inc.', + '110a' => 'Siemens-Nixdorf-AG', + '110b' => 'Chromatic-Research-Inc.', + '110c' => 'Mini-Max-Technology-Inc.', + '110d' => 'Znyx-Advanced-Systems', + '110e' => 'CPU-Technology', + '110f' => 'Ross-Technology', + '1110' => 'Powerhouse-Systems', + '1111' => 'Santa-Cruz-Operation', + '1113' => 'Accton-Technology-Corporation', + '1114' => 'Atmel-Corporation', + '1115' => '3D-Labs', + '1116' => 'Data-Translation', + '1117' => 'Datacube-Inc', + '1118' => 'Berg-Electronics', + '111a' => 'Efficient-Networks-Inc', + '111b' => 'Teledyne-Electronic-Systems', + '111c' => 'Tricord-Systems-Inc.', + '111e' => 'Eldec', + '111f' => 'Precision-Digital-Images', + '1120' => 'EMC-Corporation', + '1121' => 'Zilog', + '1122' => 'Multi-tech-Systems-Inc.', + '1123' => 'Excellent-Design-Inc.', + '1124' => 'Leutron-Vision-AG', + '1125' => 'Eurocore', + '1126' => 'Vigra', + '1127' => 'FORE-Systems-Inc', + '1129' => 'Firmworks', + '112b' => 'Linotype---Hell-AG', + '112c' => 'Zenith-Data-Systems', + '112d' => 'Ravicad', + '112f' => 'Dalsa-Inc.', + '1130' => 'Computervision', + '1131' => 'Philips', + '1132' => 'Mitel-Corp.', + '1133' => 'Dialogic-Corporation', + '1134' => 'Mercury-Computer-Systems', + '1135' => 'Fuji-Xerox-Co-Ltd', + '1136' => 'Momentum-Data-Systems', + '1137' => 'Cisco-Systems-Inc', + '1138' => 'Ziatech-Corporation', + '1139' => 'Dynamic-Pictures-Inc', + '113a' => 'FWB-Inc', + '113b' => 'Network-Computing-Devices', + '113c' => 'Cyclone-Microsystems-Inc.', + '113d' => 'Leading-Edge-Products-Inc', + '113f' => 'Equinox-Systems-Inc.', + '1140' => 'Intervoice-Inc', + '1141' => 'Crest-Microsystem-Inc', + '1143' => 'NetPower-Inc', + '1144' => 'Cincinnati-Milacron', + '1145' => 'Workbit-Corporation', + '1146' => 'Force-Computers', + '1147' => 'Interface-Corp', + '1149' => 'Win-System-Corporation', + '114a' => 'VMIC', + '114b' => 'Canopus-Co.-Ltd', + '114c' => 'Annabooks', + '114d' => 'IC-Corporation', + '114e' => 'Nikon-Systems-Inc', + '114f' => 'Digi-International', + '1150' => 'Thinking-Machines-Corp', + '1151' => 'JAE-Electronics-Inc.', + '1152' => 'Megatek', + '1153' => 'Land-Win-Electronic-Corp', + '1154' => 'Melco-Inc', + '1155' => 'Pine-Technology-Ltd', + '1156' => 'Periscope-Engineering', + '1157' => 'Avsys-Corporation', + '1158' => 'Voarx-R---D-Inc', + '1159' => 'Mutech-Corp', + '115a' => 'Harlequin-Ltd', + '115b' => 'Parallax-Graphics', + '115c' => 'Photron-Ltd.', + '115d' => 'Xircom', + '115e' => 'Peer-Protocols-Inc', + '115f' => 'Maxtor-Corporation', + '1160' => 'Megasoft-Inc', + '1161' => 'PFU-Limited', + '1162' => 'OA-Laboratory-Co-Ltd', + '1163' => 'Rendition', + '1165' => 'Imagraph-Corporation', + '1166' => 'Broadcom', + '1167' => 'Mutoh-Industries-Inc', + '1168' => 'Thine-Electronics-Inc', + '116b' => 'Connectware-Inc', + '116d' => 'Martin-Marietta', + '116e' => 'Electronics-for-Imaging', + '116f' => 'Workstation-Technology', + '1170' => 'Inventec-Corporation', + '1171' => 'Loughborough-Sound-Images-Plc', + '1172' => 'Altera-Corporation', + '1173' => 'Adobe-Systems-Inc', + '1174' => 'Bridgeport-Machines', + '1175' => 'Mitron-Computer-Inc.', + '1176' => 'SBE-Incorporated', + '1177' => 'Silicon-Engineering', + '1178' => 'Alfa-Inc.', + '1179' => 'Toshiba-America-Info-Systems', + '117a' => 'A-Trend-Technology', + '117b' => 'L-G-Electronics-Inc.', + '117c' => 'Atto-Technology', + '117d' => 'Becton---Dickinson', + '117e' => 'T-R-Systems', + '117f' => 'Integrated-Circuit-Systems', + '1180' => 'Ricoh-Co-Ltd', + '1181' => 'Telmatics-International', + '1183' => 'Fujikura-Ltd', + '1184' => 'Forks-Inc', + '1185' => 'Dataworld-International-Ltd', + '1186' => 'D-Link', + '1189' => 'Matsushita-Electronics-Co-Ltd', + '118a' => 'Hilevel-Technology', + '118b' => 'Hypertec-Pty-Limited', + '118c' => 'Corollary-Inc', + '118d' => 'BitFlow-Inc', + '118e' => 'Hermstedt-GmbH', + '118f' => 'Green-Logic', + '1190' => 'Tripace', + '1191' => 'Artop-Electronic-Corp', + '1192' => 'Densan-Company-Ltd', + '1193' => 'Zeitnet-Inc.', + '1194' => 'Toucan-Technology', + '1195' => 'Ratoc-System-Inc', + '1196' => 'Hytec-Electronics-Ltd', + '1197' => 'Gage-Applied-Sciences-Inc.', + '1198' => 'Lambda-Systems-Inc', + '1199' => 'Attachmate-Corporation', + '119a' => 'Mind-Share-Inc.', + '119b' => 'Omega-Micro-Inc.', + '119c' => 'Information-Technology-Inst.', + '119d' => 'Bug-Inc.-Sapporo-Japan', + '119e' => 'Fujitsu-Microelectronics-Ltd.', + '119f' => 'Bull-HN-Information-Systems', + '11a0' => 'Convex-Computer-Corporation', + '11a1' => 'Hamamatsu-Photonics-K.K.', + '11a4' => 'Barco-Graphics-NV', + '11a5' => 'Microunity-Systems-Eng.-Inc', + '11a6' => 'Pure-Data-Ltd.', + '11a7' => 'Power-Computing-Corp.', + '11a8' => 'Systech-Corp.', + '11a9' => 'InnoSys-Inc.', + '11aa' => 'Actel', + '11ab' => 'Marvell-Technology-Group-Ltd.', + '11ad' => 'Lite-On-Communications-Inc', + '11ae' => 'Aztech-System-Ltd', + '11af' => 'Avid-Technology-Inc.', + '11b0' => 'V3-Semiconductor-Inc.', + '11b1' => 'Apricot-Computers', + '11b2' => 'Eastman-Kodak', + '11b3' => 'Barr-Systems-Inc.', + '11b5' => 'Radstone-Technology-Plc', + '11b6' => 'United-Video-Corp', + '11b7' => 'Motorola', + '11b8' => 'XPoint-Technologies-Inc', + '11b9' => 'Pathlight-Technology-Inc.', + '11ba' => 'Videotron-Corp', + '11bb' => 'Pyramid-Technology', + '11bc' => 'Network-Peripherals-Inc', + '11bd' => 'Pinnacle-Systems-Inc.', + '11bf' => 'Astrodesign-Inc.', + '11c0' => 'Hewlett-Packard', + '11c2' => 'Sand-Microelectronics', + '11c3' => 'NEC-Corporation', + '11c4' => 'Document-Technologies-Inc', + '11c5' => 'Shiva-Corporation', + '11c6' => 'Dainippon-Screen-Mfg.-Co.-Ltd', + '11c7' => 'D.C.M.-Data-Systems', + '11c9' => 'Magma', + '11ca' => 'LSI-Systems-Inc', + '11cb' => 'Specialix-Research-Ltd.', + '11cd' => 'HAL-Computer-Systems-Inc.', + '11ce' => 'Netaccess', + '11d1' => 'Auravision', + '11d2' => 'Intercom-Inc.', + '11d3' => 'Trancell-Systems-Inc', + '11d4' => 'Analog-Devices', + '11d5' => 'Ikon-Corporation', + '11d6' => 'Tekelec-Telecom', + '11d7' => 'Trenton-Technology-Inc.', + '11d9' => 'TEC-Corporation', + '11da' => 'Novell', + '11db' => 'Sega-Enterprises-Ltd', + '11dc' => 'Questra-Corporation', + '11dd' => 'Crosfield-Electronics-Limited', + '11de' => 'Zoran-Corporation', + '11df' => 'New-Wave-PDG', + '11e0' => 'Cray-Communications-A-S', + '11e1' => 'GEC-Plessey-Semi-Inc.', + '11e3' => 'Quicklogic-Corporation', + '11e4' => 'Second-Wave-Inc', + '11e5' => 'IIX-Consulting', + '11e6' => 'Mitsui-Zosen-System-Research', + '11e9' => 'Highwater-Designs-Ltd.', + '11ea' => 'Elsag-Bailey', + '11eb' => 'Formation-Inc.', + '11ec' => 'Coreco-Inc', + '11ed' => 'Mediamatics', + '11ee' => 'Dome-Imaging-Systems-Inc', + '11ef' => 'Nicolet-Technologies-B.V.', + '11f0' => 'Compu-Shack', + '11f1' => 'Symbios-Logic-Inc', + '11f2' => 'Picture-Tel-Japan-K.K.', + '11f3' => 'Keithley-Metrabyte', + '11f4' => 'Kinetic-Systems-Corporation', + '11f6' => 'Compex', + '11f7' => 'Scientific-Atlanta', + '11f8' => 'PMC-Sierra-Inc.', + '11f9' => 'I-Cube-Inc', + '11fb' => 'Datel-Inc', + '11fc' => 'Silicon-Magic', + '11fd' => 'High-Street-Consultants', + '11fe' => 'Comtrol-Corporation', + '11ff' => 'Scion-Corporation', + '1200' => 'CSS-Corporation', + '1201' => 'Vista-Controls-Corp', + '1202' => 'Network-General-Corp.', + '1205' => 'Array-Corporation', + '1206' => 'Amdahl-Corporation', + '1208' => 'Parsytec-GmbH', + '1209' => 'SCI-Systems-Inc', + '120a' => 'Synaptel', + '120b' => 'Adaptive-Solutions', + '120c' => 'Technical-Corp.', + '120d' => 'Compression-Labs-Inc.', + '120e' => 'Cyclades-Corporation', + '120f' => 'Essential-Communications', + '1210' => 'Hyperparallel-Technologies', + '1211' => 'Braintech-Inc', + '1212' => 'Kingston-Technology-Corp.', + '1215' => 'Interware-Co.-Ltd', + '1216' => 'Purup-Prepress-A-S', + '1217' => 'O2-Micro-Inc.', + '1218' => 'Hybricon-Corp.', + '1219' => 'First-Virtual-Corporation', + '121a' => '3Dfx-Interactive-Inc.', + '121c' => 'Nippon-Texaco.-Ltd', + '121e' => 'CSPI', + '121f' => 'Arcus-Technology-Inc.', + '1220' => 'Ariel-Corporation', + '1221' => 'Contec-Co.-Ltd', + '1222' => 'Ancor-Communications-Inc.', + '1224' => 'Interactive-Images', + '1225' => 'Power-I-O-Inc.', + '1227' => 'Tech-Source', + '1228' => 'Norsk-Elektro-Optikk-A-S', + '1229' => 'Data-Kinesis-Inc.', + '122a' => 'Integrated-Telecom', + '122c' => 'Sican-GmbH', + '122d' => 'Aztech-System-Ltd', + '122e' => 'Xyratex', + '122f' => 'Andrew-Corporation', + '1230' => 'Fishcamp-Engineering', + '1231' => 'Woodward-McCoach-Inc.', + '1232' => 'GPT-Limited', + '1233' => 'Bus-Tech-Inc.', + '1235' => 'Risq-Modular-Systems-Inc.', + '1236' => 'Sigma-Designs-Corporation', + '1237' => 'Alta-Technology-Corporation', + '1238' => 'Adtran', + '1239' => '3DO-Company', + '123a' => 'Visicom-Laboratories-Inc.', + '123b' => 'Seeq-Technology-Inc.', + '123c' => 'Century-Systems-Inc.', + '123d' => 'Engineering-Design-Team-Inc.', + '123e' => 'Simutech-Inc.', + '123f' => 'C-Cube-Microsystems', + '1240' => 'Marathon-Technologies-Corp.', + '1241' => 'DSC-Communications', + '1243' => 'Delphax', + '1245' => 'A.P.D.-S.A.', + '1246' => 'Dipix-Technologies-Inc.', + '1247' => 'Xylon-Research-Inc.', + '1248' => 'Central-Data-Corporation', + '1249' => 'Samsung-Electronics-Co.-Ltd.', + '124a' => 'AEG-Electrocom-GmbH', + '124b' => 'SBS-Greenspring-Modular-I-O', + '124c' => 'Solitron-Technologies-Inc.', + '124d' => 'Stallion-Technologies-Inc.', + '124e' => 'Cylink', + '124f' => 'Infortrend-Technology-Inc.', + '1251' => 'VLSI-Solutions-Oy', + '1253' => 'Guzik-Technical-Enterprises', + '1254' => 'Linear-Systems-Ltd.', + '1255' => 'Optibase-Ltd', + '1256' => 'Perceptive-Solutions-Inc.', + '1257' => 'Vertex-Networks-Inc.', + '1258' => 'Gilbarco-Inc.', + '1259' => 'Allied-Telesyn-International', + '125a' => 'ABB-Power-Systems', + '125b' => 'Asix-Electronics-Corporation', + '125c' => 'Aurora-Technologies-Inc.', + '125d' => 'ESS-Technology', + '125e' => 'Specialvideo-Engineering-SRL', + '125f' => 'Concurrent-Technologies-Inc.', + '1260' => 'Intersil-Corporation', + '1262' => 'ES-Computer-Company-Ltd.', + '1263' => 'Sonic-Solutions', + '1264' => 'Aval-Nagasaki-Corporation', + '1265' => 'Casio-Computer-Co.-Ltd.', + '1266' => 'Microdyne-Corporation', + '1267' => 'S.-A.-Telecommunications', + '1268' => 'Tektronix', + '1269' => 'Thomson-CSF-TTM', + '126a' => 'Lexmark', + '126b' => 'Adax-Inc.', + '126c' => 'Northern-Telecom', + '126d' => 'Splash-Technology-Inc.', + '126f' => 'Silicon-Motion-Inc.', + '1270' => 'Olympus-Optical-Co.-Ltd.', + '1271' => 'GW-Instruments', + '1272' => 'Telematics-International', + '1273' => 'Hughes-Network-Systems', + '1274' => 'Ensoniq', + '1275' => 'Network-Appliance-Corporation', + '1277' => 'Comstream', + '1279' => 'Transmeta-Corporation', + '127a' => 'Rockwell-International', + '127b' => 'Pixera-Corporation', + '127c' => 'Crosspoint-Solutions-Inc.', + '127d' => 'Vela-Research', + '127e' => 'Winnov-L.P.', + '127f' => 'Fujifilm', + '1280' => 'Photoscript-Group-Ltd.', + '1281' => 'Yokogawa-Electric-Corporation', + '1282' => 'Davicom-Semiconductor-Inc.', + '1284' => 'Sahara-Networks-Inc.', + '1285' => 'Platform-Technologies-Inc.', + '1286' => 'Mazet-GmbH', + '1287' => 'M-Pact-Inc.', + '1288' => 'Timestep-Corporation', + '1289' => 'AVC-Technology-Inc.', + '128a' => 'Asante-Technologies-Inc.', + '128b' => 'Transwitch-Corporation', + '128c' => 'Retix-Corporation', + '128d' => 'G2-Networks-Inc.', + '128f' => 'Tateno-Dennou-Inc.', + '1290' => 'Sord-Computer-Corporation', + '1291' => 'NCS-Computer-Italia', + '1292' => 'Tritech-Microelectronics-Inc', + '1293' => 'Media-Reality-Technology', + '1294' => 'Rhetorex-Inc.', + '1295' => 'Imagenation-Corporation', + '1296' => 'Kofax-Image-Products', + '1299' => 'Knowledge-Technology-Lab.', + '129a' => 'VMetro-inc.', + '129b' => 'Image-Access', + '129c' => 'Jaycor', + '129d' => 'Compcore-Multimedia-Inc.', + '129e' => 'Victor-Company-of-Japan-Ltd.', + '129f' => 'OEC-Medical-Systems-Inc.', + '12a0' => 'Allen-Bradley-Company', + '12a1' => 'Simpact-Associates-Inc.', + '12a2' => 'Newgen-Systems-Corporation', + '12a3' => 'Lucent-Technologies', + '12a5' => 'Vision-Dynamics-Ltd.', + '12a6' => 'Scalable-Networks-Inc.', + '12a7' => 'AMO-GmbH', + '12a8' => 'News-Datacom', + '12a9' => 'Xiotech-Corporation', + '12aa' => 'SDL-Communications-Inc.', + '12ac' => 'Measurex-Corporation', + '12ad' => 'Multidata-GmbH', + '12ae' => 'Alteon-Networks-Inc.', + '12af' => 'TDK-USA-Corp', + '12b0' => 'Jorge-Scientific-Corp', + '12b1' => 'GammaLink', + '12b2' => 'General-Signal-Networks', + '12b3' => 'Inter-Face-Co-Ltd', + '12b4' => 'FutureTel-Inc', + '12b5' => 'Granite-Systems-Inc.', + '12b6' => 'Natural-Microsystems', + '12b8' => 'Korg', + '12ba' => 'BittWare-Inc.', + '12bb' => 'Nippon-Unisoft-Corporation', + '12bc' => 'Array-Microsystems', + '12bd' => 'Computerm-Corp.', + '12be' => 'Anchor-Chips-Inc.', + '12bf' => 'Fujifilm-Microdevices', + '12c0' => 'Infimed', + '12c1' => 'GMM-Research-Corp', + '12c2' => 'Mentec-Limited', + '12c3' => 'Holtek-Microelectronics-Inc', + '12c4' => 'Connect-Tech-Inc', + '12c5' => 'Picture-Elements-Incorporated', + '12c6' => 'Mitani-Corporation', + '12c7' => 'Dialogic-Corp', + '12c8' => 'G-Force-Co-Ltd', + '12c9' => 'Gigi-Operations', + '12ca' => 'Integrated-Computing-Engines', + '12cb' => 'Antex-Electronics-Corporation', + '12cd' => 'Aims-Lab', + '12ce' => 'Netspeed-Inc.', + '12cf' => 'Prophet-Systems-Inc.', + '12d0' => 'GDE-Systems-Inc.', + '12d1' => 'PSITech', + '12d3' => 'Vingmed-Sound-A-S', + '12d4' => 'Ulticom-Formerly-DGM-S', + '12d5' => 'Equator-Technologies-Inc', + '12d6' => 'Analogic-Corp', + '12d7' => 'Biotronic-SRL', + '12d8' => 'Pericom-Semiconductor', + '12d9' => 'Aculab-PLC', + '12da' => 'True-Time-Inc.', + '12db' => 'Annapolis-Micro-Systems-Inc', + '12dd' => 'Management-Graphics', + '12de' => 'Rainbow-Technologies', + '12df' => 'SBS-Technologies-Inc', + '12e0' => 'Chase-Research', + '12e1' => 'Nintendo-Co-Ltd', + '12e4' => 'Brooktrout-Technology-Inc', + '12e5' => 'Apex-Semiconductor-Inc', + '12e6' => 'Cirel-Systems', + '12e7' => 'Sunsgroup-Corporation', + '12e8' => 'Crisc-Corp', + '12e9' => 'GE-Spacenet', + '12ea' => 'Zuken', + '12eb' => 'Aureal-Semiconductor', + '12ec' => '3A-International-Inc.', + '12ed' => 'Optivision-Inc.', + '12ee' => 'Orange-Micro', + '12ef' => 'Vienna-Systems', + '12f0' => 'Pentek', + '12f1' => 'Sorenson-Vision-Inc', + '12f2' => 'Gammagraphx-Inc.', + '12f3' => 'Radstone-Technology', + '12f4' => 'Megatel', + '12f5' => 'Forks', + '12f6' => 'Dawson-France', + '12f7' => 'Cognex', + '12f8' => 'Electronic-Design-GmbH', + '12f9' => 'Four-Fold-Ltd', + '12fb' => 'Spectrum-Signal-Processing', + '12fc' => 'Capital-Equipment-Corp', + '12fd' => 'I2S', + '12ff' => 'Lexicon', + '1302' => 'Computer-Sciences-Corp', + '1303' => 'Innovative-Integration', + '1304' => 'Juniper-Networks', + '1305' => 'Netphone-Inc', + '1306' => 'Duet-Technologies', + '1308' => 'Jato-Technologies-Inc.', + '1309' => 'AB-Semiconductor-Ltd', + '130c' => 'Ambex-Technologies-Inc', + '130d' => 'Accelerix-Inc', + '130e' => 'Yamatake-Honeywell-Co.-Ltd', + '130f' => 'Advanet-Inc', + '1310' => 'Gespac', + '1311' => 'Videoserver-Inc', + '1312' => 'Acuity-Imaging-Inc', + '1313' => 'Yaskawa-Electric-Co.', + '1315' => 'Wavesat', + '1316' => 'Teradyne-Inc', + '1317' => 'ADMtek', + '1318' => 'Packet-Engines-Inc.', + '1319' => 'Fortemedia-Inc', + '131a' => 'Finisar-Corp.', + '131d' => 'Sysmic-Inc.', + '131e' => 'Xinex-Networks-Inc', + '131f' => 'Siig-Inc', + '1320' => 'Crypto-AG', + '1321' => 'Arcobel-Graphics-BV', + '1322' => 'MTT-Co.-Ltd', + '1323' => 'Dome-Inc', + '1324' => 'Sphere-Communications', + '1325' => 'Salix-Technologies-Inc', + '1326' => 'Seachange-international', + '1327' => 'Voss-scientific', + '1328' => 'quadrant-international', + '1329' => 'Productivity-Enhancement', + '132a' => 'Microcom-Inc.', + '132b' => 'Broadband-Technologies', + '132c' => 'Micrel-Inc', + '1330' => 'MMC-Networks', + '1331' => 'RadiSys-Corporation', + '1332' => 'Micro-Memory', + '1334' => 'Redcreek-Communications-Inc', + '1335' => 'Videomail-Inc', + '1337' => 'Third-Planet-Publishing', + '1338' => 'BT-Electronics', + '133a' => 'Vtel-Corp', + '133b' => 'Softcom-Microsystems', + '133c' => 'Holontech-Corp', + '133d' => 'SS-Technologies', + '133e' => 'Virtual-Computer-Corp', + '133f' => 'SCM-Microsystems', + '1340' => 'Atalla-Corp', + '1341' => 'Kyoto-Microcomputer-Co', + '1342' => 'Promax-Systems-Inc', + '1343' => 'Phylon-Communications-Inc', + '1345' => 'Arescom-Inc', + '1347' => 'Odetics', + '134a' => 'DTC-Technology-Corp.', + '134b' => 'ARK-Research-Corp.', + '134c' => 'Chori-Joho-System-Co.-Ltd', + '134d' => 'PCTel-Inc', + '134e' => 'CSTI', + '134f' => 'Algo-System-Co-Ltd', + '1350' => 'Systec-Co.-Ltd', + '1351' => 'Sonix-Inc', + '1353' => 'Thales-Idatys', + '1354' => 'Dwave-System-Inc', + '1355' => 'Kratos-Analytical-Ltd', + '1356' => 'The-Logical-Co', + '1359' => 'Prisa-Networks', + '135a' => 'Brain-Boxes', + '135b' => 'Giganet-Inc', + '135c' => 'Quatech-Inc', + '135d' => 'ABB-Network-Partner-AB', + '135e' => 'Sealevel-Systems-Inc', + '135f' => 'I-Data-International-A-S', + '1360' => 'Meinberg-Funkuhren', + '1361' => 'Soliton-Systems-K.K.', + '1362' => 'Fujifacom-Corporation', + '1363' => 'Phoenix-Technology-Ltd', + '1364' => 'ATM-Communications-Inc', + '1365' => 'Hypercope-GmbH', + '1366' => 'Teijin-Seiki-Co.-Ltd', + '1367' => 'Hitachi-Zosen-Corporation', + '1368' => 'Skyware-Corporation', + '1369' => 'Digigram', + '136a' => 'High-Soft-Tech', + '136b' => 'Kawasaki-Steel-Corporation', + '136c' => 'Adtek-System-Science-Co-Ltd', + '136d' => 'Gigalabs-Inc', + '136f' => 'Applied-Magic-Inc', + '1370' => 'ATL-Products', + '1371' => 'CNet-Technology-Inc', + '1373' => 'Silicon-Vision-Inc', + '1374' => 'Silicom-Ltd.', + '1375' => 'Argosystems-Inc', + '1376' => 'LMC', + '1378' => 'Telemann-Co.-Ltd', + '137a' => 'Mark-of-the-Unicorn-Inc', + '137b' => 'PPT-Vision', + '137c' => 'Iwatsu-Electric-Co-Ltd', + '137d' => 'Dynachip-Corporation', + '137f' => 'Japan-Satellite-Systems-Inc', + '1380' => 'Sanritz-Automation-Co-Ltd', + '1381' => 'Brains-Co.-Ltd', + '1383' => 'Controlnet-Inc', + '1385' => 'Netgear', + '1386' => 'Video-Domain-Technologies', + '1387' => 'Systran-Corp', + '1389' => 'Applicom-International', + '138a' => 'Fusion-Micromedia-Corp', + '138b' => 'Tokimec-Inc', + '138c' => 'Silicon-Reality', + '138d' => 'Future-Techno-Designs-pte-Ltd', + '138e' => 'Basler-GmbH', + '138f' => 'Patapsco-Designs-Inc', + '1390' => 'Concept-Development-Inc', + '1391' => 'Development-Concepts-Inc', + '1392' => 'Medialight-Inc', + '1393' => 'Moxa-Technologies-Co-Ltd', + '1394' => 'Level-One-Communications', + '1395' => 'Ambicom-Inc', + '1396' => 'Cipher-Systems-Inc', + '1397' => 'Cologne-Chip-Designs-GmbH', + '1398' => 'Clarion-co.-Ltd', + '1399' => 'Rios-systems-Co-Ltd', + '139a' => 'Alacritech-Inc', + '139c' => 'Quantum-3d-Inc', + '139d' => 'EPL-limited', + '139e' => 'Media4', + '139f' => 'Aethra-s.r.l.', + '13a0' => 'Crystal-Group-Inc', + '13a1' => 'Kawasaki-Heavy-Industries-Ltd', + '13a2' => 'Ositech-Communications-Inc', + '13a3' => 'Hifn-Inc.', + '13a4' => 'Rascom-Inc', + '13a5' => 'Audio-Digital-Imaging-Inc', + '13a6' => 'Videonics-Inc', + '13a7' => 'Teles-AG', + '13a8' => 'Exar-Corp.', + '13aa' => 'Broadband-Networks-Inc', + '13ab' => 'Arcom-Control-Systems-Ltd', + '13ac' => 'Motion-Media-Technology-Ltd', + '13ad' => 'Nexus-Inc', + '13ae' => 'ALD-Technology-Ltd', + '13af' => 'T.Sqware', + '13b0' => 'Maxspeed-Corp', + '13b1' => 'Tamura-corporation', + '13b2' => 'Techno-Chips-Co.-Ltd', + '13b3' => 'Lanart-Corporation', + '13b4' => 'Wellbean-Co-Inc', + '13b5' => 'ARM', + '13b6' => 'Dlog-GmbH', + '13b7' => 'Logic-Devices-Inc', + '13b8' => 'Nokia-Telecommunications-oy', + '13b9' => 'Elecom-Co-Ltd', + '13ba' => 'Oxford-Instruments', + '13bb' => 'Sanyo-Technosound-Co-Ltd', + '13bc' => 'Bitran-Corporation', + '13bd' => 'SHARP', + '13be' => 'Miroku-Jyoho-Service-Co.-Ltd', + '13bf' => 'Sharewave-Inc', + '13c0' => 'Microgate-Corporation', + '13c1' => '3ware-Inc', + '13c3' => 'Janz-Computer-AG', + '13c4' => 'Phase-Metrics', + '13c5' => 'Alphi-Technology-Corp', + '13c6' => 'Condor-Engineering-Inc', + '13c7' => 'Blue-Chip-Technology-Ltd', + '13c8' => 'Apptech-Inc', + '13c9' => 'Eaton-Corporation', + '13ca' => 'Iomega-Corporation', + '13cb' => 'Yano-Electric-Co-Ltd', + '13cc' => 'Metheus-Corporation', + '13ce' => 'Cocom-A-S', + '13cf' => 'Studio-Audio---Video-Ltd', + '13d0' => 'Techsan-Electronics-Co-Ltd', + '13d1' => 'Abocom-Systems-Inc', + '13d2' => 'Shark-Multimedia-Inc', + '13d3' => 'IMC-Networks', + '13d4' => 'Graphics-Microsystems-Inc', + '13d5' => 'Media-100-Inc', + '13d6' => 'K.I.-Technology-Co-Ltd', + '13d8' => 'Phobos-corporation', + '13d9' => 'Apex-PC-Solutions-Inc', + '13da' => 'Intresource-Systems-pte-Ltd', + '13dc' => 'Netboost-Corporation', + '13dd' => 'Multimedia-Bundle-Inc', + '13de' => 'ABB-Robotics-Products-AB', + '13df' => 'E-Tech-Inc', + '13e0' => 'GVC-Corporation', + '13e2' => 'Dynamics-Research-Corporation', + '13e3' => 'Nest-Inc', + '13e4' => 'Calculex-Inc', + '13e5' => 'Telesoft-Design-Ltd', + '13e6' => 'Argosy-research-Inc', + '13e7' => 'NAC-Incorporated', + '13e8' => 'Chip-Express-Corporation', + '13e9' => 'Intraserver-Technology-Inc', + '13ea' => 'Dallas-Semiconductor', + '13eb' => 'Hauppauge-Computer-Works-Inc', + '13ec' => 'Zydacron-Inc', + '13ed' => 'Raytheion-E-Systems', + '13ef' => 'Coppercom-Inc', + '13f0' => 'Sundance-Technology-Inc---IC-Plus-Corp', + '13f1' => 'Oce---Technologies-B.V.', + '13f2' => 'Ford-Microelectronics-Inc', + '13f3' => 'Mcdata-Corporation', + '13f4' => 'Troika-Networks-Inc.', + '13f5' => 'Kansai-Electric-Co.-Ltd', + '13f6' => 'C-Media-Electronics-Inc', + '13f7' => 'Wildfire-Communications', + '13f8' => 'Ad-Lib-Multimedia-Inc', + '13f9' => 'NTT-Advanced-Technology-Corp.', + '13fa' => 'Pentland-Systems-Ltd', + '13fb' => 'Aydin-Corp', + '13fd' => 'Micro-Science-Inc', + '13fe' => 'Advantech-Co.-Ltd', + '13ff' => 'Silicon-Spice-Inc', + '1400' => 'Artx-Inc', + '1401' => 'CR-Systems-A-S', + '1402' => 'Meilhaus-Electronic-GmbH', + '1403' => 'Ascor-Inc', + '1404' => 'Fundamental-Software-Inc', + '1405' => 'Excalibur-Systems-Inc', + '1406' => 'Oce-Printing-Systems-GmbH', + '1407' => 'Lava-Computer-mfg-Inc', + '1408' => 'Aloka-Co.-Ltd', + '1409' => 'Timedia-Technology-Co-Ltd', + '140a' => 'DSP-Research-Inc', + '140c' => 'Elmic-Systems-Inc', + '140d' => 'Matsushita-Electric-Works-Ltd', + '140e' => 'Goepel-Electronic-GmbH', + '140f' => 'Salient-Systems-Corp', + '1410' => 'Midas-lab-Inc', + '1411' => 'Ikos-Systems-Inc', + '1412' => 'VIA-Technologies-Inc.', + '1413' => 'Addonics', + '1414' => 'Microsoft', + '1415' => 'Oxford-Semiconductor-Ltd', + '1416' => 'Multiwave-Innovation-pte-Ltd', + '1417' => 'Convergenet-Technologies-Inc', + '1419' => 'Excel-Switching-Corp', + '141a' => 'Apache-Micro-Peripherals-Inc', + '141b' => 'Zoom-Telephonics-Inc', + '141d' => 'Digitan-Systems-Inc', + '141e' => 'Fanuc-Ltd', + '141f' => 'Visiontech-Ltd', + '1420' => 'Psion-Dacom-plc', + '1421' => 'Ads-Technologies-Inc', + '1422' => 'Ygrec-Systems-Co-Ltd', + '1423' => 'Custom-Technology-Corp.', + '1424' => 'Videoserver-Connections', + '1425' => 'Chelsio-Communications-Inc', + '1426' => 'Storage-Technology-Corp.', + '1427' => 'Better-On-Line-Solutions', + '1428' => 'Edec-Co-Ltd', + '1429' => 'Unex-Technology-Corp.', + '142a' => 'Kingmax-Technology-Inc', + '142b' => 'Radiolan', + '142c' => 'Minton-Optic-Industry-Co-Ltd', + '142d' => 'Pix-stream-Inc', + '142e' => 'Vitec-Multimedia', + '142f' => 'Radicom-Research-Inc', + '1431' => 'Gilat-Satellite-Networks', + '1432' => 'Edimax-Computer-Co.', + '1433' => 'Eltec-Elektronik-GmbH', + '1436' => 'CIS-Technology-Inc', + '1437' => 'Nissin-Inc-Co', + '1438' => 'Atmel-dream', + '143a' => 'Stargate-Solutions-Inc', + '143c' => 'Amlogic-Inc', + '143d' => 'Tamarack-Microelectronics-Inc', + '143e' => 'Jones-Futurex-Inc', + '1440' => 'ALGOL-Corp.', + '1441' => 'AGIE-Ltd', + '1442' => 'Phoenix-Contact-GmbH---Co.', + '1443' => 'Unibrain-S.A.', + '1444' => 'TRW', + '1445' => 'Logical-DO-Ltd', + '1446' => 'Graphin-Co-Ltd', + '1447' => 'AIM-GmBH', + '1448' => 'Alesis-Studio-Electronics', + '1449' => 'TUT-Systems-Inc', + '144a' => 'Adlink-Technology', + '144c' => 'Catalina-Research-Inc', + '144d' => 'Samsung-Electronics-Co-Ltd', + '144e' => 'OLITEC', + '144f' => 'Askey-Computer-Corp.', + '1450' => 'Octave-Communications-Ind.', + '1451' => 'SP3D-Chip-Design-GmBH', + '1453' => 'MYCOM-Inc', + '1454' => 'Altiga-Networks', + '1455' => 'Logic-Plus-Plus-Inc', + '1457' => 'Nuera-Communications-Inc', + '1458' => 'Giga-byte-Technology', + '1459' => 'DOOIN-Electronics', + '145a' => 'Escalate-Networks-Inc', + '145b' => 'PRAIM-SRL', + '145c' => 'Cryptek', + '145d' => 'Gallant-Computer-Inc', + '145e' => 'Aashima-Technology-B.V.', + '145f' => 'Baldor-Electric-Company', + '1460' => 'DYNARC-INC', + '1461' => 'Avermedia-Technologies-Inc', + '1463' => 'Fast-Corporation', + '1465' => 'GN-NETTEST-Telecom-DIV.', + '1466' => 'Designpro-Inc.', + '1467' => 'DIGICOM-SPA', + '1468' => 'AMBIT-Microsystem-Corp.', + '1469' => 'Cleveland-Motion-Controls', + '146a' => 'IFR', + '146b' => 'Parascan-Technologies-Ltd', + '146c' => 'Ruby-Tech-Corp.', + '146d' => 'Tachyon-INC.', + '1470' => 'Bay-Networks', + '1472' => 'DAIKIN-Industries-Ltd', + '1473' => 'ZAPEX-Technologies-Inc', + '1474' => 'Doug-Carson---Associates', + '1475' => 'PICAZO-Communications', + '1476' => 'MORTARA-Instrument-Inc', + '1477' => 'Net-Insight', + '1478' => 'DIATREND-Corporation', + '1479' => 'TORAY-Industries-Inc', + '147a' => 'FORMOSA-Industrial-Computing', + '147b' => 'ABIT-Computer-Corp.', + '147c' => 'AWARE-Inc.', + '147d' => 'Interworks-Computer-Products', + '147f' => 'NIHON-UNISYS-Ltd.', + '1480' => 'SCII-Telecom', + '1481' => 'BIOPAC-Systems-Inc', + '1483' => 'LABWAY-Corporation', + '1484' => 'Logic-Corporation', + '1485' => 'ERMA---Electronic-GmBH', + '1487' => 'MARQUETTE-Medical-Systems', + '1488' => 'KONTRON-Electronik-GmBH', + '1489' => 'KYE-Systems-Corp', + '148a' => 'OPTO', + '148b' => 'INNOMEDIALOGIC-Inc.', + '148c' => 'C.P.-Technology-Co.-Ltd', + '148d' => 'DIGICOM-Systems-Inc.', + '148e' => 'OSI-Plus-Corporation', + '148f' => 'Plant-Equipment-Inc.', + '1490' => 'Stone-Microsystems-PTY-Ltd.', + '1491' => 'ZEAL-Corporation', + '1492' => 'Time-Logic-Corporation', + '1493' => 'MAKER-Communications', + '1494' => 'WINTOP-Technology-Inc.', + '1496' => 'JOYTECH-Computer-Co.-Ltd.', + '1497' => 'SMA-Regelsysteme-GmBH', + '1498' => 'TEWS-Technologies-GmbH', + '1499' => 'EMTEC-CO.-Ltd', + '149a' => 'ANDOR-Technology-Ltd', + '149b' => 'SEIKO-Instruments-Inc', + '149c' => 'OVISLINK-Corp.', + '149d' => 'NEWTEK-Inc', + '149e' => 'Mapletree-Networks-Inc.', + '149f' => 'LECTRON-Co-Ltd', + '14a0' => 'SOFTING-GmBH', + '14a1' => 'Systembase-Co-Ltd', + '14a2' => 'Millennium-Engineering-Inc', + '14a3' => 'Maverick-Networks', + '14a4' => 'GVC-BCM-Advanced-Research', + '14a6' => 'INOVA-Computers-GmBH---Co-KG', + '14a7' => 'MYTHOS-Systems-Inc', + '14a9' => 'HIVERTEC-Inc', + '14aa' => 'Advanced-MOS-Technology-Inc', + '14ab' => 'Mentor-Graphics-Corp.', + '14ac' => 'Novaweb-Technologies-Inc', + '14ad' => 'Time-Space-Radio-AB', + '14ae' => 'CTI-Inc', + '14af' => 'Guillemot-Corporation', + '14b1' => 'Nextcom-K.K.', + '14b2' => 'ENNOVATE-Networks-Inc', + '14b3' => 'XPEED-Inc', + '14b5' => 'Creamware-GmBH', + '14b6' => 'Quantum-Data-Corp.', + '14b7' => 'PROXIM-Inc', + '14b8' => 'Techsoft-Technology-Co-Ltd', + '14b9' => 'Cisco-Systems-Inc.', + '14ba' => 'INTERNIX-Inc.', + '14bb' => 'SEMTECH-Corporation', + '14bc' => 'Globespan-Semiconductor-Inc.', + '14bd' => 'CARDIO-Control-N.V.', + '14be' => 'L3-Communications', + '14bf' => 'SPIDER-Communications-Inc.', + '14c0' => 'COMPAL-Electronics-Inc', + '14c1' => 'MYRICOM-Inc.', + '14c2' => 'DTK-Computer', + '14c3' => 'MEDIATEK-Corp.', + '14c5' => 'Automation-Products-AB', + '14c6' => 'Data-Race-Inc', + '14c8' => 'Turbocomm-Tech.-Inc.', + '14c9' => 'ODIN-Telesystems-Inc', + '14ca' => 'PE-Logic-Corp.', + '14cb' => 'Billionton-Systems-Inc', + '14cc' => 'NAKAYO-Telecommunications-Inc', + '14cd' => 'Universal-Scientific-Ind.', + '14ce' => 'Whistle-Communications', + '14cf' => 'TEK-Microsystems-Inc.', + '14d0' => 'Ericsson-Axe-R---D', + '14d1' => 'Computer-Hi-Tech-Co-Ltd', + '14d2' => 'Titan-Electronics-Inc', + '14d3' => 'CIRTECH-UK-Ltd', + '14d4' => 'Panacom-Technology-Corp', + '14d5' => 'Nitsuko-Corporation', + '14d6' => 'Accusys-Inc', + '14d7' => 'Hirakawa-Hewtech-Corp', + '14d8' => 'HOPF-Elektronik-GmBH', + '14db' => 'AFAVLAB-Technology-Inc', + '14dc' => 'Amplicon-Liveline-Ltd', + '14dd' => 'Boulder-Design-Labs-Inc', + '14df' => 'ASIC-Communications-Corp', + '14e1' => 'INVERTEX', + '14e2' => 'INFOLIBRIA', + '14e3' => 'AMTELCO', + '14e4' => 'Broadcom', + '14e5' => 'Pixelfusion-Ltd', + '14e6' => 'SHINING-Technology-Inc', + '14e7' => '3CX', + '14e8' => 'RAYCER-Inc', + '14e9' => 'GARNETS-System-CO-Ltd', + '14ea' => 'Planex-Communications-Inc', + '14eb' => 'SEIKO-EPSON-Corp', + '14ec' => 'ACQIRIS', + '14ed' => 'DATAKINETICS-Ltd', + '14ee' => 'MASPRO-KENKOH-Corp', + '14ef' => 'CARRY-Computer-ENG.-CO-Ltd', + '14f0' => 'CANON-RESEACH-CENTRE-FRANCE', + '14f1' => 'Conexant-Systems-Inc.', + '14f2' => 'MOBILITY-Electronics', + '14f3' => 'BroadLogic', + '14f5' => 'SOPAC-Ltd', + '14f6' => 'COYOTE-Technologies-LLC', + '14f7' => 'WOLF-Technology-Inc', + '14f8' => 'AUDIOCODES-Inc', + '14f9' => 'AG-COMMUNICATIONS', + '14fa' => 'WANDEL---GOLTERMANN', + '14fb' => 'TRANSAS-MARINE-UK-Ltd', + '14fc' => 'Quadrics-Ltd', + '14fd' => 'JAPAN-Computer-Industry-Inc', + '14fe' => 'ARCHTEK-TELECOM-Corp', + '14ff' => 'TWINHEAD-INTERNATIONAL-Corp', + '1500' => 'DELTA-Electronics-Inc', + '1501' => 'BANKSOFT-CANADA-Ltd', + '1503' => 'KAWASAKI-LSI-USA-Inc', + '1504' => 'KAISER-Electronics', + '1506' => 'CHAMELEON-Systems-Inc', + '150a' => 'FORVUS-RESEARCH-Inc', + '150b' => 'YAMASHITA-Systems-Corp', + '150c' => 'KYOPAL-CO-Ltd', + '150d' => 'WARPSPPED-Inc', + '150e' => 'C-PORT-Corp', + '150f' => 'INTEC-GmbH', + '1510' => 'BEHAVIOR-TECH-Computer-Corp', + '1511' => 'CENTILLIUM-Technology-Corp', + '1512' => 'ROSUN-Technologies-Inc', + '1513' => 'Raychem', + '1514' => 'TFL-LAN-Inc', + '1515' => 'Advent-design', + '1516' => 'MYSON-Technology-Inc', + '1517' => 'ECHOTEK-Corp', + '151a' => 'Globetek', + '151b' => 'COMBOX-Ltd', + '151c' => 'DIGITAL-AUDIO-LABS-Inc', + '151e' => 'MATRIX-Corp', + '151f' => 'TOPIC-SEMICONDUCTOR-Corp', + '1520' => 'CHAPLET-System-Inc', + '1521' => 'BELL-Corp', + '1522' => 'MainPine-Ltd', + '1523' => 'MUSIC-Semiconductors', + '1524' => 'ENE-Technology-Inc', + '1525' => 'IMPACT-Technologies', + '1526' => 'ISS-Inc', + '1527' => 'SOLECTRON', + '1528' => 'ACKSYS', + '1529' => 'AMERICAN-MICROSystems-Inc', + '152a' => 'QUICKTURN-DESIGN-Systems', + '152b' => 'FLYTECH-Technology-CO-Ltd', + '152c' => 'MACRAIGOR-Systems-LLC', + '152d' => 'QUANTA-Computer-Inc', + '152e' => 'MELEC-Inc', + '152f' => 'Philips---CRYPTO', + '1530' => 'ACQIS-Technology-Inc', + '1531' => 'CHRYON-Corp', + '1532' => 'ECHELON-Corp', + '1533' => 'BALTIMORE', + '1534' => 'ROAD-Corp', + '1535' => 'EVERGREEN-Technologies-Inc', + '1536' => 'ACTIS-Computer', + '1537' => 'DATALEX-COMMUNCATIONS', + '1538' => 'ARALION-Inc', + '153a' => 'ONO-SOKKI', + '153b' => 'TERRATEC-Electronic-GmbH', + '153c' => 'ANTAL-Electronic', + '153d' => 'FILANET-Corp', + '153e' => 'TECHWELL-Inc', + '153f' => 'MIPS-Technologies-Inc.', + '1540' => 'PROVIDEO-MULTIMEDIA-Co-Ltd', + '1541' => 'MACHONE-Communications', + '1543' => 'SILICON-Laboratories', + '1544' => 'DCM-DATA-Systems', + '1545' => 'VISIONTEK', + '1546' => 'IOI-Technology-Corp', + '1547' => 'MITUTOYO-Corp', + '1548' => 'JET-PROPULSION-Laboratory', + '154a' => 'MAX-Technologies-Inc', + '154b' => 'COMPUTEX-Co-Ltd', + '154c' => 'VISUAL-Technology-Inc', + '154e' => 'SERVOTEST-Ltd', + '154f' => 'STRATABEAM-Technology', + '1550' => 'OPEN-NETWORK-Co-Ltd', + '1552' => 'RACAL-AIRTECH-Ltd', + '1553' => 'Chicony-Electronics-CO', + '1554' => 'PROLINK-Microsystems-Corp', + '1555' => 'GESYTEC-GmBH', + '1556' => 'PLD-APPLICATIONS', + '1557' => 'MEDIASTAR-Co-Ltd', + '1558' => 'CLEVO-KAPOK-Computer', + '1559' => 'SI-LOGIC-Ltd', + '155a' => 'INNOMEDIA-Inc', + '155b' => 'PROTAC-INTERNATIONAL-Corp', + '155c' => 'Cemax-Icon-Inc', + '155d' => 'Mac-System-Co-Ltd', + '155e' => 'LP-Elektronik-GmbH', + '155f' => 'Perle-Systems-Ltd', + '1561' => 'Viewgraphics-Inc', + '1562' => 'Symbol-Technologies', + '1563' => 'A-Trend-Technology-Co-Ltd', + '1565' => 'Biostar-Microtech-Intl-Corp', + '1566' => 'Ardent-Technologies-Inc', + '1567' => 'Jungsoft', + '1568' => 'DDK-Electronics-Inc', + '1569' => 'Palit-Microsystems-Inc.', + '156a' => 'Avtec-Systems', + '156b' => '2wire-Inc', + '156c' => 'Vidac-Electronics-GmbH', + '156d' => 'Alpha-Top-Corp', + '156e' => 'Alfa-Inc', + '1570' => 'Lecroy-Corp', + '1571' => 'Contemporary-Controls', + '1572' => 'Otis-Elevator-Company', + '1573' => 'Lattice---Vantis', + '1574' => 'Fairchild-Semiconductor', + '1576' => 'Viewcast-COM', + '1578' => 'HITT', + '1579' => 'Dual-Technology-Corp', + '157a' => 'Japan-Elecronics-Ind-Inc', + '157b' => 'Star-Multimedia-Corp', + '157c' => 'Eurosoft-UK', + '157d' => 'Gemflex-Networks', + '157e' => 'Transition-Networks', + '157f' => 'PX-Instruments-Technology-Ltd', + '1580' => 'Primex-Aerospace-Co', + '1581' => 'SEH-Computertechnik-GmbH', + '1582' => 'Cytec-Corp', + '1583' => 'Inet-Technologies-Inc', + '1584' => 'Uniwill-Computer-Corp', + '1585' => 'Logitron', + '1586' => 'Lancast-Inc', + '1587' => 'Konica-Corp', + '1588' => 'Solidum-Systems-Corp', + '1589' => 'Atlantek-Microsystems-Pty-Ltd', + '158a' => 'Digalog-Systems-Inc', + '158b' => 'Allied-Data-Technologies', + '158d' => 'Point-Multimedia-Systems', + '158e' => 'Lara-Technology-Inc', + '158f' => 'Ditect-Coop', + '1590' => '3PAR-Inc.', + '1591' => 'ARN', + '1592' => 'Syba-Tech-Ltd', + '1593' => 'Bops-Inc', + '1594' => 'Netgame-Ltd', + '1595' => 'Diva-Systems-Corp', + '1596' => 'Folsom-Research-Inc', + '1597' => 'Memec-Design-Services', + '1598' => 'Granite-Microsystems', + '1599' => 'Delta-Electronics-Inc', + '159a' => 'General-Instrument', + '159b' => 'Faraday-Technology-Corp', + '159c' => 'Stratus-Computer-Systems', + '159e' => 'A-Max-Technology-Co-Ltd', + '159f' => 'Galea-Network-Security', + '15a0' => 'Compumaster-SRL', + '15a1' => 'Geocast-Network-Systems', + '15a2' => 'Catalyst-Enterprises-Inc', + '15a3' => 'Italtel', + '15a4' => 'X-Net-OY', + '15a5' => 'Toyota-Macs-Inc', + '15a7' => 'SSE-Telecom-Inc', + '15aa' => 'Moreton-Bay', + '15ab' => 'Bluesteel-Networks-Inc', + '15ac' => 'North-Atlantic-Instruments', + '15ad' => 'VMware', + '15ae' => 'Amersham-Pharmacia-Biotech', + '15b0' => 'Zoltrix-International-Ltd', + '15b1' => 'Source-Technology-Inc', + '15b2' => 'Mosaid-Technologies-Inc', + '15b3' => 'Mellanox-Technologies', + '15b4' => 'CCI-TRIAD', + '15b5' => 'Cimetrics-Inc', + '15b6' => 'Texas-Memory-Systems-Inc', + '15b7' => 'Sandisk-Corp', + '15b8' => 'ADDI-DATA-GmbH', + '15ba' => 'Impacct-Technology-Corp', + '15bb' => 'Portwell-Inc', + '15bc' => 'Agilent-Technologies', + '15bd' => 'DFI-Inc', + '15be' => 'Sola-Electronics', + '15bf' => 'High-Tech-Computer-Corp-HTC', + '15c0' => 'BVM-Ltd', + '15c1' => 'Quantel', + '15c2' => 'Newer-Technology-Inc', + '15c3' => 'Taiwan-Mycomp-Co-Ltd', + '15c4' => 'EVSX-Inc', + '15c5' => 'Procomp-Informatics-Ltd', + '15c8' => 'Penta-Media-Co-Ltd', + '15c9' => 'Serome-Technology-Inc', + '15ca' => 'Bitboys-OY', + '15cb' => 'AG-Electronics-Ltd', + '15cc' => 'Hotrail-Inc', + '15cd' => 'Dreamtech-Co-Ltd', + '15ce' => 'Genrad-Inc', + '15cf' => 'Hilscher-GmbH', + '15d1' => 'Infineon-Technologies-AG', + '15d3' => 'NDS-Technologies-Israel-Ltd', + '15d4' => 'Iwill-Corp', + '15d5' => 'Tatung-Co', + '15d6' => 'Entridia-Corp', + '15d7' => 'Rockwell-Collins-Inc', + '15d8' => 'Cybernetics-Technology-Co-Ltd', + '15d9' => 'Super-Micro-Computer-Inc', + '15da' => 'Cyberfirm-Inc', + '15db' => 'Applied-Computing-Systems-Inc', + '15dc' => 'Litronic-Inc', + '15dd' => 'Sigmatel-Inc', + '15de' => 'Malleable-Technologies-Inc', + '15df' => 'Infinilink-Corp', + '15e0' => 'Cacheflow-Inc', + '15e1' => 'Voice-Technologies-Group-Inc', + '15e2' => 'Quicknet-Technologies-Inc', + '15e3' => 'Networth-Technologies-Inc', + '15e4' => 'VSN-Systemen-BV', + '15e5' => 'Valley-technologies-Inc', + '15e6' => 'Agere-Inc', + '15e7' => 'Get-Engineering-Corp', + '15e8' => 'National-Datacomm-Corp', + '15e9' => 'Pacific-Digital-Corp', + '15ea' => 'Tokyo-Denshi-Sekei-K.K.', + '15ec' => 'Beckhoff-GmbH', + '15ed' => 'Macrolink-Inc', + '15ee' => 'In-Win-Development-Inc', + '15ef' => 'Intelligent-Paradigm-Inc', + '15f0' => 'B-Tree-Systems-Inc', + '15f1' => 'Times-N-Systems-Inc', + '15f2' => 'Diagnostic-Instruments-Inc', + '15f3' => 'Digitmedia-Corp', + '15f4' => 'Valuesoft', + '15f5' => 'Power-Micro-Research', + '15f6' => 'Extreme-Packet-Device-Inc', + '15f7' => 'Banctec', + '15f8' => 'Koga-Electronics-Co', + '15f9' => 'Zenith-Electronics-Corp', + '15fa' => 'J.P.-Axzam-Corp', + '15fb' => 'Zilog-Inc', + '15fc' => 'Techsan-Electronics-Co-Ltd', + '15fd' => 'N-CUBED.NET', + '15fe' => 'Kinpo-Electronics-Inc', + '15ff' => 'Fastpoint-Technologies-Inc', + '1600' => 'Northrop-Grumman---Canada-Ltd', + '1601' => 'Tenta-Technology', + '1602' => 'Prosys-tec-Inc', + '1603' => 'Nokia-Wireless-Communications', + '1605' => 'Pairgain-Technologies', + '1606' => 'Europop-AG', + '1609' => 'Scimetric-Instruments-Inc', + '1612' => 'Telesynergy-Research-Inc.', + '1618' => 'Stone-Ridge-Technology', + '1619' => 'FarSite-Communications-Ltd', + '161f' => 'Rioworks', + '1626' => 'TDK-Semiconductor-Corp.', + '1629' => 'Kongsberg-Spacetec-AS', + '1631' => 'Packard-Bell-B.V.', + '163c' => 'Smart-Link-Ltd.', + '1641' => 'MKNet-Corp.', + '165a' => 'Epix-Inc', + '165f' => 'Linux-Media-Labs-LLC', + '1661' => 'Worldspace-Corp.', + '1668' => 'Actiontec-Electronics-Inc', + '1677' => 'Bernecker-+-Rainer', + '1678' => 'NetEffect', + '1679' => 'Tokyo-Electron-Device-Ltd.', + '167b' => 'ZyDAS-Technology-Corp.', + '167e' => 'ONNTO-Corp.', + '1681' => 'Hercules', + '1682' => 'XFX-Pine-Group-Inc.', + '1688' => 'CastleNet-Technology-Inc.', + '168c' => 'Atheros', + '1695' => 'EPoX-Computer-Co.-Ltd.', + '169c' => 'Netcell-Corporation', + '16a5' => 'Tekram-Technology-Co.Ltd.', + '16ab' => 'Global-Sun-Technology-Inc', + '16ae' => 'SafeNet-Inc', + '16af' => 'SparkLAN-Communications-Inc.', + '16b4' => 'Aspex-Semiconductor-Ltd', + '16b8' => 'Sonnet-Technologies-Inc.', + '16be' => 'Creatix-Polymedia-GmbH', + '16c6' => 'Micrel-Kendin', + '16c8' => 'Octasic-Inc.', + '16c9' => 'EONIC-B.V.-The-Netherlands', + '16ca' => 'CENATEK-Inc', + '16cd' => 'Densitron-Technologies', + '16ce' => 'Roland-Corp.', + '16d5' => 'Acromag-Inc.', + '16da' => 'Advantech-Co.-Ltd.', + '16df' => 'PIKA-Technologies-Inc.', + '16e2' => 'Geotest-MTS', + '16e3' => 'European-Space-Agency', + '16e5' => 'Intellon-Corp.', + '16ec' => 'U.S.-Robotics', + '16ed' => 'Sycron-N.-V.', + '16f3' => 'Jetway-Information-Co.-Ltd.', + '16f4' => 'Vweb-Corp', + '16f6' => 'VideoTele.com-Inc.', + '1705' => 'Digital-First-Inc.', + '170b' => 'NetOctave', + '170c' => 'YottaYotta-Inc.', + '1719' => 'EZChip-Technologies', + '172a' => 'Accelerated-Encryption', + '1734' => 'Fujitsu-Technology-Solutions', + '1735' => 'Aten-International-Co.-Ltd.', + '1737' => 'Linksys', + '173b' => 'Altima-nee-Broadcom', + '1743' => 'Peppercon-AG', + '1745' => 'ViXS-Systems-Inc.', + '1749' => 'RLX-Technologies', + '174b' => 'PC-Partner-Limited', + '174d' => 'WellX-Telecom-SA', + '175c' => 'AudioScience-Inc', + '175e' => 'Sanera-Systems-Inc.', + '1760' => 'TEDIA-spol.-s-r.-o.', + '1771' => 'InnoVISION-Multimedia-Ltd.', + '177d' => 'Cavium-Networks', + '1789' => 'Ennyah-Technologies-Corp.', + '1797' => 'Techwell-Inc.', + '1799' => 'Belkin', + '179a' => 'id-Quantique', + '179c' => 'Data-Patterns', + '17a0' => 'Genesys-Logic-Inc', + '17aa' => 'Lenovo', + '17ab' => 'Phillips-Components', + '17b3' => 'Hawking-Technologies', + '17b4' => 'Indra-Networks-Inc.', + '17c0' => 'Wistron-Corp.', + '17c2' => 'Newisys-Inc.', + '17cb' => 'Airgo-Networks-Inc', + '17cc' => 'NetChip-Technology-Inc', + '17cf' => 'Z-Com-Inc.', + '17d3' => 'Areca-Technology-Corp.', + '17db' => 'Cray-Inc', + '17de' => 'KWorld-Computer-Co.-Ltd.', + '17e4' => 'Sectra-AB', + '17e6' => 'Entropic-Communications-Inc.', + '17ee' => 'Connect-Components-Ltd', + '17f2' => 'Albatron-Corp.', + '17f3' => 'RDC-Semiconductor-Inc.', + '17f7' => 'Topdek-Semiconductor-Inc.', + '17fe' => 'InProComm-Inc.', + '17ff' => 'Benq-Corporation', + '1803' => 'ProdaSafe-GmbH', + '1805' => 'Euresys-S.A.', + '1809' => 'Lumanate-Inc.', + '1813' => 'Ambient-Technologies-Inc', + '1814' => 'RaLink', + '1815' => 'Devolo-AG', + '1820' => 'InfiniCon-Systems-Inc.', + '1822' => 'Twinhan-Technology-Co.-Ltd', + '182d' => 'SiteCom-Europe-BV', + '182e' => 'Raza-Microelectronics-Inc.', + '1830' => 'Credence-Systems-Corporation', + '183b' => 'MikroM-GmbH', + '1849' => 'ASRock-Incorporation', + '184a' => 'Thales-Computers', + '1851' => 'Microtune-Inc.', + '1852' => 'Anritsu-Corp.', + '1854' => 'LG-Electronics-Inc.', + '185b' => 'Compro-Technology-Inc.', + '185f' => 'Wistron-NeWeb-Corp.', + '1864' => 'SilverBack', + '1867' => 'Topspin-Communications', + '186c' => 'Humusoft-s.r.o.', + '186f' => 'WiNRADiO-Communications', + '1876' => 'L-3-Communications', + '1885' => 'Avvida-Systems-Inc.', + '1888' => 'Varisys-Ltd', + '188a' => 'Ample-Communications-Inc', + '1890' => 'Egenera-Inc.', + '1894' => 'KNC-One', + '1897' => 'AMtek', + '18a1' => 'Astute-Networks-Inc.', + '18a2' => 'Stretch-Inc.', + '18a3' => 'AT-T', + '18ac' => 'DViCO-Corporation', + '18b8' => 'Ammasso', + '18bc' => 'Info-Tek-Corp.', + '18c8' => 'Cray-Inc Nee-Octigabay-System', + '18c9' => 'ARVOO-Engineering-BV', + '18d2' => 'Sitecom', + '18d8' => 'Dialogue-Technology-Corp.', + '18dd' => 'Artimi-Inc', + '18e6' => 'MPL-AG', + '18ec' => 'Cesnet-z.s.p.o.', + '18ee' => 'Chenming-Mold-Ind.-Corp.', + '18f1' => 'Spectrum-GmbH', + '18f4' => 'Napatech-A-S', + '18f6' => 'NextIO', + '18f7' => 'Commtech-Inc.', + '18fb' => 'Resilience-Corporation', + '1905' => 'Micronas-USA-Inc.', + '1912' => 'Renesas-Technology-Corp.', + '1919' => 'Soltek-Computer-Inc.', + '1923' => 'Sangoma-Technologies-Corp.', + '1924' => 'Solarflare-Communications', + '192e' => 'TransDimension', + '1931' => 'Option-N.V.', + '1932' => 'DiBcom', + '193c' => 'MAXIM-Integrated-Products', + '193f' => 'Comtech-AHA-Corp.', + '1942' => 'ClearSpeed-Technology-plc', + '1947' => 'C-guys-Inc.', + '1948' => 'Enterasys-Networks', + '194a' => 'DapTechnology-B.V.', + '1954' => 'Curtis-Inc.', + '1957' => 'Freescale-Semiconductor-Inc', + '1958' => 'Faster-Technology-LLC.', + '1959' => 'PA-Semi-Inc', + '1966' => 'Orad-Hi-Tec-Systems', + '1969' => 'Atheros', + '196a' => 'Sensory-Networks-Inc.', + '196d' => 'Club-3D-BV', + '1971' => 'AGEIA-Technologies-Inc.', + '1977' => 'Parsec', + '197b' => 'JMicron-Technology-Corp.', + '1989' => 'Montilio-Inc.', + '198a' => 'Nallatech-Ltd.', + '199a' => 'Pulse-LINK-Inc.', + '199d' => 'Xsigo-Systems', + '199f' => 'Auvitek', + '19a8' => 'DAQDATA-GmbH', + '19ac' => 'Kasten-Chase-Applied-Research', + '19ae' => 'Progeny-Systems-Corporation', + '19c1' => 'Exegy-Inc.', + '19d4' => 'Quixant-Limited', + '19de' => 'Pico-Computing', + '19e2' => 'Vector-Informatik-GmbH', + '19e3' => 'DDRdrive-LLC', + '19ee' => 'Netronome-Systems-Inc.', + '1a03' => 'ASPEED-Technology-Inc.', + '1a07' => 'Kvaser-AB', + '1a08' => 'Sierra-semiconductor', + '1a0e' => 'DekTec-Digital-Video-B.V.', + '1a17' => 'Force10-Networks-Inc.', + '1a1d' => 'GFaI-e.V.', + '1a1e' => '3Leaf-Systems-Inc.', + '1a22' => 'Ambric-Inc.', + '1a29' => 'Fortinet-Inc.', + '1a2b' => 'Ascom-AG', + '1a3b' => 'AzureWave', + '1a51' => 'Hectronic-AB', + '1a56' => 'Bigfoot-Networks-Inc.', + '1a57' => 'Highly-Reliable-Systems', + '1a58' => 'Razer-USA-Ltd.', + '1a5d' => 'Celoxica', + '1a5e' => 'Aprius-Inc.', + '1a5f' => 'System-TALKS-Inc.', + '1a68' => 'VirtenSys-Limited', + '1a71' => 'XenSource-Inc.', + '1a73' => 'Violin-Memory-Inc', + '1a76' => 'Wavesat', + '1a77' => 'Lightfleet-Corporation', + '1a78' => 'Virident-Systems-Inc.', + '1a84' => 'Commex-Technologies', + '1a88' => 'MEN-Mikro-Elektronik', + '1a8c' => 'Verigy-Pte.-Ltd.', + '1a8e' => 'DRS-Technologies', + '1aa8' => 'Ciprico-Inc.', + '1aae' => 'Global-Velocity-Inc.', + '1ab6' => 'CalDigit-Inc.', + '1ab9' => 'Espia-Srl', + '1ad7' => 'Spectracom-Corporation', + '1ade' => 'Spin-Master-Ltd.', + '1ae0' => 'Google-Inc.', + '1ae8' => 'Silicon-Software-GmbH', + '1aec' => 'Wolfson-Microelectronics', + '1aed' => 'Fusion-io', + '1aee' => 'Caustic-Graphics-Inc.', + '1af5' => 'Netezza-Corp.', + '1afa' => 'J---W-Electronics-Co.-Ltd.', + '1b03' => 'Magnum-Semiconductor-Inc', + '1b13' => 'Jaton-Corp', + '1b1a' => 'K-F-Computing-Research-Co.', + '1b36' => 'Red-Hat-Inc.', + '1b3a' => 'Westar-Display-Technologies', + '1b3e' => 'Teradata-Corp.', + '1b4b' => 'Marvell-Technology-Group-Ltd.', + '1b55' => 'NetUP-Inc.', + '1b73' => 'Fresco-Logic', + '1bad' => 'ReFLEX-CES', + '1bb3' => 'Bluecherry', + '1bf4' => 'VTI-Instruments-Corporation', + '1c1c' => 'Symphony', + '1d44' => 'DPT', + '1de1' => 'Tekram-Technology-Co.Ltd.', + '1fc9' => 'Tehuti-Networks-Ltd.', + '1fce' => 'Cognio-Inc.', + '1fd4' => 'SUNIX-Co.-Ltd.', + '2000' => 'Smart-Link-Ltd.', + '2001' => 'Temporal-Research-Ltd', + '2003' => 'Smart-Link-Ltd.', + '2004' => 'Smart-Link-Ltd.', + '2116' => 'ZyDAS-Technology-Corp.', + '21c3' => '21st-Century-Computer-Corp.', + '2348' => 'Racore', + '2646' => 'Kingston-Technologies', + '270b' => 'Xantel-Corporation', + '270f' => 'Chaintech-Computer-Co.-Ltd', + '2711' => 'AVID-Technology-Inc.', + '29b4' => '82q35-Express-MEI-Controller', + '2a15' => '3D-Vision---', + '3000' => 'Hansol-Electronics-Inc.', + '3142' => 'Post-Impression-Systems.', + '3388' => 'Hint-Corp', + '3411' => 'Quantum-Designs-H.K.-Inc', + '3442' => 'Bihl+Wiedemann-GmbH', + '3475' => 'Arastra-Inc.', + '3513' => 'ARCOM-Control-Systems-Ltd', + '3842' => 'eVga.com.-Corp.', + '38ef' => '4Links', + '3d3d' => '3DLabs', + '4005' => 'Avance-Logic-Inc.', + '4033' => 'Addtron-Technology-Co-Inc.', + '4040' => 'NetXen-Incorporated', + '4143' => 'Digital-Equipment-Corp', + '4144' => 'Alpha-Data', + '4150' => 'ONA-Electroerosion', + '415a' => 'Auzentech-Inc.', + '416c' => 'Aladdin-Knowledge-Systems', + '434e' => 'CAST-Navigation-LLC', + '4444' => 'Internext-Compression-Inc', + '4468' => 'Bridgeport-machines', + '4594' => 'Cogetec-Informatique-Inc', + '45fb' => 'Baldor-Electric-Company', + '4680' => 'Umax-Computer-Corp', + '4916' => 'RedCreek-Communications-Inc', + '4943' => 'Growth-Networks', + '494f' => 'ACCES-I-O-Products-Inc.', + '4978' => 'Axil-Computer-Inc', + '4a14' => 'NetVin', + '4b10' => 'Buslogic-Inc.', + '4c48' => 'LUNG-HWA-Electronics', + '4c53' => 'SBS-Technologies', + '4ca1' => 'Seanix-Technology-Inc', + '4d51' => 'MediaQ-Inc.', + '4d54' => 'Microtechnica-Co-Ltd', + '4d56' => 'MATRIX-VISION-GmbH', + '4ddc' => 'ILC-Data-Device-Corp', + '5045' => 'University-of-Toronto', + '5046' => 'GemTek-Technology-Corporation', + '5053' => 'Voyetra-Technologies', + '50b2' => 'TerraTec-Electronic-GmbH', + '5136' => 'S-S-Technologies', + '5143' => 'Qualcomm-Inc', + '5145' => 'Ensoniq-Old', + '5168' => 'Animation-Technologies-Inc.', + '5301' => 'Alliance-Semiconductor-Corp.', + '5333' => 'S3-Inc.', + '5431' => 'AuzenTech-Inc.', + '544c' => 'Teralogic-Inc', + '5455' => 'Technische-University-Berlin', + '5456' => 'GoTView', + '5519' => 'Cnet-Technologies-Inc.', + '5544' => 'Dunord-Technologies', + '5555' => 'Genroco-Inc', + '5646' => 'Vector-Fabrics-BV', + '5654' => 'VoiceTronix-Pty-Ltd', + '5700' => 'Netpower', + '584d' => 'AuzenTech-Co.-Ltd.', + '5851' => 'Exacq-Technologies', + '5853' => 'XenSource-Inc.', + '5ace' => 'Beholder-International-Ltd.', + '631c' => 'SmartInfra-Ltd', + '6356' => 'UltraStor', + '6409' => 'Logitec-Corp.', + '6549' => 'Teradici-Corp.', + '6900' => 'Red-Hat-Inc. nee-Qumranet', + '7063' => 'pcHDTV', + '7284' => 'HT-OMEGA-Inc.', + '7604' => 'O.N.-Electronic-Co-Ltd.', + '7bde' => 'MIDAC-Corporation', + '7fed' => 'PowerTV', + '8008' => 'Quancom-Electronic-GmbH', + '8086' => 'Intel', + '80ee' => 'InnoTek-Systemberatung-GmbH', + '8322' => 'Sodick-America-Corp.', + '8384' => 'SigmaTel', + '8401' => 'TRENDware-International-Inc.', + '8686' => 'ScaleMP', + '8800' => 'Trigem-Computer-Inc.', + '8866' => 'T-Square-Design-Inc.', + '8888' => 'Silicon-Magic', + '8912' => 'TRX', + '8e0e' => 'Computone-Corporation', + '8e2e' => 'KTI', + '9004' => 'Adaptec', + '9005' => 'Adaptec', + '907f' => 'Atronics', + '919a' => 'Gigapixel-Corp', + '9412' => 'Holtek', + '9699' => 'Omni-Media-Technology-Inc', + '9710' => 'NetMos-Technology', + '9902' => 'Stargen-Inc.', + 'a0a0' => 'AOPEN-Inc.', + 'a0f1' => 'UNISYS-Corporation', + 'a200' => 'NEC-Corporation', + 'a259' => 'Hewlett-Packard', + 'a25b' => 'Hewlett-Packard', + 'a304' => 'Sony', + 'a727' => '3Com-Corporation', + 'aa42' => 'Scitex-Digital-Video', + 'aa55' => 'Ncomputing-X300-PCI-Engine', + 'aaaa' => 'Adnaco-Technology-Inc.', + 'abcd' => 'Vadatech-Inc.', + 'ac3d' => 'Actuality-Systems', + 'ad00' => 'Alta-Data-Technologies-LLC', + 'b1b3' => 'Shiva-Europe-Limited', + 'bdbd' => 'Blackmagic-Design', + 'c001' => 'TSI-Telsys', + 'c0a9' => 'Micron-Crucial-Technology', + 'c0de' => 'Motorola', + 'c0fe' => 'Motion-Engineering-Inc.', + 'ca50' => 'Varian-Australia-Pty-Ltd', + 'cace' => 'CACE-Technologies-Inc.', + 'cafe' => 'Chrysalis-ITS', + 'cccc' => 'Catapult-Communications', + 'cddd' => 'Tyzx-Inc.', + 'ceba' => 'KEBA-AG', + 'd161' => 'Digium-Inc.', + 'd4d4' => 'Dy4-Systems-Inc', + 'd531' => 'I+ME-ACTIA-GmbH', + 'd84d' => 'Exsys', + 'db10' => 'Diablo-Technologies', + 'dead' => 'Indigita-Corporation', + 'deaf' => 'Middle-Digital-Inc.', + 'deda' => 'SoftHard-Technology-Ltd.', + 'e000' => 'Winbond', + 'e159' => 'Tiger-Jet-Network-Inc.', + 'e4bf' => 'EKF-Elektronik-GmbH', + 'e55e' => 'Essence-Technology-Inc.', + 'ea01' => 'Eagle-Technology', + 'eabb' => 'Aashima-Technology-B.V.', + 'ec80' => 'Belkin-Corporation', + 'edd8' => 'ARK-Logic-Inc', + 'f1d0' => 'AJA-Video', + 'f5f5' => 'F5-Networks-Inc.', + 'fa57' => 'Interagon-AS', + 'fab7' => 'Fabric7-Systems-Inc.', + 'febd' => 'Ultraview-Corp.', + 'feda' => 'Broadcom', + 'fede' => 'Fedetec-Inc.', + 'fffd' => 'XenSource-Inc.', + '1039' => 'Silicon-Integrated-Systems', + 'A259' => 'Hewlett-Packard', + ); + + public static $usbId = array( + '0001' => 'Frys-Electronics', + '0002' => 'Ingram', + '0003' => 'Club-Mac', + '0004' => 'Nebraska-Furniture-Mart', + '0053' => 'Planex', + '0079' => 'DragonRise-Inc.', + '0105' => 'Trust-International-B.V.', + '0145' => 'Unknown', + '0154' => 'LW154-Wireless-150N-Adapter', + '0218' => 'Hangzhou-Worlde', + '02ad' => 'HUMAX-Co.-Ltd.', + '0300' => 'MM300-eBook-Reader', + '0324' => 'OCZ-Technology-Inc', + '0325' => 'OCZ-Technology-Inc', + '0386' => 'LTS', + '03e8' => 'EndPoints-Inc.', + '03e9' => 'Thesys-Microelectronics', + '03ea' => 'Data-Broadcasting-Corp.', + '03eb' => 'Atmel-Corp.', + '03ec' => 'Iwatsu-America-Inc.', + '03ed' => 'Mitel-Corp.', + '03ee' => 'Mitsumi', + '03f0' => 'Hewlett-Packard', + '03f1' => 'Genoa-Technology', + '03f2' => 'Oak-Technology-Inc.', + '03f3' => 'Adaptec-Inc.', + '03f4' => 'Diebold-Inc.', + '03f5' => 'Siemens-Electromechanical', + '03f9' => 'KeyTronic-Corp.', + '03fb' => 'OPTi-Inc.', + '03fc' => 'Elitegroup-Computer-Systems', + '03fd' => 'Xilinx-Inc.', + '03fe' => 'Farallon-Comunications', + '0400' => 'National-Semiconductor-Corp.', + '0401' => 'National-Registry-Inc.', + '0402' => 'ALi-Corp.', + '0404' => 'NCR-Corp.', + '0405' => 'Synopsys-Inc.', + '0406' => 'Fujitsu-ICL-Computers', + '0408' => 'Quanta-Computer-Inc.', + '0409' => 'NEC-Corp.', + '040a' => 'Kodak-Co.', + '040b' => 'Weltrend-Semiconductor', + '040c' => 'VTech-Computers-Ltd', + '040d' => 'VIA-Technologies-Inc.', + '040e' => 'MCCI', + '040f' => 'Echo-Speech-Corp.', + '0411' => 'BUFFALO-INC---formerly-MelCo---Inc--', + '0412' => 'Award-Software-International', + '0413' => 'Leadtek-Research-Inc.', + '0414' => 'Giga-Byte-Technology-Co.-Ltd', + '0416' => 'Winbond-Electronics-Corp.', + '0417' => 'Symbios-Logic', + '0418' => 'AST-Research', + '041a' => 'Phoenix-Technologies-Ltd', + '041b' => 'dTV', + '041d' => 'S3-Inc.', + '041e' => 'Creative-Technology-Ltd', + '041f' => 'LCS-Telegraphics', + '0420' => 'Chips-and-Technologies', + '0421' => 'Nokia-Mobile-Phones', + '0422' => 'ADI-Systems-Inc.', + '0424' => 'Standard-Microsystems-Corp.', + '0429' => 'Cirrus-Logic', + '042a' => 'Ericsson-Austrian-AG', + '042b' => 'Intel', + '042d' => 'Micronics', + '042e' => 'Acer', + '042f' => 'Molex-Inc.', + '0430' => 'Sun-Microsystems-Inc.', + '0431' => 'Itac-Systems-Inc.', + '0432' => 'Unisys-Corp.', + '0433' => 'Alps-Electric-Inc.', + '0435' => 'Hyundai-Electronics-America', + '0436' => 'Taugagreining-HF', + '0437' => 'Framatome-Connectors-USA', + '0438' => 'Advanced-Micro-Devices-Inc.', + '0439' => 'Voice-Technologies-Group', + '043d' => 'Lexmark-International-Inc.', + '043e' => 'LG-Electronics-USA-Inc.', + '043f' => 'RadiSys-Corp.', + '0440' => 'Eizo-Nanao-Corp.', + '0441' => 'Winbond-Systems-Lab.', + '0442' => 'Ericsson-Inc.', + '0443' => 'Gateway-Inc.', + '0445' => 'Lucent-Technologies-Inc.', + '0446' => 'NMB-Technologies-Corp.', + '0447' => 'Momentum-Microsystems', + '044a' => 'Shamrock-Tech.-Co.-Ltd', + '044b' => 'WSI', + '044c' => 'CCL-ITRI', + '044d' => 'Siemens-Nixdorf-AG', + '044e' => 'Alps-Electric-Co.-Ltd', + '044f' => 'ThrustMaster-Inc.', + '0450' => 'DFI-Inc.', + '0451' => 'Texas-Instruments-Inc.', + '0453' => 'CMD-Technology', + '0454' => 'Vobis-Microcomputer-AG', + '0456' => 'Analog-Devices-Inc.', + '0457' => 'Silicon-Integrated-Systems', + '0459' => 'Adobe-Systems-Inc.', + '045a' => 'SONICblue-Inc.', + '045b' => 'Hitachi-Ltd', + '045d' => 'Nortel-Networks-Ltd', + '045e' => 'Microsoft', + '0460' => 'Ace-Cad-Enterprise-Co.-Ltd', + '0461' => 'Primax-Electronics-Ltd', + '0463' => 'MGE-UPS-Systems', + '0464' => 'AMP-Tycoelectronics-Corp.', + '0467' => 'AT-T-Paradyne', + '0468' => 'Wieson-Technologies-Co.-Ltd', + '046a' => 'Cherry-GmbH', + '046b' => 'American-Megatrends-Inc.', + '046d' => 'Logitech', + '046e' => 'Behavior-Tech.-Computer-Corp.', + '046f' => 'Crystal-Semiconductor', + '0471' => 'Philips-or-NXP', + '0472' => 'Chicony-Electronics-CO', + '0474' => 'Sanyo-Electric-Co.-Ltd', + '0476' => 'AESP', + '0477' => 'Seagate-Technology-Inc.', + '0478' => 'Connectix-Corp.', + '047a' => 'Semtech-Corp.', + '047b' => 'Silitek-Corp.', + '047c' => 'Dell-Computer-Corp.', + '047d' => 'Kensington', + '047e' => 'Agere-Systems-Inc.-Lucent', + '047f' => 'Plantronics-Inc.', + '0481' => 'Zenith-Data-Systems', + '0482' => 'Kyocera-Corp.', + '0483' => 'SGS-Thomson-Microelectronics', + '0484' => 'Specialix', + '0485' => 'Nokia-Monitors', + '0486' => 'ASUS-Computers-Inc.', + '0487' => 'Stewart-Connector', + '0488' => 'Cirque-Corp.', + '0489' => 'Foxconn---Hon-Hai', + '048a' => 'S-MOS-Systems-Inc.', + '048c' => 'Alps-Electric-Ireland-Ltd', + '048f' => 'Eicon-Tech.', + '0490' => 'United-Microelectronics-Corp.', + '0491' => 'Capetronic', + '0492' => 'Samsung-SemiConductor-Inc.', + '0493' => 'MAG-Technology-Co.-Ltd', + '0495' => 'ESS-Technology-Inc.', + '0496' => 'Micron-Electronics', + '0497' => 'Smile-International', + '0498' => 'Capetronic-Kaohsiung-Corp.', + '0499' => 'Yamaha-Corp.', + '049a' => 'Gandalf-Technologies-Ltd', + '049b' => 'Curtis-Computer-Products', + '049c' => 'Acer', + '049d' => 'VLSI-Technology', + '049f' => 'Compaq-Computer-Corp.', + '04a0' => 'Digital-Equipment-Corp.', + '04a1' => 'SystemSoft-Corp.', + '04a2' => 'FirePower-Systems', + '04a3' => 'Trident-Microsystems-Inc.', + '04a4' => 'Hitachi-Ltd', + '04a6' => 'Nokia-Display-Products', + '04a7' => 'Visioneer', + '04a8' => 'Multivideo-Labs-Inc.', + '04a9' => 'Canon-Inc.', + '04aa' => 'DaeWoo-Telecom-Ltd', + '04ab' => 'Chromatic-Research', + '04ac' => 'Micro-Audiometrics-Corp.', + '04ad' => 'Dooin-Electronics', + '04af' => 'Winnov-L.P.', + '04b0' => 'Nikon-Corp.', + '04b1' => 'Pan-International', + '04b3' => 'IBM-Corp.', + '04b4' => 'Cypress-Semiconductor-Corp.', + '04b5' => 'ROHM-LSI-Systems-USA-LLC', + '04b6' => 'Hint-Corp.', + '04b7' => 'Compal-Electronics-Inc.', + '04b8' => 'Seiko-Epson-Corp.', + '04b9' => 'Rainbow-Technologies-Inc.', + '04ba' => 'Toucan-Systems-Ltd', + '04bb' => 'I-O-Data-Device-Inc.', + '04be' => 'Telia-Research-AB', + '04bf' => 'TDK-Corp.', + '04c1' => 'U.S.-Robotics-3Com', + '04c3' => 'Maxi-Switch-Inc.', + '04c5' => 'Fujitsu-Ltd', + '04c7' => 'Micro-Macro-Technologies', + '04c8' => 'Konica-Corp.', + '04ca' => 'Lite-On-Technology-Corp.', + '04cb' => 'Fuji-Photo-Film-Co.-Ltd', + '04cc' => 'ST-Ericsson', + '04cd' => 'Tatung-Co.-Of-America', + '04ce' => 'ScanLogic-Corp.', + '04cf' => 'Myson-Century-Inc.', + '04d0' => 'Digi-International', + '04d1' => 'ITT-Canon', + '04d2' => 'Altec-Lansing-Technologies', + '04d3' => 'VidUS-Inc.', + '04d4' => 'LSI-Logic-Inc.', + '04d5' => 'Forte-Technologies-Inc.', + '04d6' => 'Mentor-Graphics', + '04d7' => 'Oki-Semiconductor', + '04d8' => 'Microchip-Technology-Inc.', + '04d9' => 'Holtek-Semiconductor-Inc.', + '04da' => 'Panasonic', + '04db' => 'Hypertec-Pty-Ltd', + '04dc' => 'Huan-Hsin-Holdings-Ltd', + '04dd' => 'SHARP', + '04de' => 'MindShare-Inc.', + '04df' => 'Interlink-Electronics', + '04e1' => 'Iiyama-North-America-Inc.', + '04e2' => 'Exar-Corp.', + '04e3' => 'Zilog-Inc.', + '04e4' => 'ACC-Microelectronics', + '04e5' => 'Promise-Technology', + '04e6' => 'SCM-Microsystems-Inc.', + '04e7' => 'Elo-TouchSystems', + '04e8' => 'Samsung-Electronics-Co.-Ltd', + '04e9' => 'PC-Tel-Inc.', + '04ea' => 'Brooktree-Corp.', + '04eb' => 'Northstar-Systems-Inc.', + '04ec' => 'Tokyo-Electron-Device-Ltd', + '04ed' => 'Annabooks', + '04f0' => 'Daewoo-Electronics-Co.-Ltd', + '04f1' => 'Victor-Company-of-Japan-Ltd', + '04f2' => 'Chicony-Electronics-CO', + '04f3' => 'Elan-Microelectronics-Corp.', + '04f4' => 'Harting-Elektronik-Inc.', + '04f5' => 'Fujitsu-ICL-Systems-Inc.', + '04f6' => 'Norand-Corp.', + '04f7' => 'Newnex-Technology-Corp.', + '04f8' => 'FuturePlus-Systems', + '04f9' => 'brother', + '04fa' => 'Dallas-Semiconductor', + '04fc' => 'Sunplus-Technology-Co.-Ltd', + '04fd' => 'Soliton-Systems-K.K.', + '04fe' => 'PFU-Ltd', + '04ff' => 'E-CMOS-Corp.', + '0500' => 'Siam-United-Hi-Tech', + '0501' => 'Fujikura-DDK-Ltd', + '0502' => 'Acer', + '0503' => 'Hitachi-America-Ltd', + '0504' => 'Hayes-Microcomputer-Products', + '0506' => '3Com-Corp.', + '0507' => 'Hosiden-Corp.', + '0508' => 'Clarion-Co.-Ltd', + '0509' => 'Aztech-Systems-Ltd', + '050a' => 'Cinch-Connectors', + '050b' => 'Cable-System-International', + '050c' => 'InnoMedia-Inc.', + '050d' => 'Belkin-Components', + '050e' => 'Neon-Technology-Inc.', + '050f' => 'KC-Technology-Inc.', + '0510' => 'Sejin-Electron-Inc.', + '0512' => 'Hualon-Microelectronics-Corp.', + '0513' => 'digital-X-Inc.', + '0514' => 'FCI-Electronics', + '0515' => 'ACTC', + '0516' => 'Longwell-Electronics', + '0517' => 'Butterfly-Communications', + '0518' => 'EzKEY-Corp.', + '0519' => 'Star-Micronics-Co.-Ltd', + '051a' => 'WYSE-Technology', + '051b' => 'Silicon-Graphics', + '051c' => 'Shuttle-Inc.', + '051d' => 'American-Power-Conversion', + '051e' => 'Scientific-Atlanta-Inc.', + '0521' => 'Airborn-Connectors', + '0522' => 'Advanced-Connectek-Inc.', + '0523' => 'ATEN-GmbH', + '0524' => 'Sola-Electronics', + '0525' => 'Netchip-Technology-Inc.', + '0526' => 'Temic-MHS-S.A.', + '0527' => 'ALTRA', + '0528' => 'ATI', + '0529' => 'Aladdin-Knowledge-Systems', + '052a' => 'Crescent-Heart-Software', + '052b' => 'Tekom-Technologies-Inc.', + '052d' => 'Avid-Electronics-Corp.', + '052e' => 'Standard-Microsystems-Corp.', + '052f' => 'Unicore-Software-Inc.', + '0530' => 'American-Microsystems-Inc.', + '0531' => 'Wacom-Technology-Corp.', + '0532' => 'Systech-Corp.', + '0533' => 'Alcatel-Mobile-Phones', + '0534' => 'Motorola-Inc.', + '0535' => 'LIH-TZU-Electric-Co.-Ltd', + '0537' => 'Inventec-Corp.', + '0539' => 'Shyh-Shiun-Terminals-Co.-Ltd', + '053a' => 'PrehKeyTec-GmbH', + '053b' => 'Global-Village-Communication', + '053d' => 'Silicon-Architect', + '053e' => 'Mobility-Electronics', + '053f' => 'Synopsys-Inc.', + '0540' => 'UniAccess-AB', + '0541' => 'Sirf-Technology-Inc.', + '0543' => 'ViewSonic-Corp.', + '0544' => 'Cristie-Electronics-Ltd', + '0545' => 'Xirlink-Inc.', + '0546' => 'Polaroid-Corp.', + '0547' => 'Anchor-Chips-Inc.', + '0548' => 'Tyan-Computer-Corp.', + '0549' => 'Pixera-Corp.', + '054b' => 'New-Media-Corp.', + '054c' => 'Sony-Corp.', + '054d' => 'Try-Corp.', + '054e' => 'Proside-Corp.', + '054f' => 'WYSE-Technology-Taiwan', + '0550' => 'Fuji-Xerox-Co.-Ltd', + '0551' => 'CompuTrend-Systems-Inc.', + '0552' => 'Philips-Monitors', + '0554' => 'Dictaphone-Corp.', + '0555' => 'ANAM-S-T-Co.-Ltd', + '0557' => 'ATEN-International-Co.-Ltd', + '0558' => 'Truevision-Inc.', + '0559' => 'Cadence-Design-Systems-Inc.', + '055a' => 'Kenwood-USA', + '055b' => 'KnowledgeTek-Inc.', + '055c' => 'Proton-Electronic-Ind.', + '055d' => 'Samsung-Electro-Mechanics-Co.', + '055e' => 'CTX-Opto-Electronics-Corp.', + '055f' => 'Mustek-Systems-Inc.', + '0560' => 'Interface-Corp.', + '0561' => 'Oasis-Design-Inc.', + '0562' => 'Telex-Communications-Inc.', + '0563' => 'Immersion-Corp.', + '0565' => 'Peracom-Networks-Inc.', + '0566' => 'Monterey-International-Corp.', + '0567' => 'Xyratex-International-Ltd', + '0568' => 'Quartz-Ingenierie', + '0569' => 'SegaSoft', + '056a' => 'Wacom-Co.-Ltd', + '056b' => 'Decicon-Inc.', + '056c' => 'eTEK-Labs', + '056d' => 'EIZO-Corp.', + '056e' => 'Elecom-Co.-Ltd', + '056f' => 'Korea-Data-Systems-Co.-Ltd', + '0570' => 'Epson-America', + '0571' => 'Interex-Inc.', + '0574' => 'City-University-of-Hong-Kong', + '0577' => 'ELSA', + '0578' => 'Intrinsix-Corp.', + '0579' => 'GVC-Corp.', + '057a' => 'Samsung-Electronics-America', + '057b' => 'Y-E-Data-Inc.', + '057c' => 'AVM-GmbH', + '057d' => 'Shark-Multimedia-Inc.', + '057e' => 'Nintendo-Co.-Ltd', + '057f' => 'QuickShot-Ltd', + '0580' => 'Denron-Inc.', + '0581' => 'Racal-Data-Group', + '0582' => 'Roland-Corp.', + '0583' => 'Padix-Co.-Ltd-Rockfire', + '0584' => 'RATOC-System-Inc.', + '0585' => 'FlashPoint-Technology-Inc.', + '0586' => 'ZyXEL-Communications-Corp.', + '0588' => 'Sapien-Design', + '0589' => 'Victron', + '058a' => 'Nohau-Corp.', + '058b' => 'Infineon-Technologies', + '058c' => 'In-Focus-Systems', + '058d' => 'Micrel-Semiconductor', + '058e' => 'Tripath-Technology-Inc.', + '058f' => 'Alcor-Micro-Corp.', + '0590' => 'Omron-Corp.', + '0591' => 'Questra-Consulting', + '0592' => 'Powerware-Corp.', + '0593' => 'Incite', + '0594' => 'Princeton-Graphic-Systems', + '0595' => 'Zoran-Microelectronics-Ltd', + '0596' => 'MicroTouch-Systems-Inc.', + '0597' => 'Trisignal-Communications', + '0598' => 'Niigata-Canotec-Co.-Inc.', + '059b' => 'Iomega-Corp.', + '059c' => 'A-Trend-Technology-Co.-Ltd', + '059d' => 'Advanced-Input-Devices', + '059e' => 'Intelligent-Instrumentation', + '059f' => 'LaCie-Ltd', + '05a0' => 'Vetronix-Corp.', + '05a1' => 'USC-Corp.', + '05a3' => 'ARC-International', + '05a4' => 'Ortek-Technology-Inc.', + '05a5' => 'Sampo-Technology-Corp.', + '05a6' => 'Cisco-Systems-Inc.', + '05a7' => 'Bose-Corp.', + '05a8' => 'Spacetec-IMC-Corp.', + '05a9' => 'OmniVision-Technologies-Inc.', + '05aa' => 'Utilux-South-China-Ltd', + '05ab' => 'In-System-Design', + '05ac' => 'Apple-Inc.', + '05ad' => 'Y.C.-Cable-U.S.A.-Inc.', + '05ae' => 'Synopsys-Inc.', + '05af' => 'Jing-Mold-Enterprise-Co.-Ltd', + '05b0' => 'Fountain-Technologies-Inc.', + '05b4' => 'LG-Semicon-Co.-Ltd', + '05b5' => 'Dialogic-Corp.', + '05b6' => 'Proxima-Corp.', + '05b7' => 'Medianix-Semiconductor-Inc.', + '05b8' => 'Agiler-Inc.', + '05b9' => 'Philips-Research-Laboratories', + '05ba' => 'DigitalPersona-Inc.', + '05bb' => 'Grey-Cell-Systems', + '05bc' => '3G-Green-Green-Globe-Co.-Ltd', + '05bd' => 'RAFI-GmbH---Co.-KG', + '05be' => 'Tyco-Electronics-Raychem', + '05bf' => 'S---S-Research', + '05c0' => 'Keil-Software', + '05c2' => 'Media-Phonics-Suisse-S.A.', + '05c5' => 'Digi-International-Inc.', + '05c6' => 'Qualcomm-Inc.', + '05c7' => 'Qtronix-Corp.', + '05c9' => 'Semtech-Corp.', + '05ca' => 'Ricoh-Co.-Ltd', + '05cc' => 'ELSA-AG', + '05cd' => 'Silicom-Ltd', + '05ce' => 'sci-worx-GmbH', + '05cf' => 'Sung-Forn-Co.-Ltd', + '05d0' => 'GE-Medical-Systems-Lunar', + '05d1' => 'Brainboxes-Ltd', + '05d2' => 'Wave-Systems-Corp.', + '05d3' => 'Tohoku-Ricoh-Co.-Ltd', + '05d6' => 'Philips-Semiconductors-CICT', + '05d7' => 'Thomas---Betts-Corp.', + '05d8' => 'Ultima-Electronics-Corp.', + '05d9' => 'Axiohm-Transaction-Solutions', + '05da' => 'Microtek-International-Inc.', + '05db' => 'Sun-Corp.-Suntac-', + '05dc' => 'Lexar-Media-Inc.', + '05dd' => 'Delta-Electronics-Inc.', + '05df' => 'Silicon-Vision-Inc.', + '05e0' => 'Symbol-Technologies', + '05e1' => 'Syntek-Semiconductor-Co.-Ltd', + '05e2' => 'ElecVision-Inc.', + '05e3' => 'Genesys-Logic-Inc.', + '05e4' => 'Red-Wing-Corp.', + '05e5' => 'Fuji-Electric-Co.-Ltd', + '05e6' => 'Keithley-Instruments', + '05e8' => 'ICC-Inc.', + '05e9' => 'Kawasaki-LSI', + '05eb' => 'FFC-Ltd', + '05ec' => 'COM21-Inc.', + '05ee' => 'Cytechinfo-Inc.', + '05ef' => 'AVB-Inc.-anko-', + '05f0' => 'Canopus-Co.-Ltd', + '05f1' => 'Compass-Communications', + '05f2' => 'Dexin-Corp.-Ltd', + '05f3' => 'PI-Engineering-Inc.', + '05f5' => 'Unixtar-Technology-Inc.', + '05f6' => 'AOC-International', + '05f7' => 'RFC-Distributions-PTE-Ltd', + '05f9' => 'PSC-Scanning-Inc.', + '05fc' => 'Harman-Multimedia', + '05fd' => 'InterAct-Inc.', + '05fe' => 'Chic-Technology-Corp.', + '05ff' => 'LeCroy-Corp.', + '0600' => 'Barco-Display-Systems', + '0601' => 'Jazz-Hipster-Corp.', + '0602' => 'Vista-Imaging-Inc.', + '0604' => 'Jean-Co.-Ltd', + '0605' => 'Anchor-C-C-Co.-Ltd', + '0607' => 'Bridge-Information-Co.-Ltd', + '0608' => 'Genrad-Ads', + '0609' => 'SMK-Manufacturing-Inc.', + '060b' => 'Solid-Year', + '060c' => 'EEH-Datalink-GmbH', + '060d' => 'Auctor-Corp.', + '060e' => 'Transmonde-Technologies-Inc.', + '0610' => 'Costar-Electronics-Inc.', + '0611' => 'Totoku-Electric-Co.-Ltd', + '0613' => 'TransAct-Technologies-Inc.', + '0614' => 'Bio-Rad-Laboratories', + '0618' => 'MacAlly', + '0619' => 'Seiko-Instruments-Inc.', + '061a' => 'Veridicom-International-Inc.', + '061b' => 'Promptus-Communications-Inc.', + '061c' => 'Act-Labs-Ltd', + '061d' => 'Quatech-Inc.', + '061e' => 'Nissei-Electric-Co.', + '0620' => 'Alaris-Inc.', + '0622' => 'Iotech-Inc.', + '0623' => 'Littelfuse-Inc.', + '0624' => 'Avocent-Corp.', + '0625' => 'TiMedia-Technology-Co.-Ltd', + '0627' => 'Adomax-Technology-Co.-Ltd', + '0628' => 'Tasking-Software-Inc.', + '0629' => 'Zida-Technologies-Ltd', + '062a' => 'Creative-Labs', + '0631' => 'JUJO-Electronics-Corp.', + '0633' => 'Cyrix-Corp.', + '0634' => 'Micron-Technology-Inc.', + '0635' => 'Methode-Electronics-Inc.', + '0636' => 'Sierra-Imaging-Inc.', + '0638' => 'Avision-Inc.', + '0639' => 'Chrontel-Inc.', + '063a' => 'Techwin-Corp.', + '063b' => 'Taugagreining-HF', + '063d' => 'Fong-Kai-Industrial-Co.-Ltd', + '063e' => 'RealMedia-Technology-Inc.', + '063f' => 'New-Technology-Cable-Ltd', + '0640' => 'Hitex-Development-Tools', + '0641' => 'Woods-Industries-Inc.', + '0642' => 'VIA-Medical-Corp.', + '0644' => 'TEAC-Corp.', + '0645' => 'Who--Vision-Systems-Inc.', + '0646' => 'UMAX', + '0647' => 'Acton-Research-Corp.', + '0648' => 'Inside-Out-Networks', + '0649' => 'Weli-Science-Co.-Ltd', + '064c' => 'Ji-Haw-Industrial-Co.-Ltd', + '064d' => 'TriTech-Microelectronics-Ltd', + '064e' => 'Suyin-Corp.', + '064f' => 'WIBU-Systems-AG', + '0650' => 'Dynapro-Systems', + '0651' => 'Likom-Technology-Sdn.-Bhd.', + '0652' => 'Stargate-Solutions-Inc.', + '0653' => 'CNF-Inc.', + '0654' => 'Granite-Microsystems-Inc.', + '0656' => 'Glory-Mark-Electronic-Ltd', + '0657' => 'Tekcon-Electronics-Corp.', + '0658' => 'Sigma-Designs-Inc.', + '0659' => 'Aethra', + '065a' => 'Optoelectronics-Co.-Ltd', + '065b' => 'Tracewell-Systems', + '065e' => 'Silicon-Graphics', + '0661' => 'Hamamatsu-Photonics-K.K.', + '0662' => 'Kansai-Electric-Co.-Ltd', + '0663' => 'Topmax-Electronic-Co.-Ltd', + '0664' => 'Groovy-Technology-Corp.', + '0665' => 'Cypress-Semiconductor', + '0667' => 'Aiwa-Co.-Ltd', + '0668' => 'WordWand', + '0669' => 'Oce-Printing-Systems-GmbH', + '066a' => 'Total-Technologies-Ltd', + '066b' => 'Linksys', + '066d' => 'Entrega-Inc.', + '066f' => 'SigmaTel-Inc.', + '0670' => 'Sequel-Imaging', + '0672' => 'Labtec-Inc.', + '0673' => 'HCL', + '0675' => 'DrayTek-Corp.', + '0676' => 'Teles-AG', + '0677' => 'Aiwa-Co.-Ltd', + '0678' => 'ACard-Technology-Corp.', + '067b' => 'Prolific-Technology-Inc.', + '067c' => 'Efficient-Networks-Inc.', + '067d' => 'Hohner-Corp.', + '067e' => 'Intermec-Technologies-Corp.', + '067f' => 'Virata-Ltd', + '0682' => 'Victor-Company-of-Japan-Ltd', + '0684' => 'Actiontec-Electronics-Inc.', + '0686' => 'Minolta-Co.-Ltd', + '068a' => 'Pertech-Inc.', + '068b' => 'Potrans-International-Inc.', + '068e' => 'CH-Products-Inc.', + '0690' => 'Golden-Bridge-Electech-Inc.', + '0693' => 'Hagiwara-Sys-Com-Co.-Ltd', + '0694' => 'Lego-Group', + '0698' => 'Chuntex-CTX', + '0699' => 'Tektronix-Inc.', + '069a' => 'Askey-Computer-Corp.', + '069b' => 'Thomson-Inc.', + '069d' => 'Hughes-Network-Systems-HNS', + '069e' => 'Marx', + '069f' => 'Allied-Data-Technologies-BV', + '06a2' => 'Topro-Technology-Inc.', + '06a3' => 'Saitek-PLC', + '06a5' => 'Divio', + '06a7' => 'MicroStore-Inc.', + '06a8' => 'Topaz-Systems-Inc.', + '06a9' => 'Westell', + '06aa' => 'Sysgration-Ltd', + '06b8' => 'Pixela-Corp.', + '06b9' => 'Alcatel-Telecom', + '06bb' => 'EDA-Inc.', + '06bc' => 'Oki-Data-Corp.', + '06bd' => 'AGFA-Gevaert-NV', + '06bf' => 'Leoco-Corp.', + '06c2' => 'Phidgets-Inc.-formerly-GLAB', + '06c4' => 'Bizlink-International-Corp.', + '06c5' => 'Hagenuk-GmbH', + '06c6' => 'Infowave-Software-Inc.', + '06c8' => 'SIIG-Inc.', + '06c9' => 'Taxan-Europe-Ltd', + '06ca' => 'Newer-Technology-Inc.', + '06cb' => 'Synaptics-Inc.', + '06cc' => 'Terayon-Communication-Systems', + '06cd' => 'Keyspan', + '06cf' => 'SpheronVR-AG', + '06d0' => 'LapLink-Inc.', + '06d1' => 'Daewoo-Electronics-Co.-Ltd', + '06d3' => 'Mitsubishi-Electric-Corp.', + '06d4' => 'Cisco-Systems', + '06d5' => 'TOSHIBA', + '06d6' => 'Aashima-Technology-B.V.', + '06da' => 'Phoenixtec-Power-Co.-Ltd', + '06db' => 'Paradyne', + '06de' => 'Heisei-Electronics-Co.-Ltd', + '06e0' => 'Multi-Tech-Systems-Inc.', + '06e1' => 'ADS-Technologies-Inc.', + '06e4' => 'Alcatel-Microelectronics', + '06e6' => 'Tiger-Jet-Network-Inc.', + '06ea' => 'Sirius-Technologies', + '06eb' => 'PC-Expert-Tech.-Co.-Ltd', + '06f0' => 'T.N.C-Industrial-Co.-Ltd', + '06f1' => 'Opcode-Systems-Inc.', + '06f2' => 'Emine-Technology-Co.', + '06f6' => 'Wintrend-Technology-Co.-Ltd', + '06f7' => 'Wailly-Technology-Ltd', + '06f8' => 'Guillemot-Corp.', + '06f9' => 'ASYST-electronic-d.o.o.', + '06fa' => 'HSD-S.r.L', + '06fd' => 'Boston-Acoustics', + '06fe' => 'Gallant-Computer-Inc.', + '0703' => 'Bvtech-Industry-Inc.', + '0705' => 'NKK-Corp.', + '0706' => 'Ariel-Corp.', + '0707' => 'Standard-Microsystems-Corp.', + '0708' => 'Putercom-Co.-Ltd', + '0709' => 'Silicon-Systems-Ltd-SSL', + '070d' => 'Comoss-Electronic-Co.-Ltd', + '0710' => 'Connect-Tech-Inc.', + '0713' => 'Interval-Research-Corp.', + '0714' => 'NewMotion-Inc.', + '0717' => 'ZNK-Corp.', + '0718' => 'Imation-Corp.', + '0719' => 'Tremon-Enterprises-Co.-Ltd', + '071b' => 'Domain-Technologies-Inc.', + '071d' => 'Eicon-Networks-Corp.', + '071e' => 'Ariston-Technologies', + '0729' => 'Amitm', + '072e' => 'Sunix-Co.-Ltd', + '072f' => 'Advanced-Card-Systems-Ltd', + '0731' => 'Susteen-Inc.', + '0733' => 'ViewQuest-Technologies-Inc.', + '0734' => 'Lasat-Communications-A-S', + '0735' => 'Asuscom-Network', + '0736' => 'Lorom-Industrial-Co.-Ltd', + '0738' => 'Mad-Catz-Inc.', + '073a' => 'Chaplet-Systems-Inc.', + '073b' => 'Suncom-Technologies', + '073d' => 'Eutron-S.p.a.', + '073e' => 'NEC-Inc.', + '0745' => 'Syntech-Information-Co.-Ltd', + '0746' => 'Onkyo-Corp.', + '0747' => 'Labway-Corp.', + '0749' => 'EVer-Electronics-Corp.', + '074b' => 'Polestar-Tech.-Corp.', + '074c' => 'C-C-C-Group-PLC', + '074d' => 'Micronas-GmbH', + '074e' => 'Digital-Stream-Corp.', + '0755' => 'Aureal-Semiconductor', + '0757' => 'Network-Technologies-Inc.', + '075b' => 'Sophisticated-Circuits-Inc.', + '0763' => 'Midiman', + '0764' => 'Cyber-Power-System-Inc.', + '0765' => 'X-Rite-Inc.', + '0766' => 'Jess-Link-Products-Co.-Ltd', + '0767' => 'Tokheim-Corp.', + '0768' => 'Camtel-Technology-Corp.', + '0769' => 'Surecom-Technology-Corp.', + '076b' => 'OmniKey-AG', + '076c' => 'Partner-Tech', + '076d' => 'Denso-Corp.', + '076e' => 'Kuan-Tech-Enterprise-Co.-Ltd', + '076f' => 'Jhen-Vei-Electronic-Co.-Ltd', + '0771' => 'Observator-Instruments-BV', + '0774' => 'AmTRAN-Technology-Co.-Ltd', + '0775' => 'Longshine-Electronics-Corp.', + '0776' => 'Inalways-Corp.', + '0777' => 'Comda-Enterprise-Corp.', + '0778' => 'Volex-Inc.', + '0779' => 'Fairchild-Semiconductor', + '077a' => 'Sankyo-Seiki-Mfg.-Co.-Ltd', + '077b' => 'Linksys', + '077c' => 'Forward-Electronics-Co.-Ltd', + '077d' => 'Griffin-Technology', + '077f' => 'Well-Excellent---Most-Corp.', + '0780' => 'Sagem-Monetel-GmbH', + '0781' => 'SanDisk-Corp.', + '0782' => 'Trackerball', + '0783' => 'C3PO', + '0784' => 'Vivitar-Inc.', + '0785' => 'NTT-ME', + '0789' => 'Logitec-Corp.', + '078b' => 'Happ-Controls-Inc.', + '078c' => 'GTCO-CalComp', + '078e' => 'Brincom-Inc.', + '0792' => 'Axis-Communications-AB', + '0793' => 'Wha-Yu-Industrial-Co.-Ltd', + '0794' => 'ABL-Electronics-Corp.', + '0795' => 'RealChip-Inc.', + '0796' => 'Certicom-Corp.', + '0797' => 'Grandtech-Semiconductor-Corp.', + '0798' => 'Optelec', + '0799' => 'Altera', + '079b' => 'Sagem', + '079d' => 'Alfadata-Computer-Corp.', + '07a1' => 'Digicom-S.p.A.', + '07a2' => 'National-Technical-Systems', + '07a3' => 'Onnto-Corp.', + '07a4' => 'Be-Inc.', + '07a6' => 'ADMtek-Inc.', + '07aa' => 'Corega-K.K.', + '07ab' => 'Freecom-Technologies', + '07af' => 'Microtech', + '07b0' => 'Trust-Technologies', + '07b1' => 'IMP-Inc.', + '07b2' => 'Motorola-BCS-Inc.', + '07b3' => 'Plustek-Inc.', + '07b4' => 'Olympus-Optical-Co.-Ltd', + '07b5' => 'Mega-World-International-Ltd', + '07b6' => 'Marubun-Corp.', + '07b7' => 'TIME-Interconnect-Ltd', + '07b8' => 'AboCom-Systems-Inc', + '07bc' => 'Canon', + '07bd' => 'Webgear-Inc.', + '07be' => 'Veridicom', + '07c1' => 'Keisokugiken', + '07c4' => 'Datafab-Systems-Inc.', + '07c5' => 'APG-Cash-Drawer', + '07c6' => 'ShareWave-Inc.', + '07c7' => 'Powertech-Industrial-Co.-Ltd', + '07c8' => 'B.U.G.-Inc.', + '07c9' => 'Allied-Telesyn-International', + '07ca' => 'AVerMedia-Technologies-Inc.', + '07cb' => 'Kingmax-Technology-Inc.', + '07cc' => 'Carry-Computer-Eng.-Co.-Ltd', + '07cd' => 'Elektor', + '07cf' => 'Casio-Computer-Co.-Ltd', + '07d0' => 'Dazzle', + '07d1' => 'D-Link', + '07d2' => 'Aptio-Products-Inc.', + '07d3' => 'Cyberdata-Corp.', + '07d5' => 'Radiant-Systems', + '07d7' => 'GCC-Technologies-Inc.', + '07da' => 'Arasan-Chip-Systems', + '07de' => 'Diamond-Multimedia', + '07df' => 'David-Electronics-Co.-Ltd', + '07e1' => 'Ambient-Technologies-Inc.', + '07e2' => 'Elmeg-GmbH---Co.-Ltd', + '07e3' => 'Planex-Communications-Inc.', + '07e4' => 'Movado-Enterprise-Co.-Ltd', + '07e5' => 'QPS-Inc.', + '07e6' => 'Allied-Cable-Corp.', + '07e7' => 'Mirvo-Toys-Inc.', + '07e8' => 'Labsystems', + '07ea' => 'Iwatsu-Electric-Co.-Ltd', + '07eb' => 'Double-H-Technology-Co.-Ltd', + '07ef' => 'STSN', + '07f6' => 'Circuit-Assembly-Corp.', + '07f7' => 'Century-Corp.', + '07f9' => 'Dotop-Technology-Inc.', + '07fa' => 'DrayTek-Corp.', + '07fd' => 'Mark-of-the-Unicorn', + '07ff' => 'Unknown', + '0801' => 'Mag-Tek', + '0802' => 'Mako-Technologies-LLC', + '0803' => 'Zoom-Telephonics-Inc.', + '0809' => 'Genicom-Technology-Inc.', + '080a' => 'Evermuch-Technology-Co.-Ltd', + '080b' => 'Cross-Match-Technologies', + '080c' => 'Datalogic-S.p.A.', + '080d' => 'Teco-Image-Systems-Co.-Ltd', + '0813' => 'Mattel-Inc.', + '0819' => 'eLicenser', + '081a' => 'MG-Logic', + '081b' => 'Indigita-Corp.', + '081c' => 'Mipsys', + '081e' => 'AlphaSmart-Inc.', + '0822' => 'Reudo-Corp.', + '0825' => 'GC-Protronics', + '0826' => 'Data-Transit', + '0827' => 'BroadLogic-Inc.', + '0828' => 'Sato-Corp.', + '082d' => 'Handspring', + '0830' => 'Palm-Inc.', + '0832' => 'Kouwell-Electronics-Corp.', + '0833' => 'Sourcenext-Corp.', + '0839' => 'Samsung-Techwin-Co.-Ltd', + '083a' => 'Accton-Technology-Corp.', + '083f' => 'Global-Village', + '0840' => 'Argosy-Research-Inc.', + '0841' => 'Rioport.com-Inc.', + '0844' => 'Welland-Industrial-Co.-Ltd', + '0846' => 'NetGear', + '084e' => 'KB-Gear', + '084f' => 'Empeg', + '0850' => 'Fast-Point-Technologies-Inc.', + '0852' => 'CSEM', + '0853' => 'Topre-Corporation', + '0854' => 'ActiveWire-Inc.', + '0856' => 'B-B-Electronics', + '0858' => 'Hitachi-Maxell-Ltd', + '085a' => 'Xircom', + '085c' => 'ColorVision-Inc.', + '0862' => 'Teletrol-Systems-Inc.', + '0863' => 'Filanet-Corp.', + '0864' => 'NetGear', + '0867' => 'Data-Translation-Inc.', + '086e' => 'System-TALKS-Inc.', + '086f' => 'MEC-IMEX-Inc.', + '0870' => 'Metricom', + '0871' => 'SanDisk-Inc.', + '0873' => 'Xpeed-Inc.', + '0874' => 'A-Tec-Subsystem-Inc.', + '0879' => 'Comtrol-Corp.', + '087c' => 'Adesso-Kbtek-America-Inc.', + '087d' => 'Jaton-Corp.', + '087f' => 'Virtual-IP-Group-Inc.', + '0880' => 'APT-Technologies-Inc.', + '0885' => 'Boca-Research-Inc.', + '0886' => 'XAC-Automation-Corp.', + '0887' => 'Hannstar-Electronics-Corp.', + '088b' => 'MassWorks-Inc.', + '088c' => 'Swecoin-AB', + '088e' => 'iLok', + '0892' => 'DioGraphy-Inc.', + '0897' => 'Lauterbach', + '089d' => 'Icron-Technologies-Corp.', + '089e' => 'NST-Co.-Ltd', + '089f' => 'Primex-Aerospace-Co.', + '08a5' => 'e9-Inc.', + '08a8' => 'Andrea-Electronics', + '08ae' => 'Macally-Mace-Group-Inc.', + '08b4' => 'Sorenson-Vision-Inc.', + '08b7' => 'NATSU', + '08b9' => 'RadioShack-Corp.-Tandy', + '08bb' => 'Texas-Instruments-Japan', + '08bd' => 'Citizen-Watch-Co.-Ltd', + '08c3' => 'Precise-Biometrics', + '08c4' => 'Proxim-Inc.', + '08c7' => 'Key-Nice-Enterprise-Co.-Ltd', + '08c8' => '2Wire-Inc.', + '08ca' => 'Aiptek-International-Inc.', + '08cd' => 'Jue-Hsun-Ind.-Corp.', + '08ce' => 'Long-Well-Electronics-Corp.', + '08d1' => 'smartBridges-Inc.', + '08d3' => 'Virtual-Ink', + '08d4' => 'Fujitsu-Siemens-Computers', + '08d8' => 'IXXAT-Automation-GmbH', + '08d9' => 'Increment-P-Corp.', + '08dd' => 'Billionton-Systems-Inc.', + '08de' => '---', + '08df' => 'Spyrus-Inc.', + '08e3' => 'Olitec-Inc.', + '08e4' => 'Pioneer-Corp.', + '08e5' => 'Litronic', + '08e6' => 'Gemplus', + '08e8' => 'Integrated-Memory-Logic', + '08e9' => 'Extended-Systems-Inc.', + '08ec' => 'M-Systems-Flash-Disk-Pioneers', + '08ed' => 'MediaTek-Inc.', + '08ee' => 'CCSI-Hesso', + '08f0' => 'Corex-Technologies', + '08f1' => 'CTI-Electronics-Corp.', + '08f2' => 'Gotop-Information-Inc.', + '08f5' => 'SysTec-Co.-Ltd', + '08f6' => 'Logic-3-International-Ltd', + '08f7' => 'Vernier', + '08f9' => 'Wipro-Technologies', + '08fa' => 'Caere', + '08fb' => 'Socket-Communications', + '08fd' => 'Digianswer-A-S', + '08ff' => 'AuthenTec-Inc.', + '0900' => 'Pinnacle-Systems-Inc.', + '0901' => 'VST-Technologies', + '0906' => 'Faraday-Technology-Corp.', + '0909' => 'Audio-Technica-Corp.', + '090b' => 'Neurosmith', + '090c' => 'Feiya-Technology-Corp', + '090e' => 'Shining-Technology-Inc.', + '090f' => 'Fujitsu-Devices-Inc.', + '0910' => 'Alation-Systems-Inc.', + '0911' => 'Philips-Speech-Processing', + '0912' => 'Voquette-Inc.', + '0915' => 'GlobeSpan-Inc.', + '0917' => 'SmartDisk-Corp.', + '0919' => 'Tiger-Electronics', + '091e' => 'Garmin-International', + '0920' => 'Echelon-Co.', + '0921' => 'GoHubs-Inc.', + '0922' => 'Dymo-CoStar-Corp.', + '0923' => 'IC-Media-Corp.', + '0924' => 'XEROX', + '0925' => 'Lakeview-Research', + '0927' => 'Summus-Ltd', + '0928' => 'Oxford-Semiconductor-Ltd', + '0929' => 'American-Biometric-Co.', + '092b' => 'Sena-Technologies-Inc.', + '0930' => 'Toshiba-Corp.', + '0931' => 'Harmonic-Data-Systems-Ltd', + '0932' => 'Crescentec-Corp.', + '0933' => 'Quantum-Corp.', + '0934' => 'Netcom-Systems', + '0936' => 'NuTesla', + '0939' => 'Lumberg-Inc.', + '093a' => 'Pixart-Imaging-Inc.', + '093b' => 'Plextor-Corp.', + '093d' => 'InnoSync-Inc.', + '093e' => 'J.S.T.-Mfg.-Co.-Ltd', + '0941' => 'Photobit-Corp.', + '0942' => 'i2Go.com-LLC', + '0944' => 'KORG-Inc.', + '0945' => 'Pasco-Scientific', + '0948' => 'Kronauer-music-in-digital', + '094b' => 'Linkup-Systems-Corp.', + '094d' => 'Cable-Television-Laboratories', + '094f' => 'Yano', + '0951' => 'Kingston-Technology', + '0954' => 'RPM-Systems-Corp.', + '0955' => 'NVIDIA', + '0956' => 'BSquare-Corp.', + '0957' => 'Agilent-Technologies-Inc.', + '0958' => 'CompuLink-Research-Inc.', + '0959' => 'Cologne-Chip-AG', + '095a' => 'Portsmith', + '095b' => 'Medialogic-Corp.', + '095c' => 'K-Tec-Electronics', + '095d' => 'Polycom-Inc.', + '0967' => 'Acer', + '0968' => 'Catalyst-Enterprises-Inc.', + '096e' => 'Feitian-Technologies-Inc.', + '0971' => 'Gretag-Macbeth-AG', + '0973' => 'Schlumberger', + '0975' => 'OLE-Communications-Inc.', + '0976' => 'Adirondack-Wire---Cable', + '0977' => 'Lightsurf-Technologies', + '0978' => 'Beckhoff-GmbH', + '0979' => 'Jeilin-Technology-Corp.-Ltd', + '097a' => 'Minds-At-Work-LLC', + '097b' => 'Knudsen-Engineering-Ltd', + '097c' => 'Marunix-Co.-Ltd', + '097d' => 'Rosun-Technologies-Inc.', + '097f' => 'Barun-Electronics-Co.-Ltd', + '0981' => 'Oak-Technology-Ltd', + '0984' => 'Apricorn', + '098c' => 'Vitana-Corp.', + '098d' => 'INDesign', + '098f' => 'Kenwood-TMI-Corp.', + '0993' => 'Gemstar-eBook-Group-Ltd', + '099a' => 'Zippy-Technology-Corp.', + '09a3' => 'PairGain-Technologies', + '09a4' => 'Contech-Research-Inc.', + '09a5' => 'VCON-Telecommunications', + '09a6' => 'Poinchips', + '09aa' => 'Intersil-Corp.', + '09ab' => 'Japan-Cash-Machine-Co.-Ltd.', + '09ae' => 'Tripp-Lite', + '09b3' => 'Altius-Solutions-Inc.', + '09b4' => 'MDS-Telephone-Systems', + '09b5' => 'Celltrix-Technology-Co.-Ltd', + '09bc' => 'Grundig', + '09be' => 'MySmart.Com', + '09bf' => 'Auerswald-GmbH---Co.-KG', + '09c1' => 'Arris-Interactive-LLC', + '09c2' => 'Nisca-Corp.', + '09c3' => 'ActivCard-Inc.', + '09c4' => 'ACTiSYS-Corp.', + '09c5' => 'Memory-Corp.', + '09cc' => 'Workbit-Corp.', + '09ce' => 'City-Electronics-Ltd', + '09d1' => 'NeoMagic-Inc.', + '09d2' => 'Vreelin-Engineering-Inc.', + '09d3' => 'Com-One', + '09d7' => 'Novatel-Wireless', + '09d9' => 'KRF-Tech-Ltd', + '09da' => 'A4-Tech-Co.-Ltd', + '09db' => 'Measurement-Computing-Corp.', + '09dc' => 'Aimex-Corp.', + '09dd' => 'Fellowes-Inc.', + '09df' => 'Addonics-Technologies-Corp.', + '09e1' => 'Intellon-Corp.', + '09e5' => 'Jo-Dan-International-Inc.', + '09e6' => 'Silutia-Inc.', + '09e7' => 'Real-3D-Inc.', + '09e8' => 'AKAI-Professional-M.I.-Corp.', + '09e9' => 'Chen-Source-Inc.', + '09eb' => 'IM-Networks-Inc.', + '09ef' => 'Xitel', + '09f3' => 'GoFlight-Inc.', + '09f5' => 'AresCom', + '09f6' => 'RocketChips-Inc.', + '09f7' => 'Edu-Science-H.K.-Ltd', + '09f8' => 'SoftConnex-Technologies-Inc.', + '09f9' => 'Bay-Associates', + '09fa' => 'Mtek-Vision', + '09fb' => 'Altera', + '09ff' => 'Gain-Technology-Corp.', + '0a00' => 'Liquid-Audio', + '0a01' => 'ViA-Inc.', + '0a07' => 'Ontrak-Control-Systems-Inc.', + '0a0b' => 'Cybex-Computer-Products-Co.', + '0a11' => 'Xentec-Inc.', + '0a12' => 'Cambridge-Silicon-Radio-Ltd', + '0a13' => 'Telebyte-Inc.', + '0a14' => 'Spacelabs-Medical-Inc.', + '0a15' => 'Scalar-Corp.', + '0a16' => 'Trek-Technology-S-PTE-Ltd', + '0a17' => 'Pentax-Corp.', + '0a19' => 'Hua-Geng-Technologies-Inc.', + '0a27' => 'Datacard-Group', + '0a2c' => 'AK-Modul-Bus-Computer-GmbH', + '0a34' => 'TG3-Electronics-Inc.', + '0a35' => 'Radikal-Technologies', + '0a39' => 'Gilat-Satellite-Networks-Ltd', + '0a3a' => 'PentaMedia-Co.-Ltd', + '0a3c' => 'NTT-DoCoMo-Inc.', + '0a3d' => 'Varo-Vision', + '0a3f' => 'Swissonic-AG', + '0a43' => 'Boca-Systems-Inc.', + '0a46' => 'Davicom-Semiconductor-Inc.', + '0a47' => 'Hirose-Electric', + '0a48' => 'I-O-Interconnect', + '0a4b' => 'Fujitsu-Media-Devices-Ltd', + '0a4c' => 'Computex-Co.-Ltd', + '0a4d' => 'Evolution-Electronics-Ltd', + '0a4f' => 'Litton-Systems-Inc.', + '0a50' => 'Mimaki-Engineering-Co.-Ltd', + '0a51' => 'Sony-Electronics-Inc.', + '0a52' => 'Jebsee-Electronics-Co.-Ltd', + '0a53' => 'Portable-Peripheral-Co.-Ltd', + '0a5a' => 'Electronics-For-Imaging-Inc.', + '0a5b' => 'EAsics-NV', + '0a5c' => 'Broadcom', + '0a5d' => 'Diatrend-Corp.', + '0a5f' => 'Zebra', + '0a62' => 'MPMan', + '0a66' => 'ClearCube-Technology', + '0a67' => 'Medeli-Electronics-Co.-Ltd', + '0a68' => 'Comaide-Corp.', + '0a69' => 'Chroma-ate-Inc.', + '0a6b' => 'Green-House-Co.-Ltd', + '0a6d' => 'UPS-Manufacturing', + '0a6e' => 'Benwin', + '0a6f' => 'Core-Technology-Inc.', + '0a70' => 'International-Game-Technology', + '0a72' => 'Sanwa-Denshi', + '0a7d' => 'NSTL-Inc.', + '0a7e' => 'Octagon-Systems-Corp.', + '0a80' => 'Rexon-Technology-Corp.-Ltd', + '0a81' => 'Chesen-Electronics-Corp.', + '0a82' => 'Syscan', + '0a83' => 'NextComm-Inc.', + '0a84' => 'Maui-Innovative-Peripherals', + '0a85' => 'Idexx-Labs', + '0a86' => 'NITGen-Co.-Ltd', + '0a8d' => 'Picturetel', + '0a90' => 'Candy-Technology-Co.-Ltd', + '0a91' => 'Globlink-Technology-Inc.', + '0a92' => 'EGO-SYStems-Inc.', + '0a93' => 'C-Technologies-AB', + '0a94' => 'Intersense', + '0aa3' => 'Lava-Computer-Mfg.-Inc.', + '0aa4' => 'Develco-Elektronik', + '0aa5' => 'First-International-Digital', + '0aa6' => 'Perception-Digital-Ltd', + '0aa8' => 'TriGem-Computer-Inc.', + '0aa9' => 'Baromtec-Co.', + '0aaa' => 'Japan-CBM-Corp.', + '0aab' => 'Vision-Shape-Europe-SA', + '0aac' => 'iCompression-Inc.', + '0aad' => 'Rohde---Schwarz-GmbH---Co.-KG', + '0aae' => 'NEC-infrontia-Corp.-Nitsuko', + '0aaf' => 'Digitalway-Co.-Ltd', + '0ab1' => 'FEIG-ELECTRONIC-GmbH', + '0aba' => 'Ellisys', + '0abe' => 'Stereo-Link', + '0abf' => 'Diolan', + '0ac4' => 'Leco-Corp.', + '0ac5' => 'I---C-Corp.', + '0ac6' => 'Singing-Electrons-Inc.', + '0ac7' => 'Panwest-Corp.', + '0ac8' => 'Z-Star-Microelectronics-Corp.', + '0ac9' => 'Micro-Solutions-Inc.', + '0aca' => 'OPEN-Networks-Ltd', + '0acc' => 'Koga-Electronics-Co.', + '0acd' => 'ID-Tech', + '0ace' => 'ZyDAS', + '0acf' => 'Intoto-Inc.', + '0ad0' => 'Intellix-Corp.', + '0ad1' => 'Remotec-Technology-Ltd', + '0ada' => 'Data-Encryption-Systems-Ltd.', + '0ae3' => 'Allion-Computer-Inc.', + '0ae4' => 'Taito-Corp.', + '0ae7' => 'Neodym-Systems-Inc.', + '0ae8' => 'System-Support-Co.-Ltd', + '0aea' => 'SciEssence-LLC', + '0aeb' => 'TTP-Communications-Ltd', + '0aec' => 'Neodio-Technologies-Corp.', + '0af0' => 'Option', + '0af6' => 'Silver-I-Co.-Ltd', + '0af7' => 'B2C2-Inc.', + '0af9' => 'Hama-Inc.', + '0afc' => 'Zaptronix-Ltd', + '0afd' => 'Tateno-Dennou-Inc.', + '0afe' => 'Cummins-Engine-Co.', + '0b00' => 'INGENICO', + '0b05' => 'ASUSTek-Computer-Inc.', + '0b0b' => 'Datamax-ONeil', + '0b0c' => 'Todos-AB', + '0b0d' => 'ProjectLab', + '0b0e' => 'GN-Netcom', + '0b0f' => 'AVID-Technology', + '0b10' => 'Pcally', + '0b11' => 'I-Tech-Solutions-Co.-Ltd', + '0b1f' => 'Insyde-Software-Corp.', + '0b20' => 'TransDimension-Inc.', + '0b21' => 'Yokogawa-Electric-Corp.', + '0b23' => 'Pan-Asia-Electronics-Co.-Ltd', + '0b24' => 'Link-Evolution-Corp.', + '0b27' => 'Ritek-Corp.', + '0b28' => 'Kenwood-Corp.', + '0b2c' => 'Village-Center-Inc.', + '0b30' => 'PNY-Technologies-Inc.', + '0b33' => 'Contour-Design-Inc.', + '0b37' => 'Hitachi-ULSI-Systems-Co.-Ltd', + '0b38' => 'Gear-Head', + '0b3a' => 'IPaxess', + '0b3b' => 'Tekram-Technology-Co.-Ltd', + '0b3c' => 'Olivetti-Techcenter', + '0b3e' => 'Kikusui-Electronics-Corp.', + '0b41' => 'Hal-Corp.', + '0b43' => 'Play.com-Inc.', + '0b47' => 'Sportbug.com-Inc.', + '0b48' => 'TechnoTrend-AG', + '0b49' => 'ASCII-Corp.', + '0b4b' => 'Pine-Corp.-Ltd.', + '0b4d' => 'Graphtec-America-Inc.', + '0b4e' => 'Musical-Electronics-Ltd', + '0b50' => 'Dumpries-Co.-Ltd', + '0b51' => 'Comfort-Keyboard-Co.', + '0b52' => 'Colorado-MicroDisplay-Inc.', + '0b54' => 'Sinbon-Electronics-Co.-Ltd', + '0b56' => 'TYI-Systems-Ltd', + '0b59' => 'Lake-Communications-Ltd', + '0b5a' => 'Corel-Corp.', + '0b5f' => 'Green-Electronics-Co.-Ltd', + '0b60' => 'Nsine-Ltd', + '0b61' => 'NEC-Viewtechnology-Ltd', + '0b62' => 'Orange-Micro-Inc.', + '0b63' => 'ADLink-Technology-Inc.', + '0b64' => 'Wonderful-Wire-Cable-Co.-Ltd', + '0b65' => 'Expert-Magnetics-Corp.', + '0b69' => 'CacheVision', + '0b6a' => 'Maxim-Integrated-Products', + '0b6f' => 'Nagano-Japan-Radio-Co.-Ltd', + '0b70' => 'PortalPlayer-Inc.', + '0b71' => 'SHIN-EI-Sangyo-Co.-Ltd', + '0b73' => 'Computone-Corp.', + '0b75' => 'Roland-DG-Corp.', + '0b79' => 'Sunrise-Telecom-Inc.', + '0b7a' => 'Zeevo-Inc.', + '0b7b' => 'Taiko-Denki-Co.-Ltd', + '0b7c' => 'ITRAN-Communications-Ltd', + '0b7d' => 'Astrodesign-Inc.', + '0b81' => 'id3-Semiconductors', + '0b84' => 'Rextron-Technology-Inc.', + '0b85' => 'Elkat-Electronics-Sdn.-Bhd.', + '0b86' => 'Exputer-Systems-Inc.', + '0b87' => 'Plus-One-I---T-Inc.', + '0b8c' => 'SMART-Technologies-Inc.', + '0b95' => 'ASIX-Electronics-Corp.', + '0b96' => 'Sewon-Telecom', + '0b97' => 'O2-Micro-Inc.', + '0b98' => 'Playmates-Toys-Inc.', + '0b99' => 'Audio-International-Inc.', + '0b9b' => 'Dipl.-Ing.-Stefan-Kunde', + '0b9d' => 'Softprotec-Co.', + '0b9f' => 'Chippo-Technologies', + '0baf' => 'U.S.-Robotics', + '0bb0' => 'Concord-Camera-Corp.', + '0bb1' => 'Infinilink-Corp.', + '0bb2' => 'Ambit-Microsystems-Corp.', + '0bb3' => 'Ofuji-Technology', + '0bb4' => 'High-Tech-Computer-Corp.', + '0bb5' => 'Murata-Manufacturing-Co.-Ltd', + '0bb6' => 'Network-Alchemy', + '0bb7' => 'Joytech-Computer-Co.-Ltd', + '0bb9' => 'Eiger-M-C-Co.-Ltd', + '0bba' => 'ZAccess-Systems', + '0bbb' => 'General-Meters-Corp.', + '0bbc' => 'Assistive-Technology-Inc.', + '0bbd' => 'System-Connection-Inc.', + '0bc0' => 'Knilink-Technology-Inc.', + '0bc1' => 'Fuw-Yng-Electronics-Co.-Ltd', + '0bc2' => 'Seagate-RSS-LLC', + '0bc3' => 'IPWireless-Inc.', + '0bc4' => 'Microcube-Corp.', + '0bc5' => 'JCN-Co.-Ltd', + '0bc6' => 'ExWAY-Inc.', + '0bc7' => 'X10-Wireless-Technology-Inc.', + '0bc8' => 'Telmax-Communications', + '0bc9' => 'ECI-Telecom-Ltd', + '0bca' => 'Startek-Engineering-Inc.', + '0bd7' => 'Andrew-Pargeter---Associates', + '0bda' => 'Realtek', + '0bdc' => 'Y-Media-Corp.', + '0bdd' => 'Orange-PCS', + '0be2' => 'Kanda-Tsushin-Kogyo-Co.-Ltd', + '0be3' => 'TOYO-Corp.', + '0be4' => 'Elka-International-Ltd', + '0be5' => 'DOME-imaging-systems-Inc.', + '0bed' => 'Silicon-Labs', + '0bee' => 'LTK-Industries-Ltd', + '0bef' => 'Way2Call-Communications', + '0bf0' => 'Pace-Micro-Technology-PLC', + '0bf1' => 'Intracom-S.A.', + '0bf2' => 'Konexx', + '0bf6' => 'Addonics-Technologies-Inc.', + '0bf7' => 'Sunny-Giken-Inc.', + '0bf8' => 'Fujitsu-Siemens-Computers', + '0c04' => 'MOTO-Development-Group-Inc.', + '0c05' => 'Appian-Graphics', + '0c06' => 'Hasbro-Games-Inc.', + '0c07' => 'Infinite-Data-Storage-Ltd', + '0c08' => 'Agate', + '0c09' => 'Comjet-Information-System', + '0c0a' => 'Highpoint-Technologies-Inc.', + '0c0b' => 'Dura-Micro-Inc.-Acomdata', + '0c12' => 'Zeroplus', + '0c15' => 'Iris-Graphics', + '0c16' => 'Gyration-Inc.', + '0c17' => 'Cyberboard-A-S', + '0c18' => 'SynerTek-Korea-Inc.', + '0c19' => 'cyberPIXIE-Inc.', + '0c1a' => 'Silicon-Motion-Inc.', + '0c1b' => 'MIPS-Technologies', + '0c22' => 'Tally-Printer-Corp.', + '0c23' => 'Lernout-+-Hauspie', + '0c24' => 'Taiyo-Yuden', + '0c25' => 'Sampo-Corp.', + '0c26' => 'Prolific-Technology-Inc.', + '0c27' => 'RFIDeas-Inc', + '0c2e' => 'Metro', + '0c35' => 'Eagletron-Inc.', + '0c36' => 'E-Ink-Corp.', + '0c37' => 'e.Digital', + '0c39' => 'IFR', + '0c3b' => 'Komatsu-Ltd', + '0c3c' => 'Radius-Co.-Ltd', + '0c3d' => 'Innocom-Inc.', + '0c3e' => 'Nextcell-Inc.', + '0c44' => 'Motorola-iDEN', + '0c45' => 'Microdia-Ltd', + '0c4b' => 'Reiner-SCT-Kartensysteme-GmbH', + '0c52' => 'Sealevel-Systems-Inc.', + '0c53' => 'ViewPLUS-Inc.', + '0c54' => 'Glory-Ltd', + '0c55' => 'Spectrum-Digital-Inc.', + '0c56' => 'Billion-Bright-Ltd', + '0c58' => 'Vidar-Systems-Corp.', + '0c5a' => 'TRS-International-Mfg.-Inc.', + '0c5e' => 'Xytronix-Research---Design', + '0c60' => 'Apogee-Electronics-Corp.', + '0c62' => 'Chant-Sincere-Co.-Ltd', + '0c63' => 'Toko-Inc.', + '0c65' => 'Eminence-Enterprise-Co.-Ltd', + '0c66' => 'Rexon-Electronics-Corp.', + '0c67' => 'Concept-Telecom-Ltd', + '0c70' => 'MCT-Elektronikladen', + '0c74' => 'Optronic-Laboratories-Inc.', + '0c76' => 'JMTek-LLC.', + '0c77' => 'Sipix-Group-Ltd', + '0c78' => 'Detto-Corp.', + '0c7a' => 'Wing-Span-Enterprise-Co.-Ltd', + '0c86' => 'NDA-Technologies-Inc.', + '0c88' => 'Kyocera-Wireless-Corp.', + '0c89' => 'Honda-Tsushin-Kogyo-Co.-Ltd', + '0c8a' => 'Pathway-Connectivity-Inc.', + '0c8b' => 'Wavefly-Corp.', + '0c8c' => 'Coactive-Networks', + '0c8d' => 'Tempo', + '0c8e' => 'Cesscom-Co.-Ltd', + '0c8f' => 'Applied-Microsystems', + '0c98' => 'Berkshire-Products-Inc.', + '0c99' => 'Innochips-Co.-Ltd', + '0c9a' => 'Hanwool-Robotics-Corp.', + '0c9b' => 'Jobin-Yvon-Inc.', + '0c9d' => 'SemTek', + '0ca2' => 'Zyfer', + '0ca3' => 'Sega-Corp.', + '0ca4' => 'ST-T-Instrument-Corp.', + '0ca5' => 'BAE-Systems-Canada-Inc.', + '0ca6' => 'Castles-Technology-Co.-Ltd', + '0cad' => 'Motorola-CGISS', + '0cae' => 'Ascom-Business-Systems-Ltd', + '0caf' => 'Buslink', + '0cb0' => 'Flying-Pig-Systems', + '0cb1' => 'Innovonics-Inc.', + '0cb6' => 'Celestix-Networks-Pte.-Ltd', + '0cb7' => 'Singatron-Enterprise-Co.-Ltd', + '0cb8' => 'Opticis-Co.-Ltd', + '0cbc' => 'Palmax-Technology-Co.-Ltd', + '0cbe' => 'Keryx-Technologies-Inc.', + '0cc0' => 'Kuon-Yi-Industrial-Corp.', + '0cc1' => 'Given-Imaging-Ltd', + '0cc2' => 'Timex-Corp.', + '0cc3' => 'Rimage-Corp.', + '0cc4' => 'emsys-GmbH', + '0cc5' => 'Sendo', + '0cc6' => 'Intermagic-Corp.', + '0cc7' => 'Kontron-Medical-AG', + '0cc8' => 'Technotools-Corp.', + '0cc9' => 'BroadMAX-Technologies-Inc.', + '0cca' => 'Amphenol', + '0ccb' => 'SKNet-Co.-Ltd', + '0ccc' => 'Domex-Technology-Corp.', + '0ccd' => 'TerraTec-Electronic-GmbH', + '0cd4' => 'Bang-Olufsen', + '0cd5' => 'LabJack-Corporation', + '0cd7' => 'NewChip-S.r.l.', + '0cd8' => 'JS-Digitech-Inc.', + '0cd9' => 'Hitachi-Shin-Din-Cable-Ltd', + '0cde' => 'Z-Com', + '0ce9' => 'pico-Technology', + '0cf1' => 'e-Conn-Electronic-Co.-Ltd', + '0cf2' => 'ENE-Technology-Inc.', + '0cf3' => 'Atheros', + '0cf4' => 'Fomtex-Corp.', + '0cf5' => 'Cellink-Co.-Ltd', + '0cf6' => 'Compucable-Corp.', + '0cf7' => 'ishoni-Networks', + '0cf8' => 'Clarisys-Inc.', + '0cfa' => 'Inviso-Inc.', + '0cfc' => 'Minolta-QMS-Inc.', + '0cff' => 'SAFA-MEDIA-Co.-Ltd.', + '0d08' => 'UTStarcom', + '0d0b' => 'Contemporary-Controls', + '0d0c' => 'Astron-Electronics-Co.-Ltd', + '0d0d' => 'MKNet-Corp.', + '0d0e' => 'Hybrid-Networks-Inc.', + '0d0f' => 'Feng-Shin-Cable-Co.-Ltd', + '0d10' => 'Elastic-Networks', + '0d11' => 'Maspro-Denkoh-Corp.', + '0d12' => 'Hansol-Electronics-Inc.', + '0d13' => 'BMF-Corp.', + '0d14' => 'Array-Comm-Inc.', + '0d15' => 'OnStream-b.v.', + '0d17' => 'NALTEC-Inc.', + '0d18' => 'coaXmedia', + '0d28' => 'NXP', + '0d33' => 'AirSpeak-Inc.', + '0d34' => 'Rearden-Steel-Technologies', + '0d35' => 'Dah-Kun-Co.-Ltd', + '0d3a' => 'Posiflex-Technologies-Inc.', + '0d3c' => 'Sri-Cable-Technology-Ltd', + '0d3d' => 'Tangtop-Technology-Co.-Ltd', + '0d3e' => 'Fitcom-inc.', + '0d3f' => 'MTS-Systems-Corp.', + '0d40' => 'Ascor-Inc.', + '0d42' => 'Full-Der-Co.-Ltd', + '0d46' => 'Kobil-Systems-GmbH', + '0d49' => 'Maxtor', + '0d4a' => 'NF-Corp.', + '0d4b' => 'Grape-Systems-Inc.', + '0d4c' => 'Tedas-AG', + '0d4d' => 'Coherent-Inc.', + '0d4e' => 'Agere-Systems-Netherland-BV', + '0d4f' => 'EADS-Airbus-France', + '0d50' => 'Cleware-GmbH', + '0d51' => 'Volex-Asia-Pte.-Ltd', + '0d53' => 'HMI-Co.-Ltd', + '0d54' => 'Holon-Corp.', + '0d55' => 'ASKA-Technologies-Inc.', + '0d56' => 'AVLAB-Technology-Inc.', + '0d57' => 'Solomon-Microtech-Ltd', + '0d5c' => 'SMC-Networks-Inc.', + '0d5e' => 'Myacom-Ltd', + '0d5f' => 'CSI-Inc.', + '0d60' => 'IVL-Technologies-Ltd', + '0d62' => 'Darfon-Electronics-Corp.', + '0d63' => 'Fritz-Gegauf-AG', + '0d64' => 'DXG-Technology-Corp.', + '0d65' => 'KMJP-Co.-Ltd', + '0d66' => 'TMT', + '0d67' => 'Advanet-Inc.', + '0d69' => 'NSI', + '0d6a' => 'Megapower-International-Corp.', + '0d6b' => 'And-Or-Logic', + '0d70' => 'Try-Computer-Co.-Ltd', + '0d71' => 'Hirakawa-Hewtech-Corp.', + '0d72' => 'Winmate-Communication-Inc.', + '0d73' => 'Hits-Communications-Inc.', + '0d76' => 'MFP-Korea-Inc.', + '0d77' => 'Power-Sentry-Newpoint', + '0d78' => 'Japan-Distributor-Corp.', + '0d7a' => 'MARX-Datentechnik-GmbH', + '0d7b' => 'Wellco-Technology-Co.-Ltd', + '0d7d' => 'Phison-Electronics-Corp.', + '0d7f' => 'Essential-Reality-LLC', + '0d81' => 'TechnoVision', + '0d83' => 'Think-Outside-Inc.', + '0d87' => 'Dolby-Laboratories-Inc.', + '0d89' => 'Oz-Software', + '0d8a' => 'King-Jim-Co.-Ltd', + '0d8b' => 'Ascom-Telecommunications-Ltd', + '0d8c' => 'C-Media-Electronics-Inc.', + '0d8e' => 'Global-Sun-Technology-Inc.', + '0d8f' => 'Pitney-Bowes', + '0d90' => 'Sure-Fire-Electrical-Corp.', + '0d96' => 'Skanhex-Technology-Inc.', + '0d98' => 'Mars-Semiconductor-Corp.', + '0d99' => 'Trazer-Technologies-Inc.', + '0d9a' => 'RTX-Telecom-AS', + '0d9b' => 'Tat-Shing-Electrical-Co.', + '0d9d' => 'Sanwa-Supply-Inc.', + '0d9e' => 'Avaya', + '0d9f' => 'Powercom-Co.-Ltd', + '0da0' => 'Danger-Research', + '0da4' => 'Polar-Electro-OY', + '0da7' => 'IOGear-Inc.', + '0da8' => 'softDSP-Co.-Ltd', + '0dab' => 'Cubig-Group', + '0dad' => 'Westover-Scientific', + '0db0' => 'Micro-Star-International', + '0db1' => 'Wen-Te-Electronics-Co.-Ltd', + '0db3' => 'Tekram-Technology-Co.-Ltd', + '0db7' => 'ELCON-Systemtechnik', + '0dbc' => 'A-D-Medical', + '0dbf' => 'Quik-Tech-Solutions', + '0dc1' => 'Tamagawa-Seiki-Co.-Ltd', + '0dc4' => 'Macpower-Peripherals-Ltd', + '0dc5' => 'SDK-Co.-Ltd', + '0dc7' => 'First-Cable-Line-Inc.', + '0dcd' => 'NetworkFab-Corp.', + '0dd0' => 'Access-Solutions', + '0dd1' => 'Contek-Electronics-Co.-Ltd', + '0dd3' => 'MediaQ', + '0dd4' => 'Custom-Engineering-SPA', + '0dd5' => 'California-Micro-Devices', + '0dd7' => 'Kocom-Co.-Ltd', + '0dd8' => 'Netac-Technology-Co.-Ltd', + '0dd9' => 'HighSpeed-Surfing', + '0ddb' => 'Tamarack-Inc.', + '0ddd' => 'Datelink-Technology-Co.-Ltd', + '0dde' => 'Ubicom-Inc.', + '0de0' => 'BD-Consumer-Healthcare', + '0ded' => 'Novasonics', + '0dee' => 'Lifetime-Memory-Products', + '0def' => 'Full-Rise-Electronic-Co.-Ltd', + '0df4' => 'NET-SYS', + '0df6' => 'Sitecom-Europe-B.V.', + '0e03' => 'Nippon-Systemware-Co.-Ltd', + '0e08' => 'Winbest-Technology-Co.-Ltd', + '0e0b' => 'Amigo-Technology-Inc.', + '0e0c' => 'Gesytec', + '0e0f' => 'VMware-Inc.', + '0e16' => 'JMTek-LLC', + '0e17' => 'Walex-Electronic-Ltd', + '0e1b' => 'Crewave', + '0e20' => 'Pegasus-Technologies-Ltd.', + '0e21' => 'Cowon-Systems-Inc.', + '0e22' => 'Symbian-Ltd.', + '0e25' => 'VinChip-Systems-Inc.', + '0e26' => 'J-Phone-East-Co.-Ltd', + '0e30' => 'HeartMath-LLC', + '0e34' => 'Micro-Computer-Control-Corp.', + '0e35' => '3Pea-Technologies-Inc.', + '0e36' => 'TiePie-engineering', + '0e38' => 'Stratitec-Inc.', + '0e3a' => 'Neostar-Technology-Co.-Ltd', + '0e3b' => 'Mansella-Ltd', + '0e41' => 'Line6-Inc.', + '0e48' => 'Julia-Corp.-Ltd', + '0e4c' => 'Radica-Games-Ltd', + '0e55' => 'Speed-Dragon-Multimedia-Ltd', + '0e5a' => 'Active-Co.-Ltd', + '0e5d' => 'Neltron-Industrial-Co.-Ltd', + '0e5e' => 'Conwise-Technology-Co.-Ltd.', + '0e66' => 'Hawking-Technologies', + '0e67' => 'Fossil-Inc.', + '0e6a' => 'Megawin-Technology-Co.-Ltd', + '0e6f' => 'Logic3', + '0e72' => 'Hsi-Chin-Electronics-Co.-Ltd', + '0e75' => 'TVS-Electronics-Ltd', + '0e79' => 'Archos-Inc.', + '0e7b' => 'On-Tech-Industry-Co.-Ltd', + '0e7e' => 'Gmate-Inc.', + '0e83' => 'Shin-An-Wire---Cable-Co.', + '0e8d' => 'MediaTek-Inc.', + '0e8f' => 'GreenAsia-Inc.', + '0e90' => 'WiebeTech-LLC', + '0e91' => 'VTech-Engineering-Canada-Ltd', + '0e92' => 'Cs-Glory-Enterprise-Co.-Ltd', + '0e93' => 'eM-Technics-Co.-Ltd', + '0e95' => 'Future-Technology-Co.-Ltd', + '0e96' => 'Aplux-Communications-Ltd', + '0e97' => 'Fingerworks-Inc.', + '0e99' => 'Parallel-Dice-Co.-Ltd', + '0e9a' => 'TA-HSING-Industries-Ltd', + '0e9b' => 'ADTEC-Corp.', + '0e9c' => 'Streamzap-Inc.', + '0e9f' => 'Tamura-Corp.', + '0ea0' => 'Ours-Technology-Inc.', + '0ea6' => 'Nihon-Computer-Co.-Ltd', + '0ea7' => 'MSL-Enterprises-Corp.', + '0ea8' => 'CenDyne-Inc.', + '0ead' => 'Humax-Co.-Ltd', + '0eb0' => 'NovaTech', + '0eb1' => 'WIS-Technologies-Inc.', + '0eb2' => 'Y-S-Electronic-Co.-Ltd', + '0eb3' => 'Saint-Technology-Corp.', + '0eb7' => 'Endor-AG', + '0ebe' => 'VWeb-Corp.', + '0ec1' => 'Abit-Computer-Corp.', + '0ec2' => 'Sweetray-Industrial-Ltd', + '0ec3' => 'Axell-Co.-Ltd', + '0ec4' => 'Ballracing-Developments-Ltd', + '0ec6' => 'InnoVISION-Multimedia-Ltd', + '0ec7' => 'Theta-Link-Corp.', + '0ecd' => 'Lite-On-IT-Corp.', + '0ece' => 'TaiSol-Electronics-Co.-Ltd', + '0ecf' => 'Phogenix-Imaging-LLC', + '0ed1' => 'WinMaxGroup', + '0ed2' => 'Kyoto-Micro-Computer-Co.-Ltd', + '0ed3' => 'Wing-Tech-Enterprise-Co.-Ltd', + '0ed5' => 'Fiberbyte', + '0eda' => 'Noriake-Itron-Corp.', + '0edf' => 'e-MDT-Co.-Ltd', + '0ee0' => 'Shima-Seiki-Mfg.-Ltd', + '0ee1' => 'Sarotech-Co.-Ltd', + '0ee2' => 'AMI-Semiconductor-Inc.', + '0ee3' => 'ComTrue-Technology-Corp.', + '0ee4' => 'Sunrich-Technology-Ltd', + '0eef' => 'D-WAV-Scientific-Co.-Ltd', + '0ef0' => 'Hitachi-Cable-Ltd', + '0ef1' => 'Aichi-Micro-Intelligent-Corp.', + '0ef2' => 'I-O-Magic-Corp.', + '0ef3' => 'Lynn-Products-Inc.', + '0ef4' => 'DSI-Datotech', + '0ef5' => 'PointChips', + '0ef6' => 'Yield-Microelectronics-Corp.', + '0ef7' => 'SM-Tech-Co.-Ltd-Tulip', + '0efd' => 'Oasis-Semiconductor', + '0efe' => 'Wem-Technology-Inc.', + '0f0c' => 'CAS-Corp.', + '0f0d' => 'Hori-Co.-Ltd', + '0f0e' => 'Energy-Full-Corp.', + '0f11' => 'LD-Didactic-GmbH', + '0f12' => 'Mars-Engineering-Corp.', + '0f13' => 'Acetek-Technology-Co.-Ltd', + '0f18' => 'Finger-Lakes-Instrumentation', + '0f19' => 'Oracom-Co.-Ltd', + '0f1b' => 'Onset-Computer-Corp.', + '0f1c' => 'Funai-Electric-Co.-Ltd', + '0f1d' => 'Iwill-Corp.', + '0f21' => 'IOI-Technology-Corp.', + '0f22' => 'Senior-Industries-Inc.', + '0f24' => 'Flex-P-Industries-Snd.-Bhd.', + '0f2d' => 'ViPower-Inc.', + '0f2f' => 'Priva-Design-Services', + '0f30' => 'Jess-Technology-Co.-Ltd', + '0f31' => 'Chrysalis-Development', + '0f37' => 'Kokuyo-Co.-Ltd', + '0f38' => 'Nien-Yi-Industrial-Corp.', + '0f3d' => 'Airprime-Incorporated', + '0f41' => 'RDC-Semiconductor-Co.-Ltd', + '0f44' => 'Polhemus', + '0f4b' => 'St.-John-Technology-Co.-Ltd', + '0f4c' => 'WorldWide-Cable-Opto-Corp.', + '0f4d' => 'Microtune-Inc.', + '0f4e' => 'Freedom-Scientific', + '0f52' => 'Wing-Key-Electrical-Co.-Ltd', + '0f55' => 'AmbiCom-Inc.', + '0f5c' => 'Prairiecomm-Inc.', + '0f5d' => 'NewAge-International-LLC', + '0f5f' => 'Key-Technology-Corp.', + '0f60' => 'NTK-Ltd', + '0f61' => 'Varian-Inc.', + '0f62' => 'Acrox-Technologies-Co.-Ltd', + '0f63' => 'LeapFrog-Enterprises', + '0f68' => 'Kobe-Steel-Ltd', + '0f69' => 'Dionex-Corp.', + '0f6a' => 'Vibren-Technologies-Inc.', + '0f6e' => 'INTELLIGENT-SYSTEMS', + '0f73' => 'DFI', + '0f7c' => 'DQ-Technology-Inc.', + '0f7d' => 'NetBotz-Inc.', + '0f7e' => 'Fluke-Corp.', + '0f88' => 'VTech-Holdings-Ltd', + '0f8b' => 'Yazaki-Corp.', + '0f8d' => 'Uniwill-Computer-Corp.', + '0f8e' => 'Kingnet-Technology-Co.-Ltd', + '0f8f' => 'Soma-Networks', + '0f97' => 'CviLux-Corp.', + '0f98' => 'CyberBank-Corp.', + '0f9c' => 'Hyun-Won-Inc.', + '0f9e' => 'Lucent-Technologies', + '0fa3' => 'Starconn-Electronic-Co.-Ltd', + '0fa4' => 'ATL-Technology', + '0fa5' => 'Sotec-Co.-Ltd', + '0fa7' => 'Epox-Computer-Co.-Ltd', + '0fa8' => 'Logic-Controls-Inc.', + '0faf' => 'Winpoint-Electronic-Corp.', + '0fb1' => 'Inclose-Design-Inc.', + '0fb8' => 'Wistron-Corp.', + '0fb9' => 'AACom-Corp.', + '0fbb' => 'Bitwise-Systems-Inc.', + '0fc1' => 'Mitac-Internatinal-Corp.', + '0fc5' => 'Delcom-Engineering', + '0fc6' => 'Dataplus-Supplies-Inc.', + '0fca' => 'Research-In-Motion-Ltd.', + '0fcf' => 'Dynastream-Innovations-Inc.', + '0fd0' => 'Tulip-Computers-B.V.', + '0fd1' => 'Giant-Electronics-Ltd.', + '0fd4' => 'Tenovis-GmbH---Co.-KG', + '0fdc' => 'Micro-Plus', + '0fe4' => 'IN-Tech-Electronics-Ltd', + '0fe5' => 'Greenconn-U.S.A.-Inc.', + '0fe9' => 'DVICO', + '0fea' => 'United-Computer-Accessories', + '0feb' => 'CRS-Electronic-Co.-Ltd', + '0fec' => 'UMC-Electronics-Co.-Ltd', + '0fed' => 'Access-Co.-Ltd', + '0fee' => 'Xsido-Corp.', + '0fef' => 'MJ-Research-Inc.', + '0ff6' => 'Core-Valley-Co.-Ltd', + '0fff' => 'Aopen-Inc.', + '1000' => 'Speed-Tech-Corp.', + '1003' => 'Sigma-Corp.', + '1004' => 'LG-Electronics-Inc.', + '1005' => 'Apacer-Technology-Inc.', + '1006' => 'iRiver-Ltd.', + '1009' => 'Emuzed-Inc.', + '100a' => 'AV-Chaseway-Ltd', + '100b' => 'Chou-Chin-Industrial-Co.-Ltd', + '100d' => 'Netopia-Inc.', + '1010' => 'Fukuda-Denshi-Co.-Ltd', + '1011' => 'Mobile-Media-Tech.', + '1014' => 'Densitron-Technologies-PLC', + '1015' => 'Softronics-Pty.-Ltd', + '1020' => 'Labtec', + '1022' => 'Shinko-Shoji-Co.-Ltd', + '1025' => 'Hyper-Paltek', + '1026' => 'Newly-Corp.', + '1027' => 'Time-Domain', + '1028' => 'Inovys-Corp.', + '1029' => 'Atlantic-Coast-Telesys', + '102a' => 'Ramos-Technology-Co.-Ltd', + '102b' => 'Infotronic-America-Inc.', + '102c' => 'Etoms-Electronics-Corp.', + '102d' => 'Winic-Corp.', + '1031' => 'Comax-Technology-Inc.', + '1032' => 'C-One-Technology-Corp.', + '1033' => 'Nucam-Corp.', + '1038' => 'Ideazon-Inc.', + '1039' => 'Silicon-Integrated-Systems', + '103d' => 'Stanton', + '1043' => 'iCreate-Technologies-Corp.', + '1044' => 'Chu-Yuen-Enterprise-Co.-Ltd', + '1048' => 'Targus-Group-International', + '104b' => 'Mylex---Buslogic', + '104c' => 'AMCO-TEC-International-Inc.', + '104d' => 'Newport-Corporation', + '104f' => 'WB-Electronics', + '1050' => 'Yubico.com', + '1053' => 'Immanuel-Electronics-Co.-Ltd', + '1054' => 'BMS-International-Beheer-N.V.', + '1056' => 'Hsin-Chen-Ent-Co.-Ltd', + '1057' => 'ON-Semiconductor', + '1059' => 'Giesecke---Devrient-GmbH', + '105d' => 'Delkin-Devices-Inc.', + '1060' => 'Easthome-Industrial-Co.-Ltd', + '1065' => 'CCYU-Technology', + '106a' => 'Loyal-Legend-Ltd', + '106c' => 'Curitel-Communications-Inc.', + '106d' => 'San-Chieh-Manufacturing-Ltd', + '106e' => 'ConectL', + '106f' => 'Money-Controls', + '1076' => 'GCT-Semiconductor-Inc.', + '107b' => 'Gateway-Inc.', + '107d' => 'Arlec-Australia-Ltd', + '107e' => 'Midoriya-Electric-Co.-Ltd', + '107f' => 'KidzMouse-Inc.', + '1082' => 'Shin-Etsukaken-Co.-Ltd', + '1083' => 'Canon-Electronics-Inc.', + '1084' => 'Pantech-Co.-Ltd', + '108a' => 'Chloride-Power-Protection', + '108b' => 'Grand-tek-Technology-Co.-Ltd', + '108c' => 'Robert-Bosch-GmbH', + '108e' => 'Lotes-Co.-Ltd.', + '1099' => 'Surface-Optics-Corp.', + '109a' => 'DATASOFT-Systems-GmbH', + '109f' => 'eSOL-Co.-Ltd', + '10a0' => 'Hirotech-Inc.', + '10a3' => 'Mitsubishi-Materials-Corp.', + '10a9' => 'SK-Teletech-Co.-Ltd', + '10aa' => 'Cables-To-Go', + '10ab' => 'USI-Co.-Ltd', + '10ac' => 'Honeywell-Inc.', + '10ae' => 'Princeton-Technology-Corp.', + '10af' => 'Liebert-Corp.', + '10b5' => 'Comodo-PLX-', + '10b8' => 'DiBcom', + '10bb' => 'TM-Technology-Inc.', + '10bc' => 'Dinging-Technology-Co.-Ltd', + '10bd' => 'TMT-Technology-Inc.', + '10bf' => 'SmartHome', + '10c5' => 'Sanei-Electric-Inc.', + '10c6' => 'Intec-Inc.', + '10cb' => 'Eratech', + '10cc' => 'GBM-Connector-Co.-Ltd', + '10cd' => 'Kycon-Inc.', + '10ce' => 'Silicon-Labs', + '10cf' => 'Velleman-Components-Inc.', + '10d1' => 'Hottinger-Baldwin-Measurement', + '10d4' => 'Man-Boon-Manufactory-Ltd', + '10d5' => 'Uni-Class-Technology-Co.-Ltd', + '10de' => 'Authenex-Inc.', + '10df' => 'In-Win-Development-Inc.', + '10e0' => 'Post-Op-Video-Inc.', + '10e1' => 'CablePlus-Ltd', + '10e2' => 'Nada-Electronics-Ltd', + '10ec' => 'Vast-Technologies-Inc.', + '10f0' => 'Nexio-Co.-Ltd', + '10f1' => 'Importek', + '10f5' => 'Turtle-Beach', + '10fb' => 'Pictos-Technologies-Inc.', + '10fd' => 'Anubis-Electronics-Ltd', + '1100' => 'VirTouch-Ltd', + '1101' => 'EasyPass-Industrial-Co.-Ltd', + '1108' => 'Brightcom-Technologies-Ltd', + '110a' => 'Moxa-Technologies-Co.-Ltd.', + '1111' => 'Pandora-International-Ltd.', + '1112' => 'YM-ELECTRIC-CO.-Ltd', + '1113' => 'Medion-AG', + '111e' => 'VSO-Electric-Co.-Ltd', + '112a' => 'RedRat', + '112f' => 'Cellon-International-Inc.', + '1130' => 'Tenx-Technology-Inc.', + '1136' => 'CTS-Electronincs', + '113c' => 'Arin-Tech-Co.-Ltd', + '113d' => 'Mapower-Electronics-Co.-Ltd', + '1141' => 'V-One-Multimedia-Pte.-Ltd', + '1142' => 'CyberScan-Technologies-Inc.', + '1145' => 'Japan-Radio-Company', + '114b' => 'Sphairon-Access-Systems-GmbH', + '114f' => 'Wavecom', + '115b' => 'Salix-Technology-Co.-Ltd.', + '1162' => 'Secugen-Corp.', + '1163' => 'DeLorme-Publishing-Inc.', + '1165' => 'Telson-Electronics-Co.-Ltd', + '1167' => 'Salient-Systems-Corp.', + '1168' => 'BizConn-International-Corp.', + '116e' => 'Gigastorage-Corp.', + '116f' => 'Silicon-10-Technology-Corp.', + '1175' => 'Shengyih-Steel-Mold-Co.-Ltd', + '117d' => 'Santa-Electronic-Inc.', + '117e' => 'JNC-Inc.', + '1182' => 'Venture-Corp.-Ltd', + '1184' => 'Kyocera-Elco-Corp.', + '1188' => 'Bloomberg-L.P.', + '118f' => 'You-Yang-Technology-Co.-Ltd', + '1190' => 'Tripace', + '1196' => 'Yankee-Robotics-LLC', + '1197' => 'Technoimagia-Co.-Ltd', + '1198' => 'StarShine-Technology-Corp.', + '1199' => 'Sierra-Wireless-Inc.', + '119a' => 'ZHAN-QI-Technology-Co.-Ltd', + '119b' => 'ruwido-austria-GmbH', + '11a0' => 'Chipcon-AS', + '11a3' => 'Technovas-Co.-Ltd', + '11aa' => 'GlobalMedia-Group-LLC', + '11ab' => 'Exito-Electronics-Co.-Ltd', + '11b0' => 'ATECH-FLASH-TECHNOLOGY', + '11c5' => 'Inmax', + '11db' => 'Topfield-Co.-Ltd.', + '11e6' => 'K.I.-Technology-Co.-Ltd.', + '11f5' => 'Siemens-AG', + '11f6' => 'Prolific', + '11f7' => 'Alcatel--', + '1209' => 'InterBiometrics', + '120e' => 'Hudson-Soft-Co.-Ltd', + '120f' => 'Magellan', + '1210' => 'DigiTech', + '121e' => 'Jungsoft-Co.-Ltd', + '1233' => 'Denver-Electronics', + '1234' => 'Unknown', + '1235' => 'Novation-EMS', + '1241' => 'Belkin', + '124a' => 'AirVast', + '124b' => 'Nyko-Honey-Bee', + '125c' => 'Apogee-Inc.', + '125f' => 'A-DATA-Technology-Co.-Ltd.', + '1260' => 'Standard-Microsystems-Corp.', + '1264' => 'Covidien-Energy-based-Devices', + '1266' => 'Pirelli-Broadband-Solutions', + '1267' => 'Logic3---SpectraVideo-plc', + '126c' => 'Aristocrat-Technologies', + '126d' => 'Bel-Stewart', + '126e' => 'Strobe-Data-Inc.', + '126f' => 'TwinMOS', + '1274' => 'Ensoniq', + '1283' => 'zebris-Medical-GmbH', + '1286' => 'Marvell-Semiconductor-Inc.', + '1292' => 'Innomedia', + '1293' => 'Belkin-Components-hex', + '1294' => 'RISO-KAGAKU-CORP.', + '129b' => 'CyberTAN-Technology', + '12a7' => 'Trendchip-Technologies-Corp.', + '12c4' => 'Autocue-Group-Ltd', + '12d1' => 'Huawei-Technologies-Co.-Ltd.', + '12d6' => 'EMS-Dr.-Thomas-Wuensche', + '12d7' => 'BETTER-WIRE-FACTORY-CO.-LTD.', + '12e6' => 'Waldorf-Music-GmbH', + '12ef' => 'Tapwave-Inc.', + '12f7' => 'Memorex-Products-Inc.', + '12fd' => 'AIN-Comm.-Technology-Co.-Ltd', + '12ff' => 'Fascinating-Electronics-Inc.', + '1307' => 'Transcend-Information-Inc.', + '1308' => 'Shuttle-Inc.', + '1310' => 'Roper', + '1312' => 'ICS-Electronics', + '131d' => 'Natural-Point', + '132a' => 'Envara-Inc.', + '132b' => 'KONICA-MINOLTA', + '1342' => 'Mobility', + '1345' => 'Sino-Lite-Technology-Corp.', + '1347' => 'Moravian-Instruments', + '134c' => 'PanJit-International-Inc.', + '1357' => 'P-E-Microcomputer-Systems', + '1366' => 'SEGGER', + '136b' => 'STEC', + '1370' => 'Swissbit', + '1371' => 'CNet-Technology-Inc.', + '1376' => 'Vimtron-Electronics-Co.-Ltd.', + '137b' => 'SCAPS-GmbH', + '1385' => 'Netgear', + '138a' => 'Validity-Sensors-Inc.', + '138e' => 'Jungo-LTD', + '1390' => 'TOMTOM-B.V.', + '1391' => 'IdealTEK-Inc.', + '1395' => 'Sennheiser-Communications', + '1397' => 'BEHRINGER-International-GmbH', + '1398' => 'Q-tec', + '13ad' => 'Baltech', + '13b0' => 'PerkinElmer-Optoelectronics', + '13b1' => 'Linksys', + '13b2' => 'Alesis', + '13b3' => 'Nippon-Dics-Co.-Ltd.', + '13ba' => 'Unknown', + '13be' => 'Ricoh-Printing-Systems-Ltd.', + '13cf' => 'Wisair-Ltd.', + '13d0' => 'Techsan-Electronics-Co.-Ltd.', + '13d2' => 'Shark-Multimedia', + '13d3' => 'IMC-Networks', + '13dc' => 'ALEREON-INC.', + '13dd' => 'i.Tech-Dynamic-Limited', + '13e5' => 'Rane', + '13e6' => 'TechnoScope-Co.-Ltd.', + '13ec' => 'Zydacron', + '13fd' => 'Initio-Corporation', + '1400' => 'Axxion-Group-Corp.', + '1402' => 'Bowe-Bell---Howell', + '1403' => 'Sitronix', + '140e' => 'Telechips-Inc.', + '1410' => 'Novatel-Wireless', + '1419' => 'ABILITY-ENTERPRISE-CO.-LTD.', + '142a' => 'Thales-E-Transactions', + '142b' => 'Arbiter-Systems-Inc.', + '1430' => 'RedOctane', + '1431' => 'Pertech-Resources-Inc.', + '1435' => 'Wistron-NeWeb', + '1436' => 'Denali-Software-Inc.', + '143c' => 'Altek-Corporation', + '1443' => 'Digilent', + '1453' => 'Radio-Shack', + '145f' => 'Trust', + '1460' => 'Tatung-Co.', + '1461' => 'Staccato-Communications', + '1462' => 'Micro-Star-International', + '1472' => 'Huawei-3Com', + '147e' => 'Upek', + '147f' => 'Hama-GmbH---Co.-KG', + '1482' => 'Vaillant', + '1484' => 'Elsa-AG-hex', + '1485' => 'Silicom', + '1487' => 'DSP-Group-Ltd.', + '148e' => 'EVATRONIX-SA', + '148f' => 'Ralink', + '1497' => 'Panstrong-Company-Ltd.', + '1498' => 'Microtek-International-Inc.', + '149a' => 'Imagination-Technologies', + '14aa' => 'WideView-Technology-Inc.', + '14ad' => 'CTK-Corporation', + '14ae' => 'Printronix-Inc.', + '14af' => 'ATP-Electronics-Inc.', + '14b0' => 'StarTech.com-Ltd.', + '14b2' => 'Ralink', + '14c0' => 'Rockwell-Automation-Inc.', + '14c2' => 'Gemlight-Computer-Ltd', + '14cd' => 'Super-Top', + '14d8' => 'JAMER-INDUSTRIES-CO.-LTD.', + '14dd' => 'Raritan-Computer-Inc.', + '14e1' => 'Dialogue-Technology-Corp.', + '14ea' => 'Planex-Communications', + '14ed' => 'Shure-Inc.', + '14f7' => 'TechniSat-Digital-GmbH', + '1500' => 'Ellisys', + '1501' => 'Pine-Tum-Enterprise-Co.-Ltd.', + '1513' => 'medMobile', + '1514' => 'Actel', + '1516' => 'CompUSA', + '1518' => 'Cheshire-Engineering-Corp.', + '1520' => 'Bitwire-Corp.', + '1524' => 'ENE-Technology-Inc', + '1527' => 'Silicon-Portals', + '1529' => 'UBIQUAM-Co.-Ltd.', + '152e' => 'LG-HLDS', + '1532' => 'Razer-USA-Ltd', + '1546' => 'U-Blox-AG', + '154a' => 'Celectronic-GmbH', + '154b' => 'PNY', + '154d' => 'ConnectCounty-Holdings-Berhad', + '1554' => 'Prolink-Microsystems-Corp.', + '1557' => 'OQO', + '1568' => 'Sunf-Pu-Technology-Co.-Ltd', + '156f' => 'Quantum-Corporation', + '1570' => 'ALLTOP-TECHNOLOGY-CO.-LTD.', + '157b' => 'Ketron-SRL', + '157e' => 'TRENDnet', + '1582' => 'Fiberline', + '1587' => 'SMA-Technologie-AG', + '158d' => 'Oakley-Inc.', + '15a2' => 'Freescale-Semiconductor-Inc.', + '15a4' => 'Afatech-Technologies-Inc.', + '15a8' => 'Teams-Power-Limited', + '15a9' => 'Gemtek', + '15ad' => 'VMware-Inc.', + '15ba' => 'Olimex-Ltd.', + '15c0' => 'XL-Imaging', + '15c2' => 'SoundGraph-Inc.', + '15c6' => 'Laboratoires-MXM', + '15c8' => 'KTF-Technologies', + '15c9' => 'D-Box-Technologies', + '15ca' => 'Textech-International-Ltd.', + '15d5' => 'Coulomb-Electronics-Ltd.', + '15d9' => 'Trust-International-B.V.', + '15dc' => 'Hynix-Semiconductor-Inc.', + '15e0' => 'Seong-Ji-Industrial-Co.-Ltd.', + '15e1' => 'RSA', + '15e8' => 'SohoWare', + '15e9' => 'Pacific-Digital-Corp.', + '15ec' => 'Belcarra-Technologies-Corp.', + '15f4' => 'HanfTek', + '1604' => 'Tascam', + '1606' => 'Umax', + '1608' => 'Inside-Out-Networks-hex', + '160a' => 'VIA-Technologies-Inc.', + '1614' => 'Amoi-Electronics', + '1621' => 'Wionics-Research', + '1628' => 'Stonestreet-One-Inc.', + '162a' => 'Airgo-Networks-Inc.', + '162f' => 'WiQuest-Communications-Inc.', + '1630' => '2Wire-Inc.', + '1631' => 'Good-Way-Technology', + '1645' => 'Cross-Match-Technologies-GmbH', + '1649' => 'SofTec-Microsystems', + '164a' => 'ChipX', + '164c' => 'Matrix-Vision-GmbH', + '165b' => 'Frontier-Design-Group', + '1660' => 'Creatix-Polymedia-GmbH', + '1668' => 'Actiontec-Electronics-Inc', + '1669' => 'PiKRON-Ltd.-hex', + '1679' => 'Total-Phase', + '1680' => 'Golden-Bridge-Electech-Inc.', + '1681' => 'Prevo-Technologies-Inc.', + '1684' => 'Godspeed-Computer-Corp.', + '1685' => 'Delock', + '1686' => 'ZOOM-Corporation', + '1687' => 'Kingmax-Digital-Inc.', + '1688' => 'Saab-AB', + '168c' => 'Atheros', + '1690' => 'Askey-Computer-Corp.-hex', + '1697' => 'VTec-Test-Inc.', + '16a6' => 'Unigraf', + '16ab' => 'Global-Sun-Technology', + '16b4' => 'iStation', + '16b5' => 'Persentec-Inc.', + '16c0' => 'VOTI', + '16ca' => 'Wireless-Cables-Inc.', + '16cc' => 'silex-technology-Inc.', + '16d0' => 'GrauTec', + '16d5' => 'AnyDATA-Corporation', + '16d6' => 'JABLOCOM-s.r.o.', + '16d8' => 'CMOTECH-Co.-Ltd.', + '16dc' => 'Wiener-Plein---Baus', + '16f0' => 'GN-ReSound-A-S', + '16f5' => 'Futurelogic-Inc.', + '1706' => 'BlueView-Technologies-Inc.', + '1707' => 'ARTIMI', + '170b' => 'Swissonic', + '170d' => 'Avnera', + '1725' => 'Vitesse-Semiconductor', + '1726' => 'Axesstel-Inc.', + '172f' => 'Waltop-International-Corp.', + '1733' => 'Cellink-Technology-Co.-Ltd', + '1737' => 'Linksys', + '1740' => 'Senao', + '1743' => 'General-Atomics', + '174c' => 'ASMedia-Technology-Inc.', + '174f' => 'Syntek', + '1753' => 'GERTEC-Telecomunicacoes-Ltda.', + '1759' => 'LucidPort-Technology-Inc.', + '1772' => 'System-Level-Solutions-Inc.', + '1776' => 'Arowana', + '177f' => 'Sweex', + '1781' => 'Multiple-Vendors', + '1784' => 'TopSeed-Technology-Corp.', + '1787' => 'ATI-AIB', + '1796' => 'Printrex-Inc.', + '1797' => 'JALCO-CO.-LTD.', + '1799' => 'Belkin-Components', + '17a0' => 'Samson-Technologies-Corp.', + '17a4' => 'Concept2', + '17a7' => 'MICOMSOFT-CO.-LTD.', + '17b3' => 'Grey-Innovation', + '17c3' => 'Singim-International-Corp.', + '17cc' => 'Native-Instruments', + '17d0' => 'Sanford-L.P.', + '17d3' => 'Korea-Techtron-Co.-Ltd.', + '17e9' => 'Newnham-Research', + '17eb' => 'Cornice-Inc.', + '17ef' => 'Lenovo', + '17f5' => 'K.K.-Rocky', + '17f6' => 'Unicomp-Inc', + '1809' => 'Advantech', + '1822' => 'Twinhan', + '1831' => 'Gwo-Jinn-Industries-Co.-Ltd.', + '183d' => 'VIVOphone', + '1843' => 'Vaisala', + '1849' => 'ASRock-Incorporation', + '1852' => 'GYROCOM-C-C-Co.-LTD', + '1854' => 'Memory-Devices-Ltd.', + '185b' => 'Compro', + '1862' => 'Teridian-Semiconductor-Corp.', + '1870' => 'Nexio-Co.-Ltd', + '1871' => 'Aveo-Technology-Corp.', + '187c' => 'Alienware-Corporation', + '187f' => 'Siano-Mobile-Silicon', + '1892' => 'Vast-Technologies-Inc.', + '1894' => 'Topseed', + '1897' => 'Evertop-Wire-Cable-Co.', + '18a5' => 'Verbatim-Ltd', + '18b1' => 'Petalynx', + '18b4' => 'e3C-Technologies', + '18b6' => 'Mikkon-Technology-Limited', + '18b7' => 'Zotek-Electronic-Co.-Ltd.', + '18c5' => 'amit-Inc', + '18cd' => 'Ecamm', + '18d1' => 'Google-Inc.', + '18d9' => 'Kaba', + '18dd' => 'Planon-System-Solutions-Inc.', + '18e8' => 'Qcom', + '18ea' => 'Matrox-Graphics-Inc.', + '18ec' => 'Arkmicro-Technologies-Inc.', + '18fd' => 'FineArch-Inc.', + '1908' => 'GEMBIRD', + '190d' => 'Motorola-GSG', + '1914' => 'Alco-Digital-Devices-Limited', + '1915' => 'Nordic-Semiconductor-ASA', + '1926' => 'NextWindow', + '192f' => 'Avago-Technologies-Pte.', + '1941' => 'Dream-Link', + '1943' => 'Sensoray-Co.-Inc.', + '1949' => 'Lab126', + '1951' => 'Hyperstone-AG', + '1953' => 'Ironkey-Inc.', + '1954' => 'Radiient-Technologies', + '195d' => 'Itron-Technology-iONE', + '196b' => 'Wispro-Technology-Inc.', + '1970' => 'Dane-Elec-Corp.-USA', + '1977' => 'T-Logic', + '1989' => 'Nuconn-Technology-Corp.', + '198f' => 'Beceem-Communications-Inc.', + '1995' => 'Trillium-Technology-Pty.-Ltd.', + '199f' => 'Benica-Corporation', + '19a8' => 'Biforst-Technology-Inc.', + '19ab' => 'Bodelin', + '19af' => 'S-Life', + '19b2' => 'Batronix', + '19b4' => 'Celestron', + '19b5' => 'B---W-Group', + '19b6' => 'Infotech-Logistic-LLC', + '19b9' => 'Data-Robotics', + '19ca' => 'Mindtribe', + '19cf' => 'Parrot-SA', + '19d2' => 'ONDA-Communication-S.p.A.', + '19f7' => 'RODE-Microphones', + '19fa' => 'Gampaq-Co.Ltd', + '19ff' => 'Dynex', + '1a08' => 'Bellwood-International-Inc.', + '1a0a' => 'USB-IF-non-workshop', + '1a12' => 'KES-Co.-Ltd.', + '1a25' => 'Amphenol-East-Asia-Ltd.', + '1a2a' => 'Seagate-Branded-Solutions', + '1a32' => 'Quanta-Microsystems-Inc.', + '1a36' => 'Biwin-Technology-Ltd.', + '1a40' => 'TERMINUS-TECHNOLOGY-INC.', + '1a41' => 'Action-Electronics-Co.-Ltd.', + '1a4a' => 'Silicon-Image', + '1a4b' => 'SafeBoot-International-B.V.', + '1a61' => 'Abbott-Diabetes-Care', + '1a6a' => 'Spansion-Inc.', + '1a6d' => 'SamYoung-Electronics-Co.-Ltd', + '1a6e' => 'Global-Unichip-Corp.', + '1a6f' => 'Sagem-Orga-GmbH', + '1a79' => 'Bayer-Health-Care-LLC', + '1a7b' => 'Lumberg-Connect-GmbH---Co.-KG', + '1a7c' => 'Evoluent', + '1a86' => 'QinHeng-Electronics', + '1a89' => 'Dynalith-Systems-Co.-Ltd.', + '1a8b' => 'SGS-Taiwan-Ltd.', + '1a8d' => 'BandRich-Inc.', + '1a90' => 'Corsair-Voyager-GT-16GB', + '1a98' => 'Leica-Camera-AG', + '1aa4' => 'Data-Drive-Thru-Inc.', + '1aa5' => 'UBeacon-Technologies-Inc.', + '1aa6' => 'eFortune-Technology-Corp.', + '1acb' => 'Salcomp-Plc', + '1ad1' => 'Desay-Wire-Co.-Ltd.', + '1ae7' => 'X-TENSIONS', + '1b04' => 'Meilhaus-Electronic-GmBH', + '1b20' => 'MStar-Semiconductor-Inc.', + '1b22' => 'WiLinx-Corp.', + '1b26' => 'Cellex-Power-Products-Inc.', + '1b27' => 'Current-Electronics-Inc.', + '1b28' => 'NAVIsis-Inc.', + '1b32' => 'Ugobe-Life-Forms-Inc.', + '1b36' => 'ViXS-Systems-Inc.', + '1b3b' => 'iPassion-Technology-Inc.', + '1b3f' => 'Generalplus-Technology-Inc.', + '1b47' => 'Energizer-Holdings-Inc.', + '1b48' => 'Plastron-Precision-Co.-Ltd.', + '1b59' => 'K.S.-Terminals-Inc.', + '1b72' => 'ATERGI-TECHNOLOGY-CO.-LTD.', + '1b73' => 'Fresco-Logic', + '1b75' => 'Ovislink-Corp.', + '1b76' => 'Legend-Silicon-Corp.', + '1b80' => 'Afatech', + '1b8c' => 'Altium-Limited', + '1b8d' => 'e-MOVE-Technology-Co.-Ltd.', + '1b8e' => 'Amlogic-Inc.', + '1b8f' => 'MA-LABS-Inc.', + '1b96' => 'N-Trig', + '1b98' => 'YMax-Communications-Corp.', + '1b99' => 'Shenzhen-Yuanchuan-Electronic', + '1ba4' => 'Ember-Corporation', + '1ba6' => 'Abilis-Systems', + '1bad' => 'Harmonix-Music', + '1bae' => 'Vuzix-Corporation', + '1bbb' => 'T---A-Mobile-Phones', + '1bc4' => 'Ford-Motor-Co.', + '1bc5' => 'AVIXE-Technology-China-Ltd.', + '1bcf' => 'Sunplus-Innovation-Technology-Inc', + '1bde' => 'P-TWO-INDUSTRIES-INC.', + '1bf0' => 'RealVision-Inc.', + '1bf5' => 'Extranet-Systems-Inc.', + '1bfd' => 'TouchPack', + '1c02' => 'Kreton-Corporation', + '1c04' => 'QNAP-System-Inc.', + '1c0d' => 'Relm-Wireless', + '1c10' => 'Lanterra-Industrial-Co.-Ltd.', + '1c13' => 'ALECTRONIC-LIMITED', + '1c1a' => 'Datel-Electronics-Ltd.', + '1c1b' => 'Volkswagen-of-America-Inc.', + '1c1f' => 'Goldvish-S.A.', + '1c21' => 'ADDMM-LLC', + '1c27' => 'HuiYang-D---S-Cable-Co.-Ltd.', + '1c31' => 'LS-Cable-Ltd.', + '1c34' => 'SpringCard', + '1c37' => 'Authorizer-Technologies-Inc.', + '1c3d' => 'NONIN-MEDICAL-INC.', + '1c3e' => 'Wep-Peripherals', + '1c49' => 'Cherng-Weei-Technology-Corp.', + '1c4f' => 'SiGma-Micro', + '1c6c' => 'Skydigital-Inc.', + '1c73' => 'AMT', + '1c77' => 'Kaetat-Industrial-Co.-Ltd.', + '1c78' => 'Datascope-Corp.', + '1c79' => 'Unigen-Corporation', + '1c7a' => 'LighTuning-Technology-Inc.', + '1c87' => '2N-TELEKOMUNIKACE-a.s.', + '1c88' => 'Somagic-Inc.', + '1c8e' => 'ASTRON-INTERNATIONAL-CORP.', + '1c98' => 'ALPINE-ELECTRONICS-INC.', + '1ca0' => 'ACCARIO-Inc.', + '1cac' => 'Kinstone', + '1cb3' => 'Aces-Electronic-Co.-Ltd.', + '1cb4' => 'OPEX-CORPORATION', + '1cbe' => 'Luminary-Micro-Inc.', + '1cc0' => 'PlantSense', + '1cca' => 'NextWave-Broadband-Inc.', + '1cd4' => 'adp-corporation', + '1cd5' => 'Firecomms-Ltd.', + '1cdf' => 'WonTen-Technology-Co.-Ltd.', + '1ce0' => 'EDIMAX-TECHNOLOGY-CO.-LTD.', + '1ce1' => 'Amphenol-KAE', + '1cfc' => 'ANDES-TECHNOLOGY-CORPORATION', + '1d07' => 'Solid-Motion', + '1d14' => 'ALPHA-SAT-TECHNOLOGY-LIMITED', + '1d17' => 'C-Thru-Music-Ltd.', + '1d19' => 'Dexatek-Technology-Ltd.', + '1d1f' => 'Diostech-Co.-Ltd.', + '1d20' => 'SAMTACK-INC.', + '1d4d' => 'PEGATRON-CORPORATION', + '1d50' => 'OpenMoko-Inc.', + '1d5b' => 'Smartronix-Inc.', + '1d6b' => 'Linux-Foundation', + '1e0e' => 'Qualcomm---Option', + '1e10' => 'Point-Grey-Research-Inc.', + '1e1d' => 'Lumension-Security', + '1e1f' => 'INVIA', + '1e29' => 'Festo-AG---Co.-KG', + '1e41' => 'Cleverscope', + '1e54' => 'TypeMatrix', + '1e68' => 'TrekStor-GmbH---Co.-KG', + '1e71' => 'NZXT', + '1e74' => 'Coby-Electronics-Corporation', + '1e7d' => 'ROCCAT', + '1ebb' => 'NuCORE-Technology-Inc.', + '1eda' => 'AirTies-Wireless-Networks', + '1ef6' => 'EADS-Deutschland-GmbH', + '1f28' => 'Cal-Comp', + '1f4d' => 'G-Tek-Electronics-Group', + '1f82' => 'TANDBERG', + '1f84' => 'Alere-Inc.', + '1f87' => 'Stantum', + '1fbd' => 'Delphin-Technology-AG', + '1fc9' => 'NXP-Semiconductors', + '1fe7' => 'Vertex-Wireless-Co.-Ltd.', + '2001' => 'D-Link', + '2013' => 'Unknown-Pinnacle-', + '2019' => 'PLANEX', + '2040' => 'Hauppauge', + '2047' => 'Texas-Instruments', + '2080' => 'Barnes---Noble', + '2087' => 'Cando', + '20a0' => 'Clay-Logic', + '20b1' => 'XMOS-Ltd', + '20b3' => 'Hanvon', + '20b7' => 'Qi-Hardware', + '20df' => 'Simtec-Electronics', + '2101' => 'ActionStar', + '2162' => 'Creative--', + '2184' => 'GW-Instek', + '21a1' => 'Emotiv-Systems-Pty.-Ltd.', + '21d6' => 'Agecodagis-SARL', + '2222' => 'MacAlly', + '2227' => 'SAMWOO-Enterprise', + '2233' => 'RadioShack-Corporation', + '2237' => 'Kobo-Inc.', + '22a6' => 'Pie-Digital-Inc.', + '22b8' => 'Motorola-PCS', + '22b9' => 'eTurboTouch-Technology-Inc.', + '2304' => 'Pinnacle-Systems-Inc.', + '2373' => 'Pumatronix-Ltda', + '2375' => 'Digit-at-lway-Inc.', + '2478' => 'Tripp-Lite', + '2632' => 'TwinMOS', + '2730' => 'Citizen', + '2735' => 'DigitalWay', + '2770' => 'NHJ-Ltd', + '2821' => 'ASUSTek-Computer-Inc.', + '2899' => 'Toptronic-Industrial-Co.-Ltd', + '2c02' => 'Planex-Communications', + '2c1a' => 'Dolphin-Peripherals', + '2fb2' => 'Fujitsu-Ltd', + '3125' => 'Eagletron', + '3176' => 'Whanam-Electronics-Co.-Ltd', + '3275' => 'VidzMedia-Pte-Ltd', + '3334' => 'AEI', + '3340' => 'Yakumo', + '3504' => 'Micro-Star', + '3579' => 'DIVA', + '3636' => 'InVibro', + '3838' => 'WEM', + '3923' => 'National-Instruments-Corp.', + '40bb' => 'I-O-Data', + '4101' => 'i-rocks', + '4102' => 'iRiver-Ltd.', + '413c' => 'Dell-Computer-Corp.', + '4146' => 'USBest-Technology', + '4242' => 'USB-Design-by-Example', + '4317' => 'Broadcom', + '4348' => 'WinChipHead', + '4572' => 'Shuttle-Inc.', + '4586' => 'Panram', + '4670' => 'EMS-Production', + '4752' => 'Miditech', + '4757' => 'GW-Instek', + '4766' => 'Aceeca', + '4855' => 'Memorex', + '4971' => 'SimpleTech', + '5032' => 'Grandtec', + '5041' => 'Linksys', + '50c2' => 'Averatec--', + '5173' => 'Sweex', + '5219' => 'I-Tetra', + '5345' => 'Owon', + '544d' => 'Transmeta-Corp.', + '5543' => 'UC-Logic-Technology-Corp.', + '5555' => 'Epiphan-Systems-Inc.', + '55aa' => 'OnSpec-Electronic-Inc.', + '5656' => 'Uni-Trend-Group-Limited', + '595a' => 'IRTOUCHSYSTEMS-Co.-Ltd.', + '5986' => 'Acer', + '5a57' => 'Zinwell', + '6000' => 'Beholder-International-Ltd.', + '601a' => 'Ingenic-Semiconductor-Ltd.', + '6189' => 'Sitecom', + '6253' => 'TwinHan-Technology-Co.-Ltd', + '636c' => 'CoreLogic-Inc.', + '6472' => 'Unknown-Sony-', + '6547' => 'Arkmicro-Technologies-Inc.', + '6615' => 'IRTOUCHSYSTEMS-Co.-Ltd.', + '6666' => 'Prototype-product-Vendor-ID', + '6677' => 'WiseGroup-Ltd.', + '6891' => '3Com', + '695c' => 'Opera1', + '7104' => 'CME-Central-Music-Co.', + '726c' => 'StackFoundry-LLC', + '734c' => 'TBS-Technologies-China', + '7392' => 'Edimax-Technology-Co.-Ltd', + '8086' => 'Intel-Corp.', + '8087' => 'Intel-Corp.', + '80ee' => 'VirtualBox', + '8282' => 'Keio', + '8341' => 'EGO-Systems-Inc.', + '9016' => 'Sitecom', + '9022' => 'TeVii-Technology-Ltd.', + '9148' => 'GeoLab-Ltd', + '9710' => 'MosChip-Semiconductor', + '99fa' => 'Grandtec', + '9ac4' => 'J.-Westhues', + 'a168' => 'AnMo-Electronics-Corporation', + 'a600' => 'Asix', + 'a727' => '3Com', + 'abcd' => 'Unknown', + 'c251' => 'Keil-Software-Inc.', + 'cace' => 'CACE-Technologies-Inc.', + 'd209' => 'Ultimarc', + 'e4e4' => 'Xorcom-Ltd.', + 'eb03' => 'MakingThings', + 'eb1a' => 'eMPIA-Technology-Inc.', + 'eb2a' => 'KWorld', + 'f003' => 'Hewlett-Packard', + '1412' => 'ESI', + '7012' => 'VIA-Technologies-Inc', + ); + +} \ No newline at end of file diff --git a/Application/Include/version.php b/Application/Include/version.php new file mode 100644 index 0000000..7e348f6 --- /dev/null +++ b/Application/Include/version.php @@ -0,0 +1,138 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + + +class Version +{ + + public static $mobileAllowed = array( + 'home,index', + 'contact,index', + 'credits,index', + 'project,index', + 'hardware,catalogue', + 'wifi,catalogue', + 'wifi,view', + 'videocards,catalogue', + 'videocards,view', + 'printers,catalogue', + 'printers,view', + 'scanners,catalogue', + 'scanners,view', + 'threegcards,catalogue', + 'threegcards,view', + 'soundcards,catalogue', + 'soundcards,view', + 'webcams,catalogue', + 'webcams,view', + 'bluetooth,catalogue', + 'bluetooth,view', + 'acquisitioncards,catalogue', + 'acquisitioncards,view', + 'fingerprintreaders,catalogue', + 'fingerprintreaders,view', + 'ethernetcards,catalogue', + 'ethernetcards,view', + 'sdcardreaders,catalogue', + 'sdcardreaders,view', + 'modems,catalogue', + 'modems,view', + 'notebooks,catalogue', + 'notebooks,view', + 'raidadapters,catalogue', + 'raidadapters,view', + 'hostcontrollers,catalogue', + 'hostcontrollers,view', + ); + + //get the subfolder of the Views folder where to look for the view files + public static function getViewSubfolder() + { + $type = self::get(); + + if ($type === 'mobile') + { + return 'Mobile'; + } + return 'Desktop'; + } + + //get the type of version: desktop or mobile + public static function get() + { + if (isset($_COOKIE['version'])) + { + if (strcmp($_COOKIE['version'],'mobile') === 0) + { + return 'mobile'; + } + else if (strcmp($_COOKIE['version'],'desktop') === 0) + { + return 'desktop'; + } + } + else + { + //Regular expression to detect mobile browsers + //taken from http://detectmobilebrowsers.com/ + $useragent=$_SERVER['HTTP_USER_AGENT']; + if(preg_match('/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i',substr($useragent,0,4))) + return 'mobile'; + } + return 'desktop'; + } + + //set the version + public static function set() + { + if (isset($_GET['version'])) + { + if (strcmp($_GET['version'],'mobile') === 0) + { + self::setMobile(); + } + else if (strcmp($_GET['version'],'desktop') === 0) + { + self::setDesktop(); + } + $h = new HeaderObj(DOMAIN_NAME); + $h->redirect("home/index/".Lang::$current); + } + } + + public static function setMobile() + { + if (!isset($_COOKIE['version']) or strcmp($_COOKIE['version'],'desktop') === 0) + { + setcookie("version","mobile",0,'/'); + } + } + + public static function setDesktop() + { + if (!isset($_COOKIE['version']) or strcmp($_COOKIE['version'],'mobile') === 0) + { + setcookie("version","desktop",0,'/'); + } + } + +} \ No newline at end of file diff --git a/Application/Include/wikiFormatting.php b/Application/Include/wikiFormatting.php new file mode 100644 index 0000000..6eb93f7 --- /dev/null +++ b/Application/Include/wikiFormatting.php @@ -0,0 +1,356 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + + +$decodeCounter = 0; +$decodeAnotherTime = false; + +//decode the text of the wiki +function decodeWikiText($string) +{ + global $decodeAnotherTime; + global $decodeCounter; + + $decodeCounter++; + + $decodeAnotherTime = false; + + $string = preg_replace('/(\[hr\])/', '
',$string); + + $string = preg_replace_callback('/(\[\[)(.*?)\|(.*?)(\]\])/', 'linkToInternalPageWithText' ,$string); + + $string = preg_replace_callback('/(\[\[)(.*?)(\]\])/', 'linkToInternalPage' ,$string); + + $string = preg_replace_callback('/(\[a\])(.*?)(\[\/a\])/', 'linkTo',$string); + + $string = preg_replace_callback('/(\[a\])(.*?)\|(.*?)(\[\/a\])/', 'linkToWithText',$string); + + $string = preg_replace_callback('/(\[notebook\])([0-9]*?)(\[\/notebook\])/s', 'linkToNotebook',$string); + + $string = preg_replace_callback('/(\[wifi\])([0-9]*?)(\[\/wifi\])/s', 'linkToWifi',$string); + + $string = preg_replace_callback('/(\[videocard\])([0-9]*?)(\[\/videocard\])/s', 'linkToVideocard',$string); + + $string = preg_replace('/(\[b\])(.*?)(\[\/b\])/s', '${2}',$string); + + $string = preg_replace('/(\[u\])(.*?)(\[\/u\])/s', '${2}',$string); + + $string = preg_replace('/(\[i\])(.*?)(\[\/i\])/s', '${2}',$string); + + $string = preg_replace('/(\[del\])(.*?)(\[\/del\])/s', '${2}',$string); + + $string = preg_replace_callback('/(\[\*\])(.*?)(\[\/\*\])/s', 'createItem',$string); + + $string = preg_replace_callback('/(\[list\])(.*?)(\[\/list\])/s', 'createList',$string); + + $string = preg_replace_callback('/(\[enum\])(.*?)(\[\/enum\])/s', 'createEnum',$string); + + $string = preg_replace('/(\[code\])(.*?)(\[\/code\])/s', '
${2}
',$string); + + $string = preg_replace('/(\[p\])(.*?)(\[\/p\])/s', '

${2}

',$string); + + $string = preg_replace_callback('/(\[)(h)(1|2|3)(\])(.*?)(\[\/)(h)(1|2|3)(\])/s', 'createHeadGeneric',$string); + + $string = preg_replace_callback('/(\[tab )(lang=)([^\s]+)(\s*\])(.*?)(\[\/tab\])/s', 'createTabs',$string); + + $string = preg_replace_callback('/(__TOC__)/s', 'createToc',$string); + + $string = preg_replace('/(\[lang\])(.*?)(\[\/lang\])/s', '
${2}
',$string); + + $string = preg_replace('/(\{\{)/s', '[',$string); + + $string = preg_replace('/(\}\})/s', ']',$string); + + if ($decodeAnotherTime and $decodeCounter<=30) + { + return decodeWikiText(Tabs::render().$string); + } + else + { + return Tabs::render().$string; + } +} + +//create the list of the tabs in the description entry +function createTabs($match) +{ + $label = Lang::getLabel($match[3]); + Tabs::$tabList[] = "
  • ".$label."
  • \n"; + Tabs::$htmlList[] = "
    $label
    \n
    ".$match[5]."
    \n"; + return null; +} + +//create the HTML of the tabs in the description entry +class Tabs +{ + public static $tabList = array(); + public static $htmlList = array(); + + public static function render() + { + $html = null; + if (count(self::$tabList) > 0) + { + $html .= "
    \n"; + $html .= "\n"; + $html .= "
      \n"; + foreach (self::$tabList as $label) + { + $html .= $label; + } + $html .= "
    \n
    \n"; + foreach (self::$htmlList as $content) + { + $html .= $content; + } + $html .= "
    \n
    \n"; + } + self::$tabList = array(); + self::$htmlList = array(); + return $html; + } + +} + +function checkUrl($url) +{ + $match = '/^http(s)?\:\/\/(www\.)?[a-zA-Z0-9\-\_]+(\.[a-zA-Z0-9\-\_]+)*\.([a-z]{2,4})((\/[a-zA-Z0-9\_\.\-\:\%\+]+)*(\/([a-zA-Z0-9\_\:\-\.\+]+\.(php|html|htm|asp|aspx|jsp|cgi))?)?)?(\?([a-zA-Z0-9\_\-\+\s]+\=[a-zA-Z0-9\_\-\s\%\+\&]+)+)?(#[a-zA-Z0-9\_\-\+\s\%]+)?([\s]*)?$/'; + + if (preg_match($match,$url)) + { + return true; + } + else + { + return false; + } +} + +function vitalizeUrl($string) +{ + if (checkUrl($string)) + { + return "".$string.""; + } + return $string; +} + +function linkTo($match) +{ + if (checkUrl($match[2])) + { + return "".$match[2].""; + } + else + { + return $match[0]; + } +} + +function createNode($match,$hnodeTag,$htmlTagBegin,$htmlTagEng) +{ + $numb = strlen($hnodeTag); + global $decodeAnotherTime; + + if (strstr($match[2],$hnodeTag)) + { + $string = substr($match[0],$numb); + $string = decodeWikiText($string); + $decodeAnotherTime = true; + return $hnodeTag.$string; + } + else + { +// $decodeAnotherTime = false; + return $htmlTagBegin.$match[2].$htmlTagEng; + } +} + +function createToc($match) +{ + return Toc::render(); +} + +//table of contents +class Toc +{ + + public static $links = array(); + public static $level = 1; + + private static $html = null; + + public function render() + { + $c=0; + foreach (self::$links as $link) + { + if ((int)substr($link,0,1) === 1) + { + break; + } + $c++; + } + + self::$links = array_slice(self::$links,$c); + + $res = array(); + + if (count(self::$links) > 0) + { + self::$links[] = '1fine'; + + $res[] = "
    ".gtext("Table of contents")."
      "; + foreach (self::$links as $link) + { + $startChar = (int)substr($link,0,1); + + if (strcmp(self::$level,$startChar) === 0) + { + $res[] = "
    • ".substr($link,1)."
    • "; + } + else if ($startChar > self::$level) + { + $diff = (int)$startChar - (int)self::$level; + if ($diff !== 1) + { + return null; + } + + self::$level = $startChar; + $res[] = "
      • ".substr($link,1)."
      • "; + } + else + { + $diff = (int)self::$level - (int)$startChar; + + for ($i=0;$i<$diff;$i++) + { + $res[] = "
      "; + } + self::$level = $startChar; + $res[] = "
    • ".substr($link,1)."
    • "; + } + } + array_pop($res); + $res[] = "
    "; + } + self::$links = array(); + return implode('',$res); + } +} + +//create h1, h2, h3 ($level=1,2,3) +function createHead($match,$level) +{ + Toc::$links[] = $level.$match[5]; + + return "
    ".$match[5]."
    "; +} + +//create

    ,

    ,

    +function createHeadGeneric($match) +{ + if (strcmp($match[3],'1') === 0) + { + return createHead($match,'1'); + } + else if (strcmp($match[3],'2') === 0) + { + return createHead($match,'2'); + } + else + { + return createHead($match,'3'); + } +} + +//create
  • +function createItem($match) +{ + return createNode($match,'[*]',"
  • ","
  • "); +} + +//create
      +function createList($match) +{ + return createNode($match,'[list]',"
        ","
      "); +} + +//create
        +function createEnum($match) +{ + return createNode($match,'[enum]',"
          ","
        "); +} + +function linkToInternalPage($match) +{ + return "".$match[2].""; +} + +function linkToInternalPageWithText($match) +{ + return "".$match[3].""; +} + +function linkToWithText($match) +{ + if (checkUrl($match[2])) + { + + return "".$match[3].""; + } + else + { + return $match[0]; + } +} + +//create the link to the wiki page of the notebook +function linkToNotebook($match) +{ + $hardware = new HardwareModel(); + $clean['id_hard'] = (int)$match[2]; + $name = encodeUrl($hardware->getTheModelName($clean['id_hard'])); + $href = Url::getRoot()."notebooks/view/".Lang::$current."/".$clean['id_hard']."/$name"; + return (strcmp($name,'') !== 0) ? "".$name."" : $match[0]; +} + +//create the link to the wiki page of the wifi +function linkToWifi($match) +{ + $hardware = new HardwareModel(); + $clean['id_hard'] = (int)$match[2]; + $name = encodeUrl($hardware->getTheModelName($clean['id_hard'])); + $href = Url::getRoot()."wifi/view/".Lang::$current."/".$clean['id_hard']."/$name"; + return (strcmp($name,'') !== 0) ? "".$name."" : $match[0]; +} + +//create the link to the wiki page of the videocard +function linkToVideocard($match) +{ + $hardware = new HardwareModel(); + $clean['id_hard'] = (int)$match[2]; + $name = encodeUrl($hardware->getTheModelName($clean['id_hard'])); + $href = Url::getRoot()."videocards/view/".Lang::$current."/".$clean['id_hard']."/$name"; + return (strcmp($name,'') !== 0) ? "".$name."" : $match[0]; +} \ No newline at end of file diff --git a/Application/Models/AcquisitioncardsModel.php b/Application/Models/AcquisitioncardsModel.php new file mode 100644 index 0000000..147aa94 --- /dev/null +++ b/Application/Models/AcquisitioncardsModel.php @@ -0,0 +1,68 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class AcquisitioncardsModel extends GenericModel +{ + + public $type = 'acquisition-card'; //device type + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'comm_year' => 'comm_year', + 'compatibility' => 'compatibility', + 'interface' => 'interface', + ); + + $this->_popupLabels = array( + 'vendor' => gtext("vendor"), + 'comm_year' => gtext("year"), + 'compatibility' => gtext("does it work?"), + 'interface' => gtext("interface"), + ); + + $this->setPopupFunctions(); + + $this->createPopupWhere('vendor,compatibility,comm_year,interface'); + + $this->diffFields = array( + 'vendor' => gtext("vendor"), + 'model' => gtext('model name'), + 'other_names' => gtext('possible other names of the device'), + 'pci_id' => gtext("VendorID:ProductID code of the device"), + 'comm_year' => gtext('year of commercialization'), + 'interface' => gtext("interface"), + 'distribution' => gtext('GNU/Linux distribution used for the test'), + 'kernel' => gtext('tested with the following kernel libre'), + 'compatibility' => gtext("does it work with free software?"), + 'driver' => gtext("free driver used"), + 'description' => gtext('Description'), + ); + + $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/Application/Models/BaseModel.php b/Application/Models/BaseModel.php new file mode 100644 index 0000000..2f3a142 --- /dev/null +++ b/Application/Models/BaseModel.php @@ -0,0 +1,43 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class BaseModel extends Model_Tree +{ + + public function updateHistory($type) + { + $clean['created_by'] = (int)$this->values['created_by']; + $clean['last_id'] = (int)$this->lastId(); + + $history = new HistoryModel(); + $history->values = array( + 'created_by' => $clean['created_by'], + 'type' => sanitizeAll($type), + 'action' => "insert", + 'id' => $clean['last_id'], + 'message' => '', + 'gr' => 'registered', + ); + $history->insert(); + } + +} \ No newline at end of file diff --git a/Application/Models/BluetoothModel.php b/Application/Models/BluetoothModel.php new file mode 100644 index 0000000..022c889 --- /dev/null +++ b/Application/Models/BluetoothModel.php @@ -0,0 +1,68 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class BluetoothModel extends GenericModel +{ + + public $type = 'bluetooth'; //device type + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'comm_year' => 'comm_year', + 'bluetooth_works' => 'bluetooth_works', + 'interface' => 'interface', + ); + + $this->_popupLabels = array( + 'vendor' => gtext("vendor"), + 'comm_year' => gtext("year"), + 'bluetooth_works' => gtext("does it work?"), + 'interface' => gtext("interface"), + ); + + $this->createPopupWhere('vendor,bluetooth_works,comm_year,interface'); + + $this->setPopupFunctions(); + + $this->diffFields = array( + 'vendor' => gtext("vendor"), + 'model' => gtext('model name'), + 'other_names' => gtext('possible other names of the device'), + 'pci_id' => gtext("VendorID:ProductID code of the device"), + 'comm_year' => gtext('year of commercialization'), + 'interface' => gtext("interface"), + 'distribution' => gtext('GNU/Linux distribution used for the test'), + 'kernel' => gtext('tested with the following kernel libre'), + 'bluetooth_works' => gtext("does it work with free software?"), + 'driver' => gtext("free driver used"), + 'description' => gtext('Description'), + ); + + $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/Application/Models/BoxesModel.php b/Application/Models/BoxesModel.php new file mode 100644 index 0000000..a6035cb --- /dev/null +++ b/Application/Models/BoxesModel.php @@ -0,0 +1,42 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class BoxesModel extends Model_Tree { + + public function __construct() { + $this->_tables = 'boxes'; + $this->_idFields = 'id_box'; + + parent::__construct(); + } + + public $formStruct = array( + 'entries' => array( + 'title' => array(), + 'message' => array('type'=>'Textarea'), + 'id_box' => array( + 'type' => 'Hidden' + ) + ), + ); + +} \ No newline at end of file diff --git a/Application/Models/DeletionModel.php b/Application/Models/DeletionModel.php new file mode 100644 index 0000000..9b5dc1a --- /dev/null +++ b/Application/Models/DeletionModel.php @@ -0,0 +1,53 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class DeletionModel extends Model_Tree +{ + + public function __construct() + { + $this->_tables = 'deletion'; + $this->_idFields = 'id_del'; + +// $this->_where=array( +// 'id_hard' => 'talk' +// ); +// + $this->_popupItemNames = array( + 'object' => 'object', + ); + + $this->_popupLabels = array( + 'object' => 'OBJECT', + ); +// + $this->orderBy = 'deletion.id_del desc'; + + $this->strongConditions['insert'] = array( + "checkIsStrings|duplication,other" => 'object', + "+checkLength|500" => 'message' + ); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/Application/Models/DistrosModel.php b/Application/Models/DistrosModel.php new file mode 100644 index 0000000..58cd435 --- /dev/null +++ b/Application/Models/DistrosModel.php @@ -0,0 +1,34 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class DistrosModel extends Model_Tree { + + public function __construct() { + $this->_tables = 'distros'; + $this->_idFields = 'id_distro'; + + $this->_idOrder = 'id_order'; + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/Application/Models/EthernetcardsModel.php b/Application/Models/EthernetcardsModel.php new file mode 100644 index 0000000..08dc997 --- /dev/null +++ b/Application/Models/EthernetcardsModel.php @@ -0,0 +1,68 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class EthernetcardsModel extends GenericModel +{ + + public $type = 'ethernet-card'; //device type + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'comm_year' => 'comm_year', + 'ethernet_card_works' => 'ethernet_card_works', + 'interface' => 'interface', + ); + + $this->_popupLabels = array( + 'vendor' => gtext("vendor"), + 'comm_year' => gtext("year"), + 'ethernet_card_works' => gtext("does it work?"), + 'interface' => gtext("interface"), + ); + + $this->setPopupFunctions(); + + $this->createPopupWhere('vendor,ethernet_card_works,comm_year,interface'); + + $this->diffFields = array( + 'vendor' => gtext("vendor"), + 'model' => gtext('model name'), + 'other_names' => gtext('possible other names of the device'), + 'pci_id' => gtext("VendorID:ProductID code of the device"), + 'comm_year' => gtext('year of commercialization'), + 'interface' => gtext("interface"), + 'distribution' => gtext('GNU/Linux distribution used for the test'), + 'kernel' => gtext('tested with the following kernel libre'), + 'ethernet_card_works' => gtext("does it work with free software?"), + 'driver' => gtext("free driver used"), + 'description' => gtext('Description'), + ); + + $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/Application/Models/FingerprintreadersModel.php b/Application/Models/FingerprintreadersModel.php new file mode 100644 index 0000000..7a2f3e8 --- /dev/null +++ b/Application/Models/FingerprintreadersModel.php @@ -0,0 +1,68 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class FingerprintreadersModel extends GenericModel +{ + + public $type = 'fingerprint-reader'; //device type + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'comm_year' => 'comm_year', + 'fingerprint_works' => 'fingerprint_works', + 'interface' => 'interface', + ); + + $this->_popupLabels = array( + 'vendor' => gtext("vendor"), + 'comm_year' => gtext("year"), + 'fingerprint_works' => gtext("does it work?"), + 'interface' => gtext("interface"), + ); + + $this->setPopupFunctions(); + + $this->createPopupWhere('vendor,fingerprint_works,comm_year,interface'); + + $this->diffFields = array( + 'vendor' => gtext("vendor"), + 'model' => gtext('model name'), + 'other_names' => gtext('possible other names of the device'), + 'pci_id' => gtext("VendorID:ProductID code of the device"), + 'comm_year' => gtext('year of commercialization'), + 'interface' => gtext("interface"), + 'distribution' => gtext('GNU/Linux distribution used for the test'), + 'kernel' => gtext('tested with the following kernel libre'), + 'fingerprint_works' => gtext("does it work with free software?"), + 'driver' => gtext("free driver used"), + 'description' => gtext('Description'), + ); + + $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/Application/Models/GenericModel.php b/Application/Models/GenericModel.php new file mode 100644 index 0000000..3a0f8fa --- /dev/null +++ b/Application/Models/GenericModel.php @@ -0,0 +1,103 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class GenericModel extends Model_Tree { + + public $type = ''; //device type + public $diffFields = array(); + public $fieldsWithBreaks = array(); + + public function __construct() { + $this->_tables = 'hardware'; + $this->_idFields = 'id_hard'; + + $this->_where=array( + 'type' => 'hardware', + 'vendor' => 'hardware', + 'compatibility' => 'hardware', + 'comm_year' => 'hardware', + ); + + $this->orderBy = 'hardware.id_hard desc'; + parent::__construct(); + } + + public function checkType($id_hard = 0) + { + $clean['id_hard'] = (int)$id_hard; + $res = $this->db->select('hardware','type','id_hard='.$clean['id_hard']); + if (count($res) > 0) + { + return (strcmp($this->type,$res[0]['hardware']['type']) === 0 ) ? true : false; + } + return false; + } + + public function getDiffArray($oldArray, $newArray) + { + return getDiffArray($this->diffFields, $oldArray, $newArray); + } + + //create the $_popupWhere property + public function createPopupWhere($list) + { + $listArray = explode(',',$list); + foreach ($listArray as $field) + { + $this->_popupWhere[$field] = 'type="'.$this->type.'" and deleted="no" and cleared="no"'; + } + } + + //set the fuction to be applied upon each popup name + public function setPopupFunctions() + { + foreach ($this->_popupItemNames as $name => $field) + { + $this->_popupFunctions[$name] = getTranslationFunction($name); + } + } + + //get the HTML of the popup labels + public function getPopupLabel($viewArgs) + { + $html = null; + $listArray = array('page','history_page','search_string'); + + $count = 0; + + foreach ($viewArgs as $field => $value) + { + if ($count < 5) + { + if (!in_array($field,$listArray)) + { + $value = call_user_func(getTranslationFunction($field),$value); + $html .= "
        ".$value."
        \n"; + + $count++; + } + } + } + return $html; + } + +} \ No newline at end of file diff --git a/Application/Models/HardwareModel.php b/Application/Models/HardwareModel.php new file mode 100644 index 0000000..9c8a5db --- /dev/null +++ b/Application/Models/HardwareModel.php @@ -0,0 +1,348 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class HardwareModel extends Model_Map { + + public $id_user = 0; + public $type = ''; //device type + public $lastId = 0; //the id of the last record inserted + + public $formStruct = array( + 'entries' => array( + 'deleted'=> array('type'=>'Select','options'=>'no,yes'), + 'id_hard' => array( + 'type' => 'Hidden' + ) + ), + ); + + public function __construct() { + $this->_tables='hardware,regusers,hardware_users'; + $this->_idFields='id_hard,id_user'; + $this->_where=array( + 'type' => 'hardware', + 'username' => 'regusers', + 'id_user' => 'regusers', + 'has_confirmed' => 'regusers', + 'deleted' => 'regusers', + '-deleted' => 'hardware' + ); + $this->orderBy = 'hardware.id_hard desc'; + $this->printAssError = "no"; + + $this->_popupItemNames = array( + 'type'=>'type', + 'ask_for_del'=>'ask_for_del', + '-deleted'=>'deleted', + ); + + $this->_popupLabels = array( + 'type'=>'TYPE', + 'ask_for_del'=>'ASK FOR DEL?', + '-deleted'=>'DELETED?', + ); + +// $this->databaseConditions['insert'] = array( +// 'checkUnique' => 'model', +// ); +// +// $this->databaseConditions['update'] = array( +// 'checkUniqueCompl' => 'model', +// ); + + parent::__construct(); + } + + //set the soft and strong conditions + public function setConditions($worksOptions,$worksField,$interfaceOptions) + { + $this->strongConditions['update'] = array( + "checkNotEmpty" => "model|you have to fill the model name entry", + "checkMatch|".Hardware::$regExpressions['model'] => "model|characters not allowed in the model name entry", + "+checkMatch|".Hardware::$regExpressions['vendorid_productid'] => "pci_id|VendorID:ProductID has to have the following format: [a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}", + "checkLength|190" => "model", + "+checkLength|299" => "distribution", + "++checkIsStrings|".Hardware::getCommYears() => "comm_year", + "+++checkIsStrings|".$worksOptions => $worksField, + "++++checkIsStrings|".$interfaceOptions => "interface", + ); + + $this->strongConditions['insert'] = $this->strongConditions['update']; + + $this->softConditions['update'] = array( + "checkMatch|".Hardware::$regExpressions['kernel'] => "kernel|characters not allowed in the kernel entry", + "checkLength|40000" => "description", + "+checkLength|99" => "kernel", + "++checkLength|49" => "driver", + "++checkMatch|".Hardware::$regExpressions['driver'] => "driver|only the following characters are allowed for the driver entry: a-z A-Z 0-9 - _ . + s / , : ; ( ) [ ]", + "+++checkLength|1000" => "other_names|the other names entry exceeds the value of 1000 characters", + ); + + $this->softConditions['insert'] = $this->softConditions['update']; + } + + public function permanentlyDelete($id) + { + $clean['id'] = (int)$id; + + $record = $this->selectId($clean['id']); + + $this->values['deleted'] = 'no'; + $this->values['approved'] = 'yes'; + $this->values['pci_id'] = ''; + $this->values['model'] = '[permanently deleted] '.$record['model']; + + return parent::update($clean['id']); + } + + public function pUpdate($id) + { + if (isset($this->values['approved'])) + { + if (strcmp($this->values['approved'],'yes') === 0) + { + $this->values['deleted'] = 'no'; + } + } + else if (isset($this->values['deleted'])) + { + if (strcmp($this->values['deleted'],'no') === 0) + { + $this->values['approved'] = 'yes'; + } + } + return parent::update($id); + } + + public function insert() + { + $this->values['created_by'] = (int)$this->id_user; + $this->values['updated_by'] = (int)$this->id_user; + $this->values['update_date'] = date('Y-m-d H:i:s'); + + if ($this->values['created_by'] === 0) + { + $this->values['deleted'] = 'yes'; + $this->values['approved'] = 'no'; + } + + //random ID + $randomId = md5(uniqid(mt_rand(),true)); + $this->values["type"] = $randomId; + + parent::insert(); +// echo $this->getQuery(); + //associate the user to the record + if ($this->queryResult) + { + $resId = $this->db->select("hardware","id_hard","type='$randomId'"); + $clean['id'] = $resId[0]['hardware']['id_hard']; + $this->lastId = $clean['id']; + $this->db->update('hardware','type',array($this->type),'id_hard='.$clean['id']); + + //update the history table + $this->updateHistory('insert'); + + if ($this->values['created_by'] !== 0) + { + $this->associate($clean['id']); + } + } + + } + + public function update($id = null, $where = null) + { + $clean['id'] = (int)$id; + + $this->values['updated_by'] = (int)$this->id_user; + $this->values['update_date'] = date('Y-m-d H:i:s'); + + //save the old fields in the revisions table + $this->setWhereQueryClause(array('id_hard' => $clean['id'])); + $oldStruct = $this->getFields($this->fields.',vendor,created_by,updated_by,update_date,type,id_hard'); + + if (count($oldStruct > 0)) + { + if (strcmp($oldStruct[0]['hardware']['type'],$this->type) === 0) + { + $oldValues = $oldStruct[0]['hardware']; + + $revisions = new RevisionsModel(); + $revisions->values = $oldValues; + $revisions->sanitize(); + + if ($revisions->insert()) + { + parent::update($clean['id']); + if ($this->queryResult) + { + $this->lastId = $clean['id']; + + //update the history table + $this->updateHistory('update'); + + if (!$this->checkAssociation($clean['id'],(int)$this->id_user)) + { + $this->associate($clean['id']); + } + } + } + } + } + } + + public function makeCurrent($id_rev) + { + $clean['id_rev'] = (int)$id_rev; + + $revisions = new RevisionsModel(); + + $clean['id_hard'] = (int)$revisions->getIdHard($clean['id_rev']); + + //save the old fields in the revisions table + $this->setWhereQueryClause(array('id_hard'=>$clean['id_hard'])); + $oldStruct = $this->getFields($this->fields.',vendor,created_by,updated_by,update_date,type,id_hard'); + + if (count($oldStruct > 0)) + { + if (strcmp($oldStruct[0]['hardware']['type'],$this->type) === 0) + { + //get the values of the revision + $revisions->setWhereQueryClause(array('id_rev'=>$clean['id_rev'])); + $newStruct = $revisions->getFields($this->fields.',vendor,created_by,updated_by,update_date,type'); + + if (count($newStruct > 0)) + { + $revisions->values = $oldStruct[0]['hardware']; + $revisions->sanitize(); + + $this->values = $newStruct[0]['revisions']; + $this->values['updated_by'] = (int)$this->id_user; + $this->values['update_date'] = date('Y-m-d H:i:s'); + + $this->sanitize(); + + if ($revisions->insert()) + { + if (parent::update($clean['id_hard'])) + { + $this->lastId = $clean['id_hard']; + + //update the history table + $this->updateHistory('update'); + + if (!$this->checkAssociation($clean['id_hard'],(int)$this->id_user)) + { + $this->associate($clean['id_hard']); + } + } + } + } + } + else + { + $this->notice = "
        Wrong type..
        \n"; + } + } + + } + + public function associate($id_record = null, $idGroup = null) + { + return parent::associate((int)$id_record,(int)$this->id_user); + } + + //get the model name + public function getTheModelName($id) + { + $clean['id'] = (int)$id; + $this->setWhereQueryClause(array('id_hard' => $clean['id'])); + $res = $this->getFields('model'); + $name = count($res) > 0 ? $res[0]['hardware']['model'] : ''; + return $name; + } + + //get the model info by the vendorid:productid code + public function getModelByCode($code) + { + $res = $this->clear()->where(array('pci_id'=>sanitizePciid($code)))->send(); + + if (count($res) > 0) + { + return $res[0]['hardware']; + } + return false; + } + + //save in the history all the action carried out by users + protected function updateHistory($action) + { + $translations = array( + 'insert' => 'inserted', + 'update' => 'updated', + ); + + $allowedActions = array('insert','update'); + + if (in_array($action,$allowedActions)) + { + $users = new UsersModel(); + + $clean['user'] = sanitizeAll($users->getUser($this->id_user)); + + $history = new HistoryModel(); + $history->values = array( + 'created_by' => $this->id_user, + 'type' => 'hardware', + 'action' => $action, + 'id' => $this->lastId, + 'message' => 'The device having id='.$this->lastId.' has been '.$translations[$action].' by the user ' . $clean['user'] . ' (id_user='.$this->id_user.') ', + 'gr' => 'registered', + ); + $history->insert(); + } + } + + public function isDeleted($id) + { + $clean['id'] = (int)$id; + $res = $this->select('hardware.deleted')->where(array('id_hard'=>$clean['id']))->send(); + if ( count($res) > 0 ) + { + return strcmp($res[0]['hardware']['deleted'],'no') === 0 ? false : true; + } + return false; + } + + public function isCleared($id) + { + $clean['id'] = (int)$id; + $res = $this->select('hardware.cleared')->where(array('id_hard'=>$clean['id']))->send(); + if ( count($res) > 0 ) + { + return strcmp($res[0]['hardware']['cleared'],'no') === 0 ? false : true; + } + return false; + } + +} \ No newline at end of file diff --git a/Application/Models/HistoryModel.php b/Application/Models/HistoryModel.php new file mode 100644 index 0000000..d94f745 --- /dev/null +++ b/Application/Models/HistoryModel.php @@ -0,0 +1,56 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class HistoryModel extends Model_Tree { + + public function __construct() { + $this->_tables = 'history'; + $this->_idFields = 'id_history'; + + $this->_where=array( + 'approved' => 'hardware', + 'deleted' => 'hardware', + 'cleared' => 'hardware', + 'username' => 'regusers', + ); + $this->orderBy = 'history.id_history'; + + $this->_popupFunctions = array( + 'created_by'=> 'getUserName', + ); + + $this->_popupItemNames = array( + 'type' => 'type', + 'action' => 'action', + 'created_by'=> 'created_by', + ); + + $this->_popupLabels = array( + 'type' => 'TYPE', + 'action' => 'ACTION', + 'created_by'=> 'MODERATOR', + ); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/Application/Models/HostcontrollersModel.php b/Application/Models/HostcontrollersModel.php new file mode 100644 index 0000000..8908052 --- /dev/null +++ b/Application/Models/HostcontrollersModel.php @@ -0,0 +1,69 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class HostcontrollersModel extends GenericModel +{ + + public $type = 'host-controller'; //device type + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'comm_year' => 'comm_year', + 'compatibility' => 'compatibility', + 'subtype' => 'subtype', + ); + + $this->_popupLabels = array( + 'vendor' => gtext("vendor"), + 'comm_year' => gtext("year"), + 'compatibility' => gtext("does it work?"), + 'subtype' => gtext("subtype"), + ); + + $this->setPopupFunctions(); + + $this->createPopupWhere('vendor,compatibility,comm_year,subtype'); + + $this->diffFields = array( + 'vendor' => gtext("vendor"), + 'model' => gtext('model name'), + 'other_names' => gtext('possible other names of the device'), + 'subtype' => gtext('subtype')." (laser, inkjet, ..)", + 'pci_id' => gtext("VendorID:ProductID code of the device"), + 'comm_year' => gtext('year of commercialization'), + 'interface' => gtext("interface"), + 'distribution' => gtext('GNU/Linux distribution used for the test'), + 'kernel' => gtext('tested with the following kernel libre'), + 'compatibility' => gtext("does it work with free software?"), + 'driver' => gtext("free driver used"), + 'description' => gtext('Description'), + ); + + $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/Application/Models/IssuesModel.php b/Application/Models/IssuesModel.php new file mode 100644 index 0000000..9d6a4ef --- /dev/null +++ b/Application/Models/IssuesModel.php @@ -0,0 +1,116 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class IssuesModel extends BaseModel { + + public function __construct() { + $this->_tables = 'issues'; + $this->_idFields = 'id_issue'; + + $this->_onDelete = 'nocheck'; + + $this->_where = array( + 'priority' => 'issues', + 'status' => 'issues', + 'topic' => 'issues', + ); + + $this->_popupItemNames = array( + 'priority' => 'priority', + 'status' => 'status', + 'topic' => 'topic', + 'deleted' => 'deleted', + ); + + $this->_popupLabels = array( + 'priority' => 'PRIORITY', + 'status' => 'STATUS', + 'topic' => 'TOPIC', + 'deleted' => 'DELETED?', + ); + + $this->orderBy = 'issues.id_issue desc'; + + $this->strongConditions['insert'] = array( + "checkLength|99" => 'title', + "+checkLength|34" => 'topic', + "++checkLength|15" => 'priority', + "+++checkLength|5000" => 'message', + "checkisStrings|low,medium,high" => 'priority', + "+checkisStrings|maybe-a-bug,new-categories-of-hardware,add-a-vendor-name,other" => 'topic', + ); + + $this->formStruct = array( + 'entries' => array( + 'title' => array('labelString' => gtext("TITLE").':'), + 'topic' => array( + 'type'=>'Select', + 'options'=>array( + 'Add a vendor name' => 'add-a-vendor-name', + 'Maybe a bug' => 'maybe-a-bug', + 'Add new categories of hardware' => 'new-categories-of-hardware', + 'Other' => 'other' + ), + 'labelString' => gtext("TOPIC").':', + ), + 'deleted'=> array( + 'type' => 'Select', + 'options' => 'no,yes', + ), + 'priority' => array( + 'type'=>'Select', + 'options'=>'low,medium,high', + 'labelString' => gtext("PRIORITY").':', + ), + 'message' => array('type'=>'Textarea','idName'=>'bb_code','labelString' => gtext("MESSAGE").':',), + 'status' => array( + 'type' => 'Select', + 'options' => 'opened,closed' + ), + 'notice' => array( + 'type' => 'Textarea', + 'idName' => 'bb_code_notice', + ), + 'id_issue' => array( + 'type' => 'Hidden' + ) + ), + ); + + parent::__construct(); + } + + public function pUpdate($id) + { + return parent::update($id); + } + + public function insert() + { + if (parent::insert()) + { + //update the history + $this->updateHistory('issue_ins'); + } + } + +} \ No newline at end of file diff --git a/Application/Models/MessagesModel.php b/Application/Models/MessagesModel.php new file mode 100644 index 0000000..b36e76e --- /dev/null +++ b/Application/Models/MessagesModel.php @@ -0,0 +1,73 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class MessagesModel extends BaseModel { + + public function __construct() { + $this->_tables = 'messages'; + $this->_idFields = 'id_mes'; + + $this->orderBy = 'messages.id_mes'; + + $this->_popupItemNames = array( + 'deleted' => 'deleted', + 'has_read' => 'has_read', + ); + + $this->_popupLabels = array( + 'deleted' => 'DELETED?', + 'has_read' => 'ALREADY READ?', + ); + + $this->strongConditions['insert'] = array( + "checkLength|5000" => 'message', + ); + + parent::__construct(); + } + + public function pUpdate($id) + { + return parent::update($id); + } + + public function insert() + { + if (parent::insert()) + { + //update the history + $this->updateHistory('message_ins'); + } + } + + public $formStruct = array( + 'entries' => array( + 'deleted' => array('type'=>'Select','options'=>'no,yes'), + 'has_read' => array('type'=>'Select','options'=>'no,yes'), + 'message' => array('type'=>'Textarea','idName'=>'bb_code'), + 'id_mes' => array( + 'type' => 'Hidden' + ) + ), + ); + +} \ No newline at end of file diff --git a/Application/Models/ModemsModel.php b/Application/Models/ModemsModel.php new file mode 100644 index 0000000..92571d2 --- /dev/null +++ b/Application/Models/ModemsModel.php @@ -0,0 +1,68 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ModemsModel extends GenericModel +{ + + public $type = 'modem'; //device type + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'comm_year' => 'comm_year', + 'compatibility' => 'compatibility', + 'interface' => 'interface', + ); + + $this->_popupLabels = array( + 'vendor' => gtext("vendor"), + 'comm_year' => gtext("year"), + 'compatibility' => gtext("does it work?"), + 'interface' => gtext("interface"), + ); + + $this->setPopupFunctions(); + + $this->createPopupWhere('vendor,compatibility,comm_year,interface'); + + $this->diffFields = array( + 'vendor' => gtext("vendor"), + 'model' => gtext('model name'), + 'other_names' => gtext('possible other names of the device'), + 'pci_id' => gtext("VendorID:ProductID code of the device"), + 'comm_year' => gtext('year of commercialization'), + 'interface' => gtext("interface"), + 'distribution' => gtext('GNU/Linux distribution used for the test'), + 'kernel' => gtext('tested with the following kernel libre'), + 'compatibility' => gtext("does it work with free software?"), + 'driver' => gtext("free driver used"), + 'description' => gtext('Description'), + ); + + $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/Application/Models/NewsModel.php b/Application/Models/NewsModel.php new file mode 100644 index 0000000..cab1641 --- /dev/null +++ b/Application/Models/NewsModel.php @@ -0,0 +1,44 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class NewsModel extends Model_Tree { + + public function __construct() { + $this->_tables = 'news'; + $this->_idFields = 'id_news'; + + $this->orderBy = 'news.id_news desc'; + + parent::__construct(); + } + + public $formStruct = array( + 'entries' => array( + 'title' => array(), + 'message' => array('type'=>'Textarea','idName'=>'bb_code'), + 'id_news' => array( + 'type' => 'Hidden' + ) + ), + ); + +} \ No newline at end of file diff --git a/Application/Models/NotebooksModel.php b/Application/Models/NotebooksModel.php new file mode 100644 index 0000000..d9b9008 --- /dev/null +++ b/Application/Models/NotebooksModel.php @@ -0,0 +1,94 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class NotebooksModel extends GenericModel { + + public $type = 'notebook'; //device type + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'compatibility' => 'compatibility', + 'comm_year' => 'comm_year', + 'subtype' => 'subtype', + ); + + $this->_popupLabels = array( + 'vendor' => gtext("vendor"), + 'compatibility' => gtext("compatibility"), + 'comm_year' => gtext("year"), + 'subtype' => gtext("subtype"), + ); + + $this->setPopupFunctions(); + + $this->createPopupWhere('vendor,compatibility,comm_year,subtype'); + + $this->diffFields = array( + 'vendor' => gtext("vendor"), + 'model' => gtext('model name'), + 'subtype' => gtext('subtype (notebook or netbook)'), + 'architecture' => gtext('architecture'), + 'bios' => gtext('does it have a free bios?'), + 'can_free_systems_be_installed' => gtext('can free operating systems be installed?'), + 'prevent_wifi' => gtext('does the device prevent the installation of wifi cards not-approved by the vendor?'), + 'comm_year' => gtext('year of commercialization'), + 'distribution' => gtext('GNU/Linux distribution used for the test'), + 'compatibility' => gtext('compatibility with free software'), + 'kernel' => gtext('tested with the following kernel libre'), + 'video_card_type' => gtext('video card model'), + 'video_card_works' => gtext('does the video card work?'), + 'wifi_type' => gtext('wifi model'), + 'wifi_works' => gtext('does the wifi card work?'), + 'webcam_type' => gtext('webcam model'), + 'webcam_works' => gtext('does the webcam work?'), + 'description' => gtext('Description'), + ); + + $this->fieldsWithBreaks = array(gtext('Description')); + + parent::__construct(); + } + + public function morePopups() + { + $this->_popupItemNames = array( + 'bios' => 'bios', + 'architecture' => 'architecture', + ); + + $this->_popupLabels = array( + 'bios' => gtext("free boot firmware?"), + 'architecture' => gtext("architecture"), + ); + + $this->_popupFunctions = array( + 'architecture' => 'translate_and_gtext', + 'bios' => 'translate_and_gtext', + ); + + $this->createPopupWhere('bios,architecture'); + } + +} \ No newline at end of file diff --git a/Application/Models/ParamsModel.php b/Application/Models/ParamsModel.php new file mode 100644 index 0000000..cea99a1 --- /dev/null +++ b/Application/Models/ParamsModel.php @@ -0,0 +1,43 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ParamsModel extends Model_Tree { + + public function __construct() { + $this->_tables = 'params'; + $this->_idFields = 'id_par'; + + parent::__construct(); + } + + public $formStruct = array( + 'entries' => array( + 'updating' => array( + 'type'=>'Select', + 'options'=>'no,yes', + ), + 'id_par' => array( + 'type' => 'Hidden' + ) + ), + ); +} \ No newline at end of file diff --git a/Application/Models/PrintersModel.php b/Application/Models/PrintersModel.php new file mode 100644 index 0000000..355bb67 --- /dev/null +++ b/Application/Models/PrintersModel.php @@ -0,0 +1,70 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class PrintersModel extends GenericModel +{ + + public $type = 'printer'; //device type + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'compatibility' => 'compatibility', + 'comm_year' => 'comm_year', + 'interface' => 'interface', + ); + + $this->_popupLabels = array( + 'vendor' => gtext("vendor"), + 'compatibility' => gtext("compatibility"), + 'comm_year' => gtext("year"), + 'interface' => gtext("interface"), + ); + + $this->setPopupFunctions(); + + $this->createPopupWhere('vendor,compatibility,comm_year,interface'); + + $this->diffFields = array( + 'vendor' => gtext("vendor"), + 'model' => gtext('model name'), + 'other_names' => gtext('possible other names of the device'), + 'subtype' => gtext('subtype')." (laser, inkjet, ..)", + 'pci_id' => gtext("VendorID:ProductID code of the device"), + 'comm_year' => gtext('year of commercialization'), + 'interface' => gtext("interface"), + 'distribution' => gtext('GNU/Linux distribution used for the test'), + 'compatibility' => gtext('compatibility with free software'), + 'it_tracks_users' => gtext('does it adopt any techniques to track users?'), + 'kernel' => gtext('tested with the following kernel libre'), + 'driver' => gtext("free driver used"), + 'description' => gtext('Description'), + ); + + $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/Application/Models/ProfileModel.php b/Application/Models/ProfileModel.php new file mode 100644 index 0000000..c8818b4 --- /dev/null +++ b/Application/Models/ProfileModel.php @@ -0,0 +1,78 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ProfileModel extends Model_Tree { + + public function __construct() { + $this->_tables = 'profile'; + $this->_idFields = 'id_prof'; + + $this->_where=array( + 'username' => 'regusers', + 'has_confirmed' => 'regusers', + 'deleted' => 'regusers' + ); + + $this->softConditions['update'] = array( + "checkLength|90" => "real_name,where_you_are,fav_distro,birth_date,website|the fields 'real name', 'where_you_are', 'favorite distro', 'website' and 'birthdate' don't have to have more than 90 characters", + "checkLength|1000" => "projects,description|the fields 'projects' and 'description' don't have to have more than 1000 characters", + "checkIsStrings|no,yes" => "publish_mail", + "+checkIsStrings|no,yes" => "send_notification" + ); + + parent::__construct(); + } + + public $formStruct = array( + + 'entries' => array( + 'real_name' => array('labelString'=>'Your real name'), + 'website' => array('labelString'=>'Your website address (add http://)'), + 'where_you_are' => array('labelString'=>'I\'m from...'), + 'birth_date' => array('labelString'=>'My birthdate'), + 'fav_distro' => array('labelString'=>'My favourite distribution'), + 'projects' => array( + 'type' => 'Textarea', + 'labelString'=>'Free software projects I\'m working on' + ), + 'publish_mail' => array( + 'type' => 'Select', + 'options' => 'no,yes', + 'labelString'=> 'Would you like to publish your e-mail address?' + ), + 'send_notification' => array( + 'type' => 'Select', + 'options' => 'yes,no', + 'labelString'=> 'Would you like to receive mail notifications?' + ), + 'description' => array( + 'type' => 'Textarea', + 'labelString'=> 'Your description' + ), + 'id_prof' => array( + 'type' => 'Hidden' + ) + ), + + ); + +} \ No newline at end of file diff --git a/Application/Models/RaidadaptersModel.php b/Application/Models/RaidadaptersModel.php new file mode 100644 index 0000000..2e140e8 --- /dev/null +++ b/Application/Models/RaidadaptersModel.php @@ -0,0 +1,68 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class RaidadaptersModel extends GenericModel +{ + + public $type = 'RAID-adapter'; //device type + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'comm_year' => 'comm_year', + 'compatibility' => 'compatibility', + 'interface' => 'interface', + ); + + $this->_popupLabels = array( + 'vendor' => gtext("vendor"), + 'comm_year' => gtext("year"), + 'compatibility' => gtext("does it work?"), + 'interface' => gtext("interface"), + ); + + $this->setPopupFunctions(); + + $this->createPopupWhere('vendor,compatibility,comm_year,interface'); + + $this->diffFields = array( + 'vendor' => gtext("vendor"), + 'model' => gtext('model name'), + 'other_names' => gtext('possible other names of the device'), + 'pci_id' => gtext("VendorID:ProductID code of the device"), + 'comm_year' => gtext('year of commercialization'), + 'interface' => gtext("interface"), + 'distribution' => gtext('GNU/Linux distribution used for the test'), + 'kernel' => gtext('tested with the following kernel libre'), + 'compatibility' => gtext("does it work with free software?"), + 'driver' => gtext("free driver used"), + 'description' => gtext('Description'), + ); + + $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/Application/Models/RevisionsModel.php b/Application/Models/RevisionsModel.php new file mode 100644 index 0000000..fd56db7 --- /dev/null +++ b/Application/Models/RevisionsModel.php @@ -0,0 +1,50 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class RevisionsModel extends Model_Tree { + + public $id_user = 0; + public $type = ''; //device type + + public function __construct() { + $this->_tables='revisions'; + $this->_idFields='id_rev'; + + $this->_where=array( + 'id_hard'=>'revisions' + ); + + $this->orderBy = 'id_rev desc'; + + parent::__construct(); + } + + public function getIdHard($id_rev = 0) + { + $clean['id_rev'] = (int)$id_rev; + + $res = $this->db->select('revisions','id_hard','id_rev='.$clean['id_rev']); + + return (count($res) > 0) ? $res[0]['revisions']['id_hard'] : 0; + } + +} \ No newline at end of file diff --git a/Application/Models/ScannersModel.php b/Application/Models/ScannersModel.php new file mode 100644 index 0000000..4710503 --- /dev/null +++ b/Application/Models/ScannersModel.php @@ -0,0 +1,68 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ScannersModel extends GenericModel +{ + + public $type = 'scanner'; //device type + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'compatibility' => 'compatibility', + 'comm_year' => 'comm_year', + 'interface' => 'interface', + ); + + $this->_popupLabels = array( + 'vendor' => gtext("vendor"), + 'compatibility' => gtext("compatibility"), + 'comm_year' => gtext("year"), + 'interface' => gtext("interface"), + ); + + $this->createPopupWhere('vendor,compatibility,comm_year,interface'); + + $this->setPopupFunctions(); + + $this->diffFields = array( + 'vendor' => gtext("vendor"), + 'model' => gtext('model name'), + 'other_names' => gtext('possible other names of the device'), + 'pci_id' => gtext("VendorID:ProductID code of the device"), + 'comm_year' => gtext('year of commercialization'), + 'interface' => gtext("interface"), + 'distribution' => gtext('GNU/Linux distribution used for the test'), + 'compatibility' => gtext('compatibility with free software'), + 'kernel' => gtext('tested with the following kernel libre'), + 'driver' => gtext("free driver used"), + 'description' => gtext('Description'), + ); + + $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/Application/Models/SdcardreadersModel.php b/Application/Models/SdcardreadersModel.php new file mode 100644 index 0000000..85950a5 --- /dev/null +++ b/Application/Models/SdcardreadersModel.php @@ -0,0 +1,68 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class SdcardreadersModel extends GenericModel +{ + + public $type = 'sd-card-reader'; //device type + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'comm_year' => 'comm_year', + 'sd_card_works' => 'sd_card_works', + 'interface' => 'interface', + ); + + $this->_popupLabels = array( + 'vendor' => gtext("vendor"), + 'comm_year' => gtext("year"), + 'sd_card_works' => gtext("does it work?"), + 'interface' => gtext("interface"), + ); + + $this->setPopupFunctions(); + + $this->createPopupWhere('vendor,sd_card_works,comm_year,interface'); + + $this->diffFields = array( + 'vendor' => gtext("vendor"), + 'model' => gtext('model name'), + 'other_names' => gtext('possible other names of the device'), + 'pci_id' => gtext("VendorID:ProductID code of the device"), + 'comm_year' => gtext('year of commercialization'), + 'interface' => gtext("interface"), + 'distribution' => gtext('GNU/Linux distribution used for the test'), + 'kernel' => gtext('tested with the following kernel libre'), + 'sd_card_works' => gtext("does it work with free software?"), + 'driver' => gtext("free driver used"), + 'description' => gtext('Description'), + ); + + $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/Application/Models/SoundcardsModel.php b/Application/Models/SoundcardsModel.php new file mode 100644 index 0000000..7137d79 --- /dev/null +++ b/Application/Models/SoundcardsModel.php @@ -0,0 +1,68 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class SoundcardsModel extends GenericModel +{ + + public $type = 'soundcard'; //device type + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'comm_year' => 'comm_year', + 'sound_card_works' => 'sound_card_works', + 'interface' => 'interface', + ); + + $this->_popupLabels = array( + 'vendor' => gtext("vendor"), + 'comm_year' => gtext("year"), + 'sound_card_works' => gtext("does it work?"), + 'interface' => gtext("interface"), + ); + + $this->setPopupFunctions(); + + $this->createPopupWhere('vendor,sound_card_works,comm_year,interface'); + + $this->diffFields = array( + 'vendor' => gtext("vendor"), + 'model' => gtext('model name'), + 'other_names' => gtext('possible other names of the device'), + 'pci_id' => gtext("VendorID:ProductID code of the device"), + 'comm_year' => gtext('year of commercialization'), + 'interface' => gtext("interface"), + 'distribution' => gtext('GNU/Linux distribution used for the test'), + 'kernel' => gtext('tested with the following kernel libre'), + 'sound_card_works' => gtext("does it work with free software?"), + 'driver' => gtext("free driver used"), + 'description' => gtext('Description'), + ); + + $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/Application/Models/TalkModel.php b/Application/Models/TalkModel.php new file mode 100644 index 0000000..1d15ab7 --- /dev/null +++ b/Application/Models/TalkModel.php @@ -0,0 +1,116 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class TalkModel extends BaseModel { + + public function __construct() { + $this->_tables = 'talk'; + $this->_idFields = 'id_talk'; + + $this->_where=array( + 'id_hard' => 'talk', + 'has_confirmed' => 'regusers', + '-deleted' => 'regusers', + ); + + $this->orderBy = 'talk.id_talk desc'; + + $this->strongConditions['insert'] = array( + "checkLength|99" => 'title', + "+checkNotEmpty" => 'message', + "++checkLength|5000" => 'message', + ); + + parent::__construct(); + } + + public function pUpdate($id) + { + return parent::update($id); + } + + public function insert() + { + if (parent::insert()) + { + //update the history + $this->updateHistory('talk_ins'); + + if (strcmp($this->values['id_hard'],0) !== 0) + { + $clean['id_hard'] = (int)$this->values['id_hard']; + $clean['created_by'] = (int)$this->values['created_by']; + + $hard = new HardwareModel(); + $users = $hard->select('username,e_mail') + ->where(array('id_hard'=>$clean['id_hard'],'has_confirmed'=>0,'deleted'=>'no')) + ->toList('regusers.username','regusers.e_mail') + ->send('Boxes'); + + $talkUsers = $this->select('username,e_mail') + ->from('talk inner join regusers') + ->on('talk.created_by = regusers.id_user') + ->where(array('id_hard'=>$clean['id_hard'],'has_confirmed'=>0,'-deleted'=>'no')) + ->toList('regusers.username','regusers.e_mail') + ->send(); + + $allUsers = array_merge($users,$talkUsers); + + $userObj = new UsersModel(); + $myName = $userObj->getUser($clean['created_by']); + + $arrayE = new ArrayExt(); + $fusers = $arrayE->subsetComplementary($allUsers,$myName); + + //remove users that do not want the email notification + $inString = "'".implode("','",array_keys($fusers))."'"; + $profile = new ProfileModel(); + $ffusers = $profile->select('username,e_mail') + ->from('regusers inner join profile') + ->on('regusers.id_user = profile.created_by') + ->where(array('send_notification'=>'yes','username'=>"in($inString)")) + ->toList('regusers.username','regusers.e_mail') + ->send(); + + $ffusers = array_flip($ffusers); + + //send the notice + Account::sendTalkNotice($myName,$ffusers,$clean['id_hard']); + + $domainName = rtrim(Url::getRoot(),"/"); + header('Refresh: 0;url='.$domainName.$_SERVER['REQUEST_URI']); + exit; + } + } + } + + public $formStruct = array( + 'entries' => array( + 'title' => array(), + 'message' => array('type'=>'Textarea'), + 'id_talk' => array( + 'type' => 'Hidden' + ) + ), + ); + +} \ No newline at end of file diff --git a/Application/Models/ThreegcardsModel.php b/Application/Models/ThreegcardsModel.php new file mode 100644 index 0000000..88ae580 --- /dev/null +++ b/Application/Models/ThreegcardsModel.php @@ -0,0 +1,68 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ThreegcardsModel extends GenericModel +{ + + public $type = '3G-card'; //device type + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'comm_year' => 'comm_year', + 'wifi_works' => 'wifi_works', + 'interface' => 'interface', + ); + + $this->_popupLabels = array( + 'vendor' => gtext("vendor"), + 'comm_year' => gtext("year"), + 'wifi_works' => gtext("does it work?"), + 'interface' => gtext("interface"), + ); + + $this->setPopupFunctions(); + + $this->createPopupWhere('vendor,wifi_works,comm_year,interface'); + + $this->diffFields = array( + 'vendor' => gtext("vendor"), + 'model' => gtext('model name'), + 'other_names' => gtext('possible other names of the device'), + 'pci_id' => gtext("VendorID:ProductID code of the device"), + 'comm_year' => gtext('year of commercialization'), + 'interface' => gtext("interface"), + 'distribution' => gtext('GNU/Linux distribution used for the test'), + 'kernel' => gtext('tested with the following kernel libre'), + 'wifi_works' => gtext("does it work with free software?"), + 'driver' => gtext("free driver used"), + 'description' => gtext('Description'), + ); + + $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/Application/Models/UsersModel.php b/Application/Models/UsersModel.php new file mode 100755 index 0000000..e666e36 --- /dev/null +++ b/Application/Models/UsersModel.php @@ -0,0 +1,295 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class UsersModel extends Model_Map +{ + + public static $usersList = array(); + + public function __construct() + { + $this->_tables='regusers,reggroups,regusers_groups'; + $this->_idFields='id_user,id_group'; + + $this->_where=array( + 'id_group' => 'reggroups', + 'id_user' => 'regusers', + 'name' => 'reggroups', + 'confirmation_token'=> 'regusers', + 'has_confirmed' => 'regusers', + 'deleted' => 'regusers', + 'forgot_token' => 'regusers' + ); + + $this->_popupItemNames = array( + 'has_confirmed'=>'has_confirmed', + 'deleted'=>'deleted', + 'id_group'=>'name', + ); + + $this->_popupLabels = array( + 'has_confirmed'=>'HAS CONFIRMED?', + 'deleted'=>'DELETED?', + 'id_group'=>'GROUP' + ); + + $this->orderBy = 'regusers.id_user desc'; + + parent::__construct(); + + $this->deleteNotRegistered(); + } + + public function pUpdate($id) + { + return parent::update($id); + } + + public function deleteNotRegistered() + { + $limit = time() - Account::$confirmTime; + $this->db->del('regusers','has_confirmed = 1 and deleted = "no" and creation_time < '.$limit); + } + + public function getUser($id_user = 0) + { + $clean['id_user'] = (int)$id_user; + if (array_key_exists($clean['id_user'],self::$usersList)) + { + return self::$usersList[$clean['id_user']]; + } + else + { + $user = $this->db->select('regusers','username,has_confirmed','id_user='.$clean['id_user']); + if (count($user) > 0) + { + $fuser = (strcmp($user[0]['regusers']['has_confirmed'],0) === 0) ? $user[0]['regusers']['username'] : "__".$user[0]['regusers']['username']; + self::$usersList[$clean['id_user']] = $fuser; + return $fuser; + } + else + { + return "__anonymous__"; + } + } + } + + public function getLinkToUser($user) + { + if (strstr($user,'__')) + { + return $user; +// return str_replace('__',null,$user); + } + else + { + return "$user"; + } + } + + public function getLinkToUserFromId($id_user = 0) + { + $clean['id_user'] = (int)$id_user; + return $this->getLinkToUser($this->getUser($clean['id_user'])); + } + + //check if the user exists + public function userExists($user) + { + $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; + + if (strcmp($clean['user'],'') !== 0) + { + $res = $this->where(array("username"=>$clean['user'],"has_confirmed"=>"0","deleted"=>"no"))->send(); +// $res = $this->db->select('regusers','has_confirmed','username="'.$clean['user'].'" and has_confirmed=0 and deleted="no"'); + + if (count($res) > 0) + { + return true; + } + } + return false; + } + + //get the user id from the username + public function getUserId($username = '') + { + $clean['username'] = ctype_alnum($username) ? sanitizeAll($username) : ''; + + $users = $this->select('id_user')->where(array('username'=>$clean['username'],'has_confirmed'=>0,'deleted'=>'no'))->send(); + if (count($users) > 0) + { + return $users[0]['regusers']['id_user']; + } + else + { + return 0; + } + } + + public function isBlocked($idUser) + { + $clean['id_user'] = (int)$idUser; + + $res = $this->select('blocked')->where(array('id_user'=>$clean['id_user'],'has_confirmed'=>0,'deleted'=>'no'))->toList('blocked')->send(); + + if (count($res) > 0) + { + return strcmp($res[0],'yes') === 0 ? true : false; + } + + return true; + } + + public function insert() + { + //create the token + $confirmation_token = md5(randString(20)); + $this->values['confirmation_token'] = $confirmation_token; + //has_confirmed flag + $this->values['has_confirmed'] = 1; + $this->values['creation_time'] = time(); + + //random ID + $randomId = md5(randString(5).uniqid(mt_rand(),true)); + $this->values["temp_field"] = $randomId; + + if (isset($_POST['captcha'])) + { + if ( strcmp($_SESSION['captchaString'],$_POST['captcha']) === 0 ) + { + + parent::insert(); + + if ($this->queryResult) + { + $resId = $this->db->select("regusers","id_user","temp_field='$randomId'"); + $clean['id_user'] = $resId[0]['regusers']['id_user']; + $this->db->update("regusers",'temp_field',array(''),'id_user='.$clean['id_user']); + + $result = Account::confirm($this->values['username'],$this->values['e_mail'],$clean['id_user'],$confirmation_token); + + if ($result) + { + $_SESSION['status'] = 'sent'; + } + else + { + $_SESSION['status'] = 'regerror'; + } + + $hed = new HeaderObj(DOMAIN_NAME); + $hed->redirect('users/notice/'.Lang::$current); + } + + } + else + { + $this->result = false; + $this->queryResult = false; + $this->notice = "
        Wrong captcha code...
        \n"; + } + } + } + + public function close($id_user) + { + $clean['id_user'] = (int)$id_user; + + $this->values = array( + 'has_confirmed' => 1, + 'deleted' => 'yes', + 'e_mail' => '' + ); + + if ($this->update($clean['id_user'])) + { + $_SESSION['status'] = 'deleted'; + + $profile = new ProfileModel(); + $res = $profile->db->select('profile','id_prof','created_by='.$clean['id_user']); + + if (count($res) > 0) + { + $clean['id_prof'] = (int)$res[0]['profile']['id_prof']; + $profile->values = array( + 'real_name' => '', + 'where_you_are' => '', + 'birth_date' => '', + 'fav_distro' => '', + 'projects' => '', + 'description' => '' + ); + $profile->update($clean['id_prof']); + } + } + + } + + public function forgot($username) + { + $clean['username'] = ctype_alnum($username) ? sanitizeAll($username) : ''; + + if (isset($_POST['captcha'])) + { + if ( strcmp($_SESSION['captchaString'],$_POST['captcha']) === 0 ) + { + $res = $this->db->select('regusers','e_mail,id_user','username="'.$clean['username'].'" and has_confirmed = 0 and deleted = "no"'); + if (count($res) > 0) + { + $e_mail = $res[0]['regusers']['e_mail']; + $id_user = (int)$res[0]['regusers']['id_user']; + $forgot_token = md5(randString(20)); + $forgot_time = time(); + $updateArray = array($forgot_token, $forgot_time); + $this->db->update('regusers','forgot_token,forgot_time',$updateArray,'username="'.$clean['username'].'"'); + + $result = Account::sendnew($clean['username'],$e_mail,$id_user,$forgot_token); + + if ($result) + { + $_SESSION['status'] = 'sent_new'; + } + else + { + $_SESSION['status'] = 'sent_new_error'; + } + + $hed = new HeaderObj(DOMAIN_NAME); + $hed->redirect('users/notice/'.Lang::$current,1); + + } + else + { + $this->notice = "
        the user does not exist
        \n"; + } + } + else + { + $this->result = false; + $this->queryResult = false; + $this->notice = "
        Wrong captcha code...
        \n"; + } + } + } + +} \ No newline at end of file diff --git a/Application/Models/VendorsModel.php b/Application/Models/VendorsModel.php new file mode 100644 index 0000000..0b06d52 --- /dev/null +++ b/Application/Models/VendorsModel.php @@ -0,0 +1,82 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class VendorsModel extends Model_Tree { + + public function __construct() { + $this->_tables = 'vendors'; + $this->_idFields = 'id_vendor'; + + parent::__construct(); + } + + public function check($id,$interface = 'USB') + { + if (preg_match('/^[a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}$/',$id)) + { + $clean['bus'] = strcmp($interface,'USB') === 0 ? "USB" : "PCI"; + + $temp = explode(':',$id); + $clean['vendorId'] = sanitizeAlphanum($temp[0]); + + $number = $this->clear()->where(array("vendorid" => $clean['vendorId'], "bus" => $clean['bus']))->rowNumber(); + + if ($number > 0) + { + return true; + } + } + return false; + } + + public function getName($id,$interface) + { + if ($this->check($id,$interface)) + { + $clean['bus'] = strcmp($interface,'USB') === 0 ? "USB" : "PCI"; + + $temp = explode(':',$id); + $clean['vendorId'] = sanitizeAlphanum($temp[0]); + + $res = $this->clear()->where(array("vendorid" => $clean['vendorId'], "bus" => $clean['bus']))->send(); + + if (count($res) > 0) + { + return $res[0]['vendors']['clean_name']; + } + } + return 'not-known'; + } + + public function getFullName($name) + { + $clean['name'] = sanitizeAll($name); + + $res = $this->clear()->where(array("clean_name" => $clean['name']))->send(); + + if (count($res) > 0) + { + return $res[0]['vendors']['full_name']; + } + return $clean['name']; + } +} \ No newline at end of file diff --git a/Application/Models/VideocardsModel.php b/Application/Models/VideocardsModel.php new file mode 100644 index 0000000..961340e --- /dev/null +++ b/Application/Models/VideocardsModel.php @@ -0,0 +1,68 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class VideocardsModel extends GenericModel +{ + + public $type = 'videocard'; //device type + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'comm_year' => 'comm_year', + 'video_card_works' => 'video_card_works', + 'interface' => 'interface', + ); + + $this->_popupLabels = array( + 'vendor' => gtext("vendor"), + 'comm_year' => gtext("year"), + 'video_card_works' => gtext("does it work?"), + 'interface' => gtext("interface"), + ); + + $this->createPopupWhere('vendor,video_card_works,comm_year,interface'); + + $this->setPopupFunctions(); + + $this->diffFields = array( + 'vendor' => gtext("vendor"), + 'model' => gtext('model name'), + 'other_names' => gtext('possible other names of the device'), + 'pci_id' => gtext("VendorID:ProductID code of the device"), + 'comm_year' => gtext('year of commercialization'), + 'interface' => gtext("interface"), + 'distribution' => gtext('GNU/Linux distribution used for the test'), + 'kernel' => gtext('tested with the following kernel libre'), + 'video_card_works' => gtext("how does it work with free software?"), + 'driver' => gtext("free driver used"), + 'description' => gtext('Description'), + ); + + $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/Application/Models/WebcamsModel.php b/Application/Models/WebcamsModel.php new file mode 100644 index 0000000..0942bcb --- /dev/null +++ b/Application/Models/WebcamsModel.php @@ -0,0 +1,72 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class WebcamsModel extends GenericModel +{ + + public $type = 'webcam'; //device type + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'comm_year' => 'comm_year', + 'webcam_works' => 'webcam_works', + 'interface' => 'interface', + ); + + $this->_popupLabels = array( + 'vendor' => gtext("vendor"), + 'comm_year' => gtext("year"), + 'webcam_works' => gtext("does it work?"), + 'interface' => gtext("interface"), + ); + + $this->_popupFunctions = array( + 'vendor' => 'betterVendor', + ); + + $this->createPopupWhere('vendor,webcam_works,comm_year,interface'); + + $this->setPopupFunctions(); + + $this->diffFields = array( + 'vendor' => gtext("vendor"), + 'model' => gtext('model name'), + 'other_names' => gtext('possible other names of the device'), + 'pci_id' => gtext("VendorID:ProductID code of the device"), + 'comm_year' => gtext('year of commercialization'), + 'interface' => gtext("interface"), + 'distribution' => gtext('GNU/Linux distribution used for the test'), + 'kernel' => gtext('tested with the following kernel libre'), + 'webcam_works' => gtext("does it work with free software?"), + 'driver' => gtext("free driver used"), + 'description' => gtext('Description'), + ); + + $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/Application/Models/WifiModel.php b/Application/Models/WifiModel.php new file mode 100644 index 0000000..0b6d6c2 --- /dev/null +++ b/Application/Models/WifiModel.php @@ -0,0 +1,68 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class WifiModel extends GenericModel +{ + + public $type = 'wifi'; //device type + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'comm_year' => 'comm_year', + 'wifi_works' => 'wifi_works', + 'interface' => 'interface', + ); + + $this->_popupLabels = array( + 'vendor' => gtext("vendor"), + 'comm_year' => gtext("year"), + 'wifi_works' => gtext("does it work?"), + 'interface' => gtext("interface"), + ); + + $this->setPopupFunctions(); + + $this->createPopupWhere('vendor,wifi_works,comm_year,interface'); + + $this->diffFields = array( + 'vendor' => gtext("vendor"), + 'model' => gtext('model name'), + 'other_names' => gtext('possible other names of the device'), + 'pci_id' => gtext("VendorID:ProductID code of the device"), + 'comm_year' => gtext('year of commercialization'), + 'interface' => gtext("interface"), + 'distribution' => gtext('GNU/Linux distribution used for the test'), + 'kernel' => gtext('tested with the following kernel libre'), + 'wifi_works' => gtext("does it work with free software?"), + 'driver' => gtext("free driver used"), + 'description' => gtext('Description'), + ); + + $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/Application/Models/WikiModel.php b/Application/Models/WikiModel.php new file mode 100644 index 0000000..bb60b66 --- /dev/null +++ b/Application/Models/WikiModel.php @@ -0,0 +1,319 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class WikiModel extends Model_Map { + + public $id_user = 0; + public $lastId = 0; //the id of the last record inserted + public $lastTitle = null; //the title of the last page inserted + public $lastTitleClean = null; //the cleaned title of the last page inserted + + public $diffFields = array(); + public $fieldsWithBreaks = array(); + + public function __construct() { + $this->_tables='wiki,regusers,wiki_users'; + $this->_idFields='id_wiki,id_user'; + $this->_where=array( + 'username' => 'regusers', + 'id_user' => 'regusers', + 'has_confirmed' => 'regusers', + 'deleted' => 'regusers', + '-deleted' => 'wiki', + '-blocked' => 'wiki', + ); + + $this->printAssError = "no"; + + $this->diffFields = array( + 'title' => gtext("the title"), + 'page' => gtext('the text of the wiki page'), + ); + + $this->fieldsWithBreaks = array(gtext('the text of the wiki page')); + + $this->strongConditions['insert'] = array( + "checkNotEmpty" => 'title', + "checkLength|99" => 'title|'.gtext('title is too long'), + "+checkNotEmpty" => 'page', + "+checkLength|49900" => 'page|'.gtext('the page text is too long'), + ); + + $this->strongConditions['update'] = array( + "checkNotEmpty" => 'title', + "checkLength|99" => 'title|'.gtext('title is too long'), + "+checkNotEmpty" => 'page', + "+checkLength|49900" => 'page|'.gtext('the page text is too long'), + ); + + $this->databaseConditions['insert'] = array( + "checkUnique" => 'title|'.gtext('a page with the same title already exists'), + ); + + $this->databaseConditions['update'] = array( + "checkUniqueCompl" => 'title|'.gtext('a page with the same title already exists'), + ); + + parent::__construct(); + } + + public function pUpdate($id) + { + return parent::update($id); + } + + public function insert() + { + $this->values['created_by'] = (int)$this->id_user; + $this->values['update_date'] = date('Y-m-d H:i:s'); + + //random ID + $randomId = md5(uniqid(mt_rand(),true)); + $this->values["title_clean"] = $randomId; + + parent::insert(); + + //associate the user to the record + if ($this->queryResult) + { + $resId = $this->select()->where(array('title_clean'=>$randomId))->send(); + $clean['id'] = $resId[0]['wiki']['id_wiki']; + $this->lastId = $clean['id']; + $this->lastTitle = $resId[0]['wiki']['title']; + $this->lastTitleClean = titleForRedirect($resId[0]['wiki']['title']); + $this->db->update('wiki','title_clean',array(encodeUrl(sanitizeDb($resId[0]['wiki']['title']))),'id_wiki='.$clean['id']); + + //update the history table + $this->updateHistory('insert'); + + $this->associate($clean['id']); + } + + } + + public function update($id = null, $where = null) + { + $clean['id'] = (int)$id; + + $this->values['created_by'] = (int)$this->id_user; + $this->values['update_date'] = date('Y-m-d H:i:s'); + $this->values['title_clean'] = encodeUrl($this->values['title']); + + //save the old fields in the revisions table + $this->setWhereQueryClause(array('id_wiki' => $clean['id'])); + $oldStruct = $this->getFields($this->fields.',title_clean,created_by,update_date,id_wiki'); + + if (count($oldStruct > 0)) + { + $oldValues = $oldStruct[0]['wiki']; + + $revisions = new WikirevisionsModel(); + $revisions->values = $oldValues; + + $revisions->sanitize(); + + if ($revisions->insert()) + { + + if ($this->isMain($clean['id'])) + { + $this->values['title'] = 'Main Page'; + $this->values['title_clean'] = 'Main-Page'; + } + + parent::update($clean['id']); + if ($this->queryResult) + { + $this->lastId = $clean['id']; + $this->lastTitle = $this->values['title']; + $this->lastTitleClean = html_entity_decode($this->values['title_clean'],ENT_QUOTES,DEFAULT_CHARSET); + + //update the history table + $this->updateHistory('update'); + + if (!$this->checkAssociation($clean['id'],(int)$this->id_user)) + { + $this->associate($clean['id']); + } + } + } + } + } + + public function makeCurrent($id_rev) + { + + $clean['id_rev'] = (int)$id_rev; + + $revisions = new WikirevisionsModel(); + + $clean['id_wiki'] = (int)$revisions->getIdPage($clean['id_rev']); + + //save the old fields in the revisions table + $this->where(array('id_wiki'=>$clean['id_wiki'])); + $oldStruct = $this->getFields($this->fields.',title_clean,created_by,update_date,id_wiki'); + + if (count($oldStruct > 0)) + { + //get the values of the revision + $revisions->where(array('id_rev'=>$clean['id_rev'])); + $newStruct = $revisions->getFields($this->fields.',title_clean,created_by,update_date'); + + if (count($newStruct > 0)) + { + $revisions->values = $oldStruct[0]['wiki']; + $revisions->sanitize(); + + $this->values = $newStruct[0]['wiki_revisions']; + $this->values['created_by'] = (int)$this->id_user; + $this->values['update_date'] = date('Y-m-d H:i:s'); + + $this->sanitize(); + + if ($this->isMain($clean['id_wiki'])) + { + $this->values['title'] = 'Main Page'; + $this->values['title_clean'] = 'Main-Page'; + } + + if ($revisions->insert()) + { + if (parent::update($clean['id_wiki'])) + { + $this->lastId = $clean['id_wiki']; + $this->lastTitle = $this->values['title']; + $this->lastTitleClean = html_entity_decode($this->values['title_clean'],ENT_QUOTES,DEFAULT_CHARSET); + + //update the history table + $this->updateHistory('update'); + + if (!$this->checkAssociation($clean['id_wiki'],(int)$this->id_user)) + { + $this->associate($clean['id_wiki']); + } + } + } + } + } + + } + + public function associate($id_record = null, $idGroup = null) + { + return parent::associate((int)$id_record,(int)$this->id_user); + } + + //get the model name + public function getTheModelName($id, $cleaned = false) + { + $clean['id'] = (int)$id; + $this->setWhereQueryClause(array('id_wiki' => $clean['id'])); + $res = $this->getFields('title,title_clean'); + $name = ''; + if (count($res) > 0) + { + if ($cleaned) + { + $name = $res[0]['wiki']['title_clean']; + } + else + { + $name = $res[0]['wiki']['title']; + } + } + return $name; + } + + //save in the history all the action carried out by users + protected function updateHistory($action) + { + $translations = array( + 'insert' => 'inserted', + 'update' => 'updated', + ); + + $allowedActions = array('insert','update'); + + if (in_array($action,$allowedActions)) + { + $users = new UsersModel(); + + $clean['user'] = sanitizeAll($users->getUser($this->id_user)); + + $history = new HistoryModel(); + $history->values = array( + 'created_by' => $this->id_user, + 'type' => 'wiki', + 'action' => $action, + 'id' => $this->lastId, + 'message' => 'The wiki page having id='.$this->lastId.' has been '.$translations[$action].' by the user ' . $clean['user'] . ' (id_user='.$this->id_user.') ', + 'gr' => 'registered', + ); + $history->insert(); + } + } + + public function isMain($id) + { + $clean['id'] = (int)$id; + $res = $this->select('is_main')->where(array('id_wiki'=>$clean['id']))->send(); + if ( count($res) > 0 ) + { + return strcmp($res[0]['wiki']['is_main'],'no') === 0 ? false : true; + } + return false; + } + + public function isDeleted($id) + { + $clean['id'] = (int)$id; + $res = $this->select('wiki.deleted')->where(array('id_wiki'=>$clean['id']))->send(); + if ( count($res) > 0 ) + { + return strcmp($res[0]['wiki']['deleted'],'no') === 0 ? false : true; + } + return false; + } + + public function isBlocked($id) + { + $clean['id'] = (int)$id; + $res = $this->select('blocked')->where(array('id_wiki'=>$clean['id']))->send(); + if ( count($res) > 0 ) + { + return strcmp($res[0]['wiki']['blocked'],'no') === 0 ? false : true; + } + return false; + } + + public function toWikiPage($id) + { + $clean['id'] = (int)$id; + $title = $this->getTheModelName($clean['id'], true); + return Url::getRoot()."wiki/page/".Lang::$current."/".$title; + } + + public function getDiffArray($oldArray, $newArray) + { + return getDiffArray($this->diffFields, $oldArray, $newArray); + } +} \ No newline at end of file diff --git a/Application/Models/WikirevisionsModel.php b/Application/Models/WikirevisionsModel.php new file mode 100644 index 0000000..fdf5558 --- /dev/null +++ b/Application/Models/WikirevisionsModel.php @@ -0,0 +1,45 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class WikirevisionsModel extends Model_Tree { + + public $id_user = 0; + + public function __construct() { + $this->_tables='wiki_revisions'; + $this->_idFields='id_rev'; + + $this->orderBy = 'id_rev desc'; + + parent::__construct(); + } + + public function getIdPage($id_rev = 0) + { + $clean['id_rev'] = (int)$id_rev; + + $res = $this->db->select('wiki_revisions','id_wiki','id_rev='.$clean['id_rev']); + + return (count($res) > 0) ? $res[0]['wiki_revisions']['id_wiki'] : 0; + } + +} \ No newline at end of file diff --git a/Application/Models/WikitalkModel.php b/Application/Models/WikitalkModel.php new file mode 100644 index 0000000..7dee896 --- /dev/null +++ b/Application/Models/WikitalkModel.php @@ -0,0 +1,112 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class WikitalkModel extends BaseModel +{ + + public function __construct() { + $this->_tables = 'wiki_talk'; + $this->_idFields = 'id_talk'; + + $this->_where=array( + 'id_wiki' => 'wiki_talk', + 'has_confirmed' => 'regusers', + '-deleted' => 'regusers', + ); + + $this->orderBy = 'wiki_talk.id_talk'; + + $this->strongConditions['insert'] = array( + "checkLength|99" => 'title', + "+checkLength|5000" => 'message', + ); + + parent::__construct(); + } + + public function pUpdate($id) + { + return parent::update($id); + } + + public function insert() + { + if (parent::insert()) + { + //update the history + $this->updateHistory('wiki_talk_ins'); + + $clean['id_wiki'] = (int)$this->values['id_wiki']; + $clean['created_by'] = (int)$this->values['created_by']; + + $hard = new WikiModel(); + $users = $hard->select('username,e_mail') + ->where(array('id_wiki'=>$clean['id_wiki'],'has_confirmed'=>0,'deleted'=>'no')) + ->toList('regusers.username','regusers.e_mail') + ->send('Boxes'); + + $talkUsers = $this->select('username,e_mail') + ->inner('regusers') + ->on('wiki_talk.created_by = regusers.id_user') + ->where(array('id_wiki'=>$clean['id_wiki'],'has_confirmed'=>0,'-deleted'=>'no')) + ->toList('regusers.username','regusers.e_mail') + ->send(); + + $allUsers = array_merge($users,$talkUsers); + + $userObj = new UsersModel(); + $myName = $userObj->getUser($clean['created_by']); + + $arrayE = new ArrayExt(); + $fusers = $arrayE->subsetComplementary($allUsers,$myName); + + //remove users that do not want the email notification + $inString = "'".implode("','",array_keys($fusers))."'"; + $profile = new ProfileModel(); + $ffusers = $profile->select('username,e_mail') + ->from('regusers inner join profile') + ->on('regusers.id_user = profile.created_by') + ->where(array('send_notification'=>'yes','username'=>"in($inString)")) + ->toList('regusers.username','regusers.e_mail') + ->send(); + + $ffusers = array_flip($ffusers); + + //send the notice + Account::sendWikiTalkNotice($myName,$ffusers,$clean['id_wiki']); + + header('Refresh: 0;url='.Url::getRoot()."wiki/talk/".Lang::$current."/".$clean['id_wiki']); + exit; + } + } + + public $formStruct = array( + 'entries' => array( + 'title' => array(), + 'message' => array('type'=>'Textarea'), + 'id_talk' => array( + 'type' => 'Hidden' + ) + ), + ); + +} \ No newline at end of file diff --git a/Application/Modules/ModBase.php b/Application/Modules/ModBase.php new file mode 100644 index 0000000..44d25a2 --- /dev/null +++ b/Application/Modules/ModBase.php @@ -0,0 +1,41 @@ +simpleXmlObj->classname)) + { + return " class='".$this->simpleXmlObj->classname[0]."' "; + } + return null; + } + + //wrap the html with a
        + //look for the
        tag in the xml in order to set the class of the div + public function wrapDiv($string) + { + $divOpen = "
        "; + $divClose = "
        "; + + if (isset($this->simpleXmlObj->div)) + { + $divOpen = "
        "; + } + + return $divOpen . $string . $divClose; + } + +} \ No newline at end of file diff --git a/Application/Modules/ModImage.php b/Application/Modules/ModImage.php new file mode 100644 index 0000000..5a116b1 --- /dev/null +++ b/Application/Modules/ModImage.php @@ -0,0 +1,45 @@ +simpleXmlObj->width)) + { + return " width = '" . $this->simpleXmlObj->width ."' "; + } + return null; + } + + public function heightPropertyString() + { + if (isset($this->simpleXmlObj->height)) + { + return " height = '" . $this->simpleXmlObj->height ."' "; + } + return null; + } + + public function titlePropertyString() + { + if (isset($this->simpleXmlObj->title)) + { + return " title = '" . $this->simpleXmlObj->title ."' "; + } + return null; + } + + public function render() + { + $link = "getHtmlClass().$this->widthPropertyString().$this->heightPropertyString().$this->titlePropertyString()." src='".$this->simpleXmlObj->src[0]."'>"; + return $this->wrapDiv($link)."\n"; + } + +} \ No newline at end of file diff --git a/Application/Modules/ModLink.php b/Application/Modules/ModLink.php new file mode 100644 index 0000000..011bc78 --- /dev/null +++ b/Application/Modules/ModLink.php @@ -0,0 +1,18 @@ +getHtmlClass()." href='".$this->simpleXmlObj->href[0]."'>".$this->simpleXmlObj->text[0].""; + return $this->wrapDiv($link)."\n"; + } + +} \ No newline at end of file diff --git a/Application/Modules/ModLinkimage.php b/Application/Modules/ModLinkimage.php new file mode 100644 index 0000000..8e49bbf --- /dev/null +++ b/Application/Modules/ModLinkimage.php @@ -0,0 +1,18 @@ +getHtmlClass()." href='".$this->simpleXmlObj->href[0]."'>widthPropertyString().$this->heightPropertyString().$this->titlePropertyString()." src='".$this->simpleXmlObj->src[0]."'>"; + return $this->wrapDiv($link)."\n"; + } + +} \ No newline at end of file diff --git a/Application/Modules/ModRaw.php b/Application/Modules/ModRaw.php new file mode 100644 index 0000000..4ed3226 --- /dev/null +++ b/Application/Modules/ModRaw.php @@ -0,0 +1,18 @@ +simpleXmlObj->text[0]; + return $this->wrapDiv($link)."\n"; + } + +} \ No newline at end of file diff --git a/Application/Modules/ModTopLink.php b/Application/Modules/ModTopLink.php new file mode 100644 index 0000000..6407c3e --- /dev/null +++ b/Application/Modules/ModTopLink.php @@ -0,0 +1,32 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//module to print an HTML link +//extends the ModBase class +class ModTopLink extends ModBase { + + public function render($liclass = null) + { + return "
      1. getHtmlClass()." href='".$this->simpleXmlObj->href[0]."'>".$this->simpleXmlObj->text[0]."
      2. "; + } + +} \ No newline at end of file diff --git a/Application/Modules/index.html b/Application/Modules/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Application/Modules/index.html @@ -0,0 +1 @@ + diff --git a/Application/Strings/Lang/It/DbCondStrings.php b/Application/Strings/Lang/It/DbCondStrings.php new file mode 100644 index 0000000..41b57ac --- /dev/null +++ b/Application/Strings/Lang/It/DbCondStrings.php @@ -0,0 +1,34 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//error strings in the case database conditions are not satisfied +class Lang_It_DbCondStrings extends Lang_En_DbCondStrings { + + //get the error string in the case that the value of the field $field is already present in the table $table + public function getNotUniqueString($field) + { + return "
        Il valore del campo ". $field ." è già presente. Per favore scegline un altro.
        \n"; + } + +} diff --git a/Application/Strings/Lang/It/ModelStrings.php b/Application/Strings/Lang/It/ModelStrings.php new file mode 100644 index 0000000..7af1ca7 --- /dev/null +++ b/Application/Strings/Lang/It/ModelStrings.php @@ -0,0 +1,36 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Lang_It_ModelStrings extends Lang_ResultStrings { + + public $string = array( + "error" => "
        Errore nella query: contatta l'amministratore!
        \n", + "executed" => "
        operazione eseguita!
        \n", + "associate" => "
        Problema di integrità referenziale: il record è associato ad un record di una tabella figlia. Devi prima rompere l'associazione.
        \n", + "no-id" => "
        Non è definito alcun id della query
        \n", + "not-linked" => "
        Il record non è associato, non puoi dissociarlo
        ", + "linked" => "
        Il record è già associato, non puoi associarlo un'altra volta
        " + ); + +} diff --git a/Application/Strings/Lang/It/UploadStrings.php b/Application/Strings/Lang/It/UploadStrings.php new file mode 100644 index 0000000..fe77929 --- /dev/null +++ b/Application/Strings/Lang/It/UploadStrings.php @@ -0,0 +1,44 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Lang_It_UploadStrings extends Lang_ResultStrings { + + public $string = array( + "error" => "
        Errore: verificare i permessi del file/directory
        \n", + "executed" => "
        Operazione eseguita!
        \n", + "not-child" => "
        La cartella selezionata non è una sotto directory della directory base
        \n", + "not-dir" => "
        La cartella selezionata non è una directory
        \n", + "not-empty" => "
        La cartella selezionata non è vuota
        \n", + "no-folder-specified" => "
        Non è stata specificata alcuna cartella
        \n", + "no-file-specified" => "
        Non è stato specificato alcun file
        \n", + "not-writable" => "
        La cartella non è scrivibile
        \n", + "not-writable-file" => "
        Il file non è scrivibile
        \n", + "dir-exists" => "
        Esiste già una directory con lo stesso nome
        \n", + "no-upload-file" => "
        Non c'è alcun file di cui fare l'upload
        \n", + "size-over" => "
        La dimensione del file è troppo grande
        \n", + "not-allowed-ext" => "
        L'estensione del file che vuoi caricare non è consentita
        \n", + "file-exists" => "
        Esiste già un file con lo stesso nome
        \n", + ); + +} diff --git a/Application/Strings/Lang/It/ValCondStrings.php b/Application/Strings/Lang/It/ValCondStrings.php new file mode 100644 index 0000000..2fe6898 --- /dev/null +++ b/Application/Strings/Lang/It/ValCondStrings.php @@ -0,0 +1,92 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Lang_It_ValCondStrings extends Lang_En_ValCondStrings { + + //if the element is not defined + public function getNotDefinedResultString($element) + { + return "
        ". $element ." non è stato definito
        \n"; + } + + //if the elements are not equal + public function getNotEqualResultString($element) + { + return "
        Differenti valori: $element
        \n"; + } + + //if the element is not alphabetic + public function getNotAlphabeticResultString($element) + { + return "
        ".$element." deve essere una stringa di soli caratteri alfabetici
        \n"; + } + + //if the element is not alphanumeric + public function getNotAlphanumericResultString($element) + { + return "
        ".$element." deve essere una stringa di soli caratteri alfanumerici
        \n"; + } + + //if the element is not a decimal digit + public function getNotDecimalDigitResultString($element) + { + return "
        ".$element." deve essere una stringa di soli numeri decimali
        \n"; + } + + //if the element has the mail format + public function getNotMailFormatResultString($element) + { + return "
        ".$element." non sembra un indirizzo e-mail
        \n"; + } + + //if the element is numeric + public function getNotNumericResultString($element) + { + return "
        ".$element." deve essere un numero
        \n"; + } + + //if the element (string) length exceeds the value of characters (defined by $maxLength) + public function getLengthExceedsResultString($element,$maxLength) + { + return "
        ".$element." non deve essere composto da più di $maxLength caratteri
        \n"; + } + + //if the element is one of the strings indicated by $stringList (a comma-separated list of strings) + public function getIsForbiddenStringResultString($element,$stringList) + { + return "
        ".$element." non può assumere uno dei seguenti valori: $stringList
        \n"; + } + + //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings) + public function getIsNotStringResultString($element,$stringList) + { + return "
        ".$element." deve assumere uno dei seguenti valori: $stringList
        \n"; + } + + //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings) + public function getDoesntMatchResultString($element,$regExp) + { + return "
        ".$element." deve soddisfare la seguente espressione regolare: $regExp
        \n"; + } +} diff --git a/Application/Strings/Lang/It/index.html b/Application/Strings/Lang/It/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Application/Strings/Lang/It/index.html @@ -0,0 +1 @@ + diff --git a/Application/Strings/Lang/index.html b/Application/Strings/Lang/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Application/Strings/Lang/index.html @@ -0,0 +1 @@ + diff --git a/Application/Strings/index.html b/Application/Strings/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Application/Strings/index.html @@ -0,0 +1 @@ + diff --git a/Application/Views/Desktop/Client/info.php b/Application/Views/Desktop/Client/info.php new file mode 100644 index 0000000..00d2927 --- /dev/null +++ b/Application/Views/Desktop/Client/info.php @@ -0,0 +1,30 @@ + +\n";?> + + + + + + + + + +. +?> \ No newline at end of file diff --git a/Application/Views/Desktop/Client/license.php b/Application/Views/Desktop/Client/license.php new file mode 100644 index 0000000..c38d615 --- /dev/null +++ b/Application/Views/Desktop/Client/license.php @@ -0,0 +1,25 @@ + + + + ]]> + + +. +?> \ No newline at end of file diff --git a/Application/Views/Desktop/Contact/index.php b/Application/Views/Desktop/Contact/index.php new file mode 100644 index 0000000..ac6e7d5 --- /dev/null +++ b/Application/Views/Desktop/Contact/index.php @@ -0,0 +1,39 @@ + + +. +?> + +
        + +
        + ">Home » contact +
        + +
        + +
        + You can suggest to implement new features or add new types of hardware in the ">issues page +
        + +
        + Discussions about also take place on the h-source-users mailing list and #h-node libera.chat IRC channel. +
        + +
        + +
        diff --git a/Application/Views/Desktop/Contact/index_de.php b/Application/Views/Desktop/Contact/index_de.php new file mode 100644 index 0000000..ab8710a --- /dev/null +++ b/Application/Views/Desktop/Contact/index_de.php @@ -0,0 +1,39 @@ + + +. +?> + +
        + +
        + ">Home » contact +
        + +
        + +
        + Sie können neu zu implementierende Funktionen vorschlagen oder neue Hardware-Typen in der Seite ">Web-Log hinzufügen +
        + +
        + Wenn Sie das h-node-Team direkt kontaktieren möchten: info@h-node.com +
        + +
        + +
        diff --git a/Application/Views/Desktop/Contact/index_es.php b/Application/Views/Desktop/Contact/index_es.php new file mode 100644 index 0000000..af5c022 --- /dev/null +++ b/Application/Views/Desktop/Contact/index_es.php @@ -0,0 +1,39 @@ + + +. +?> + +
        + +
        + ">Home » contact +
        + +
        + +
        + Puede sugerir el implementar nuevas caracteriticas o agregar nuevo hardware en la página de ">incidencias +
        + +
        + Si desea contactar directamente al equipo de use esta dirección de correo electronico: info@h-node.com +
        + +
        + +
        diff --git a/Application/Views/Desktop/Contact/index_fr.php b/Application/Views/Desktop/Contact/index_fr.php new file mode 100644 index 0000000..2255258 --- /dev/null +++ b/Application/Views/Desktop/Contact/index_fr.php @@ -0,0 +1,39 @@ + + +. +?> + +
        + +
        + ">Home » contact +
        + +
        + +
        + Vous pouvez suggérez l’implémentation de nouvelles fonctionnalitée ou l’ajout d’un nouveau type de matériel dans la page ">problème. +
        + +
        + Si vous voulez contatez directement l’équipe , utilisez cette adresse mail : info@h-node.com +
        + +
        + +
        diff --git a/Application/Views/Desktop/Contact/index_gr.php b/Application/Views/Desktop/Contact/index_gr.php new file mode 100644 index 0000000..2b6a1bb --- /dev/null +++ b/Application/Views/Desktop/Contact/index_gr.php @@ -0,0 +1,39 @@ + + +. +?> + +
        + +
        + ">Home » contact +
        + +
        + +
        + Μπορείτε να εισηγηθείτε την υλοποίηση νέων χαρακτηριστικών ή την προσθήκη νέων τύπων υλικού (hardware) στην ιστοσελίδα ">issues +
        + +
        + Αν θέλετε να έρθετε σε άμεση επαφή με την ομάδα του , χρησιμοποιείστε αυτή την ηλεκτρονική διεύθυνση: info@h-node.com +
        + +
        + +
        diff --git a/Application/Views/Desktop/Contact/index_it.php b/Application/Views/Desktop/Contact/index_it.php new file mode 100644 index 0000000..48355d7 --- /dev/null +++ b/Application/Views/Desktop/Contact/index_it.php @@ -0,0 +1,39 @@ + + +. +?> + +
        + +
        + ">Home » contact +
        + +
        + +
        + Potete suggerire nuove caratteristiche da implementare o aggiungere nuovi tipi di hardware nella pagina ">issues +
        + +
        + Se volete direttamente contattare il team di potete farlo a questo indirizzo e-mail: info@h-node.com +
        + +
        + +
        diff --git a/Application/Views/Desktop/Credits/index.php b/Application/Views/Desktop/Credits/index.php new file mode 100644 index 0000000..250fb7a --- /dev/null +++ b/Application/Views/Desktop/Credits/index.php @@ -0,0 +1,65 @@ + + +. +?> + +
        + +
        + ">Home » credits +
        + +
        + +
        + Icons: +
        + +
        + The icons used inside are taken from the ACUN Simgeleri 0.7 icon theme and from the H2O Icon Theme 0.0.5, both licensed under the GNU GPL license, from the Crystal Projects icons, licensed under the LGPL, from the glaze icons set (LGPL) and from the DarkGlass_Reworked icons theme (GPL). The flag icons are taken from the FAMFAMFAM flag icons set (Public Domain). +
        + +
        + jQuery: +
        + +
        + The jQuery, the jQuery UI and the jQuery Mobile javascript libraries (licensed under MIT/GPL) have been used through the website +
        + +
        + markitup: +
        + +
        + The markitup jQuery plugin (licensed under MIT/GPL) has been used in order to help the user to insert wiki tags +
        + +
        + php diff algorithm: +
        + +
        + This algorithm (licensed under the zlib free license) has been used in order to highlight the differences between two different revisions of the same hardware model. +
        + +
        + +
        diff --git a/Application/Views/Desktop/Credits/index_es.php b/Application/Views/Desktop/Credits/index_es.php new file mode 100644 index 0000000..d3d349e --- /dev/null +++ b/Application/Views/Desktop/Credits/index_es.php @@ -0,0 +1,65 @@ + + +. +?> + +
        + +
        + ">Home » credits +
        + +
        + +
        + Iconos: +
        + +
        + Los iconos usados dentro de son tomados de el tema de iconos ACUN Simgeleri 0.7 y de H2O Icon Theme 0.0.5, ambos licenciados bajo la licencia GNU GPL, de Crystal Projects, licenciado bajo la LGPL, de glaze icons set (LGPL) y de DarkGlass_Reworked icons theme (GPL). Los iconos de las banderas son tomados la colección de iconos de banderas FAMFAMFAM (Dominio Público) +
        + +
        + jQuery: +
        + +
        + Las bibliotecas javascript jQuery, jQuery UI y jQuery Mobile (licenciadas bajo MIT/GPL) han sido usadas en el sitio +
        + +
        + markitup: +
        + +
        + El complemento markitup jQuery (licenciado bajo MIT/GPL) ha sido usado en orden de ayudar al usuario a insertar etiquetas wiki +
        + +
        + php diff algorithm: +
        + +
        + Este algoritmo (licenciado bajo la licencia libre de zlib) ha sido usado en orden de remarcar las diferencias entre dos diferentes revisiones del mismo modelo de hardware. +
        + +
        + +
        diff --git a/Application/Views/Desktop/Credits/index_fr.php b/Application/Views/Desktop/Credits/index_fr.php new file mode 100644 index 0000000..d3276d2 --- /dev/null +++ b/Application/Views/Desktop/Credits/index_fr.php @@ -0,0 +1,63 @@ + + +. +?> + +
        + +
        + ">Home » credits +
        + +
        + +
        + Icons: +
        + +
        + Les icones utilisées sur sont tirées du thème ACUN Simgeleri 0.7 et du thème H2O Icon Theme 0.0.5, les deux sont licensée sous license GPL, d’autres sont aussi tirée des thèmes Crystal Projects (LGPL), glaze icons set (LGPL), DarkGlass_Reworked icons theme (GPL). Les icones de drapeau sont tirés du thème FAMFAMFAM flag icons set distribué dans le domaine publique. +
        + +
        + jQuery: +
        + +
        + jQuery , jQuery UI et la librairie javascript jQuery Mobile (licensé sous MIT/GPL) sont utilisés sur le site. +
        + +
        + markitup: +
        + +
        + Le plugin jQuery markitup (licensé sous MIT/GPL) a été utilisé afin d’aider les utilisateurs à insérer des tags wiki. +
        + +
        + Algorithme diff php: +
        + +
        + Cet algorithme (Licensé sous license libre zlib) a été utiliser afin de souligner les différences entre deux révisions d’un même modèle matériel. +
        + +
        + +
        diff --git a/Application/Views/Desktop/Credits/index_gr.php b/Application/Views/Desktop/Credits/index_gr.php new file mode 100644 index 0000000..077d337 --- /dev/null +++ b/Application/Views/Desktop/Credits/index_gr.php @@ -0,0 +1,65 @@ + + +. +?> + +
        + +
        + ">Home » credits +
        + +
        + +
        + Εικόνες: +
        + +
        + Οι εικόνες που χρησιμοποιούνται μέσα στο πάρθηκαν από το θέμα εικόνας ACUN Simgeleri 0.7 και από το H2O Icon Theme 0.0.5, που είναι αδειοδοτημένα και τα δύο υπό την Άδεια GNU GPL, από τις εικόνες Crystal Projects, που είναι αδειοδοτημένες υπό την LGPL, από το glaze icons set (LGPL) και από το DarkGlass_Reworked icons theme (GPL). Οι εικόνες flag πάρθηκαν από το FAMFAMFAM flag icons set (Public Domain). +
        + +
        + jQuery: +
        + +
        + Σε όλο τον ιστότοπο χρησιμοποιήθηκαν οι βιβλιοθήκες javascript jQuery και η jQuery UI (που αδειοδοτούνται υπό την MIT/GPL). +
        + +
        + markitup: +
        + +
        + Χρησιμοποιήθηκε το markitup jQuery plugin (που αδειοδοτείται υπό την MIT/GPL), για να βοηθηθεί ο χρήστης να εισαγάγει wiki tags +
        + +
        + php diff algorithm: +
        + +
        + Χρησιμοποιήθηκε ο αλγόριθμος This algorithm (που αδειοδοτείται υπό την ελεύθερη άδεια zlib), για να αναδειχθούν οι διαφορές ανάμεσα στις δύο διαφορετικές αναθεωρήσεις του ίδιου μοντέλου υλικού (hadrware). +
        + +
        + +
        diff --git a/Application/Views/Desktop/Credits/index_it.php b/Application/Views/Desktop/Credits/index_it.php new file mode 100644 index 0000000..dcdb2c2 --- /dev/null +++ b/Application/Views/Desktop/Credits/index_it.php @@ -0,0 +1,66 @@ + + +. +?> + +
        + +
        + ">Home » credits +
        + +
        + +
        + Icone: +
        + +
        + Le icone utilizzate nel sito h-node.com appartengono ai temi di icone ACUN Simgeleri 0.7 e H2O Icon Theme 0.0.5, entrambi sotto licenza GNU GPL, e al tema Crystal Projects, sotto licenza LGPL, al set di icone glaze (LGPL) e al tema DarkGlass_Reworked (GPL). Le icone bandiere derivano dal set di icone FAMFAMFAM (Public Domain). +
        + + +
        + jQuery: +
        + +
        + Le librerie javascript jQuery , jQuery UI e jQuery Mobile (sotto licenza MIT/GPL) sono state usate nel sito +
        + +
        + markitup: +
        + +
        + Il plugin jQuery markitup (sotto licenza MIT/GPL) è stato usato per aiutare gli utenti a inserire i tag della wiki
        + +
        + Algoritmo php diff: +
        + +
        + Questo algoritmo (sotto licenza libera zlib) è stato usato per sottolineare la differenza tra due diverse revisioni dello stesso modello di hardware. +
        + + +
        + +
        diff --git a/Application/Views/Desktop/Download/index.php b/Application/Views/Desktop/Download/index.php new file mode 100644 index 0000000..2f37f81 --- /dev/null +++ b/Application/Views/Desktop/Download/index.php @@ -0,0 +1,114 @@ + + +. +?> + +
        + +
        + ">Home » +
        + +
        + +
        + : +
        + +
        + + +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        ">
        notebooks in the database");?>">
        wifi cards in the database");?>">
        video cards in the database");?>">
        printers in the database");?>">
        scanners in the database");?>">
        3G cards in the database");?>">
        sound cards in the database");?>">
        webcams in the database");?>">
        bluetooth devices in the database");?>">
        acquisition cards in the database");?>">
        fingerprint readers in the database");?>">
        ethernet cards in the database");?>">
        SD card readers in the database");?>">
        modems in the database");?>">
        RAID adapters in the database");?>">
        Host Controllers in the database");?>">
        +
        +
        + +
        + +
        diff --git a/Application/Views/Desktop/Download/xml.php b/Application/Views/Desktop/Download/xml.php new file mode 100644 index 0000000..67bc38e --- /dev/null +++ b/Application/Views/Desktop/Download/xml.php @@ -0,0 +1,22 @@ + + + +. +?> \ No newline at end of file diff --git a/Application/Views/Desktop/Hardware/left.php b/Application/Views/Desktop/Hardware/left.php new file mode 100644 index 0000000..03068f5 --- /dev/null +++ b/Application/Views/Desktop/Hardware/left.php @@ -0,0 +1,92 @@ + + +. +?> + +
        + +
        + ">Home » Hardware +
        + +
        + , , +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        + +
        +
        \ No newline at end of file diff --git a/Application/Views/Desktop/Help/index.php b/Application/Views/Desktop/Help/index.php new file mode 100644 index 0000000..c4fcee7 --- /dev/null +++ b/Application/Views/Desktop/Help/index.php @@ -0,0 +1,447 @@ + + +. +?> + +
        + +
        + ">Home » +
        + + + +

        Wiki Syntax

        + +

        List of + Wiki Tags

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NameTagResultDescription
        boldtext [b]bold[/b]text boldtext bold
        italictext [i]italic[/i]text italictext italic
        deltext [del]deleted[/del]text deletedtext deleted
        underlinetext [u]underlined[/u]text underlinedtext underlined
        head 1[h1]heading[/h1] +
        + heading
        +
        head 1
        head 2[h2]heading[/h2] +
        + heading
        +
        head 2
        head 3[h3]heading[/h3] +
        + heading
        +
        head 3
        paragraph…[p]new paragraph[/p]… + +

        new paragraph

        +
        new paragraph
        Ordered Lists
          +
        • [list]
        • +
          • +
          • [*]first item[/*]
          • +
          • [*]second item[/*]
          • +
          +
        • +
        • [/list]
        • +
        +
          +
        • first item
        • +
        • second item
        • +
        +
        make a list of items
        Numbered List
          +
        • [enum]
        • +
          • +
          • [*]first item[/*]
          • +
          • [*]second item[/*]
          • +
          +
        • +
        • [/enum]
        • +
        +
          +
        1. first item
        2. +
        3. second item
        4. +
        +
        make a numbered list of items
        list item[*]item[/*]
          +
        • item
        • +
        +
        add an item to a list
        code[code]some code[/code]
        some code
        +
        some code
        simple link[a]url[/a]urlsimple link
        link with text[a]url|text[/a]textlink with text
        notebook[notebook]id[/notebook]idlink to the notebook with the identifier equal to id (the identifier of each device model is written in the + page of the device itself, next to the model name)
        wifi[wifi]id[/wifi]idlink to the wifi with the identifier equal to id (the identifier of each device model is written in the page + of the device itself, next to the model name)
        videocard[videocard]id[/videocard]idlink to the videocard with the identifier equal to id (the identifier of each device model is written in the + page of the device itself, next to the model name)
        + +

         

        + +

        Compatibility classes

        + +

        Notebooks

        +
        +
        Class A (Platinum)
        +
        All the notebook devices work with a very good performance.
        +
        Example: all the devices work, the 3D acceleration is supported
        +
        Class B (Gold)
        +
        All the notebook devices work but not at full performance.
        +
        A typical example: all the devices work, but the 3D acceleration is not supported
        +
        Class C (Silver)
        +
        One main device is not supported.
        +
        Example: the internal wifi card does not work. You need an external USB card
        +
        Class D (Bronze)
        +
        More than one device is not supported
        +
        Class E (Garbage)
        +
        The notebook does not work with free software
        +
        + +

        Printers

        +
        +
        Class A (Full)
        +
        All device functions and features are supported
        +
        Class B (Partial)
        +
        Printing supported but possibly at limited speed or print quality; scanning and/or faxing on some multifunction + devices may not be supported
        +
        Class C (None)
        +
        The printer does not work with free software
        +
        + +

        Scanners

        +
        +
        Class A (Full)
        +
        All device functions and features are supported
        +
        Class B (Partial)
        +
        Scanning supported but possibly at limited speed or quality; some other features may not be supported
        +
        Class C (None)
        +
        The scanner does not work with free software
        +
        + +

         

        + +

        Discover your hardware

        + +

        (Thanks lluvia)

        + +

        In order to know the details of your hardware you can carry out the following actions:

        +
        +
        How to discover the model name of your notebook
        +
        See below your notebook or netbook
        +
        How to discover the model name of your device (if it is not a notebook)
        +
        If the device is integrated (example: a video card)
        +
        Open a terminal and type the following command:
        +
        lspci
        +
        +
        or
        +
        lspci > FILENAME          # output to a file
        +
        + +
        You will obtain the list of your PCI devices, similar to the one written below
        +
        +00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
        +03:00.0 Network controller: Broadcom Corporation BCM4311 802.11b/g WLAN (rev 02)
        +05:00.0 VGA compatible controller: nVidia Corporation G86 [GeForce 8400M GS] (rev a1)
        +			
        +
        +
        Note: The name of each device is written after the colon (see the text + in bold in the above list)
        +
        If the device is an USB device (example: an external USB wifi card)
        +
        Open a terminal and type the following command:
        +
        lsusb -v
        +
        +
        or
        +
        lsusb -v > FILENAME          # output to a file
        +
        + +
        You will obtain the list of your USB devices, similar to the one written below
        +
        +Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
        +Device Descriptor:
        +	bLength						18
        +	bDescriptorType				1
        +	bcdUSB						2.00
        +	bDeviceClass				0 (Defined at Interface level)
        +	bDeviceSubClass				0
        +	bDeviceProtocol				0
        +	bMaxPacketSize0				64
        +	idVendor					0x0846 NetGear, Inc.
        +	idProduct					0x4260 WG111v3 54 Mbps Wireless [realtek RTL8187B]
        +	bcdDevice					2.00
        +	iManufacturer				1
        +	iProduct					2
        +	iSerial						3
        +	...
        +	...
        +
        +Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
        +Device Descriptor:
        +	bLength						18
        +	bDescriptorType				1
        +	bcdUSB						1.10
        +	bDeviceClass				255 Vendor Specific Class
        +	bDeviceSubClass			 	255 Vendor Specific Subclass
        +	bDeviceProtocol			 	255 Vendor Specific Protocol
        +	bMaxPacketSize0				8
        +	idVendor					0x08ff AuthenTec, Inc.
        +	idProduct					0x2580 AES2501 Fingerprint Sensor
        +	bcdDevice					6.23
        +	iManufacturer				0
        +	iProduct					1 Fingerprint Sensor
        +	iSerial						0
        +	bNumConfigurations			1
        +	...
        +	...
        +			
        +
        +
        Note: The name of each device is written at the row starting with "idProduct" (see the text + in bold in the above list)
        +
        +
        How to discover the model name of your notebook
        +
        See below your notebook or netbook
        +
        How to discover the model name of your device (if it is not a notebook)
        +
        If the device is integrated (example: a video card)
        +
        Open a terminal and type the following command:
        +
        lspci
        +
        +
        or
        +
        lspci > FILENAME          # output to a file
        +
        +
        How to discover the kernel libre version you are using
        +
        Open a terminal and type the following command:
        +
        uname -r
        +
        +
        How to discover the name of your video card
        +
        Open a terminal and type the following command:
        +
        sudo lspci
        +
        +
        Then look for the row containing the string VGA or Display controller. You can also try one of + the following commands:
        +
        lspci | grep "Display controller"
        +
        +
        or
        +
        lspci | grep "VGA"
        +
        +
        How to discover the VendorID and the ProductID of your device (VendorID:ProductID + code)
        +
        (Thanks Michał + Masłowski and Julius22)
        +
        If the device is integrated (example: a video card)
        +
        Open a terminal and type the following command:
        +
        sudo lspci -nnk
        +
        You should obtain a list of hardware similar to the one written below
        +
        +03:00.0 Network controller [0280]: Broadcom Corporation BCM4311 802.11b/g WLAN [14e4:4311] (rev 02)
        +	Kernel driver in use: b43-pci-bridge
        +	Kernel modules: ssb
        +05:00.0 VGA compatible controller [0300]: nVidia Corporation G86 [GeForce 8400M GS] [10de:0427] (rev a1)
        +	Kernel modules: nouveau, nvidiafb
        +
        +
        The strings in bold and placed inside the square brackets (in the above list) are the code you are + looking for. The first set of digits (before the colon) are the VendorID, the second set of digits are + the ProductID. In the above example: the VendorID:ProductID code of the wifi card (note the strings + "Network controller" and "WLAN") is 14e4:4311 while the VendorID:ProductID code of the video card (note + the string "VGA") is 10de:0427
        +
        If the device is an USB device (example: an external USB wifi card)
        +
        Open a terminal and type the following command:
        +
        sudo lsusb
        +
        +
        You should obtain a list of hardware similar to the one written below
        +
        +Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
        +Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
        +Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
        +
        +
        The strings in bold (in the above list) are the code you are looking for. The first set of digits + (before the colon) are the VendorID, the second set of digits are the ProductID. In the above + example: the VendorID:ProductID code of the external USB wifi card (note the strings "Wireless") is + 0846:4260
        +
        How to discover if the video card works
        +
        Install rss-glx by means of the package manager of + your distribution or compiling it from source and try some screensavers (for example Skyrocket or + Solarwinds). Check if you can play the screensaver (and/or if you can play it smoothly)
        +
        How to discover if the 3D acceleration works
        +
        Try to enable compiz
        +
        How to discover the name of your wifi card
        +

        Open a terminal and type the following command:

        +
        +
        sudo lspci
        +
        +
        Then look for the row containing the string Wireless or Network controller. You can also try + one of the following commands:
        +
        lspci | grep "Wireless" 
        +
        +
        or
        +
        lspci | grep "Network" 
        +
        +
        How to discover the printer driver you are using
        +
        If you are using cups
        +
        Open a terminal and type the following command:
        +
        dpkg-query -W -f '${Version}\n' cups
        +
        +
        How to discover the architecture of your notebook
        +
        Open a terminal and type the following command:
        +
        cat /proc/cpuinfo | grep "lm"
        +
        +
        If you get a message like this:
        +
        flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts
        acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64
        monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm
        +
        +
        then you machine is x86-64/amd64 capable and you could choose a x86-64/amd64 distro to run on it
        +
        +

         

        + +

        Fully free GNU/Linux Distributions

        + +

        Following are the GNU/Linux distributions we know of which have a firm policy + commitment to only include and only propose free software. They reject non-free applications, non-free programming + platforms, non-free drivers, or non-free firmware “blobs”. If by mistake they do include any, they remove it. To + learn more about what makes for a free GNU/Linux + distribution, see GNU Guidelines for + Free System Distributions.

        + +

        All of the distributions that follow are installable to a computer's hard drive and most can be run + live.

        + +

        (listed in alphabetical order)

        + + + +
        +
        + diff --git a/Application/Views/Desktop/Help/index_de.php b/Application/Views/Desktop/Help/index_de.php new file mode 100644 index 0000000..e53693e --- /dev/null +++ b/Application/Views/Desktop/Help/index_de.php @@ -0,0 +1,443 @@ + + +. +?> + +
        + +
        + ">Startseite » +
        + + + +

        Wiki-Syntax

        + +

        + Wiki-Elemente

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        NameElementErgebnisBeschreibung
        Fett[b]Fette[/b] SchriftFette SchriftFettschrift
        Kursiv[i]Kursive[/i] SchriftKursive SchriftKursivschrift
        Gelöschter Text[del]Gelöschter[/del] TextGelöschter TextGelöschter Text
        Unterstrichen[u]Unterstrichener[/u] TextUnterstrichener TextUnterstrichener Text
        Überschrift 1[h1]Überschrift[/h1] +
        + Überschrift
        +
        Überschrift Ebene 1
        Überschrift 2[h2]Überschrift[/h2] +
        + Überschrift
        +
        Überschrift Ebene 2
        Überschrift 3[h3]Überschrift[/h3] +
        + Überschrift
        +
        Überschrift Ebene 3
        Absatz…[p](Neuer) Absatz[/p]… + +

        (Neuer) Absatz

        +
        (Neuer) Absatz
        Auflistung
          +
        • [list]
        • +
          • +
          • [*]Erstes Element[/*]
          • +
          • [*]Zweites Element[/*]
          • +
          +
        • +
        • [/list]
        • +
        +
          +
        • Erstes Element
        • +
        • Zweites Element
        • +
        +
        Auflistung
        Nummerierung
          +
        • [enum]
        • +
          • +
          • [*]Erstes Element[/*]
          • +
          • [*]Zweites Element[/*]
          • +
          +
        • +
        • [/enum]
        • +
        +
          +
        1. Erstes Element
        2. +
        3. Zweites Element
        4. +
        +
        Geordnete Liste
        Listenelement[*]Listenelement[/*]
          +
        • Listenelement
        • +
        +
        Listenelement hinzufügen
        Quelltext[code]Quelltext[/code]
        Quelltext
        +
        Codefragment
        Verweis (einfach)[a]Internetadresse[/a]InternetadresseVerweis (einfach)
        Verweis (mit Text)[a]Internetadresse|mit Text[/a]mit TextVerweis (mit Text)
        Notebook[notebook]ID[/notebook]IDVerweis auf das Notebook mit der Kennung gleich ID (die jeweilige Geräte-Modellkennung wird auf der Seite + des Gerätes selbst, unter „Modellbezeichnung“, eingepflegt)
        WLAN[wifi]ID[/wifi]IDVerweis auf das WLAN mit der Kennung gleich ID (die jeweilige Geräte-Modellkennung wird auf der Seite des + Gerätes selbst, unter „Modellbezeichnung“, eingepflegt)
        Grafikkarte[videocard]ID/videocard]IDVerweis auf die Grafikkarte mit der Kennung gleich ID (die jeweilige Geräte-Modellkennung wird auf der Seite + des Gerätes selbst, unter „Modellbezeichnung“, eingepflegt)
        + +

         

        + +

        Kompatibilitätsklassen

        + +

        Notebooks

        +
        +
        Klasse A (Platin)
        +
        Alle Notebook-Geräte arbeiten mit sehr guter Leistung.
        +
        Beispiel: Alle Geräte funktionieren, auch die 3D-Beschleunigung wird + unterstützt.
        +
        Klasse B (Gold)
        +
        Alle Notebook-Geräte funktionieren, jedoch nicht mit voller Leistung.
        +
        Beispiel: Alle Geräte funktionieren, aber die 3D-Beschleunigung wird nicht + unterstützt.
        +
        Klasse C (Silber)
        +
        Ein wichtiges Gerät wird nicht unterstützt.
        +
        Beispiel: Die interne WLAN-Karte funktioniert nicht. Sie benötigen eine + externe USB-Karte.
        +
        Klasse D (Bronze)
        +
        Mehr als ein Gerät wird nicht unterstützt.
        +
        Klasse E (E-Schrott)
        +
        Das Notebook kann von Freie Software nicht unterstützt werden.
        +
        + +

        Drucker

        +
        +
        Klasse A (Vollständig)
        +
        Alle Gerätefunktionen und -merkmale werden unterstützt.
        +
        Klasse B (Teilweise)
        +
        Drucken wird unterstützt, aber möglicherweise mit eingeschränkter Geschwindigkeit oder Druckqualität; + Scannen und/oder Faxen wird (bei einigen Multifunktionsgeräten möglicherweise) nicht unterstützt
        +
        Klasse C (E-Schrott)
        +
        Der Drucker kann von Freie Software nicht unterstützt werden.
        +
        + +

        Scanner

        +
        +
        Klasse A (Vollständig)
        +
        Alle Gerätefunktionen und -merkmale werden unterstützt.
        +
        Klasse B (Teilweise)
        +
        Scannen unterstützt, aber möglicherweise bei eingeschränkter Geschwindigkeit oder Qualität, einige andere + Funktionen werden nicht unterstützt.
        +
        Klasse C (E-Schrott)
        +
        Der Scanner kann von Freie Software nicht unterstützt werden.
        +
        + +

         

        + +

        Entdecken Sie Ihre Hardware

        + (Vielen Dank lluvia) + +

        Um mehr Details über Ihre Hardware zu erfahren, beachten Sie bitte folgende Punkte:

        +
        +
        Wie man die Modellbezeichnung des Notebooks herausfindet
        +
        Siehe das Typenschild unterhalb Ihres tragbaren Klapprechners.
        +
        Wie man den Modellnamen der Geräte herausfindet (wenn kein tragbarer Klapprechner)
        +
        Wenn das Gerät eingebaut ist (z. B. eine Grafikkarte)
        +
        Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:
        +
        lspci
        +
        +
        oder
        +
        lspci > DATEINAME          # Ausgabe als Datei speichern
        +
        + +
        Es sollten PCI-Geräte ähnlich der folgenden angezeigt werden:
        +
        +00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
        +03:00.0 Network controller: Broadcom Corporation BCM4311 802.11b/g WLAN (rev 02)
        +05:00.0 VGA compatible controller: nVidia Corporation G86 [GeForce 8400M GS] (rev a1)
        +
        +
        Hinweis: The name of each device is written after the colon (see the text + in bold in the above list).
        +
        Wenn das Gerät ein USB-Gerät ist (bspw. ein externer WLAN-Stick)
        +
        Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:
        +
        lsusb -v
        +
        +
        oder
        +
        lsusb -v > DATEINAME          # Ausgabe als Datei speichern
        +
        + +
        Es sollten USB-Geräte ähnlich der folgenden angezeigt werden:
        +
        +Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
        +Device Descriptor:
        +	bLength						18
        +	bDescriptorType				1
        +	bcdUSB						2.00
        +	bDeviceClass				0 (Defined at Interface level)
        +	bDeviceSubClass				0
        +	bDeviceProtocol				0
        +	bMaxPacketSize0				64
        +	idVendor					0x0846 NetGear, Inc.
        +	idProduct					0x4260 WG111v3 54 Mbps Wireless [realtek RTL8187B]
        +	bcdDevice					2.00
        +	iManufacturer				1
        +	iProduct					2
        +	iSerial						3
        +	...
        +	...
        +
        +Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
        +Device Descriptor:
        +	bLength						18
        +	bDescriptorType				1
        +	bcdUSB						1.10
        +	bDeviceClass				255 Vendor Specific Class
        +	bDeviceSubClass				255 Vendor Specific Subclass
        +	bDeviceProtocol				255 Vendor Specific Protocol
        +	bMaxPacketSize0				8
        +	idVendor					0x08ff AuthenTec, Inc.
        +	idProduct					0x2580 AES2501 Fingerprint Sensor
        +	bcdDevice					6.23
        +	iManufacturer				0
        +	iProduct					1 Fingerprint Sensor
        +	iSerial						0
        +	bNumConfigurations			1
        +	...
        +	...
        +			
        +
        +
        Hinweis: Die Gerätebezeichnung wird in der Zeile „idProduct“ nach dem Doppelpunkt + angegeben (siehe Text in Fettdruck).
        + +
        Wie man den verwendeten Betriebssystemkern („Kernel“) herausfindet
        +
        Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:
        +
        uname -r
        +
        +
        Wie man den Namen der Grafikkarte herausfindet
        +
        Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:
        +
        sudo lspci
        +
        +
        Suchen Sie dann nach der Zeile mit der Zeichenfolge VGA oder + Display Controller. Alternativ können Sie auch folgenden Befehl versuchen: +
        +
        lspci | grep "Display controller"
        +
        +
        oder
        +
        lspci | grep "VGA"
        +
        +
        Wie man Anbieter- und Produkt-ID des Geräts herausfindet (VendorID:ProductID)
        +
        (Vielen Dank an Michał Masłowski + und Julius22) +
        +
        Wenn das Gerät eingebaut ist (z. B. eine Grafikkarte)
        +
        Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:
        +
        sudo lspci -nnk
        +
        +
        Es sollte eine Hardwareliste ähnlich der folgenden angezeigt werden:
        +
        +03:00.0 Network controller [0280]: Broadcom Corporation BCM4311 802.11b/g WLAN [14e4:4311] (rev 02)
        +	Kernel driver in use: b43-pci-bridge
        +	Kernel modules: ssb
        +05:00.0 VGA compatible controller [0300]: nVidia Corporation G86 [GeForce 8400M GS] [10de:0427] (rev a1)
        +	Kernel modules: nouveau, nvidiafb
        +
        +
        Hinweis: Die Zeichenfolgen in fetter Schrift und in den eckigen Klammern [… + : …] sind die Daten, nach denen Sie gesucht haben. Die erste Zeichengruppe (vor dem + Doppelpunkt) ist die Anbieter-ID, die zweite Zeichengruppe (nach dem Doppelpunkt) die Produkt-ID. + Im obigen Beispiel wären Anbieter- und Produkt-ID-Code der WLAN-Karte (beachten Sie die Zeichenfolgen „Network + Controller“ und „WLAN“) 14e4:4311, die der Grafikkarte (beachten Sie die Zeichenfolge „VGA“) + 10DE:0427.
        +
        Wenn das Gerät ein USB-Gerät ist (bspw. ein externer USB-WLAN-Stick)
        +
        Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:
        +
        sudo lsusb
        +
        +
        Es sollte eine Hardwareliste ähnlich der folgenden angezeigt werden:
        +
        Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
        Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
        Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
        +
        +
        Hinweis: Die Zeichenfolgen in fetter Schrift und in den eckigen Klammern […] sind + die Daten, nach denen Sie gesucht haben. Die erste Zeichengruppe (vor dem Doppelpunkt) ist die + Anbieter-ID, die zweite Zeichengruppe (nach dem Doppelpunkt) die Produkt-ID. Im obigen Beispiel + wären Anbieter- und Produkt-ID-Code des externen USB-WLAN-Sticks (beachten Sie die Zeichenfolge „Wireless“) + 0846:4260.
        +
        Wie man herausfindet, ob die Grafikkarte (über den VGA-Standard hinaus) funktioniert
        +
        Installieren Sie das Paket rss-glx mittels + Paketverwaltung Ihrer Distribution oder Kompilieren Sie den Quellcode und testen einige Bildschirmschoner (z. B. + Skyrocket oder Solarwinds). Überprüfen Sie, ob die Bildschirmschoner angezeigt werden können + (und/oder ruckelfrei wiedergegeben werden). +
        +
        Wie man herausfindet, ob die 3D-Beschleunigung funktioniert
        +
        Versuchen Sie, „compiz“ zu aktivieren.
        +
        Wie man den Namen Ihrer WLAN-Karte herausfindet
        +
        Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:
        +
        sudo lspci
        +
        +
        Suchen Sie dann nach der Zeile mit der Zeichenfolge Wireless oder Network + Controller. Alternativ können Sie auch folgenden Befehle versuchen: +
        +
        lspci | grep "Wireless"
        +
        oder
        +
        lspci | grep "Network"
        +
        +
        Wie man den verwendeten Druckertreiber herausfindet
        +
        Wenn Sie „cups“ verwenden
        +
        Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:
        +
        dpkg-query -W -f '${Version}\n' cups
        +
        +
        How to discover the architecture of your notebook
        +
        Open a terminal and type the following command:
        +
        cat /proc/cpuinfo | grep "lm"
        +
        +
        If you get a message like this:
        +
        flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts
        acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64
        monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm
        +
        +
        then you machine is x86-64/amd64 capable and you could choose a x86-64/amd64 distro to run on it
        +
        + +

         

        + +

        Freie GNU/Linux-Distributionen

        + +

        Dies sind GNU/Linux-Distributionen, von denen wir von einer + festgelegten Richtlinie wissen, ausschließlich Freie Software zu verwenden und anzubieten. Unfreie Anwendungen, + unfreie Programmierplattformen, unfreie Treiber oder unfreie Firmware („BLOBs“) werden, auch wenn versehentlich + enthalten, entfernt. Weitere Informationen über Freie + GNU/Linux-Distribution finden Sie unter Richtlinien für Freie + Distributionen.

        + +

        Alle Distributionen können auf der Festplatte Ihres Rechners installiert und die meisten Live ausgeführt + werden.

        + +

        (In alphabetischer Reihenfolge)

        + + +
        + diff --git a/Application/Views/Desktop/Help/index_es.php b/Application/Views/Desktop/Help/index_es.php new file mode 100644 index 0000000..acbdf6b --- /dev/null +++ b/Application/Views/Desktop/Help/index_es.php @@ -0,0 +1,440 @@ + + +. +?> + +
        + +
        + ">Inicio » +
        + + + +

        Sintaxis del Wiki

        + +

        Lista de las etiquetas wiki de +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        nombreetiquetaresultadodescripción
        bold[b]texto[/b]textotexto en negrita
        italic[i]texto[/i]textotexto en cursiva
        del[del]texto[/del]textotexto eliminado
        underline[u]texto[/u]textotexto subrayado
        head 1[h1]texto[/h1] +
        + texto
        +
        encabezado 1
        head 2[h2]texto[/h2] +
        + texto
        +
        encabezado 2
        head 3[h3]texto[/h3] +
        + texto
        +
        encabezado 3
        paragraph[p]texto[/p]

        texto

        +
        nuevo párrafo
        list item[*]objeto[/*]
          +
        • objeto
        • +
        +
        agrega un objeto a la lista
        lista
          +
        • [list]
        • +
          • +
          • [*]first item[/*]
          • +
          • [*]second item[/*]
          • +
          +
        • +
        • [/list]
        • +
        +
          +
        • first item
        • +
        • second item
        • +
        +
        hace una lista de objetos
        numbered list
          +
        • [enum]
        • +
          • +
          • [*]first item[/*]
          • +
          • [*]second item[/*]
          • +
          +
        • +
        • [/enum]
        • +
        +
          +
        1. first item
        2. +
        3. second item
        4. +
        +
        hace una lista numerada de objetos
        code[code]código[/code]
        código
        +
        agrega código
        link with text[a]url|text[/a]textenlace con texto
        notebook[notebook]1234:5678[/notebook]1234:5678enlace al computador portátil con el identificador id (el identificador de cada modelo de dispositivo esta escrito en la + página del dispositivo mismo, seguido del nombre del modelo)
        wifi[wifi]1234:5678[/wifi]1234:5678enlace al wifi con el identificador id (el identificador de cada modelo de dispositivo esta escrito en la + página del dispositivo mismo, seguido del nombre del modelo)
        videocard[videocard]1234:5678/videocard]1234:5678enlace a la tarjeta de video con el identificador id (el identificador de cada modelo de dispositivo esta + escrito en la página del dispositivo mismo, seguido del nombre del modelo)
        + +

        + +

        Clases de Compatibilidad

        + +

        Computadores portátiles

        +
        +
        Clase A (Platino)
        +
        Todos los dispositivos funcionan con un buen desempeño.
        +
        Ejemplo: todos los dispositivos funcionan, la aceleración 3D esta soportada
        +
        Clase B (Oro)
        +
        Todos los dispositivos funcionan pero no a su rendimiento completo.
        +
        Un ejemplo típico es: todos los dispositivos funcionan, pero la aceleración 3D no esta + soportada
        +
        Clase C (Plata)
        +
        Un dispositivo principal no esta soportado.
        +
        Ejemplo: la tarjeta inalámbrica interna no funciona. Necesita una tarjeta USB externa
        +
        Clase D (Bronce)
        +
        Más de un dispositivo no esta soportado
        +
        Clase E (Basura)
        +
        El equipo no funciona con software libre
        +
        + +

        Impresoras

        +
        +
        Clase A (Completo)
        +
        Todos los dispositivos funcionan y las características soportadas
        +
        Clase B (Parcial)
        +
        La impresión esta soportada pero a velocidad o calidad limitada; escaneo y/o envío por fax en algunos + dispositivos multifuncionales pueden no estar soportados
        +
        Clase C (Ninguno)
        +
        La impresora no funciona con software libre
        +
        + +

        Escáners

        +
        +
        Clase A (Completo)
        +
        Todos los dispositivos funcionan y las características soportadas
        +
        Clase B (Parcial)
        +
        El escanéo es soportado pero a velocidad o calidad limitada; otras características pueden no estar soportadas
        +
        Clase C (Ninguno)
        +
        El escaner no funciona con software libre
        +
        + +

         

        + +

        Descubra su hardware

        + (Gracias lluvia) + +

        En orden de conocer los detalles de su hardware puede seguir las siguientes acciones:

        +
        +
        Como descubrir el modelo de su computador portátil
        +
        Vea debajo de su computador portátil o subportátil
        +
        Como descubrir el nombre del modelo de su dispositivo (si no es un computador portátil)
        +
        Si el dispositivo es integrado (ejemplo: una tarjeta de video)
        +
        Abra una terminal y escriba la siguiente orden:
        +
        lspci
        +
        +
        o
        +
        lspci > FILENAME          # output to a file
        +
        + +
        Obtendrá la lista de sus dispositivos PCI, similar a la mostrada debajo
        +
        +00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
        +03:00.0 Network controller: Broadcom Corporation BCM4311 802.11b/g WLAN (rev 02)
        +05:00.0 VGA compatible controller: nVidia Corporation G86 [GeForce 8400M GS] (rev a1)
        +			
        +
        +
        El nombre de cada dispositivo esta escrito después de los dos puntos (vea el texto en negrita en la lista superior)
        +
        Si el dispositivo es un dispositivo USB (ejemplo: una tarjeta externa USB de red inalámbrica)
        +
        Abra una terminal y escriba la siguiente orden:
        +
        lsusb -v
        +
        +
        o
        +
        lsusb -v > filename          # write the output to a file
        +
        + +
        Obtendrá la lista de sus dispositivos USB, similar a la mostrada debajo
        +
        +Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
        +Device Descriptor:
        +	bLength						18
        +	bDescriptorType				1
        +	bcdUSB						2.00
        +	bDeviceClass				0 (Defined at Interface level)
        +	bDeviceSubClass				0
        +	bDeviceProtocol				0
        +	bMaxPacketSize0				64
        +	idVendor					0x0846 NetGear, Inc.
        +	idProduct					0x4260 WG111v3 54 Mbps Wireless [realtek RTL8187B]
        +	bcdDevice					2.00
        +	iManufacturer				1
        +	iProduct					2
        +	iSerial						3
        +	...
        +	...
        +
        +Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
        +Device Descriptor:
        +	bLength						18
        +	bDescriptorType				1
        +	bcdUSB						1.10
        +	bDeviceClass				255 Vendor Specific Class
        +	bDeviceSubClass			 	255 Vendor Specific Subclass
        +	bDeviceProtocol			 	255 Vendor Specific Protocol
        +	bMaxPacketSize0				8
        +	idVendor					0x08ff AuthenTec, Inc.
        +	idProduct					0x2580 AES2501 Fingerprint Sensor
        +	bcdDevice					6.23
        +	iManufacturer				0
        +	iProduct					1 Fingerprint Sensor
        +	iSerial						0
        +	bNumConfigurations			1
        +	...
        +	...
        +		
        +
        +
        El nombre de cada disposiitivo es escrito en la fila comenzando con "idProduct" (vea el texto en negritas en la lista superior)
        +
        Como descubrir el año de comercialización de su computador portátil
        +
        Abra una terminal y escriba la siguiente orden:
        +
        sudo dmidecode| grep "Release Date"
        +
        +
        Como descubrir la versión de kernel que esta usando
        +
        Abra una terminal y escriba la siguiente orden:
        +
        uname -r
        +
        +
        Como descubrir el nombre de su tarjeta de video
        +
        Abra una terminal y escriba la siguiente orden:
        +
        sudo lspci
        +
        +
        Después busque por la linea que contenga la cadena VGA o Display controller. También puede usar uno de las + siguientes ordenes:
        +
        lspci | grep "Display controller"
        +
        +
        o
        +
        lspci | grep "VGA"
        +
        +
        Como descubrir el ID del vendedor y el ID del producto de su dispositivo (código + VendorID:ProductID)
        +
        (Gracias Michał Masłowski + y Julius22) +
        +
        Si el dispositivo es integrado (ejemplo: una tarjeta de video)
        +
        Abra una terminal y escriba la siguiente orden:
        +
        sudo lspci -nnk
        +
        +
        Debe de obtener una lista de hardware similar a la escriba debajo
        +
        +03:00.0 Network controller [0280]: Broadcom Corporation BCM4311 802.11b/g WLAN [14e4:4311] (rev 02)
        +	Kernel driver in use: b43-pci-bridge
        +	Kernel modules: ssb
        +05:00.0 VGA compatible controller [0300]: nVidia Corporation G86 [GeForce 8400M GS] [10de:0427] (rev a1)
        +	Kernel modules: nouveau, nvidiafb
        +
        +
        Las cadenas en negritas y colocadas en los corchetes (en la lista superior) son los códigos que esta + buscando. El primer grupo de dígitos (antes de los dos puntos) son el VendorID, el segundo grupo de + dígitos son el ProductID. En el ejemplo superior: el código VendorID:ProductID de la tarjeta + inalámbrica (note las cadenas "Network controller" y "WLAN") es 14e4:4311 mientras el código + VendorID:ProductID de la tarjeta de video (note la cadena "VGA") es 10de:0427
        +
        Si el dispositivo es un dispositivo USB (ejemplo: una tarjeta USB externa)
        +
        Abra una terminal y escriba la siguiente orden:
        +
        sudo lsusb
        +
        +
        Debe de obtener una lista de hardware similar a la descrita a continuación
        +
        +Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
        +Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
        +Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
        +
        +
        Las cadenas en negritas (en la lista superior) son el código que busca. El primer grupo de dígitos + (antes de los dos puntos) son el VendorID, el segundo grupo de dígitos son el ProductID. En el + ejemplo superior: el código VendorID:ProductID de la tarjeta inalámbrica USB externa (note la cadena + "Wireless") es 0846:4260
        +
        Como descubrir si la tarjeta de video funciona
        +
        Instale rss-glx por lo medios del administrador + de paquetes de su distribución o por medio de compilar el código fuente y pruebe algunos protectores de + pantalla (por ejemplo Skyrocket o Solarwinds). Revise si puede ejecutar el protector de pantalla + (y/o si puede mostrarlo suavemente) +
        +
        Como descubrir si la aceleración 3D funciona
        +
        Intente activar compiz
        +
        Como descubrir el nombre de su tarjeta de inalámbrica
        +
        Abra una terminal y escriba la siguiente orden:
        +
        sudo lspci
        +
        +
        Después busque por la linea que contenga la cadena Wireless o Network + controller. También puede intentar una de las siguientes ordenes
        +
        lspci | grep "Wireless"
        +
        +
        o
        +
        lspci | grep "Network"
        +
        +
        Como descubrir el driver de la impresora que esta usando
        +
        Si usa cups
        +
        Abra una terminal y escriba la orden siguiente:
        +
        dpkg-query -W -f '${Version}\n' cups
        +
        +
        Como descubrir la arquitectura de su computador portátil
        +
        Abra una terminal y escriba la orden siguiente:
        +
        cat /proc/cpuinfo | grep "lm"
        +
        +
        Si obtiene un mensaje como este:
        +
        flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts
        acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64
        monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm
        +
        +
        entonces su equipo es compatible con x86-64/amd64 y podría elegir una distro x86-64/amd64 para correr en él.
        +
        + +

         

        + +

        Lista de las distribuciones GNU/Linux completamente libres

        + +

        A continuación se enlistan las distribuciones GNU/Linux que sabemos tiene un + compromiso firme en su política para solo incluir y solo proponer software libre. Estas rechazan aplicaciones no libres, plataformas de + programación no libres, controladores no libres, o “blobs” de firmware no libre. Si por error llegan a incluirlo, lo eliminarán. Para + aprender más acerca de que hace una distribución GNU/Linux libre, + vea las pautas para distribuciones de sistemas + libres de GNU.

        + +

        Todas las distribuciones que aparecen a continuación se pueden instalar en el disco duro y muchas funcionan + sin instalación.

        + +

        (En orden alfabético)

        + + +
        + diff --git a/Application/Views/Desktop/Help/index_fr.php b/Application/Views/Desktop/Help/index_fr.php new file mode 100644 index 0000000..3e46137 --- /dev/null +++ b/Application/Views/Desktop/Help/index_fr.php @@ -0,0 +1,432 @@ + + +. +?> + +
        + +
        + ">Home » +
        + + + +

        Syntaxe Wiki

        + +

        Liste des tags Wiki sur +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        nametagresultdescription
        bold[b]text[/b]texttext bold
        italic[i]text[/i]texttext italic
        del[del]text[/del]texttext deleted
        underline[u]text[/u]texttext underlined
        head 1[h1]text[/h1] +
        + text
        +
        head 1
        head 2[h2]text[/h2] +
        + text
        +
        head 2
        head 3[h3]text[/h3] +
        + text
        +
        head 3
        paragraph[p]text[/p]

        text

        +
        new paragraph
        list item[*]item[/*]
          +
        • item
        • +
        +
        ad an item to a list
        List
          +
        • [list]
        • +
          • +
          • [*]first item[/*]
          • +
          • [*]second item[/*]
          • +
          +
        • +
        • [/list]
        • +
        +
          +
        • first item
        • +
        • second item
        • +
        +
        make a list of items
        Numbered list
          +
        • [enum]
        • +
          • +
          • [*]first item[/*]
          • +
          • [*]second item[/*]
          • +
          +
        • +
        • [/enum]
        • +
        +
          +
        1. first item
        2. +
        3. second item
        4. +
        +
        make a numbered list of items
        code[code]some code[/code]
        some code
        +
        ad some code
        simple link[a]url[/a]urlsimple link
        link with text[a]url|text[/a]textlink with text
        notebook[notebook]id[/notebook] link to the notebook with the identifier equal to id (the identifier of each device model is written in the + page of the device itself, next to the model name)
        wifi[wifi]id[/wifi] link to the wifi with the identifier equal to id (the identifier of each device model is written in the page + of the device itself, next to the model name)
        videocard[videocard]id[/videocard] link to the videocard with the identifier equal to id (the identifier of each device model is written in the + page of the device itself, next to the model name)
        + +

         

        + +

        Niveau de compatibilitée

        + +

        Notebooks

        +
        +
        Classe A (Platinium)
        +
        Tout le matériel du notebook fonctionne avec du logiciel libre.
        +
        Exemple : la 3D fonctionne, le son et la wifi également
        +
        Classe B (Or)
        +
        Tout le matériel du notebook fonctionne, mais avec des performances réduites.
        +
        Exemple : la carte graphique est reconnues mais la 3D ne fonctionne pas
        +
        Classe C (Argent)
        +
        Un matériel principal ne fonctionne pas.
        +
        Exemple : La carte wifi ne fonctionne pas
        +
        Classe D (Bronze)
        +
        Plus d'un matériel ne fonctionne pas avec du logiciel libre
        +
        Classe E (Poubelle)
        +
        Aucun matériel ne fonctionne avec du logiciel libre
        +
        + +

        Imprimantes

        +
        +
        Classe A (Complet)
        +
        Toutes les fonctionnalitées de l'imprimante fonctionne avec du logiciel libre
        +
        Classe B (Partielle)
        +
        La fonction d'impression fonctionne, mais à une vitesse ou qualitée limitée.
        +
        Exemple : Le scan ou le fax sur certains appareils peut ne pas être supportés
        +
        Classe C (Aucun)
        +
        L'imprimante ne fonctionne pas avec du logiciel libre
        +
        + +

        Scanners

        +
        +
        Classe A (Complet)
        +
        Toutes les fonctionnalitées du scanner sont supportées
        +
        Classe B (Partielle)
        +
        Le scanner fonctionne mais à une vitesse ou qualitée limitée, d'autres fonctionnalitées peuvent ne pas + fonctionner
        +
        Classe C (Aucun)
        +
        Le scanner ne fonctionne pas avec du logiciel libre
        +
        + +

        Découvrez votre matériel

        + (Merci lluvia) + +

        Pour connaitre votre matériel en détails, vous pouviez faire les choses suivantes:

        +
        +
        Comment découvrir le modèle de votre notebook
        +
        See below your notebook or netbook
        +
        How to discover the model name of your device (if it is not a notebook)
        +
        If the device is integrated (example: a video card)
        +
        Open a terminal and type the following command:
        +
        lspci
        +
        +
        or
        +
        lspci > FILENAME          # output to a file
        +
        + +
        You will obtain the list of your PCI devices, similar to the one written below
        +
        +00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
        +03:00.0 Network controller: Broadcom Corporation BCM4311 802.11b/g WLAN (rev 02)
        +05:00.0 VGA compatible controller: nVidia Corporation G86 [GeForce 8400M GS] (rev a1)
        +			
        +
        +
        The name of each device is written after the colon (see the text in bold in the above + list)
        +
        If the device is an USB device (example: an external USB wifi card)
        +
        Open a terminal and type the following command:
        +
        lsusb -v
        +
        +
        or
        +
        lsusb -v > FILENAME          # output to a file
        +
        + +
        You will obtain the list of your USB devices, similar to the one written below
        +
        +Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
        +Device Descriptor:
        +	bLength						18
        +	bDescriptorType				1
        +	bcdUSB						2.00
        +	bDeviceClass				0 (Defined at Interface level)
        +	bDeviceSubClass				0
        +	bDeviceProtocol				0
        +	bMaxPacketSize0				64
        +	idVendor					0x0846 NetGear, Inc.
        +	idProduct					0x4260 WG111v3 54 Mbps Wireless [realtek RTL8187B]
        +	bcdDevice					2.00
        +	iManufacturer				1
        +	iProduct					2
        +	iSerial						3
        +	...
        +	...
        +
        +Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
        +Device Descriptor:
        +	bLength						18
        +	bDescriptorType				1
        +	bcdUSB						1.10
        +	bDeviceClass				255 Vendor Specific Class
        +	bDeviceSubClass				255 Vendor Specific Subclass
        +	bDeviceProtocol			 	255 Vendor Specific Protocol
        +	bMaxPacketSize0				8
        +	idVendor					0x08ff AuthenTec, Inc.
        +	idProduct					0x2580 AES2501 Fingerprint Sensor
        +	bcdDevice					6.23
        +	iManufacturer				0
        +	iProduct					1 Fingerprint Sensor
        +	iSerial						0
        +	bNumConfigurations			1
        +	...
        +	...
        +			
        +
        +
        The name of each device is written at the row starting with "idProduct" (see the text in bold in the above + list)
        +
        Trouver la version du noyau linux libre que vous utilisez
        +
        Ouvrez un terminal et tapez la commande suivant:
        +
        uname -r
        +
        +
        Comment trouver le modèle de votre carte graphique
        +
        Ouvrez un terminal et taper la commande suivante:
        +
        sudo lspci
        +
        +
        Chercher la ligne qui contient le mot VGA ou Display Controller. Vous pouvez aussi essayer l'une + des commandes suivantes:
        +
        lspci | grep "Display controller"
        +
        +
        ou
        +
        lspci | grep "VGA"
        +
        +
        Comment connaitre le VendorID ou le ProductID (VendorID:ProductID code)
        +
        (Merci à Michał Masłowski + et Julius22) +
        +
        Si le matériel est intégré (example : une puce vidéo)
        +
        Ouvrez un terminal sudo et taper la commande suivante:
        +
        sudo lspci -nnk
        +
        +
        Vous devriez obtenir une liste de matériel similaire à celle-ci
        +
        +03:00.0 Network controller [0280]: Broadcom Corporation BCM4311 802.11b/g WLAN [14e4:4311] (rev 02)
        +	Kernel driver in use: b43-pci-bridge
        +	Kernel modules: ssb
        +05:00.0 VGA compatible controller [0300]: nVidia Corporation G86 [GeForce 8400M GS] [10de:0427] (rev a1)
        +	Kernel modules: nouveau, nvidiafb
        +
        +
        Note :Les lignes en gras et placée entre crochet (dans la liste + ci-dessus) sont les lignes que vous recherchez. Le premier packet de numéros (avant la virgule) sont le + VendorID, le second sont le ProductID. Dans l’exemple ci dessus, le code VendorID:ProductID de la + carte wifi ( vous pouvez la remarquez grace aux mots "Network Controller" et "WLAN" ) est 14e4:4311
        +
        Si le périphérique est un périphérique USB : (exemple : une clé usb wifi)
        +
        Ouvrez un terminal et tapez:
        +
        sudo lsusb
        +
        +
        Vous devriez obtenir une liste de matériel similaire à celle ci
        +
        +Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
        +Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
        +Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
        +
        +
        Note : Les lignes en gras (dans la liste du dessus) sont les + lignes que vous recherchez. Les premiers nombres (avant les deux points) sont le VendorID, les autres sont + le ProductID. Dans l'exemple ci-dessus : le code VendorID:ProductID de la carte usb wifi externe + (Remarquez la ligne Wireless) est 0846:4260
        +
        Comment savoir si votre carte graphique fonctionne
        +
        Installer rss-glx en utilisant le gestionnaire de + paquet de votre distribution ou en le compilant depuis les sources et essayez certains écran de veille (par + exemple Skyrocket ou Solarwinds). Essayer de faire fonctionner le fond d'écran, et/ou le faire + fonctionner fluidement.
        +
        Comment savoir si l'accélération 3D fonctionne
        +
        Essayer d’activer compiz
        +
        Comment decouvrir le nom de votre carte wifi
        +
        Ouvrez un terminal et taper la commande suivante:
        +
        sudo lspci
        +
        +
        Regardez ensuite les lignes Wireless ou Network controller. Vous pouvez + aussi essayer l'une de ses commandes:
        +
        lspci | grep "Wireless"
        +
        +
        ou
        +
        lspci | grep "Network"
        +
        +
        Comment connaitre le pilote d’imprimante que vous utilisez
        +
        Si vous utilisez cups
        +
        Ouvrez un terminal et taper ceci:
        +
        dpkg-query -W -f '${Version}\n' cups
        +
        +
        How to discover the architecture of your notebook
        +
        Open a terminal and type the following command:
        +
        cat /proc/cpuinfo | grep "lm"
        +
        +
        If you get a message like this:
        +
        flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts
        acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64
        monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm
        +
        +
        then you machine is x86-64/amd64 capable and you could choose a x86-64/amd64 distro to run on it
        +
        + +

         

        + +

        Liste de dristributions GNU/Linux entièrement libre

        + +

        Following are the GNU/Linux distributions we know of which have a firm policy + commitment to only include and only propose free software. They reject non-free applications, non-free programming + platforms, non-free drivers, or non-free firmware “blobs”. If by mistake they do include any, they remove it. To + learn more about what makes for a free GNU/Linux + distribution, see GNU Guidelines for + Free System Distributions.

        + +

        Toutes les distributions qui suivent sont installables sur un disque dur d'ordinateur et la plupart peuvent être + exécutées à partir d'un CD.

        + +

        (Dans l'ordre alphabétique)

        + + + +
        + diff --git a/Application/Views/Desktop/Help/index_it.php b/Application/Views/Desktop/Help/index_it.php new file mode 100644 index 0000000..c3c968e --- /dev/null +++ b/Application/Views/Desktop/Help/index_it.php @@ -0,0 +1,436 @@ + + +. +?> + +
        + +
        + ">Home » +
        + + + +

        Sintassi della Wiki

        + +

        Lista dei tag della wiki di +

        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        nometagrisultatodescrizione
        grassetto[b]text[/b]texttesto in grassetto
        corsivo[i]text[/i]texttesto corsivo
        cancellare[del]text[/del]texttesto cancellato
        sottolineare[u]text[/u]texttesto sottolineato
        head 1[h1]text[/h1] +
        + text
        +
        head 1
        head 2[h2]text[/h2] +
        + text
        +
        head 2
        head 3[h3]text[/h3] +
        + text
        +
        head 3
        paragrafo…[p]nuovo paragrafo[/p]

        nuovo paragrafo

        +
        crea un nuovo paragrafo
        Lista
          +
        • [list]
        • +
          • +
          • [*]primo elemento[/*]
          • +
          • [*]secondo elemento[/*]
          • +
          +
        • +
        • [/list]
        • +
        +
          +
        • primo elemento
        • +
        • secondo elemento
        • +
        +
        crea un elenco di item
        Lista numerata
          +
        • [enum]
        • +
          • +
          • [*]primo elemento[/*]
          • +
          • [*]secondo elemento[/*]
          • +
          +
        • +
        • [/enum]
        • +
        +
          +
        1. primo elemento
        2. +
        3. secondo elemento
        4. +
        +
        crea un elenco numerato di item
        item di un elenco[*]elemento[/*]
          +
        • elemento
        • +
        +
        aggiungi un item a un elenco
        codice[code]some code[/code]
        some code
        +
        aggiungi del codice
        link semplice[a]url[/a]urlcrea un link semplice
        link con testo[a]url|text[/a]textcrea un link con testo
        notebook[notebook]id[/notebook]idcrea un link al notebook con l'identificatore corrispondente a id (l'identificatore di ogni modello di + dispositivo si trova nella pagina del dispositivo stesso, accanto al nome del modello
        wifi[wifi]id[/wifi]idcrea un link alla wifi con l'identificatore corrispondente a id (l'identificatore di ogni modello di + dispositivo si trova nella pagina del dispositivo stesso, accanto al nome del modello)
        scheda video[videocard]id[/videocard]idcrea un link alla scheda video con l'identificatore corrispondente a id (l'identificatore di ogni modello di + dispositivo si trova nella pagina del dispositivo stesso, accanto al nome del modello)
        + +

         

        + +

        Classi di compatibilità

        + +

        Notebooks

        +
        +
        Classe A (Platino)
        +
        Tutti i dispositivi del portatile funzionano ad alte prestazioni.
        +
        Per esempio: funzionano tutti i dispositivi, l'accelerazione 3D è supportata.
        +
        Classe B (Oro)
        +
        Tutti i dispositivi del portatile funzionano ma non a piene prestazioni.
        +
        Esempio tipico: funzionano tutti i dispositivi, ma l'accelerazione 3D non è supportata.
        +
        Classe C (Argento)
        +
        Uno dei dispositivi principali non è supportato.
        +
        Per esempio: la scheda wifi interna non funziona e serve una wifi esterna USB.
        +
        Classe D (Bronzo)
        +
        Più di uno dei dispositivi principali non è supportato.
        +
        Classe E (Spazzatura)
        +
        Il portatile non funziona con software libero.
        +
        + +

        Stampanti

        +
        +
        Classe A (Piena)
        +
        Sono supportate tutte le funzioni e le caratteristiche della stampante.
        +
        Classe B (Parziale)
        +
        La funzione di stampa è supportata, ma a velocità limitata o a scarsa qualità. Su alcune stampanti + multifunzione possono non essere supportate le funzioni di scanner e/o di fax.
        +
        Classe C (Nessuna)
        +
        La stampante non funziona con software libero.
        +
        + +

        Scanner

        +
        +
        Classe A (Piena)
        +
        Sono supportate tutte le funzioni e le caratteristiche dello scanner.
        +
        Classe B (Parziale)
        +
        La funzione di scannerizzazione è supportata, ma a velocità limitata o a scarsa qualità. Qualche altra + caratteristica può non essere supportata.
        +
        Classe C (Nessuna)
        +
        Lo scanner non funziona con software libero.
        +
        + +

        + +

        Scopri il tuo hardware

        + (Grazie lluvia) + +

        Per sapere le caratteristiche e i dettagli del tuo hardware puoi seguire queste istruzioni:

        +
        +
        Come scoprire il nome del modello del portatile
        +
        Guarda sotto al tuo notebook o al tuo netbook
        +
        Come scoprire il nome del modello del tuo hardware (se non è un portatile)
        +
        Se il dispositivo è integrato (ad esempio: una scheda video)
        +
        Apri un terminale e digita il seguente comando:
        +
        lspci
        +
        +
        o
        +
        lspci > FILENAME          # Puoi anche scrivere l'output del comandi lspci su un file digitando
        +
        + +
        Otterrai la lista di tutti i tuoi dispositivi PCI, simile a quella scritta sotto
        +
        +00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
        +03:00.0 Network controller: Broadcom Corporation BCM4311 802.11b/g WLAN (rev 02)
        +05:00.0 VGA compatible controller: nVidia Corporation G86 [GeForce 8400M GS] (rev a1)
        +			
        +
        +
        Il nome di ogni dispositivo è scritto dopo i due punti (guarda il testo in grassetto nella + lista superiore)
        +
        Se è un dispositivo USB (ad esempio: una stampante USB)
        +
        Apri un terminale e digita il seguente comando:
        +
        lsusb -v
        +
        +
        o
        +
        lsusb -v > FILENAME          # l'output del comandi un file digitando
        +
        + +
        Otterrai la lista di tutti i dispositivi USB, simile a quella scritta sotto
        +
        +Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
        +Device Descriptor:
        +	bLength 18
        +	bDescriptorType 1
        +	bcdUSB 2.00
        +	bDeviceClass 0 (Defined at Interface level)
        +	bDeviceSubClass 0
        +	bDeviceProtocol 0
        +	bMaxPacketSize0 64
        +	idVendor 0x0846 NetGear, Inc.
        +	idProduct 0x4260 WG111v3 54 Mbps Wireless [realtek RTL8187B]
        +	bcdDevice 2.00
        +	iManufacturer 1
        +	iProduct 2
        +	iSerial 3
        +	...
        +	...
        +
        +Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
        +Device Descriptor:
        +	bLength 18
        +	bDescriptorType 1
        +	bcdUSB 1.10
        +	bDeviceClass 255 Vendor Specific Class
        +	bDeviceSubClass 255 Vendor Specific Subclass
        +	bDeviceProtocol 255 Vendor Specific Protocol
        +	bMaxPacketSize0 8
        +	idVendor 0x08ff AuthenTec, Inc.
        +	idProduct 0x2580 AES2501 Fingerprint Sensor
        +	bcdDevice 6.23
        +	iManufacturer 0
        +	iProduct 1 Fingerprint Sensor
        +	iSerial 0
        +	bNumConfigurations 1
        +	...
        +	...
        +			
        +
        +
        Il nome di ogni dispositivo è scritto alla riga che inizia con la stringa "idProduct" (guarda il testo in + grassetto nella lista superiore)
        +
        Come scoprire che versione del kernel libre stai usando
        +
        Apri un terminale e digita questo comando
        +
        uname -r
        +
        +
        Come scoprire il nome della tua scheda video
        +
        Apri un terminale e digita questo comando:
        +
        sudo lspci
        +
        +
        Poi cerca la riga contenente la stringa VGA o Display controller. Puoi anche provare con uno di + questi comandi:
        +
        lspci | grep "Display controller"
        +
        +
        o
        +
        lspci | grep "VGA"
        +
        +
        Come scoprire il VendorID e il ProductID del tuo dispositivo (VendorID:ProductID + code)
        +
        (Grazie Michał Masłowski + e Julius22) +
        +
        Se il dispositivo è integrato (per esempio una scheda video)
        +
        Apri un terminale e digita il seguente comando:
        +
        sudo lspci -nnk
        +
        +
        Dovresti ottenere una lista di hardware simile a quella scritta qui sotto
        +
        +03:00.0 Network controller [0280]: Broadcom Corporation BCM4311 802.11b/g WLAN [14e4:4311] (rev 02)
        +	Kernel driver in use: b43-pci-bridge
        +	Kernel modules: ssb
        +05:00.0 VGA compatible controller [0300]: nVidia Corporation G86 [GeForce 8400M GS] [10de:0427] (rev a1)
        +	Kernel modules: nouveau, nvidiafb
        +
        Note: Le stringhe in grassetto e tra parentesi quadre (nella + lista qui sopra) sono il codice che stai cercando. Il primo gruppo di cifre (prima dei due punti) è il + VendorID, il secondo gruppo è il ProductID. Nell'esempio qui sopra: il codice VendorID:ProductID + della scheda wifi (nota le stringhe "Network controller" e "WLAN") è 14e4:4311 mentre il codice + VendorID:ProductID della scheda video (nota la stringa "VGA") è 10de:0427
        +
        Se si tratta di un dispositivo USB (per esempio una wifi esterna USB)
        +
        Apri un terminale e digita questo comando:
        +
        sudo lsusb
        +
        +
        Dovresti ottenere una lista di hardware simile a quella scritta qui sotto
        +
        +Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
        +Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
        +Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
        +
        +
        Note: Le stringhe in grassetto (nella lista qui sopra) sono il + codice che stai cercando. Il primo gruppo di cifre (prima dei due punti) è il VendorID, il secondo gruppo + è il ProductID. Nell'esempio qui sopra: il codice VendorID:ProductID della wifi esterna USB (nota la + stringa "Wireless") è 0846:4260
        +
        Come scoprire se funziona la scheda video
        +
        Installa rss-glx tramite il gestore di pacchetti + della tua distribuzione o compilando dai sorgenti e prova degli screensaver (per esempio Skyrocket o + Solarwinds). Controlla se parte lo screensaver (e/o se si vede "fluido")
        +
        Come scoprire se funziona l'accelerazione 3D
        +
        Prova ad attivare compiz
        +
        Come scoprire il nome della tua scheda wifi
        +
        Apri un terminale e digita questo comando:
        +
        sudo lspci
        +
        +
        Poi cerca la riga contenente la stringa Wireless o Network controller. + Puoi anche provare uno dei seguenti comandi:
        +
        lspci | grep "Wireless"
        +
        +
        o
        +
        lspci | grep "Network"
        +
        +
        Come scoprire che driver per la stampante stai usando
        +
        Se stai usando cups
        +
        Apri un terminale e digita il seguente comando:
        +
        dpkg-query -W -f '${Version}\n' cups
        +
        +
        Come scoprire l'architettura del tuo portatile:
        +
        Apri un terminale e digita il seguente comando:
        +
        cat /proc/cpuinfo | grep "lm"
        +
        +
        Se ottieni un messaggio come il seguente:
        +
        flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts
        acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64
        monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm
        +
        +
        allora il tuo portatile è x86-64/amd64 e puoi usare una distribuzione x86-64/amd64
        +
        + +

         

        + +

        Lista di distribuzioni GNU/Linux completamente libere

        + + + +

        Le seguenti sono le distribuzioni GNU/Linux a noi note + che hanno una rigorosa politica di inclusione e indicazione di solo software libero. Queste distribuzioni escludono + applicazioni, piattaforme di programmazione, driver e firmware ("blob") che non siano liberi, e rimuovono quelli + inclusi per errore. Per saperne di più su cosa rende libera + una distribuzione GNU/Linux, si vedano le GNU linee guida per le distribuzioni + libere.

        + +

        Tutte le distribuzioni che seguono sono installabili sul disco di un computer e la maggior parte può essere + eseguita da un supporto (CD, memoria USB) senza che nulla debba essere installato sul computer.

        + +

        In ordine alfabetico

        + + +
        + diff --git a/Application/Views/Desktop/History/viewall.php b/Application/Views/Desktop/History/viewall.php new file mode 100644 index 0000000..9dc27c6 --- /dev/null +++ b/Application/Views/Desktop/History/viewall.php @@ -0,0 +1,40 @@ + + +. +?> + + + +
        +
        this has been by getUser($row['history']['created_by']));?> at with the following motivation: +
        +
        +
        + + + +
        + there are no details.. +
        + \ No newline at end of file diff --git a/Application/Views/Desktop/Home/left.php b/Application/Views/Desktop/Home/left.php new file mode 100644 index 0000000..0f6ce30 --- /dev/null +++ b/Application/Views/Desktop/Home/left.php @@ -0,0 +1,85 @@ + + +. +?> + +
        + +
        + Home +
        + + + +
        +
        + Objectives: +
        +
        + The project aims at the construction of a hardware database in order to identify what devices work with a fully free operating system. The website is structured like a wiki in which all the users can modify or insert new contents. The h-node project is developed in collaboration and as an activity of the FSF. +
        + +
        + Contribute: +
        +
        + You can contribute by creating an account at and editing its user-generated contents. All your modification will be saved in the history of the product you are editing/adding. Each revision (the current one or the old ones) will be marked by the name of the user who created it.
        You can also contribute by suggesting new hardware that should be added to the database or features that should be implemented. +
        + +
        + Free software: +
        +
        + + + In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: + +

        1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

        + +

        2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

        + +

        h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

        +
        + +
        + License: +
        +
        + Any text submitted by you will be put in the Public Domain (see the CC0 page for detailed information). Anyone is free to copy, modify, publish, use, sell, or distribute the text you have submitted to h-node.org, for any purpose, commercial or non-commercial, and by any means. +
        + +
        + Other resources on the net: +
        +
        +

        Here is a list of other archives collecting information about hardware working with free software:

        + +
        + +
        + About the website: +
        +
        + The has to be considered in beta version. It is constantly growing and many features have not been implemented yet (for example new hardware devices have to be inserted in the database). Some problems may occur: if you find out a bug please add an issue ">here with the topic maybe a bug. +
        +
        +
        diff --git a/Application/Views/Desktop/Home/left_de.php b/Application/Views/Desktop/Home/left_de.php new file mode 100644 index 0000000..7317124 --- /dev/null +++ b/Application/Views/Desktop/Home/left_de.php @@ -0,0 +1,86 @@ + + +. +?> + +
        + +
        + Home +
        + + + +
        +
        + Ziele: +
        +
        + Mit dem Projekt soll eine Hardwaredatenbank mit Peripheriegeräten aufgebaut werdem, die mit einem vollständig freien Betriebssystem arbeiten. Die Webseite von h-node.org ist wie ein Wiki aufgebaut, dessen Inhalte von allen Benutzer geändert und ergänzt werden können. Das Projekt h-node wird in Zusammenarbeit und als eine Aktivität der FSF entwickelt. +
        + +
        + Mithelfen: +
        +
        + Sie können nach Ihrer Anmeldung bei h-node.org dazu beitragen und die benutzergenerierten Inhalte bearbeiten. Alle Änderungen die Sie bearbeiten oder hinzufügen, werden im Produktverlauf protokolliert. Jede Version (die aktuelle oder die alte) wird der/dem BenutzerIn zugeordnet, die/der sie erstellte.
        + Neue Hardware, die in die Datenbank aufgenommen, oder neue Funktionen, die hinzugefügt werden sollten, können Sie ebenfalls vorschlagen. +
        + +
        + Freie Software: +
        +
        + + + In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: + +

        1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

        + +

        2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

        + +

        h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

        +
        + +
        + Lizenz: +
        +
        + Jeder von Ihnen übermittelte Text wird in die Gemeinfreiheit („Public Domain“) entlassen (siehe CC0 1.0 Universell (CC0 1.0) für detaillierte Informationen). Jede Person darf das Werk/den Inhalt, den Sie an h-node.org übermittelt haben, kopieren, verändern, verbreiten und aufführen, sogar zu kommerziellen Zwecken, ohne um weitere Erlaubnis bitten zu müssen und auf jedem Medium. +
        + +
        + Weitere Ressourcen im Internet: +
        +
        +

        Weitere Archive mit gesammelten Informationen über Hardware, die mit Freie Software arbeitet:

        + +
        + +
        + Über h-node.org: +
        +
        + h-node muss als im Beta-Stadium betrachtet werden. Es wird ständig ergänzt haben und viele Funktionen wurden noch nicht implementiert (z. B. müssen neue Hardware-Geräte in die Datenbank eingepflegt werden). Es können Probleme auftreten: Wenn Sie einen Fehler finden, melden Sie diesen bitte im ">Web-Log mit dem Thema evtl. ein Fehler. +
        +
        +
        diff --git a/Application/Views/Desktop/Home/left_es.php b/Application/Views/Desktop/Home/left_es.php new file mode 100644 index 0000000..882a7b1 --- /dev/null +++ b/Application/Views/Desktop/Home/left_es.php @@ -0,0 +1,85 @@ + + +. +?> + +
        + +
        + Home +
        + + + +
        +
        + Objetivos: +
        +
        + El proyecto tiene como meta la construcción de una base de datos de todo el hardware de manera que se pueda identificar que dispositivos funcionan con un sistema operativo completamente libre. El sitio esta estructurado como un wiki, en el cual todos los usuarios pueden modificar o integrar nuevos contenidos. El proyecto h-node es desarrollado en colaboración y como una actividad de la FSF. +
        + +
        + Contribuir: +
        +
        + Puede contribuir creando una cuenta en y editar los contenidos generados. Todas sus modificaciones serás guardadas en el historial del producto que edite/agregue. Cada revisión (actual o previa) será marcada con el nombre del usuario que la creo.
        También puede contribuir al sugerir nuevo hardware que deba ser agregado a la base de datos o características que deberían ser implementadas. +
        + +
        + Software Libre: +
        +
        + + + In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: + +

        1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

        + +

        2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

        + +

        h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

        +
        + +
        + Licencias: +
        +
        + Cualquier texto agregado por usted sera colocado en Dominio Publico (vea la página CC0 para información detallada). Cualquiera es libre de copiar, modificar, publicar, usar, vender o distribuir el texto que ha integrado a h-node.org, para cualquier propósito, comercial o no comercial, y por cualquier método. +
        + +
        + Otros recursos en la red: +
        +
        +

        Aquí una lista de otras actividades recolectando información acerca de hardware funcionando con software libre:

        + +
        + +
        + Acerca del sitio : +
        +
        + El sitio debe ser considerado una versión beta. Esta en constantemente crecimiento y varias características no han sido implementadas aun (por ejemplo, nuevos dispositivos de hardware tienen que ser incluidos en la base de datos). Algunos problemas pueden ocurrir: Si encuentra un error por favor agregue una incidencia ">aquí bajo el tema maybe a bug. +
        +
        +
        diff --git a/Application/Views/Desktop/Home/left_fr.php b/Application/Views/Desktop/Home/left_fr.php new file mode 100644 index 0000000..2056c75 --- /dev/null +++ b/Application/Views/Desktop/Home/left_fr.php @@ -0,0 +1,88 @@ + + +. +?> + +
        + +
        + Home +
        + + + +
        +
        + Objectifs: +
        + +
        + Le but du projet h-node est de créer une base de données de matériel afin d'identifier les dispositifs qui fonctionne avec un système d’exploitation entièrement libre. Le site h-node est structuré comme un wiki, dont tout les utilisateurs peuvent modifier ou insérer des contenus. Le projet h-node est dévellopé en collaboration et en tant qu'activitée de la FSF. +
        + +
        + Contribution: +
        +
        + Vous pouvez contribuer en créant un compte sur h-node et modifier le contenus créé par les utilisateurs. Toutes vos modifications seront enregistrées dans l’historique de l’élément que vous modifiez ou ajouter. Toutes versions (l’actuelle ou les précédentes) seront marquées au nom de l’utilisateur qui les a crées.
        Vous pouvez aussi contribuer en suggérant un autre type de matériel qui devrais être ajouté à la base de données ou une nouvelle fonctionnalitée qui devrais être implémentée +
        + +
        + Logiciel libre: +
        +
        + + + In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: + +

        1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

        + +

        2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

        + +

        h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

        + +
        + +
        + License: +
        + +
        + Tout les textes que vous publierez sur le site seront dans le Domain public (Consultez la page CC0 pour plus d'informations). Tout un chacun est autorisé à copier, modifier, publier, utiliser, vendre ou distribuer le texte que vous avez envoyé sur h-node.org, pour quelque utilisation que ce soit et par tout les moyens. +
        + +
        + Ressource supplémentaire sur Internet: +
        +
        +

        Voici une liste d'autres archives qui collecte des informations à propos du matériel fonctionnant avec du logiciel libre:

        + +
        + +
        + A propos du site : +
        +
        + Le site doit être considéré comme en version beta, il s’aggrandit constamment et beaucoup de fonctionnalitée n’ont pas encore été implémentée ( par exemple, de nouveau type d’appareil doivent être ajouter dans la base de données) . Des problèmes peuvent arriver, si vous trouver un bug, merci de remplir un ">ticket bug (maybe a bug). +
        +
        +
        diff --git a/Application/Views/Desktop/Home/left_gr.php b/Application/Views/Desktop/Home/left_gr.php new file mode 100644 index 0000000..a0a4279 --- /dev/null +++ b/Application/Views/Desktop/Home/left_gr.php @@ -0,0 +1,87 @@ + + +. +?> + +
        + +
        + Home +
        + + + +
        +
        + Σκοποί: +
        +
        + + Το project έχει ως σκοπό την κατασκευή μίας βάσης δεδομένων υλικού, έτσι ώστε να μπορεί να εντοπισθεί ποιες συσκευές δουλεύουν με ένα πλήρως ελεύθερο Λειτουργικό Σύστημα. Ο ιστότοπος είναι δομημένος σαν ένα wiki, εντός του οποίου όλοι οι χρήστες μπορούν να τροποποιούν ή να εισαγάγουν νέα περιεχόμενα. Το h-node project αναπτύχθηκε σε συνεργασία με και σαν δραστηριότητα του FSF. +
        + +
        + Συνεισφέρετε: +
        +
        + Μπορείτε να συνεισφέρετε φτιάχνοντας έναν λογαριασμό στο και τροποποιώντας τα περιεχόμενα που δημιούργησαν οι ίδιοι οι χρήστες. Όλες σας οι τροποποιήσεις θα αποθηκεύονται στο ιστορικό του προϊόντος το οποίο επεξεργάζεσθε/εμπλουτίζετε. Κάθε αναθεώρηση (τόσο η τρέχουσα όσο και οι παλιές) θα επισημαίνεται με το όνομα του χρήστη που την δημιούργησε. Μπορείτε, επίσης, να συνεισφέρετε προτείνοντας νέο υλικό που θα έπρεπε να προστεθεί στη βάση δεδομένων, ή εισηγούμενοι χαρακτηριστικά που θα έπρεπε να υλοποιηθούν. +
        + +
        + Ελεύθερο Λογισμικό +
        +
        + + + In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: + +

        1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

        + +

        2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

        + +

        h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

        + +
        + +
        + Άδεια: +
        +
        + Οποιοδήποτε κείμενο που υποβάλετε, θα μπαίνει σε Δημόσια Διάθεση/Public Domain (δείτε τη σελίδα CC0 page για πιο λεπτομερείς πληροφορίες). Οποιοσδήποτε είναι ελεύθερος να αντιγράφει, να τροποποιεί, να δημοσιεύει, να χρησιμοποιεί, να πωλεί, ή και να ανδιανέμει το κείμενο που εσείς υποβάλλατε στο h-node.com, για οποιοδήποτε λόγο, εμπορικό ή μη-εμπορικό, και με οποιονδήποτε τρόπο. +
        + +
        + Άλλοι πόροι στο Διαδίκτυο: +
        +
        +

        Ακολουθεί, εδώ, ένας κατάλογος άλλων αρχείων που συγκεντρώνουν πληροφορίες σχετικά με υλικό που δουλεύει με ελεύθερο λογισμικό:

        + +
        + +
        + Σχετικά με τον ιστότοπο : +
        +
        + Το πρέπει να θεωρείται πως βρίκεται σε έκδοση beta. Αναπτύσσεται συνεχώς και πολλά χαρακτηριστικά δεν έχουν ακόμη υλοποιηθεί (π.χ. πρέπει ακόμη να προστεθούν νέες συσκευές υλικού στη βάση δεδομένων). Μπορεί να παρατηρηθούν ορισμένα προβλήματα: αν εντοπίσετε ένα σφάλμα (bug), παρακαλώ προσθέστε μία αναφορά προβλήματος ">εδώ με θέμα ίσως να πρόκειται για ένα bug. +
        +
        +
        diff --git a/Application/Views/Desktop/Home/left_it.php b/Application/Views/Desktop/Home/left_it.php new file mode 100644 index 0000000..561c3a1 --- /dev/null +++ b/Application/Views/Desktop/Home/left_it.php @@ -0,0 +1,88 @@ + + +. +?> + +
        + +
        + Home +
        + + + +
        +
        + Obiettivi: +
        + +
        + Il progetto h-node mira alla costruzione di un database di hardware allo scopo di identificare quali dispositivi funzionino con un sistema operativo completamente libero. Il sito h-node.org è strutturato come una wiki in cui tutti gli utenti possono inserire nuovi contenuti o modificare i contenuti già presenti. Il progetto h-node è sviluppato in collaborazione e come attività della FSF. +
        + +
        + Contribuire: +
        +
        + Puoi contribuire creandoti un account su h-node.org e modificando i suoi contenuti generati dagli utenti. Tutte le tue modifiche saranno salvate nella storia del prodotto che stai modificando/aggiungendo. Ogni revisione (quella attuale o le precedenti) sarà contrassegnata col nome dell'utente che l'ha creata.
        Puoi inoltre contribuire suggerendo del nuovo hardware da aggiungere al database o delle caratteristiche da implementare. +
        + +
        + Software libero: +
        +
        + + + Per poter aggiungere un dispositivo nel database di h-node, devi verificare che funzioni usando solo software libero. Per questo scopo, puoi unicamente utilizzare: + +

        1) Una delle distribuzioni GNU/Linux elencate nella lista delle distribuzioni approvate dalla FSF

        + +

        2) Debian GNU/Linux, con solo la zona archivio main attivata. Le aree "contrib" e "non-free" non devono essere abilitate durante il test dell'hardware. Controlla che sia così lanciando apt-cache policy. La sola zona archivio dei pacchetti deve essere main.

        + +

        h-node elenca solo hardware che funziona con driver liberi e senza firmware non libero. Le altre distribuzioni GNU/Linux (oppure Debian con contrib, non-free, o archivi di terze parti abilitati) includono file di firmware non liberi, quindi non possono essere utilizzate per i test.

        + +
        + +
        + Licenza: +
        + +
        + Qualsiasi testo da te inserito diventerà di Pubblico Dominio (visita la pagina CC0 per informazioni dettagliate). Chiunque è libero di copiare, modificare, pubblicare, usare, vendere o distribuire il testo che hai inserito su h-node.org, per qualsiasi fine, commerciale o non commerciale, e con ogni mezzo. +
        + +
        + Altre risorse in rete: +
        +
        +

        Di seguito una lista di altri archivi contenenti informazioni sull' hardware funzionante con software libero:

        + +
        + +
        + A proposito del sito : +
        +
        + deve essere considerato una versione beta. E' in costante sviluppo e molte caratteristiche non sono ancora state implementate (per esempio nuovi dispositivi hardware devono essere aggiunti al database). Potrebbero esserci dei problemi: se scopri un bug per favore invia una segnalazione ">qui con l'argomento maybe a bug. +
        +
        +
        diff --git a/Application/Views/Desktop/Issues/view.php b/Application/Views/Desktop/Issues/view.php new file mode 100644 index 0000000..51047b8 --- /dev/null +++ b/Application/Views/Desktop/Issues/view.php @@ -0,0 +1,249 @@ + + +. +?> + + + +
        + + + + + + + + +
        + + + + "> + + + + + "> + + + + + + "> + + +
        + + "> + + + + +
        +
        issue
        + ">view details +
        +
        + +
        + + +
        + +
        + +
        + +
        + submitted by getUser($row['issues']['created_by']));?>, +
        + +
        + + + + + + + + + + + + + +
        :
        :
        :
        +
        + +
        + : +
        + +
        + +
        + + + +
        + Response message (from h-node.com): +
        + +
        + +
        + + + + +
        + + +
        +
        + : +
        + + + + + +
        +
        +
        + getUser($row['messages']['created_by']);?>: +
        + + ">hide + + +
        + +
        + +
        +
        + submitted by getUser($row['messages']['created_by']));?>, +
        + + + +
        +
        message
        + ">view details +
        +
        + + +
        + + + + + +
        + + + ">make visible + + +
        +
        message
        + + ">view details + +
        +
        +
        + submitted by getUser($row['messages']['created_by']));?>, +
        +
        + +
        +
        +
        +
        +
        +
        + + + + + + + .. + + +
        + + + + +
        +
        + +
        + + + + + +
        + : +
        +
        +
        + +
        +
        + + + +
        + + + + + + + + + +
        + + +
        + diff --git a/Application/Views/Desktop/Issues/viewall.php b/Application/Views/Desktop/Issues/viewall.php new file mode 100644 index 0000000..2454e6f --- /dev/null +++ b/Application/Views/Desktop/Issues/viewall.php @@ -0,0 +1,122 @@ + + +. +?> + + + +
        + +
        + ">Home » +
        + +
        +
        + : +
        + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        viewStatus;?>"> ()getUser($row['issues']['created_by']));?> + +
        +
        + +
        + : +
        + + + +
        +
        + +
        + + + + + +
        + : +
        +
        +
        + +
        +
        + + + +
        + + + + + + + +
        diff --git a/Application/Views/Desktop/Meet/contributions.php b/Application/Views/Desktop/Meet/contributions.php new file mode 100644 index 0000000..43f56dd --- /dev/null +++ b/Application/Views/Desktop/Meet/contributions.php @@ -0,0 +1,79 @@ + + +. +?> + + \ No newline at end of file diff --git a/Application/Views/Desktop/Meet/hardware.php b/Application/Views/Desktop/Meet/hardware.php new file mode 100644 index 0000000..b0fdfa1 --- /dev/null +++ b/Application/Views/Desktop/Meet/hardware.php @@ -0,0 +1,30 @@ + + +. +?> + + + "> \ No newline at end of file diff --git a/Application/Views/Desktop/Meet/issues.php b/Application/Views/Desktop/Meet/issues.php new file mode 100644 index 0000000..2e88d5f --- /dev/null +++ b/Application/Views/Desktop/Meet/issues.php @@ -0,0 +1,31 @@ + + +. +?> + + + + baseUrl."/issues/view/$lang/$i_id'>".$i_title." at ".smartDate($i_date);?> \ No newline at end of file diff --git a/Application/Views/Desktop/Meet/list_template.php b/Application/Views/Desktop/Meet/list_template.php new file mode 100644 index 0000000..2c2f6d3 --- /dev/null +++ b/Application/Views/Desktop/Meet/list_template.php @@ -0,0 +1,50 @@ + + +. +?> + +
        + + + +
        + +
        + +
        + +
        + +
        + action.".php");?> +
        + +
        + +
        + + action,'hardware') !== 0) {?> +
        + : +
        + +
        \ No newline at end of file diff --git a/Application/Views/Desktop/Meet/meet.php b/Application/Views/Desktop/Meet/meet.php new file mode 100644 index 0000000..f0e31b3 --- /dev/null +++ b/Application/Views/Desktop/Meet/meet.php @@ -0,0 +1,114 @@ + + +. +?> + +
        + +
        + ">Home » +
        + + +
        + + This user has been blocked + + ">unblock the user + + + + ">block the user + + + + +
        +
        user
        + ">view details +
        +
        + +
        + + + + + +
        + +
        +
        Username:
        +
        + + +
        +
        :
        +
        + + + +
        +
        :
        +
        + + + +
        +
        :
        +
        + + + +
        +
        :
        +
        + + + +
        +
        :
        +
        + + + +
        +
        :
        +
        + + + +
        +
        :
        +
        + + + +
        +
        :
        +
        + + +
        + + +
        \ No newline at end of file diff --git a/Application/Views/Desktop/Meet/messages.php b/Application/Views/Desktop/Meet/messages.php new file mode 100644 index 0000000..f85686b --- /dev/null +++ b/Application/Views/Desktop/Meet/messages.php @@ -0,0 +1,31 @@ + + +. +?> + + + + baseUrl."/issues/view/$lang/$i_id#message-$m_id'>".smartDate($m_date)."";?> submitted to the issue \ No newline at end of file diff --git a/Application/Views/Desktop/Meet/talk.php b/Application/Views/Desktop/Meet/talk.php new file mode 100644 index 0000000..9ddc5b3 --- /dev/null +++ b/Application/Views/Desktop/Meet/talk.php @@ -0,0 +1,32 @@ + + +. +?> + + + + baseUrl."/$controller/talk/$lang/$t_id#talk-$t_id_talk'>".$t_title." at ".smartDate($t_date);?> \ No newline at end of file diff --git a/Application/Views/Desktop/Meet/wiki.php b/Application/Views/Desktop/Meet/wiki.php new file mode 100644 index 0000000..1ec339e --- /dev/null +++ b/Application/Views/Desktop/Meet/wiki.php @@ -0,0 +1,29 @@ + + +. +?> + + + "> \ No newline at end of file diff --git a/Application/Views/Desktop/Meet/wikitalk.php b/Application/Views/Desktop/Meet/wikitalk.php new file mode 100644 index 0000000..351960d --- /dev/null +++ b/Application/Views/Desktop/Meet/wikitalk.php @@ -0,0 +1,31 @@ + + +. +?> + + + + baseUrl."/wiki/talk/$lang/$t_id#wiki-talk-$t_id_talk'>".$t_title." at ".smartDate($t_date);?> \ No newline at end of file diff --git a/Application/Views/Desktop/My/email.php b/Application/Views/Desktop/My/email.php new file mode 100644 index 0000000..3c9a070 --- /dev/null +++ b/Application/Views/Desktop/My/email.php @@ -0,0 +1,33 @@ + + +. +?> + +
        + +
        + ">Home » ">panel » e-mail +
        + + + + + +
        \ No newline at end of file diff --git a/Application/Views/Desktop/My/goodbye.php b/Application/Views/Desktop/My/goodbye.php new file mode 100644 index 0000000..2f83695 --- /dev/null +++ b/Application/Views/Desktop/My/goodbye.php @@ -0,0 +1,63 @@ + + +. +?> + + + +
        + +
        + ">Home » ">panel » delete account +
        + + + +
        + +
        viewStatus;?>" method="POST"> + I want to close my account: +
        + +
        + +
        \ No newline at end of file diff --git a/Application/Views/Desktop/My/panel.php b/Application/Views/Desktop/My/panel.php new file mode 100644 index 0000000..67fbe1d --- /dev/null +++ b/Application/Views/Desktop/My/panel.php @@ -0,0 +1,64 @@ + + +. +?> + +
        + +
        + ">Home » +
        + + +
        + Your account has been blocked by an administrator of the website. You can neither insert/modify devices nor submit new issues or messages until some other moderator un-block your account. +
        + + + +
        +
        +
          +
        • +
        • +
        • ( "> )
        • +
        +
        + + + +
        +
        +
          +
        • +
        • +
        +
        + + +
          +
        • +
        • +
        • +
        • +
        • +
        + +
        \ No newline at end of file diff --git a/Application/Views/Desktop/My/password.php b/Application/Views/Desktop/My/password.php new file mode 100644 index 0000000..50588ac --- /dev/null +++ b/Application/Views/Desktop/My/password.php @@ -0,0 +1,33 @@ + + +. +?> + +
        + +
        + ">Home » ">panel » password +
        + + + + + +
        \ No newline at end of file diff --git a/Application/Views/Desktop/My/profile.php b/Application/Views/Desktop/My/profile.php new file mode 100644 index 0000000..1826337 --- /dev/null +++ b/Application/Views/Desktop/My/profile.php @@ -0,0 +1,33 @@ + + +. +?> + +
        + +
        + ">Home » ">panel » profile +
        + + + + + +
        \ No newline at end of file diff --git a/Application/Views/Desktop/News/index.php b/Application/Views/Desktop/News/index.php new file mode 100644 index 0000000..f46aaae --- /dev/null +++ b/Application/Views/Desktop/News/index.php @@ -0,0 +1,51 @@ + + +. +?> + +
        + +
        + ">Home » +
        + +
        + +
        +
        + +
        +
        + +
        +
        + +
        +
        + +
        + + 10) { ?> +
        + +
        + + +
        diff --git a/Application/Views/Desktop/Notebooks/.svn/entries b/Application/Views/Desktop/Notebooks/.svn/entries new file mode 100644 index 0000000..334d6af --- /dev/null +++ b/Application/Views/Desktop/Notebooks/.svn/entries @@ -0,0 +1,96 @@ +10 + +dir +388 +svn+ssh://tonicucoz@svn.savannah.nongnu.org/h-source/trunk/h-source/Application/Views/Desktop/Notebooks +svn+ssh://tonicucoz@svn.savannah.nongnu.org/h-source + + + +2012-10-16T05:40:07.156193Z +388 +tonicucoz + + + + + + + + + + + + + + +cdff7dbb-30cd-47f4-9d9c-15594cd9e55c + +page.php +file +389 + + + +2012-10-16T13:45:45.142595Z +ac86850a999353cbf3fdd926063fe271 +2012-10-16T13:51:26.763024Z +389 +tonicucoz + + + + + + + + + + + + + + + + + + + + + +6813 + +form.php +file +389 + + + +2012-10-16T13:46:11.783840Z +4d6c57cb69df2c9c7c736471ace8cbe4 +2012-10-16T13:51:26.763024Z +389 +tonicucoz + + + + + + + + + + + + + + + + + + + + + +7117 + diff --git a/Application/Views/Desktop/Notebooks/.svn/text-base/form.php.svn-base b/Application/Views/Desktop/Notebooks/.svn/text-base/form.php.svn-base new file mode 100644 index 0000000..79a9419 --- /dev/null +++ b/Application/Views/Desktop/Notebooks/.svn/text-base/form.php.svn-base @@ -0,0 +1,156 @@ + + +. +?> + + + + + +
        +
        action."/$lang/$token".$this->viewStatus;?>" method="POST"> + +
        + +
        + + + ">Vendor not present? +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + + + +
        + +
        + + + "> +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + + +
        :
        +
        + +
        + + + +
        + + + + + + +
        + * are mandatory");?> +
        + +
        + +
        +
        \ No newline at end of file diff --git a/Application/Views/Desktop/Notebooks/.svn/text-base/page.php.svn-base b/Application/Views/Desktop/Notebooks/.svn/text-base/page.php.svn-base new file mode 100644 index 0000000..09bc80f --- /dev/null +++ b/Application/Views/Desktop/Notebooks/.svn/text-base/page.php.svn-base @@ -0,0 +1,120 @@ + + +. +?> + + + + action,'view') === 0) ? 'hardware' : 'revisions'; + $displayClass = ($isDeleted and $isadmin) ? 'display_none' : null; + ?> + + +
        + + + action,'revision') === 0) { ?> +
        + getLinkToUserFromId($updated_by);?> . controller."/view/$lang/$id_hard/".$name.$this->viewStatus;?>">. +
        + + +
        + : (: ) + action,'view') === 0) { ?> + ask for removal + +
        + +
        +
        (, , , ):
        +
        +
        + +
        +
        :
        +
        +
        + +
        +
        :
        +
        +
        + +
        +
        +
        +
        + +
        +
        +
        (".gtext("see the details inside the description entry").")";?>
        +
        + +
        +
        +
        (".gtext("see the details inside the description entry").")";?>
        +
        + +
        +
        :
        +
        +
        + +
        +
        :
        + +
        + +
        +
        :
        +
        +
        + +
        +
        :
        +
        ",explode(',',$item[$tableName]['kernel']));?>
        +
        + +
        +
        :
        +
        ()
        +
        + +
        +
        :
        +
        ()
        +
        + +
        +
        :
        +
        ()
        +
        + +
        +
        :
        +
        +
        + +
        + + + \ No newline at end of file diff --git a/Application/Views/Desktop/Notebooks/form.php b/Application/Views/Desktop/Notebooks/form.php new file mode 100644 index 0000000..79a9419 --- /dev/null +++ b/Application/Views/Desktop/Notebooks/form.php @@ -0,0 +1,156 @@ + + +. +?> + + + + + +
        +
        action."/$lang/$token".$this->viewStatus;?>" method="POST"> + +
        + +
        + + + ">Vendor not present? +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + + + +
        + +
        + + + "> +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + + +
        :
        +
        + +
        + + + +
        + + + + + + +
        + * are mandatory");?> +
        + +
        + +
        +
        \ No newline at end of file diff --git a/Application/Views/Desktop/Notebooks/page.php b/Application/Views/Desktop/Notebooks/page.php new file mode 100644 index 0000000..09bc80f --- /dev/null +++ b/Application/Views/Desktop/Notebooks/page.php @@ -0,0 +1,120 @@ + + +. +?> + + + + action,'view') === 0) ? 'hardware' : 'revisions'; + $displayClass = ($isDeleted and $isadmin) ? 'display_none' : null; + ?> + + +
        + + + action,'revision') === 0) { ?> +
        + getLinkToUserFromId($updated_by);?> . controller."/view/$lang/$id_hard/".$name.$this->viewStatus;?>">. +
        + + +
        + : (: ) + action,'view') === 0) { ?> + ask for removal + +
        + +
        +
        (, , , ):
        +
        +
        + +
        +
        :
        +
        +
        + +
        +
        :
        +
        +
        + +
        +
        +
        +
        + +
        +
        +
        (".gtext("see the details inside the description entry").")";?>
        +
        + +
        +
        +
        (".gtext("see the details inside the description entry").")";?>
        +
        + +
        +
        :
        +
        +
        + +
        +
        :
        + +
        + +
        +
        :
        +
        +
        + +
        +
        :
        +
        ",explode(',',$item[$tableName]['kernel']));?>
        +
        + +
        +
        :
        +
        ()
        +
        + +
        +
        :
        +
        ()
        +
        + +
        +
        :
        +
        ()
        +
        + +
        +
        :
        +
        +
        + +
        + + + \ No newline at end of file diff --git a/Application/Views/Desktop/Project/index.php b/Application/Views/Desktop/Project/index.php new file mode 100644 index 0000000..cf6fc96 --- /dev/null +++ b/Application/Views/Desktop/Project/index.php @@ -0,0 +1,48 @@ + + +. +?> + +
        + +
        + ">Home » h-project +
        + +
        + +
        + Why: +
        + +
        + The h-node project has been created to help the free software movement by creating an archive of all the hardware that can work with a fully free operating system. +
        + +
        + Who: +
        + +
        + Antonio Gallo (tonicucoz">tonicucoz), h-node.com source code developer, Giulia Fanin (Julia">Julia), designer of the website layout and icons (thanks for your advice and support), Luis Alberto Guzman Garcia (Ark74">Ark74), member of the Spanish translation team (thanks for all of your useful ideas and suggestions), Henri (Hardisk">Hardisk), member of the French translation team, Joerg Kohne (joeko">joeko), member of the German translation team, Benjamin Rochefort (oysterboy">oysterboy), member of the French translation team, Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. +
        Also thanks to all of you who have believed in the project since it was born and to all of you who gave, give and will give their contribution. +
        + +
        + +
        diff --git a/Application/Views/Desktop/Project/index_de.php b/Application/Views/Desktop/Project/index_de.php new file mode 100644 index 0000000..4c996a9 --- /dev/null +++ b/Application/Views/Desktop/Project/index_de.php @@ -0,0 +1,49 @@ + + +. +?> + +
        + +
        + ">Home » h-project +
        + +
        + +
        + Warum: +
        + +
        + Das Projekt „h-node“ wurde ins Leben gerufen, um für die Freie-Software-Bewegung ein umfassendes Hardware-Archiv für vollkommen Freie Betriebssysteme aufzubauen. +
        + +
        + Wer: +
        + +
        + Antonio Gallo (tonicucoz">tonicucoz), h-node.com source code developer, Giulia Fanin (Julia">Julia), Designer des Website-Layout und Symbole (Danke für die Ratschläge und Unterstützung), Luis Alberto Guzman Garcia (Ark74">Ark74), Mitglied des spanischen Übersetzungsteams (Danke für all die Ideen und nützlichen Anregungen), Henri (Hardisk">Hardisk), Mitglied des französischen Übersetzungsteams, Joerg Kohne (joeko">joeko), Mitglied des deutschen Übersetzungsteams, Benjamin Rochefort (oysterboy">oysterboy), Mitglied des französischen Übersetzungsteams, , Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. +
        + Vielen Dank auch an alle, die an das Projekt, seit es ins Leben gerufen wurde, geglaubt haben und an alle, die ihren Beitrag geleistet haben, leisten und leisten werden. +
        + +
        + +
        diff --git a/Application/Views/Desktop/Project/index_es.php b/Application/Views/Desktop/Project/index_es.php new file mode 100644 index 0000000..7e9217c --- /dev/null +++ b/Application/Views/Desktop/Project/index_es.php @@ -0,0 +1,49 @@ + + +. +?> + +
        + +
        + ">Home » h-project +
        + +
        + +
        + Por que: +
        + +
        + El proyecto h-node ha sido creado para ayudar al movimiento de software libre al crear un archivo de todo el hardware que puede funcionar con un sistema operativo completamente libre. +
        + +
        + Quien: +
        + +
        + Antonio Gallo (tonicucoz">tonicucoz), h-node.com source code developer, Giulia Fanin (Julia">Julia), diseñadora del tema e iconos del sitio, (gracias por su consejo y apoyo), Luis Alberto Guzman Garcia (Ark74">Ark74), miembro del equipo de traducción al Español (gracias por sus útiles ideas y sugerencias), Henri (Hardisk">Hardisk), miembro del equipo de traducción al Francés, Joerg Kohne (joeko">joeko), miembro del equipo de traducción al Alemán, Benjamin Rochefort (oysterboy">oysterboy), miembro del equipo de traducción al Francés, , Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. +
        + También gracias a todos aquellos que han creído en el proyecto desde que nació y a todos aquellos que dieron, dan y darán su contribución. +
        + +
        + +
        diff --git a/Application/Views/Desktop/Project/index_fr.php b/Application/Views/Desktop/Project/index_fr.php new file mode 100644 index 0000000..3e0e6ad --- /dev/null +++ b/Application/Views/Desktop/Project/index_fr.php @@ -0,0 +1,48 @@ + + +. +?> + +
        + +
        + ">Home » h-project +
        + +
        + +
        + Pourquoi: +
        + +
        + Le projet h-node a été créer pour aider le mouvement du logiciel libre en créant une archive de matériel fonctionnel avec des systèmes entièrement libres. +
        + +
        + Qui: +
        + +
        + Antonio Gallo (tonicucoz">tonicucoz), h-node.com source code developer, Giulia Fanin (Julia">Julia), graphiste du site et des icones (merci pour tes conseils et ton support), Luis Alberto Guzman Garcia (Ark74">Ark74), membre de l’équipe de traduction espagnole (merci pour toutes vos bonnes idée et suggestion), Henri (Hardisk">Hardisk), membre de l’équipe de traduction française, Joerg Kohne (joeko">joeko), membre de l’équipe de traduction allemande, Benjamin Rochefort (oysterboy">oysterboy), membre de l’équipe de traduction française, Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. +
        Remerciement également à tout ceux qui ont crus à ce projet depuis sa naissance et à tout ceux qui ont donné, donne ou donnerons leurs contributions. +
        + +
        + +
        diff --git a/Application/Views/Desktop/Project/index_gr.php b/Application/Views/Desktop/Project/index_gr.php new file mode 100644 index 0000000..2b964da --- /dev/null +++ b/Application/Views/Desktop/Project/index_gr.php @@ -0,0 +1,48 @@ + + +. +?> + +
        + +
        + ">Home » h-project +
        + +
        + +
        + Γιατί: +
        + +
        + Το h-node project στήθηκε για να βοηθήσει το Κίνημα Ελεύθερου Λογισμικού, με τη δημιουργία ενός αρχείου για όλο το υλικό (hardware) που μπορεί να δουλέψει με ένα πλήρως ελεύθερο Λειτουργικό Σύστημα. +
        + +
        + Ποιος: +
        + +
        + Ο Antonio Gallo (tonicucoz">tonicucoz), h-node.com developer πηγαίου κώδικα, η Giulia Fanin (Julia">Julia, designer του layout και των εικόνων αυτού του ιστοτόπου (ευχαριστούμε για τις συμβουλές σου και την υποστήριξή σου), ο Luis Alberto Guzman Garcia (Ark74">Ark74), μέλος της Ισπανικής μεταφραστικής ομάδας (ευχαριστούμε για όλες τις χρήσιμες ιδέες σου και τις προτάσεις σου), ο Henri (Hardisk">Hardisk), μέλος της Γαλλικής μεταφραστικής ομάδας, ο Joerg Kohne (joeko">joeko), μέλος της Γερμανικής μεταφραστικής ομάδας, ο Benjamin Rochefort (oysterboy">oysterboy), μέλος της Γαλλικής μεταφραστικής ομάδας, Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. +
        Ευχαριστούμε, επίσης, όλους εσάς που πιστέψατε σε αυτό το project από τη γέννησή του, καθώς και όλους εσάς που δώσατε, δίνετε και θα δίνετε την συνεισφορά σας. +
        + +
        + +
        diff --git a/Application/Views/Desktop/Project/index_it.php b/Application/Views/Desktop/Project/index_it.php new file mode 100644 index 0000000..aa142f8 --- /dev/null +++ b/Application/Views/Desktop/Project/index_it.php @@ -0,0 +1,48 @@ + + +. +?> + +
        + +
        + ">Home » h-project +
        + +
        + +
        + Why: +
        + +
        + Il progetto h-node è stato creato per aiutare il movimento del software libero creando un archivio di tutto l' hardware che funzioni con un sistema operativo completamente libero. +
        + +
        + Who: +
        + +
        + Antonio Gallo (tonicucoz">tonicucoz), sviluppatore del codice di h-node.com, Giulia Fanin (Julia">Julia), designer del layout del sito e delle icone (grazie per i consigli e il supporto), Luis Alberto Guzman Garcia (Ark74">Ark74), membro del team di traduzione spagnolo (grazie per tutte le idee e gli utili suggerimenti), Henri (Hardisk">Hardisk), membro del team di traduzione francese, Joerg Kohne (joeko">joeko), membro del team di traduzione tedesco, Benjamin Rochefort (oysterboy">oysterboy), membro del team di traduzione francese, , Kostas Mousafiris (kosmous">kosmous), membro del team di traduzione greco. +
        Grazie anche a tutti Voi che avete creduto nel progetto sin dalla sua nascita e a tutti quelli che hanno dato, danno e daranno il loro contributo. +
        + +
        + +
        diff --git a/Application/Views/Desktop/Rss/modifications.php b/Application/Views/Desktop/Rss/modifications.php new file mode 100644 index 0000000..0a9100b --- /dev/null +++ b/Application/Views/Desktop/Rss/modifications.php @@ -0,0 +1,46 @@ + +\n";?> + + + +<?php echo Website::$generalName;?> + + + +'inserted','update'=>'updated'); +?> + + + + <?php echo $row['hardware']['model'];?> + getUser($row['history']['created_by']);?>]]> + baseUrl."/".Hardware::$typeToController[$row['hardware']['type']]."/view/$lang/".$row['hardware']['id_hard']."/".encodeUrl($row['hardware']['model']);?> + + + + + + + + +. +?> \ No newline at end of file diff --git a/Application/Views/Desktop/Rss/notapproved.php b/Application/Views/Desktop/Rss/notapproved.php new file mode 100644 index 0000000..dec338b --- /dev/null +++ b/Application/Views/Desktop/Rss/notapproved.php @@ -0,0 +1,41 @@ + +\n";?> + + + +<?php echo Website::$generalName;?> + + + + + + <?php echo $row['hardware']['model'];?> + ]]> + baseUrl."/".Hardware::$typeToController[$row['hardware']['type']]."/view/$lang/".$row['hardware']['id_hard']."/".encodeUrl($row['hardware']['model']);?> + + + + + + + + +. +?> \ No newline at end of file diff --git a/Application/Views/Desktop/Search/form.php b/Application/Views/Desktop/Search/form.php new file mode 100644 index 0000000..136c544 --- /dev/null +++ b/Application/Views/Desktop/Search/form.php @@ -0,0 +1,111 @@ + + +. +?> + + + +
        + +
        + ">Home » +
        + +
        + : +
        + +
        +
        + +
        + +
        + + + + + + + + + +
        :
        :
        +
        +
        + +
        +
        + vendorid:productid +
        +
        " method="POST"> + + + + + + + + +
        :
        +
        +
        + +
        +
        + +
        +
        " method="POST"> + + + + + + + + +
        :
        lspci -vmmnn
        +
        +
        +
        diff --git a/Application/Views/Desktop/Search/lspci_results.php b/Application/Views/Desktop/Search/lspci_results.php new file mode 100644 index 0000000..970789b --- /dev/null +++ b/Application/Views/Desktop/Search/lspci_results.php @@ -0,0 +1,89 @@ + + +. +?> + +
        + +
        + ">Home » "> » +
        + +
        + : +
        + +
        + + + +
        + "> +
        + + +
        + 0) { ?> +
        + : +
        + + + +
        +
        + ".$row['hardware']['type']." - ".$row['hardware']['model']."";?> +
        +
        + ".gtext($row['hardware'][Hardware::getWorksFieldFromType($row['hardware']['type'])]).""; + ?> +
        +
        + +
        + +
        + 0) { ?> +
        + :
        + +
        + + + +
        +
        + ".Hardware::getTypeFromClass($device['classId'])." - ".$device['deviceName'];?> +
        +
          +
        • :
        • +
        • :
        • +
        • :
        • +
        + insert +
        +
        +
        + +
        +
        + +
        diff --git a/Application/Views/Desktop/Search/results.php b/Application/Views/Desktop/Search/results.php new file mode 100644 index 0000000..2fb128b --- /dev/null +++ b/Application/Views/Desktop/Search/results.php @@ -0,0 +1,87 @@ + + +. +?> + +
        + +
        + ">Home » "> » +
        + +
        + : +
        + +
        + + +
        +
        +
        :
        +
        + +
        +
        :
        +
        + +
        +
        :
        +
        +
        +
        :
        +
        +
        + + + + + action,'pciid') === 0) { ?> + +
        + +
        +
          + $number) { ?> +
        • ">
        • + +
        +
        + + +
        + . +
        + + + +
        + + +
        + : +
        + + +
        diff --git a/Application/Views/Desktop/Special/modactions.php b/Application/Views/Desktop/Special/modactions.php new file mode 100644 index 0000000..3e58c62 --- /dev/null +++ b/Application/Views/Desktop/Special/modactions.php @@ -0,0 +1,95 @@ + + +. +?> + +
        + +
        + ">Home » "> » list of actions +
        + +
        + +
        + + + + + + + + + + action,'usersactions') !== 0) { ?> + + + + + + + + + + + action,'usersactions') !== 0) { ?> + + + + + + + + + + + + action,'usersactions') !== 0) { ?> + + + + +
        ACTION IDACTIONTYPEOBJECT IDDATENOTE
          +
        "> + + + +
        +
             
        + + + getLinkToUserFromId($row['history']['created_by']);?> + + + + + + + + + + +
        + +
        + : +
        + +
        diff --git a/Application/Views/Desktop/Special/modifications.php b/Application/Views/Desktop/Special/modifications.php new file mode 100644 index 0000000..1caca34 --- /dev/null +++ b/Application/Views/Desktop/Special/modifications.php @@ -0,0 +1,45 @@ + + +. +?> + +
        + +
        + ">Home » +
        + +
        + +
        + +
        + +
        + +
        + : +
        + +
        diff --git a/Application/Views/Desktop/Special/pages_deleted.php b/Application/Views/Desktop/Special/pages_deleted.php new file mode 100644 index 0000000..f0e69d5 --- /dev/null +++ b/Application/Views/Desktop/Special/pages_deleted.php @@ -0,0 +1,45 @@ + + +. +?> + +
        + +
        + ">Home » "> » +
        + +
        + +
        + +
        +
          + +
        • ">
        • + +
        +
        + +
        + : +
        + +
        diff --git a/Application/Views/Desktop/Users/add.php b/Application/Views/Desktop/Users/add.php new file mode 100755 index 0000000..3e8de61 --- /dev/null +++ b/Application/Views/Desktop/Users/add.php @@ -0,0 +1,72 @@ + + +. +?> + +
        + +
        + ">Home » +
        + + + + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + +
        + +
        + + +
        + +
        + +
        + +
        + +
        \ No newline at end of file diff --git a/Application/Views/Desktop/Users/change.php b/Application/Views/Desktop/Users/change.php new file mode 100644 index 0000000..c5fdb3b --- /dev/null +++ b/Application/Views/Desktop/Users/change.php @@ -0,0 +1,30 @@ + + +. +?> + +
        + +
        +

        The link has expired

        +

        go to the ">homepage

        +
        + +
        \ No newline at end of file diff --git a/Application/Views/Desktop/Users/confirmation.php b/Application/Views/Desktop/Users/confirmation.php new file mode 100644 index 0000000..796fb1b --- /dev/null +++ b/Application/Views/Desktop/Users/confirmation.php @@ -0,0 +1,44 @@ + + +. +?> + +
        + +
        + ">Home » confirmation +
        + + + +
        +

        The account has been confirmed successfully!

        +

        go to the ">homepage

        +
        + + + +
        +

        The confirmation link has expired

        +

        go to the ">homepage

        +
        + + +
        \ No newline at end of file diff --git a/Application/Views/Desktop/Users/forgot.php b/Application/Views/Desktop/Users/forgot.php new file mode 100644 index 0000000..ad9e046 --- /dev/null +++ b/Application/Views/Desktop/Users/forgot.php @@ -0,0 +1,57 @@ + + +. +?> + +
        + +
        + ">Home » +
        + + + + + +
        + +
        + + +
        + +
        + +
        + +
        + + +
        + +
        + +
        + +
        + +
        \ No newline at end of file diff --git a/Application/Views/Desktop/Users/login.php b/Application/Views/Desktop/Users/login.php new file mode 100755 index 0000000..c0c129d --- /dev/null +++ b/Application/Views/Desktop/Users/login.php @@ -0,0 +1,67 @@ + + +. +?> + + + + + + + + + + + + + + + + diff --git a/Application/Views/Desktop/Users/logout.php b/Application/Views/Desktop/Users/logout.php new file mode 100755 index 0000000..8916a8b --- /dev/null +++ b/Application/Views/Desktop/Users/logout.php @@ -0,0 +1,27 @@ + + +. +?> + +
        +
        + + +
        \ No newline at end of file diff --git a/Application/Views/Desktop/Users/notice.php b/Application/Views/Desktop/Users/notice.php new file mode 100644 index 0000000..9322adf --- /dev/null +++ b/Application/Views/Desktop/Users/notice.php @@ -0,0 +1,96 @@ + + +. +?> + +
        + +
        + ">Home » notice +
        + + + + +
        +

        An e-mail has been sent to your mailbox.

        +

        If you have received no mail, then check inside the spam too

        +

        Click on the confirmation link in the e-mail in order to confirm the registration of the new account.

        +

        The confirmation link will expire in a hour.

        +

        If you don't want to confirm the account registration then wait one hour and your username and e-mail will be deleted from the database.

        +

        go to the ">homepage

        +
        + + + +
        +

        Registration failed

        +

        go to the ">homepage

        +
        + + + +
        +

        An e-mail has been sent to your mailbox.

        +

        If you have received no mail, then check inside the spam too

        +

        Click on the confirmation link in the e-mail in order to change the password of your account.

        +

        The confirmation link will expire in a hour.

        +

        go to the ">homepage

        +
        + + + +
        +

        Registration failed

        +

        go to the ">homepage

        +
        + + + +
        +

        The new password has been sent to you by mail!

        +

        If you have received no mail, then check inside the spam too

        +

        go to the ">homepage

        +
        + + + +
        +

        Operation failed

        +

        go to the ">homepage

        +
        + + + +
        +

        Your account has been successfully deleted

        +

        go to the ">homepage

        +
        + + + + + +
        +

        go to the ">homepage

        +
        + + +
        \ No newline at end of file diff --git a/Application/Views/Desktop/Wiki/climb.php b/Application/Views/Desktop/Wiki/climb.php new file mode 100644 index 0000000..c648e7f --- /dev/null +++ b/Application/Views/Desktop/Wiki/climb.php @@ -0,0 +1,52 @@ + + +. +?> +
        + + + +
        + ">Home » +
        + +
        + +
        + + + +
        + + + +
        + +
        " method="POST"> + : +
        + +
        + +
        + + \ No newline at end of file diff --git a/Application/Views/Desktop/Wiki/differences.php b/Application/Views/Desktop/Wiki/differences.php new file mode 100644 index 0000000..9c06714 --- /dev/null +++ b/Application/Views/Desktop/Wiki/differences.php @@ -0,0 +1,64 @@ + + +. +?> + +
        + + + +
        + ">Home » +
        + + +
        + , getUser($created_by));?>, +
        + + + + +
        + +
        + Notice: the text in red has been deleted from the previous revision, the text in green has been added in this revision and the text in gray has not been changed.");?> +
        + + $text) { ?> + +
        + +
        + : +
        + +
        + +
        + +
        + + + +
        + diff --git a/Application/Views/Desktop/Wiki/form.php b/Application/Views/Desktop/Wiki/form.php new file mode 100644 index 0000000..38a88c4 --- /dev/null +++ b/Application/Views/Desktop/Wiki/form.php @@ -0,0 +1,105 @@ + + +. +?> + + + +
        + + action,'insert') === 0 ) { ?> + +
        + ">Home » ">Wiki » +
        + +
        + +
        + + + + action,'update') === 0 ) { ?> + +
        + ">Home » ">Wiki » "> » +
        + +
        + +
        + + + + + +
        +
        :
        + +
        + + + +
        + +
        controller."/".$this->action."/$lang";?>" method="POST"> + +
        + +
        + + +
        + +
        + + + +
        :
        +
        + +
        + + + +
        + + + + "> + "> + +
        + +
        +
        + diff --git a/Application/Views/Desktop/Wiki/history.php b/Application/Views/Desktop/Wiki/history.php new file mode 100644 index 0000000..08fa4ac --- /dev/null +++ b/Application/Views/Desktop/Wiki/history.php @@ -0,0 +1,74 @@ + + +. +?> + +
        + + + +
        + ">Home » ">Wiki » » +
        + +
        + +
        + + + +
        + + + +
        + +
        + : +
        + + + diff --git a/Application/Views/Desktop/Wiki/modifications.php b/Application/Views/Desktop/Wiki/modifications.php new file mode 100644 index 0000000..71e50c9 --- /dev/null +++ b/Application/Views/Desktop/Wiki/modifications.php @@ -0,0 +1,45 @@ + + +. +?> + +
        + +
        + ">Home » ">Wiki » +
        + +
        + +
        + +
        + +
        + +
        + : +
        + +
        diff --git a/Application/Views/Desktop/Wiki/not_found.php b/Application/Views/Desktop/Wiki/not_found.php new file mode 100644 index 0000000..cd435de --- /dev/null +++ b/Application/Views/Desktop/Wiki/not_found.php @@ -0,0 +1,34 @@ + + +. +?> + +
        + +
        + ">Home » ">Wiki » +
        + +
        +
        + . "> +
        +
        + diff --git a/Application/Views/Desktop/Wiki/page.php b/Application/Views/Desktop/Wiki/page.php new file mode 100644 index 0000000..1716edc --- /dev/null +++ b/Application/Views/Desktop/Wiki/page.php @@ -0,0 +1,154 @@ + + +. +?> + +
        + + action,'page') === 0 ? 'wiki' : 'wiki_revisions'; + $displayClass = ($isDeleted) ? 'display_none' : null; + ?> + + action,'page') === 0 ) { ?> + +
        + ">Home » ">Wiki » +
        + + + +
        + + + + "> + + + + "> + + + + +
        + + "> + + + + "> + + + + +
        +
        page
        + + "> | + + ">view details +
        +
        + +
        + + + + + + + + + action,'revision') === 0 ) { ?> + +
        + ">Home » +
        + +
        + +
        + + + + + +
        + + + + + action,'revision') === 0) { ?> +
        + getLinkToUserFromId($created_by);?> . ">. +
        + + + +
        + + action,'page') === 0 ) { ?> + + + + +
        +
        + +
        + + + + +
        + + +
        + +
        + diff --git a/Application/Views/Desktop/Wiki/pages.php b/Application/Views/Desktop/Wiki/pages.php new file mode 100644 index 0000000..7a6918a --- /dev/null +++ b/Application/Views/Desktop/Wiki/pages.php @@ -0,0 +1,45 @@ + + +. +?> + +
        + +
        + ">Home » ">Wiki » +
        + +
        + +
        + +
        +
          + +
        • + +
        +
        + +
        + : +
        + +
        diff --git a/Application/Views/Desktop/Wiki/talk.php b/Application/Views/Desktop/Wiki/talk.php new file mode 100644 index 0000000..4e93798 --- /dev/null +++ b/Application/Views/Desktop/Wiki/talk.php @@ -0,0 +1,173 @@ + + +. +?> + + + +
        + +
        + ">Home » +
        + +
        + +
        + + + + + + +
        + + + + + + +
        + +
        + + ">hide + + +
        + +
        + +
        + getUser($message['wiki_talk']['created_by']));?>, +
        +
        + +
        + +
        + + + +
        +
        wiki_talk
        + ">view details +
        +
        + + +
        + + + + + +
        + this message has been deleted + + ">make visible + + +
        +
        wiki_talk
        + + ">view details + +
        +
        +
        + submitted by getUser($message['wiki_talk']['created_by']));?>, +
        +
        + +
        +
        +
        +
        +
        + + +
        + + + + + +
        + + + +
        + + + + +
        +
        controller."/talk/$lang/$id_wiki";?>#form" method="POST"> + +
        + +
        + + +
        + +
        + + +
        + + "> + +
        + +
        +
        +
        + + + + + + + + + +
        + +
        + + + +
        \ No newline at end of file diff --git a/Application/Views/Desktop/bottom_left.php b/Application/Views/Desktop/bottom_left.php new file mode 100644 index 0000000..545a6ea --- /dev/null +++ b/Application/Views/Desktop/bottom_left.php @@ -0,0 +1,29 @@ + + +. +?> + + action,'talk') !== 0) { ?> +
        + +
        + + +
        \ No newline at end of file diff --git a/Application/Views/Desktop/catalogue.php b/Application/Views/Desktop/catalogue.php new file mode 100644 index 0000000..b89eed6 --- /dev/null +++ b/Application/Views/Desktop/catalogue.php @@ -0,0 +1,131 @@ + + +. +?> + +
        +
        + +
        +
        + +
        +
        + + controller,'notebooks') === 0 ) { ?> +
        +
        + +
        +
        +
        viewArgs['bios'])?>
        +
        viewArgs['architecture']);?>
        +
        +
        + + +
        +
        " method="GET"> + + ">" /> + +
        +
        + + + +
        + ... +
        + + + + +
        + +
        + : +
        + + controller,'notebooks') !== 0 and strcmp($item['hardware']['other_names'],'') !== 0 ) { ?> +
        +
        :
        +
        +
        + + + controller,'notebooks') === 0 or strcmp($this->controller,'hostcontrollers') === 0) { ?> +
        + controller,'notebooks') === 0) { ?> +
        (, , , ):
        + +
        ():
        + +
        +
        + + +
        +
        :
        +
        +
        + +
        +
        :
        +
        +
        + + controller,'notebooks') !== 0 ) { ?> +
        +
        :
        +
        +
        + + +
        + controller,'printers') === 0 or strcmp($this->controller,'scanners') === 0 or strcmp($this->controller,'notebooks') === 0) { ?> +
        :
        + controller,'videocards') === 0 ) { ?> +
        + +
        + +
        +
        + + controller,'printers') === 0 ) { ?> +
        +
        +
        +
        + + + + +
        + + + +
        + : +
        + \ No newline at end of file diff --git a/Application/Views/Desktop/cleared.php b/Application/Views/Desktop/cleared.php new file mode 100644 index 0000000..ef1cfb3 --- /dev/null +++ b/Application/Views/Desktop/cleared.php @@ -0,0 +1,28 @@ + + +. +?> + + +
        +
        + +
        +
        diff --git a/Application/Views/Desktop/climb.php b/Application/Views/Desktop/climb.php new file mode 100644 index 0000000..ffcae52 --- /dev/null +++ b/Application/Views/Desktop/climb.php @@ -0,0 +1,37 @@ + + +. +?> + +
        + + + +
        + + +
        viewStatus;?>" method="POST"> + I want to make this revision the current revision: +
        + + +
        + +
        \ No newline at end of file diff --git a/Application/Views/Desktop/dialog.php b/Application/Views/Desktop/dialog.php new file mode 100644 index 0000000..bbbe1ae --- /dev/null +++ b/Application/Views/Desktop/dialog.php @@ -0,0 +1,102 @@ + + +. +?> + + + + +
        + +
        + + + + + + + + + + + + + + +
        +
        +
        + +
        +
        + +
        +
        \ No newline at end of file diff --git a/Application/Views/Desktop/differences.php b/Application/Views/Desktop/differences.php new file mode 100644 index 0000000..c634d19 --- /dev/null +++ b/Application/Views/Desktop/differences.php @@ -0,0 +1,49 @@ + + +. +?> + +
        + + + +
        + Notice: the text in red has been deleted from the previous revision, the text in green has been added in this revision and the text in gray has not been changed.");?> +
        + + $text) { ?> + +
        + +
        + : +
        + +
        + +
        + +
        + + + + + +
        diff --git a/Application/Views/Desktop/footer.php b/Application/Views/Desktop/footer.php new file mode 100644 index 0000000..8970590 --- /dev/null +++ b/Application/Views/Desktop/footer.php @@ -0,0 +1,45 @@ + + +. +?> + + +
        h-node.org is a hardware database project. It runs the h-source PHP software, version SVN-387, available under the GNU General Public (GPLv3) License.
        + +
        + + + + + diff --git a/Application/Views/Desktop/form.php b/Application/Views/Desktop/form.php new file mode 100644 index 0000000..a9e23af --- /dev/null +++ b/Application/Views/Desktop/form.php @@ -0,0 +1,160 @@ + + +. +?> + + + + + +
        +
        controller."/".$this->action."/$lang/$token".$this->viewStatus;?>" method="POST"> + +
        + +
        + + +
        + +
        + + +
        + + controller,'printers') === 0 ) { ?> +
        + + +
        + controller,'hostcontrollers') === 0 ) { ?> + + + + +
        + + +
        + +
        + + +
        + +
        + + +
        + +
        + + + + +
        + +
        + + +
        + +
        + + + controller,'printers') === 0 or strcmp($this->controller,'scanners') === 0) { + switch ($this->controller) + { + case 'printers': + $fragment = 'Printers'; + break; + case 'scanners': + $fragment = 'Scanners'; + break; + } + ?> + + "> + +
        + + controller,'printers') === 0 ) { ?> +
        + + +
        + + +
        + + +
        + +
        + + controller,'threegcards') === 0 ) { ?> + +
        + + + +
        :
        +
        + +
        + + + +
        + + + + + + +
        + * are mandatory");?> +
        + +
        + +
        +
        \ No newline at end of file diff --git a/Application/Views/Desktop/header.php b/Application/Views/Desktop/header.php new file mode 100644 index 0000000..d153840 --- /dev/null +++ b/Application/Views/Desktop/header.php @@ -0,0 +1,120 @@ + + + +. +?> +'inserted','update'=>'updated'); +$currPos = $querySanitized ? $this->controller."/".$this->action : 'home/index'; +?> + + + <?php echo $title;?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + +
        + +
        +
        + +
        +
        + +
        diff --git a/Application/Views/Desktop/history.php b/Application/Views/Desktop/history.php new file mode 100644 index 0000000..bacf28a --- /dev/null +++ b/Application/Views/Desktop/history.php @@ -0,0 +1,63 @@ + + +. +?> + + + +
        + + + +
        + +
        + : +
        + + + +
        + + \ No newline at end of file diff --git a/Application/Views/Desktop/if_page_deleted.php b/Application/Views/Desktop/if_page_deleted.php new file mode 100644 index 0000000..932d0dd --- /dev/null +++ b/Application/Views/Desktop/if_page_deleted.php @@ -0,0 +1,60 @@ + + +. +?> + + + +
        +
        +
        + This page has been deleted as requested by: + + getLinkToUserFromId($user);?> + +
        +
        +
        + With the following motivations: +
        +
        + +
        +
        + motivation of getLinkToUserFromId($row['deletion']['created_by']);?>: controller);?> +
        +
        + message: +
        +
        + +
        +
        + + + +
        +
        +
        + +
        +
        + + \ No newline at end of file diff --git a/Application/Views/Desktop/license_notice.php b/Application/Views/Desktop/license_notice.php new file mode 100644 index 0000000..6aec78c --- /dev/null +++ b/Application/Views/Desktop/license_notice.php @@ -0,0 +1,32 @@ + + +. +?> + +
        +
        :
        + +
        + +
        + +
        + +
        \ No newline at end of file diff --git a/Application/Views/Desktop/moderator_dialog.php b/Application/Views/Desktop/moderator_dialog.php new file mode 100644 index 0000000..3b76c4b --- /dev/null +++ b/Application/Views/Desktop/moderator_dialog.php @@ -0,0 +1,69 @@ + + +. +?> + +
        +
        +

        Write below your motivation

        + +
        +
        + +
        +
        + +
        +
        + + \ No newline at end of file diff --git a/Application/Views/Desktop/noscript_distributions.php b/Application/Views/Desktop/noscript_distributions.php new file mode 100644 index 0000000..11ae5a6 --- /dev/null +++ b/Application/Views/Desktop/noscript_distributions.php @@ -0,0 +1,33 @@ + + +. +?> + + \ No newline at end of file diff --git a/Application/Views/Desktop/not_found.php b/Application/Views/Desktop/not_found.php new file mode 100644 index 0000000..cd435de --- /dev/null +++ b/Application/Views/Desktop/not_found.php @@ -0,0 +1,34 @@ + + +. +?> + +
        + +
        + ">Home » ">Wiki » +
        + +
        +
        + . "> +
        +
        + diff --git a/Application/Views/Desktop/page.php b/Application/Views/Desktop/page.php new file mode 100644 index 0000000..8da5a35 --- /dev/null +++ b/Application/Views/Desktop/page.php @@ -0,0 +1,141 @@ + + +. +?> + + + + action,'view') === 0) ? 'hardware' : 'revisions'; + $displayClass = ($isDeleted) ? 'display_none' : null; + ?> + + +
        + + + action,'revision') === 0) { ?> +
        + getLinkToUserFromId($updated_by);?> . controller."/view/$lang/$id_hard/".$name.$this->viewStatus;?>">. +
        + + + + + + +
        + : (: ) + action,'view') === 0) { ?> + ask for removal + +
        + + +
        +
        :
        +
        +
        + + +
        +
        :
        +
        +
        + + controller,'printers') === 0 or strcmp($this->controller,'hostcontrollers') === 0) { ?> +
        +
        ():
        +
        +
        + + +
        +
        :
        +
        +
        + +
        +
        :
        +
        +
        + +
        +
        :
        +
        +
        + +
        +
        :
        +
        +
        + +
        +
        :
        +
        ",explode(',',$item[$tableName]['kernel']));?>
        +
        + +
        + + controller,'videocards') === 0 ) { ?> + +
        +
        + + controller,'printers') === 0 ) { ?> + +
        :
        + + + controller,'scanners') === 0 ) { ?> + +
        :
        + + + + +
        +
        + + + +
        + + controller,'printers') === 0 ) { ?> +
        +
        +
        +
        + + +
        +
        :
        +
        +
        + +
        +
        :
        +
        +
        + +
        + + + \ No newline at end of file diff --git a/Application/Views/Desktop/right.php b/Application/Views/Desktop/right.php new file mode 100644 index 0000000..0e6c22a --- /dev/null +++ b/Application/Views/Desktop/right.php @@ -0,0 +1,165 @@ + + +. +?> + + diff --git a/Application/Views/Desktop/suggest_dialog.php b/Application/Views/Desktop/suggest_dialog.php new file mode 100644 index 0000000..3e9ad14 --- /dev/null +++ b/Application/Views/Desktop/suggest_dialog.php @@ -0,0 +1,43 @@ + + +. +?> + + + +
        +

        +

        +
        \ No newline at end of file diff --git a/Application/Views/Desktop/talk.php b/Application/Views/Desktop/talk.php new file mode 100644 index 0000000..ac02490 --- /dev/null +++ b/Application/Views/Desktop/talk.php @@ -0,0 +1,163 @@ + + +. +?> + + + + + +
        + + + + + + +
        + +
        + + ">hide + + +
        + +
        + +
        + getUser($message['talk']['created_by']));?>, +
        +
        + +
        + +
        + + + +
        +
        talk
        + ">view details +
        +
        + + +
        + + + + + +
        + this message has been deleted + + ">make visible + + +
        +
        talk
        + + ">view details + +
        +
        +
        + submitted by getUser($message['talk']['created_by']));?>, +
        +
        + +
        +
        +
        +
        +
        + + +
        + + + + + +
        + + + +
        + + + + + + +
        + : +
        +
        +
        + +
        +
        + + +
        +
        controller."/talk/$lang/$id_hard/$token".$this->viewStatus;?>#form" method="POST"> + +
        + +
        + + +
        + +
        + + +
        + + "> + "> + +
        + +
        +
        +
        + + + + + + + + \ No newline at end of file diff --git a/Application/Views/Desktop/top_left.php b/Application/Views/Desktop/top_left.php new file mode 100644 index 0000000..33ef4d2 --- /dev/null +++ b/Application/Views/Desktop/top_left.php @@ -0,0 +1,190 @@ + + +. +?> + +
        + +
        + ">Home » ">Hardware » +
        + + action,'view') === 0) { ?> + + + +
        + + + + + + + "> + + + + + + "> + + + + + + "> + + + + "> + + +
        +
        device
        + + "> | + + ">view details +
        +
        +
        +
        + +
        + + +
        + controller);?> +
        + + + + + + + + action,'catalogue') === 0) { ?> + +
        + controller);?> +
        + + + + + + action,'history') === 0) { ?> + +
        + - controller).' '.$ne_name.'';?> +
        + + + + action,'differences') === 0) { ?> + + +
        + , getUser($updated_by));?>, +
        + + + + + action,'climb') === 0) { ?> + +
        + Make current this revision of the controller).' '.$ne_name.'';?> +
        + + + + action,'revision') === 0) { ?> + +
        + - controller).' '.$ne_name.'';?> +
        + + + + action,'insert') === 0) { ?> + +
        + - controller);?> +
        + + + + action,'update') === 0) { ?> + +
        + - controller).' '.$ne_name.'';?> +
        + + + + action,'talk') === 0) { ?> + +
        + - controller).' '.$ne_name.'';?> +
        + + + + \ No newline at end of file diff --git a/Application/Views/Desktop/wiki_page.php b/Application/Views/Desktop/wiki_page.php new file mode 100644 index 0000000..48f7b96 --- /dev/null +++ b/Application/Views/Desktop/wiki_page.php @@ -0,0 +1,153 @@ + +. +?> + +
        + + action,'page') === 0 ? 'wiki' : 'wiki_revisions'; + $displayClass = ($isDeleted) ? 'display_none' : null; + ?> + + action,'page') === 0 ) { ?> + +
        + ">Home » ">Wiki » +
        + + + +
        + + + + "> + + + + "> + + + + +
        + + "> + + + + "> + + + + +
        +
        page
        + + "> | + + ">view details +
        +
        + +
        + + + + + +
        + ">: +
        + + + action,'revision') === 0 ) { ?> + +
        + ">Home » +
        + +
        + +
        + + + + + +
        + + + + + action,'revision') === 0) { ?> +
        + getLinkToUserFromId($created_by);?> . . +
        + + + +
        + + action,'page') === 0 ) { ?> + + + + +
        +
        + +
        + + + + +
        + + +
        + +
        + diff --git a/Application/Views/Desktop/xml_response.php b/Application/Views/Desktop/xml_response.php new file mode 100644 index 0000000..2c51b88 --- /dev/null +++ b/Application/Views/Desktop/xml_response.php @@ -0,0 +1,28 @@ + +\n";?> + + + + ]]> + + + +. +?> diff --git a/Application/Views/Mobile/Contact/index.php b/Application/Views/Mobile/Contact/index.php new file mode 100644 index 0000000..20faef1 --- /dev/null +++ b/Application/Views/Mobile/Contact/index.php @@ -0,0 +1,41 @@ + + +. +?> + +
        + +
        + ">Home » contact +
        + +
        + +
        + You can suggest to implement new features or add new types of hardware in the ">issues page +
        + +
        + Discussions about also take place on the h-source-users mailing list and #h-node libera.chat IRC channel. +
        + +
        + +
        diff --git a/Application/Views/Mobile/Contact/index_de.php b/Application/Views/Mobile/Contact/index_de.php new file mode 100644 index 0000000..cb273af --- /dev/null +++ b/Application/Views/Mobile/Contact/index_de.php @@ -0,0 +1,41 @@ + + +. +?> + +
        + +
        + ">Home » contact +
        + +
        + +
        + Sie können neu zu implementierende Funktionen vorschlagen oder neue Hardware-Typen in der Seite ">Web-Log hinzufügen +
        + +
        + Wenn Sie das h-node-Team direkt kontaktieren möchten: info@h-node.com +
        + +
        + +
        diff --git a/Application/Views/Mobile/Contact/index_es.php b/Application/Views/Mobile/Contact/index_es.php new file mode 100644 index 0000000..8c79aa8 --- /dev/null +++ b/Application/Views/Mobile/Contact/index_es.php @@ -0,0 +1,41 @@ + + +. +?> + +
        + +
        + ">Home » contact +
        + +
        + +
        + Puede sugerir el implementar nuevas caracteriticas o agregar nuevo hardware en la página de ">incidencias +
        + +
        + Si desea contactar directamente al equipo de use esta dirección de correo electronico: info@h-node.com +
        + +
        + +
        diff --git a/Application/Views/Mobile/Contact/index_fr.php b/Application/Views/Mobile/Contact/index_fr.php new file mode 100644 index 0000000..2b2b7dd --- /dev/null +++ b/Application/Views/Mobile/Contact/index_fr.php @@ -0,0 +1,41 @@ + + +. +?> + +
        + +
        + ">Home » contact +
        + +
        + +
        + Vous pouvez suggérez l’implémentation de nouvelles fonctionnalitée ou l’ajout d’un nouveau type de matériel dans la page ">problème. +
        + +
        + Si vous voulez contatez directement l’équipe , utilisez cette adresse mail : info@h-node.com +
        + +
        + +
        diff --git a/Application/Views/Mobile/Contact/index_gr.php b/Application/Views/Mobile/Contact/index_gr.php new file mode 100644 index 0000000..069d14d --- /dev/null +++ b/Application/Views/Mobile/Contact/index_gr.php @@ -0,0 +1,41 @@ + + +. +?> + +
        + +
        + ">Home » contact +
        + +
        + +
        + Μπορείτε να εισηγηθείτε την υλοποίηση νέων χαρακτηριστικών ή την προσθήκη νέων τύπων υλικού (hardware) στην ιστοσελίδα ">issues +
        + +
        + Αν θέλετε να έρθετε σε άμεση επαφή με την ομάδα του , χρησιμοποιείστε αυτή την ηλεκτρονική διεύθυνση: info@h-node.com +
        + +
        + +
        diff --git a/Application/Views/Mobile/Contact/index_it.php b/Application/Views/Mobile/Contact/index_it.php new file mode 100644 index 0000000..d96d767 --- /dev/null +++ b/Application/Views/Mobile/Contact/index_it.php @@ -0,0 +1,41 @@ + + +. +?> + +
        + +
        + ">Home » contact +
        + +
        + +
        + Potete suggerire nuove caratteristiche da implementare o aggiungere nuovi tipi di hardware nella pagina ">issues +
        + +
        + Se volete direttamente contattare il team di potete farlo a questo indirizzo e-mail: info@h-node.com +
        + +
        + +
        diff --git a/Application/Views/Mobile/Credits/index.php b/Application/Views/Mobile/Credits/index.php new file mode 100644 index 0000000..c54f231 --- /dev/null +++ b/Application/Views/Mobile/Credits/index.php @@ -0,0 +1,65 @@ + + +. +?> + +
        + +
        + ">Home » credits +
        + +
        + +
        + Icons: +
        + +
        + The icons used inside are taken from the ACUN Simgeleri 0.7 icon theme and from the H2O Icon Theme 0.0.5, both licensed under the GNU GPL license, from the Crystal Projects icons, licensed under the LGPL, from the glaze icons set (LGPL) and from the DarkGlass_Reworked icons theme (GPL). The flag icons are taken from the FAMFAMFAM flag icons set (Public Domain). +
        + +
        + jQuery: +
        + +
        + The jQuery, the jQuery UI and the jQuery Mobile javascript libraries (licensed under MIT/GPL) have been used through the website +
        + +
        + markitup: +
        + +
        + The markitup jQuery plugin (licensed under MIT/GPL) has been used in order to help the user to insert wiki tags +
        + +
        + php diff algorithm: +
        + +
        + This algorithm (licensed under the zlib free license) has been used in order to highlight the differences between two different revisions of the same hardware model. +
        + +
        + +
        diff --git a/Application/Views/Mobile/Credits/index_es.php b/Application/Views/Mobile/Credits/index_es.php new file mode 100644 index 0000000..3be6fbf --- /dev/null +++ b/Application/Views/Mobile/Credits/index_es.php @@ -0,0 +1,65 @@ + + +. +?> + +
        + +
        + ">Home » credits +
        + +
        + +
        + Iconos: +
        + +
        + Los iconos usados dentro de son tomados de el tema de iconos ACUN Simgeleri 0.7 y de H2O Icon Theme 0.0.5, ambos licenciados bajo la licencia GNU GPL, de Crystal Projects, licenciado bajo la LGPL, de glaze icons set (LGPL) y de DarkGlass_Reworked icons theme (GPL). Los iconos de las banderas son tomados la colección de iconos de banderas FAMFAMFAM (Dominio Público) +
        + +
        + jQuery: +
        + +
        + Las bibliotecas javascript jQuery, jQuery UI y jQuery Mobile (licenciadas bajo MIT/GPL) han sido usadas en el sitio +
        + +
        + markitup: +
        + +
        + El complemento markitup jQuery (licenciado bajo MIT/GPL) ha sido usado en orden de ayudar al usuario a insertar etiquetas wiki +
        + +
        + php diff algorithm: +
        + +
        + Este algoritmo (licenciado bajo la licencia libre de zlib) ha sido usado en orden de remarcar las diferencias entre dos diferentes revisiones del mismo modelo de hardware. +
        + +
        + +
        diff --git a/Application/Views/Mobile/Credits/index_fr.php b/Application/Views/Mobile/Credits/index_fr.php new file mode 100644 index 0000000..022aa70 --- /dev/null +++ b/Application/Views/Mobile/Credits/index_fr.php @@ -0,0 +1,63 @@ + + +. +?> + +
        + +
        + ">Home » credits +
        + +
        + +
        + Icons: +
        + +
        + Les icones utilisées sur sont tirées du thème ACUN Simgeleri 0.7 et du thème H2O Icon Theme 0.0.5, les deux sont licensée sous license GPL, d’autres sont aussi tirée des thèmes Crystal Projects (LGPL), glaze icons set (LGPL), DarkGlass_Reworked icons theme (GPL). Les icones de drapeau sont tirés du thème FAMFAMFAM flag icons set distribué dans le domaine publique. +
        + +
        + jQuery: +
        + +
        + jQuery , jQuery UI et la librairie javascript jQuery Mobile (licensé sous MIT/GPL) sont utilisés sur le site. +
        + +
        + markitup: +
        + +
        + Le plugin jQuery markitup (licensé sous MIT/GPL) a été utilisé afin d’aider les utilisateurs à insérer des tags wiki. +
        + +
        + Algorithme diff php: +
        + +
        + Cet algorithme (Licensé sous license libre zlib) a été utiliser afin de souligner les différences entre deux révisions d’un même modèle matériel. +
        + +
        + +
        diff --git a/Application/Views/Mobile/Credits/index_gr.php b/Application/Views/Mobile/Credits/index_gr.php new file mode 100644 index 0000000..424ded1 --- /dev/null +++ b/Application/Views/Mobile/Credits/index_gr.php @@ -0,0 +1,65 @@ + + +. +?> + +
        + +
        + ">Home » credits +
        + +
        + +
        + Εικόνες: +
        + +
        + Οι εικόνες που χρησιμοποιούνται μέσα στο πάρθηκαν από το θέμα εικόνας ACUN Simgeleri 0.7 και από το H2O Icon Theme 0.0.5, που είναι αδειοδοτημένα και τα δύο υπό την Άδεια GNU GPL, από τις εικόνες Crystal Projects, που είναι αδειοδοτημένες υπό την LGPL, από το glaze icons set (LGPL) και από το DarkGlass_Reworked icons theme (GPL). Οι εικόνες flag πάρθηκαν από το FAMFAMFAM flag icons set (Public Domain). +
        + +
        + jQuery: +
        + +
        + Σε όλο τον ιστότοπο χρησιμοποιήθηκαν οι βιβλιοθήκες javascript jQuery και η jQuery UI (που αδειοδοτούνται υπό την MIT/GPL). +
        + +
        + markitup: +
        + +
        + Χρησιμοποιήθηκε το markitup jQuery plugin (που αδειοδοτείται υπό την MIT/GPL), για να βοηθηθεί ο χρήστης να εισαγάγει wiki tags +
        + +
        + php diff algorithm: +
        + +
        + Χρησιμοποιήθηκε ο αλγόριθμος This algorithm (που αδειοδοτείται υπό την ελεύθερη άδεια zlib), για να αναδειχθούν οι διαφορές ανάμεσα στις δύο διαφορετικές αναθεωρήσεις του ίδιου μοντέλου υλικού (hadrware). +
        + +
        + +
        diff --git a/Application/Views/Mobile/Credits/index_it.php b/Application/Views/Mobile/Credits/index_it.php new file mode 100644 index 0000000..6b1a512 --- /dev/null +++ b/Application/Views/Mobile/Credits/index_it.php @@ -0,0 +1,66 @@ + + +. +?> + +
        + +
        + ">Home » credits +
        + +
        + +
        + Icone: +
        + +
        + Le icone utilizzate nel sito h-node.com appartengono ai temi di icone ACUN Simgeleri 0.7 e H2O Icon Theme 0.0.5, entrambi sotto licenza GNU GPL, e al tema Crystal Projects, sotto licenza LGPL, al set di icone glaze (LGPL) e al tema DarkGlass_Reworked (GPL). Le icone bandiere derivano dal set di icone FAMFAMFAM (Public Domain). +
        + + +
        + jQuery: +
        + +
        + Le librerie javascript jQuery , jQuery UI e jQuery Mobile (sotto licenza MIT/GPL) sono state usate nel sito +
        + +
        + markitup: +
        + +
        + Il plugin jQuery markitup (sotto licenza MIT/GPL) è stato usato per aiutare gli utenti a inserire i tag della wiki
        + +
        + Algoritmo php diff: +
        + +
        + Questo algoritmo (sotto licenza libera zlib) è stato usato per sottolineare la differenza tra due diverse revisioni dello stesso modello di hardware. +
        + + +
        + +
        diff --git a/Application/Views/Mobile/Hardware/left.php b/Application/Views/Mobile/Hardware/left.php new file mode 100644 index 0000000..d0c17b9 --- /dev/null +++ b/Application/Views/Mobile/Hardware/left.php @@ -0,0 +1,127 @@ + + +. +?> + +
        + +
        + ">Home » Hardware +
        + + +
        \ No newline at end of file diff --git a/Application/Views/Mobile/Home/left.php b/Application/Views/Mobile/Home/left.php new file mode 100644 index 0000000..b4ec21e --- /dev/null +++ b/Application/Views/Mobile/Home/left.php @@ -0,0 +1,87 @@ + + +. +?> + +
        + +
        + Home +
        + + + +
        +
        + Objectives: +
        +
        + The project aims at the construction of a hardware database in order to identify what devices work with a fully free operating system. The website is structured like a wiki in which all the users can modify or insert new contents. The h-node project is developed in collaboration and as an activity of the FSF. +
        + +
        + Contribute: +
        +
        + You can contribute by creating an account at and editing its user-generated contents. All your modification will be saved in the history of the product you are editing/adding. Each revision (the current one or the old ones) will be marked by the name of the user who created it.
        You can also contribute by suggesting new hardware that should be added to the database or features that should be implemented. +
        + +
        + Free software: +
        +
        + + + In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: + +

        1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

        + +

        2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

        + +

        h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

        +
        + +
        + License: +
        +
        + Any text submitted by you will be put in the Public Domain (see the CC0 page for detailed information). Anyone is free to copy, modify, publish, use, sell, or distribute the text you have submitted to h-node.org, for any purpose, commercial or non-commercial, and by any means. +
        + +
        + Other resources on the net: +
        +
        +

        Here is a list of other archives collecting information about hardware working with free software:

        + +
        + +
        + About the website: +
        +
        + The has to be considered in beta version. It is constantly growing and many features have not been implemented yet (for example new hardware devices have to be inserted in the database). Some problems may occur: if you find out a bug please add an issue ">here with the topic maybe a bug. +
        +
        +
        diff --git a/Application/Views/Mobile/Home/left_de.php b/Application/Views/Mobile/Home/left_de.php new file mode 100644 index 0000000..75467ea --- /dev/null +++ b/Application/Views/Mobile/Home/left_de.php @@ -0,0 +1,86 @@ + + +. +?> + +
        + +
        + Home +
        + + + +
        +
        + Ziele: +
        +
        + Mit dem Projekt soll eine Hardwaredatenbank mit Peripheriegeräten aufgebaut werdem, die mit einem vollständig freien Betriebssystem arbeiten. Die Webseite von h-node.org ist wie ein Wiki aufgebaut, dessen Inhalte von allen Benutzer geändert und ergänzt werden können. Das Projekt h-node wird in Zusammenarbeit und als eine Aktivität der FSF entwickelt. +
        + +
        + Mithelfen: +
        +
        + Sie können nach Ihrer Anmeldung bei h-node.org dazu beitragen und die benutzergenerierten Inhalte bearbeiten. Alle Änderungen die Sie bearbeiten oder hinzufügen, werden im Produktverlauf protokolliert. Jede Version (die aktuelle oder die alte) wird der/dem BenutzerIn zugeordnet, die/der sie erstellte.
        + Neue Hardware, die in die Datenbank aufgenommen, oder neue Funktionen, die hinzugefügt werden sollten, können Sie ebenfalls vorschlagen. +
        + +
        + Freie Software: +
        +
        + In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: + +

        1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

        + +

        2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

        + +

        h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

        +
        + +
        + Lizenz: +
        +
        + Jeder von Ihnen übermittelte Text wird in die Gemeinfreiheit („Public Domain“) entlassen (siehe CC0 1.0 Universell (CC0 1.0) für detaillierte Informationen). Jede Person darf das Werk/den Inhalt, den Sie an h-node.org übermittelt haben, kopieren, verändern, verbreiten und aufführen, sogar zu kommerziellen Zwecken, ohne um weitere Erlaubnis bitten zu müssen und auf jedem Medium. +
        + +
        + Weitere Ressourcen im Internet: +
        +
        +

        Weitere Archive mit gesammelten Informationen über Hardware, die mit Freie Software arbeitet:

        + +
        + +
        + Über h-node.org: +
        +
        + h-node muss als im Beta-Stadium betrachtet werden. Es wird ständig ergänzt haben und viele Funktionen wurden noch nicht implementiert (z. B. müssen neue Hardware-Geräte in die Datenbank eingepflegt werden). Es können Probleme auftreten: Wenn Sie einen Fehler finden, melden Sie diesen bitte im ">Web-Log mit dem Thema evtl. ein Fehler. +
        +
        +
        diff --git a/Application/Views/Mobile/Home/left_es.php b/Application/Views/Mobile/Home/left_es.php new file mode 100644 index 0000000..4b310c7 --- /dev/null +++ b/Application/Views/Mobile/Home/left_es.php @@ -0,0 +1,86 @@ + + +. +?> + +
        + +
        + Home +
        + + + +
        +
        + Objetivos: +
        +
        + El proyecto tiene como meta la construcción de una base de datos de todo el hardware de manera que se pueda identificar que dispositivos funcionan con un sistema operativo completamente libre. El sitio esta estructurado como un wiki, en el cual todos los usuarios pueden modificar o integrar nuevos contenidos. El proyecto h-node es desarrollado en colaboración y como una actividad de la FSF. +
        + +
        + Contribuir: +
        +
        + Puede contribuir creando una cuenta en y editar los contenidos generados. Todas sus modificaciones serás guardadas en el historial del producto que edite/agregue. Cada revisión (actual o previa) será marcada con el nombre del usuario que la creo.
        También puede contribuir al sugerir nuevo hardware que deba ser agregado a la base de datos o características que deberían ser implementadas. +
        + +
        + Software Libre: +
        +
        + In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: + +

        1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

        + +

        2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

        + +

        h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

        +
        + +
        + Licencias: +
        +
        + Cualquier texto agregado por usted sera colocado en Dominio Publico (vea la página CC0 para información detallada). Cualquiera es libre de copiar, modificar, publicar, usar, vender o distribuir el texto que ha integrado a h-node.org, para cualquier propósito, comercial o no comercial, y por cualquier método. +
        + +
        + Otros recursos en la red: +
        +
        +

        Aquí una lista de otras actividades recolectando información acerca de hardware funcionando con software libre:

        + +
        + +
        + Acerca del sitio : +
        +
        + El sitio debe ser considerado una versión beta. Esta en constantemente crecimiento y varias características no han sido implementadas aun (por ejemplo, nuevos dispositivos de hardware tienen que ser incluidos en la base de datos). Algunos problemas pueden ocurrir: Si encuentra un error por favor agregue una incidencia ">aquí bajo el tema maybe a bug. +
        +
        + +
        diff --git a/Application/Views/Mobile/Home/left_fr.php b/Application/Views/Mobile/Home/left_fr.php new file mode 100644 index 0000000..f68a53f --- /dev/null +++ b/Application/Views/Mobile/Home/left_fr.php @@ -0,0 +1,88 @@ + + +. +?> + +
        + +
        + Home +
        + + + +
        +
        + Objectifs: +
        + +
        + Le but du projet h-node est de créer une base de données de matériel afin d'identifier les dispositifs qui fonctionne avec un système d’exploitation entièrement libre. Le site h-node est structuré comme un wiki, dont tout les utilisateurs peuvent modifier ou insérer des contenus. Le projet h-node est dévellopé en collaboration et en tant qu'activitée de la FSF. +
        + +
        + Contribution: +
        +
        + Vous pouvez contribuer en créant un compte sur h-node et modifier le contenus créé par les utilisateurs. Toutes vos modifications seront enregistrées dans l’historique de l’élément que vous modifiez ou ajouter. Toutes versions (l’actuelle ou les précédentes) seront marquées au nom de l’utilisateur qui les a crées.
        Vous pouvez aussi contribuer en suggérant un autre type de matériel qui devrais être ajouté à la base de données ou une nouvelle fonctionnalitée qui devrais être implémentée +
        + +
        + Logiciel libre: +
        +
        + In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: + +

        1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

        + +

        2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

        + +

        h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

        +
        + +
        + License: +
        + +
        + Tout les textes que vous publierez sur le site seront dans le Domain public (Consultez la page CC0 pour plus d'informations). Tout un chacun est autorisé à copier, modifier, publier, utiliser, vendre ou distribuer le texte que vous avez envoyé sur h-node.org, pour quelque utilisation que ce soit et par tout les moyens. +
        + +
        + Ressource supplémentaire sur Internet: +
        +
        +

        Voici une liste d'autres archives qui collecte des informations à propos du matériel fonctionnant avec du logiciel libre:

        + +
        + +
        + A propos du site : +
        +
        + Le site doit être considéré comme en version beta, il s’aggrandit constamment et beaucoup de fonctionnalitée n’ont pas encore été implémentée ( par exemple, de nouveau type d’appareil doivent être ajouter dans la base de données) . Des problèmes peuvent arriver, si vous trouver un bug, merci de remplir un ">ticket bug (maybe a bug). +
        +
        + +
        diff --git a/Application/Views/Mobile/Home/left_gr.php b/Application/Views/Mobile/Home/left_gr.php new file mode 100644 index 0000000..5e15b4c --- /dev/null +++ b/Application/Views/Mobile/Home/left_gr.php @@ -0,0 +1,87 @@ + + +. +?> + +
        + +
        + Home +
        + + + +
        +
        + Σκοποί: +
        +
        + + Το project έχει ως σκοπό την κατασκευή μίας βάσης δεδομένων υλικού, έτσι ώστε να μπορεί να εντοπισθεί ποιες συσκευές δουλεύουν με ένα πλήρως ελεύθερο Λειτουργικό Σύστημα. Ο ιστότοπος είναι δομημένος σαν ένα wiki, εντός του οποίου όλοι οι χρήστες μπορούν να τροποποιούν ή να εισαγάγουν νέα περιεχόμενα. Το h-node project αναπτύχθηκε σε συνεργασία με και σαν δραστηριότητα του FSF. +
        + +
        + Συνεισφέρετε: +
        +
        + Μπορείτε να συνεισφέρετε φτιάχνοντας έναν λογαριασμό στο και τροποποιώντας τα περιεχόμενα που δημιούργησαν οι ίδιοι οι χρήστες. Όλες σας οι τροποποιήσεις θα αποθηκεύονται στο ιστορικό του προϊόντος το οποίο επεξεργάζεσθε/εμπλουτίζετε. Κάθε αναθεώρηση (τόσο η τρέχουσα όσο και οι παλιές) θα επισημαίνεται με το όνομα του χρήστη που την δημιούργησε. Μπορείτε, επίσης, να συνεισφέρετε προτείνοντας νέο υλικό που θα έπρεπε να προστεθεί στη βάση δεδομένων, ή εισηγούμενοι χαρακτηριστικά που θα έπρεπε να υλοποιηθούν. +
        + +
        + Ελεύθερο Λογισμικό +
        +
        + + In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: + +

        1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

        + +

        2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

        + +

        h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

        +
        + +
        + Άδεια: +
        +
        + Οποιοδήποτε κείμενο που υποβάλετε, θα μπαίνει σε Δημόσια Διάθεση/Public Domain (δείτε τη σελίδα CC0 page για πιο λεπτομερείς πληροφορίες). Οποιοσδήποτε είναι ελεύθερος να αντιγράφει, να τροποποιεί, να δημοσιεύει, να χρησιμοποιεί, να πωλεί, ή και να ανδιανέμει το κείμενο που εσείς υποβάλλατε στο h-node.com, για οποιοδήποτε λόγο, εμπορικό ή μη-εμπορικό, και με οποιονδήποτε τρόπο. +
        + +
        + Άλλοι πόροι στο Διαδίκτυο: +
        +
        +

        Ακολουθεί, εδώ, ένας κατάλογος άλλων αρχείων που συγκεντρώνουν πληροφορίες σχετικά με υλικό που δουλεύει με ελεύθερο λογισμικό:

        + +
        + +
        + Σχετικά με τον ιστότοπο : +
        +
        + Το πρέπει να θεωρείται πως βρίκεται σε έκδοση beta. Αναπτύσσεται συνεχώς και πολλά χαρακτηριστικά δεν έχουν ακόμη υλοποιηθεί (π.χ. πρέπει ακόμη να προστεθούν νέες συσκευές υλικού στη βάση δεδομένων). Μπορεί να παρατηρηθούν ορισμένα προβλήματα: αν εντοπίσετε ένα σφάλμα (bug), παρακαλώ προσθέστε μία αναφορά προβλήματος ">εδώ με θέμα ίσως να πρόκειται για ένα bug. +
        +
        +
        diff --git a/Application/Views/Mobile/Home/left_it.php b/Application/Views/Mobile/Home/left_it.php new file mode 100644 index 0000000..dc9a6bb --- /dev/null +++ b/Application/Views/Mobile/Home/left_it.php @@ -0,0 +1,88 @@ + + +. +?> + +
        + +
        + Home +
        + + + +
        +
        + Obiettivi: +
        + +
        + Il progetto h-node mira alla costruzione di un database di hardware allo scopo di identificare quali dispositivi funzionino con un sistema operativo completamente libero. Il sito h-node.org è strutturato come una wiki in cui tutti gli utenti possono inserire nuovi contenuti o modificare i contenuti già presenti. Il progetto h-node è sviluppato in collaborazione e come attività della FSF. +
        + +
        + Contribuire: +
        +
        + Puoi contribuire creandoti un account su h-node.org e modificando i suoi contenuti generati dagli utenti. Tutte le tue modifiche saranno salvate nella storia del prodotto che stai modificando/aggiungendo. Ogni revisione (quella attuale o le precedenti) sarà contrassegnata col nome dell'utente che l'ha creata.
        Puoi inoltre contribuire suggerendo del nuovo hardware da aggiungere al database o delle caratteristiche da implementare. +
        + +
        + Software libero: +
        +
        + Per poter aggiungere un dispositivo nel database di h-node, devi verificare che funzioni usando solo software libero. Per questo scopo, puoi unicamente utilizzare: + +

        1) Una delle distribuzioni GNU/Linux elencate nella lista delle distribuzioni approvate dalla FSF

        + +

        2) Debian GNU/Linux, con solo la zona archivio main attivata. Le aree "contrib" e "non-free" non devono essere abilitate durante il test dell'hardware. Controlla che sia così lanciando apt-cache policy. La sola zona archivio dei pacchetti deve essere main.

        + +

        h-node elenca solo hardware che funziona con driver liberi e senza firmware non libero. Le altre distribuzioni GNU/Linux (oppure Debian con contrib, non-free, o archivi di terze parti abilitati) includono file di firmware non liberi, quindi non possono essere utilizzate per i test.

        +
        + +
        + Licenza: +
        + +
        + Qualsiasi testo da te inserito diventerà di Pubblico Dominio (visita la pagina CC0 per informazioni dettagliate). Chiunque è libero di copiare, modificare, pubblicare, usare, vendere o distribuire il testo che hai inserito su h-node.org, per qualsiasi fine, commerciale o non commerciale, e con ogni mezzo. +
        + +
        + Altre risorse in rete: +
        +
        +

        Di seguito una lista di altri archivi contenenti informazioni sull' hardware funzionante con software libero:

        + +
        + +
        + A proposito del sito : +
        +
        + deve essere considerato una versione beta. E' in costante sviluppo e molte caratteristiche non sono ancora state implementate (per esempio nuovi dispositivi hardware devono essere aggiunti al database). Potrebbero esserci dei problemi: se scopri un bug per favore invia una segnalazione ">qui con l'argomento maybe a bug. +
        +
        + +
        diff --git a/Application/Views/Mobile/Notebooks/page.php b/Application/Views/Mobile/Notebooks/page.php new file mode 100644 index 0000000..c7cafef --- /dev/null +++ b/Application/Views/Mobile/Notebooks/page.php @@ -0,0 +1,119 @@ + + +. +?> + + + + action,'view') === 0) ? 'hardware' : 'revisions'; + $displayClass = ($isDeleted and $isadmin) ? 'display_none' : null; + ?> + + +
        + + + action,'revision') === 0) { ?> +
        + getLinkToUserFromId($updated_by);?> . controller."/view/$lang/$id_hard/".$name.$this->viewStatus;?>">. +
        + + +

        + +

        + +
        (: )
        + +
        +
        (, , , ):
        +
        +
        + +
        +
        :
        +
        +
        + +
        +
        :
        +
        +
        + +
        +
        +
        +
        + +
        +
        +
        (".gtext("see the details inside the description entry").")";?>
        +
        + +
        +
        +
        (".gtext("see the details inside the description entry").")";?>
        +
        + +
        +
        :
        +
        +
        + +
        +
        :
        +
        +
        + +
        +
        :
        +
        +
        + +
        +
        :
        +
        ",explode(',',$item[$tableName]['kernel']));?>
        +
        + +
        +
        :
        +
        ()
        +
        + +
        +
        :
        +
        ()
        +
        + +
        +
        :
        +
        ()
        +
        + + +

        +
        + + +
        + + + \ No newline at end of file diff --git a/Application/Views/Mobile/Project/index.php b/Application/Views/Mobile/Project/index.php new file mode 100644 index 0000000..c194a3b --- /dev/null +++ b/Application/Views/Mobile/Project/index.php @@ -0,0 +1,50 @@ + + +. +?> + +
        + +
        + ">Home » h-project +
        + +
        + +
        + Why: +
        + +
        + The h-node project has been created to help the free software movement by creating an archive of all the hardware that can work with a fully free operating system. +
        + +
        + Who: +
        + +
        + Antonio Gallo (tonicucoz">tonicucoz), h-node.com source code developer, Giulia Fanin (Julia">Julia), designer of the website layout and icons (thanks for your advice and support), Luis Alberto Guzman Garcia (Ark74">Ark74), member of the Spanish translation team (thanks for all of your useful ideas and suggestions), Henri (Hardisk">Hardisk), member of the French translation team, Joerg Kohne (joeko">joeko), member of the German translation team, Benjamin Rochefort (oysterboy">oysterboy), member of the French translation team, Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. +
        Also thanks to all of you who have believed in the project since it was born and to all of you who gave, give and will give their contribution. +
        + +
        + +
        diff --git a/Application/Views/Mobile/Project/index_de.php b/Application/Views/Mobile/Project/index_de.php new file mode 100644 index 0000000..ea32f1f --- /dev/null +++ b/Application/Views/Mobile/Project/index_de.php @@ -0,0 +1,51 @@ + + +. +?> + +
        + +
        + ">Home » h-project +
        + +
        + +
        + Warum: +
        + +
        + Das Projekt „h-node“ wurde ins Leben gerufen, um für die Freie-Software-Bewegung ein umfassendes Hardware-Archiv für vollkommen Freie Betriebssysteme aufzubauen. +
        + +
        + Wer: +
        + +
        + Antonio Gallo (tonicucoz">tonicucoz), h-node.com source code developer, Giulia Fanin (Julia">Julia), Designer des Website-Layout und Symbole (Danke für die Ratschläge und Unterstützung), Luis Alberto Guzman Garcia (Ark74">Ark74), Mitglied des spanischen Übersetzungsteams (Danke für all die Ideen und nützlichen Anregungen), Henri (Hardisk">Hardisk), Mitglied des französischen Übersetzungsteams, Joerg Kohne (joeko">joeko), Mitglied des deutschen Übersetzungsteams, Benjamin Rochefort (oysterboy">oysterboy), Mitglied des französischen Übersetzungsteams, , Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. +
        + Vielen Dank auch an alle, die an das Projekt, seit es ins Leben gerufen wurde, geglaubt haben und an alle, die ihren Beitrag geleistet haben, leisten und leisten werden. +
        + +
        + +
        diff --git a/Application/Views/Mobile/Project/index_es.php b/Application/Views/Mobile/Project/index_es.php new file mode 100644 index 0000000..1520ae5 --- /dev/null +++ b/Application/Views/Mobile/Project/index_es.php @@ -0,0 +1,51 @@ + + +. +?> + +
        + +
        + ">Home » h-project +
        + +
        + +
        + Por que: +
        + +
        + El proyecto h-node ha sido creado para ayudar al movimiento de software libre al crear un archivo de todo el hardware que puede funcionar con un sistema operativo completamente libre. +
        + +
        + Quien: +
        + +
        + Antonio Gallo (tonicucoz">tonicucoz), h-node.com source code developer, Giulia Fanin (Julia">Julia), diseñadora del tema e iconos del sitio, (gracias por su consejo y apoyo), Luis Alberto Guzman Garcia (Ark74">Ark74), miembro del equipo de traducción al Español (gracias por sus útiles ideas y sugerencias), Henri (Hardisk">Hardisk), miembro del equipo de traducción al Francés, Joerg Kohne (joeko">joeko), miembro del equipo de traducción al Alemán, Benjamin Rochefort (oysterboy">oysterboy), miembro del equipo de traducción al Francés, , Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. +
        + También gracias a todos aquellos que han creído en el proyecto desde que nació y a todos aquellos que dieron, dan y darán su contribución. +
        + +
        + +
        diff --git a/Application/Views/Mobile/Project/index_fr.php b/Application/Views/Mobile/Project/index_fr.php new file mode 100644 index 0000000..90e3706 --- /dev/null +++ b/Application/Views/Mobile/Project/index_fr.php @@ -0,0 +1,50 @@ + + +. +?> + +
        + +
        + ">Home » h-project +
        + +
        + +
        + Pourquoi: +
        + +
        + Le projet h-node a été créer pour aider le mouvement du logiciel libre en créant une archive de matériel fonctionnel avec des systèmes entièrement libres. +
        + +
        + Qui: +
        + +
        + Antonio Gallo (tonicucoz">tonicucoz), h-node.com source code developer, Giulia Fanin (Julia">Julia), graphiste du site et des icones (merci pour tes conseils et ton support), Luis Alberto Guzman Garcia (Ark74">Ark74), membre de l’équipe de traduction espagnole (merci pour toutes vos bonnes idée et suggestion), Henri (Hardisk">Hardisk), membre de l’équipe de traduction française, Joerg Kohne (joeko">joeko), membre de l’équipe de traduction allemande, Benjamin Rochefort (oysterboy">oysterboy), membre de l’équipe de traduction française, Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. +
        Remerciement également à tout ceux qui ont crus à ce projet depuis sa naissance et à tout ceux qui ont donné, donne ou donnerons leurs contributions. +
        + +
        + +
        diff --git a/Application/Views/Mobile/Project/index_gr.php b/Application/Views/Mobile/Project/index_gr.php new file mode 100644 index 0000000..ddcee3f --- /dev/null +++ b/Application/Views/Mobile/Project/index_gr.php @@ -0,0 +1,50 @@ + + +. +?> + +
        + +
        + ">Home » h-project +
        + +
        + +
        + Γιατί: +
        + +
        + Το h-node project στήθηκε για να βοηθήσει το Κίνημα Ελεύθερου Λογισμικού, με τη δημιουργία ενός αρχείου για όλο το υλικό (hardware) που μπορεί να δουλέψει με ένα πλήρως ελεύθερο Λειτουργικό Σύστημα. +
        + +
        + Ποιος: +
        + +
        + Ο Antonio Gallo (tonicucoz">tonicucoz), h-node.com developer πηγαίου κώδικα, η Giulia Fanin (Julia">Julia, designer του layout και των εικόνων αυτού του ιστοτόπου (ευχαριστούμε για τις συμβουλές σου και την υποστήριξή σου), ο Luis Alberto Guzman Garcia (Ark74">Ark74), μέλος της Ισπανικής μεταφραστικής ομάδας (ευχαριστούμε για όλες τις χρήσιμες ιδέες σου και τις προτάσεις σου), ο Henri (Hardisk">Hardisk), μέλος της Γαλλικής μεταφραστικής ομάδας, ο Joerg Kohne (joeko">joeko), μέλος της Γερμανικής μεταφραστικής ομάδας, ο Benjamin Rochefort (oysterboy">oysterboy), μέλος της Γαλλικής μεταφραστικής ομάδας, Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. +
        Ευχαριστούμε, επίσης, όλους εσάς που πιστέψατε σε αυτό το project από τη γέννησή του, καθώς και όλους εσάς που δώσατε, δίνετε και θα δίνετε την συνεισφορά σας. +
        + +
        + +
        diff --git a/Application/Views/Mobile/Project/index_it.php b/Application/Views/Mobile/Project/index_it.php new file mode 100644 index 0000000..44fb50d --- /dev/null +++ b/Application/Views/Mobile/Project/index_it.php @@ -0,0 +1,50 @@ + + +. +?> + +
        + +
        + ">Home » h-project +
        + +
        + +
        + Why: +
        + +
        + Il progetto h-node è stato creato per aiutare il movimento del software libero creando un archivio di tutto l' hardware che funzioni con un sistema operativo completamente libero. +
        + +
        + Who: +
        + +
        + Antonio Gallo (tonicucoz">tonicucoz), sviluppatore del codice di h-node.com, Giulia Fanin (Julia">Julia), designer del layout del sito e delle icone (grazie per i consigli e il supporto), Luis Alberto Guzman Garcia (Ark74">Ark74), membro del team di traduzione spagnolo (grazie per tutte le idee e gli utili suggerimenti), Henri (Hardisk">Hardisk), membro del team di traduzione francese, Joerg Kohne (joeko">joeko), membro del team di traduzione tedesco, Benjamin Rochefort (oysterboy">oysterboy), membro del team di traduzione francese, , Kostas Mousafiris (kosmous">kosmous), membro del team di traduzione greco. +
        Grazie anche a tutti Voi che avete creduto nel progetto sin dalla sua nascita e a tutti quelli che hanno dato, danno e daranno il loro contributo. +
        + +
        + +
        diff --git a/Application/Views/Mobile/bottom_left.php b/Application/Views/Mobile/bottom_left.php new file mode 100644 index 0000000..545a6ea --- /dev/null +++ b/Application/Views/Mobile/bottom_left.php @@ -0,0 +1,29 @@ + + +. +?> + + action,'talk') !== 0) { ?> +
        + +
        + + +
        \ No newline at end of file diff --git a/Application/Views/Mobile/catalogue.php b/Application/Views/Mobile/catalogue.php new file mode 100644 index 0000000..199d661 --- /dev/null +++ b/Application/Views/Mobile/catalogue.php @@ -0,0 +1,105 @@ + + +. +?> + + + +
        +
        " method="GET"> + + + + +
        +
        + + + +
        + ... +
        + + + + + + \ No newline at end of file diff --git a/Application/Views/Mobile/dialog.php b/Application/Views/Mobile/dialog.php new file mode 100644 index 0000000..55225a6 --- /dev/null +++ b/Application/Views/Mobile/dialog.php @@ -0,0 +1,22 @@ + + +. +?> + diff --git a/Application/Views/Mobile/footer.php b/Application/Views/Mobile/footer.php new file mode 100644 index 0000000..8a414f2 --- /dev/null +++ b/Application/Views/Mobile/footer.php @@ -0,0 +1,64 @@ + + +. +?> + + + +
        + + +
        + +
        +

        +
        + +
        + +
        + +
        +

        +
        +
        + + + diff --git a/Application/Views/Mobile/header.php b/Application/Views/Mobile/header.php new file mode 100644 index 0000000..446f820 --- /dev/null +++ b/Application/Views/Mobile/header.php @@ -0,0 +1,104 @@ + + + +. +?> +'inserted','update'=>'updated'); +$currPos = $querySanitized ? $this->controller."/".$this->action : 'home/index'; +?> + + + <?php echo $title;?> + + + + + + + + + + + + + + + + + + + + + + + + +
        + diff --git a/Application/Views/Mobile/if_page_deleted.php b/Application/Views/Mobile/if_page_deleted.php new file mode 100644 index 0000000..932d0dd --- /dev/null +++ b/Application/Views/Mobile/if_page_deleted.php @@ -0,0 +1,60 @@ + + +. +?> + + + +
        +
        +
        + This page has been deleted as requested by: + + getLinkToUserFromId($user);?> + +
        +
        +
        + With the following motivations: +
        +
        + +
        +
        + motivation of getLinkToUserFromId($row['deletion']['created_by']);?>: controller);?> +
        +
        + message: +
        +
        + +
        +
        + + + +
        +
        +
        + +
        +
        + + \ No newline at end of file diff --git a/Application/Views/Mobile/moderator_dialog.php b/Application/Views/Mobile/moderator_dialog.php new file mode 100644 index 0000000..47e9af9 --- /dev/null +++ b/Application/Views/Mobile/moderator_dialog.php @@ -0,0 +1,21 @@ + + +. +?> \ No newline at end of file diff --git a/Application/Views/Mobile/page.php b/Application/Views/Mobile/page.php new file mode 100644 index 0000000..9d994b4 --- /dev/null +++ b/Application/Views/Mobile/page.php @@ -0,0 +1,134 @@ + + +. +?> + + + + action,'view') === 0) ? 'hardware' : 'revisions'; + $displayClass = ($isDeleted) ? 'display_none' : null; + ?> + + +
        + + + action,'revision') === 0) { ?> +
        + getLinkToUserFromId($updated_by);?> . controller."/view/$lang/$id_hard/".$name.$this->viewStatus;?>">. +
        + + + + + + +

        + +

        + +
        (: )
        + + +
        +
        :
        +
        +
        + + +
        +
        :
        +
        controller);?>
        +
        + + controller,'printers') === 0 or strcmp($this->controller,'hostcontrollers') === 0) { ?> +
        +
        ():
        +
        +
        + + +
        +
        :
        +
        +
        + +
        +
        :
        +
        +
        + +
        +
        :
        +
        +
        + +
        +
        :
        +
        +
        + +
        +
        :
        +
        +
        + +
        +
        :
        +
        ",explode(',',$item[$tableName]['kernel']));?>
        +
        + +
        + controller,'videocards') === 0 ) { ?> +
        :
        + controller,'printers') === 0 ) { ?> +
        :
        + controller,'scanners') === 0 ) { ?> +
        :
        + +
        + +
        +
        + + controller,'printers') === 0 ) { ?> +
        +
        +
        +
        + + +
        +
        :
        +
        +
        + + +

        +
        + + + + +
        + + + \ No newline at end of file diff --git a/Application/Views/Mobile/right.php b/Application/Views/Mobile/right.php new file mode 100644 index 0000000..55225a6 --- /dev/null +++ b/Application/Views/Mobile/right.php @@ -0,0 +1,22 @@ + + +. +?> + diff --git a/Application/Views/Mobile/top_left.php b/Application/Views/Mobile/top_left.php new file mode 100644 index 0000000..7bfcf27 --- /dev/null +++ b/Application/Views/Mobile/top_left.php @@ -0,0 +1,43 @@ + + +. +?> + +
        + +
        + ">Home » ">Hardware » +
        + + action,'view') === 0) { ?> + + + + + + action,'catalogue') === 0) { ?> + + + + \ No newline at end of file diff --git a/Application/index.html b/Application/index.html new file mode 100755 index 0000000..8d1c8b6 --- /dev/null +++ b/Application/index.html @@ -0,0 +1 @@ + diff --git a/COPYRIGHT.txt b/COPYRIGHT.txt new file mode 100755 index 0000000..63dbdc9 --- /dev/null +++ b/COPYRIGHT.txt @@ -0,0 +1,24 @@ +EasyGiant is a PHP framework for creating and managing dynamic content +Copyright (C) 2009 - 2010 Antonio Gallo + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +EasyGiant includes works distributed under the licenses listed below. + +FreeFont +------- +License: GNU GPL version 3 or later +Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +link: http://savannah.gnu.org/projects/freefont/ diff --git a/Config/Autoload.php b/Config/Autoload.php new file mode 100644 index 0000000..ee43c13 --- /dev/null +++ b/Config/Autoload.php @@ -0,0 +1,44 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + + +//class containing all the PHP files that have to be loaded at the beginning of the EasyGiant execution +//the files have to be saved in Application/Include +//all the files have to be PHP files!! +class Autoload +{ + + public static $files = array( + 'params.php', + 'distributions.php', + 'myFunctions.php', + 'hardware.php', + 'languages.php', + 'license.php', + 'vendorTranslations.php', + 'wikiFormatting.php', + 'version.php', + ); + +} \ No newline at end of file diff --git a/Config/Config.php b/Config/Config.php new file mode 100755 index 0000000..1290751 --- /dev/null +++ b/Config/Config.php @@ -0,0 +1,58 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + + +define('DB', 'hnode'); +define('USER', 'root'); +define('PWD', ''); +define('HOST', 'localhost'); + +/*default controller name*/ +define('DEFAULT_CONTROLLER','home'); + +/*default action*/ +define('DEFAULT_ACTION','index'); + +/*website parameters*/ +define('DOMAIN_NAME','localhost'); + +/*type of database.*/ +//it can be: Mysql, Mysqli or None (first letter in uppercase) +define('DATABASE_TYPE','Mysqli'); + +/*error controller*/ +/*if you set ERROR_CONTROLLER to false, than EasyGiant will set ERROR_CONTROLLER equal to DEFAULT_CONTROLLER*/ +define('ERROR_CONTROLLER','home'); + +/*error action*/ +/*if you set ERROR_ACTION to false, than EasyGiant will set ERROR_ACTION equal to DEFAULT_ACTION*/ +define('ERROR_ACTION','index'); + +/*charset*/ +// set the charset used by all the functions that manage multi byte strings (mb_string functions, htmlentitites, etc) +define('DEFAULT_CHARSET','UTF-8'); + +/*rewrite settings*/ +//set MOD_REWRITE_MODULE to true if you have installed the mod_rewrite module of the server, otherwise MOD_REWRITE_MODULE to false +define('MOD_REWRITE_MODULE',true); diff --git a/Config/Reporting.php b/Config/Reporting.php new file mode 100755 index 0000000..5a2405f --- /dev/null +++ b/Config/Reporting.php @@ -0,0 +1,41 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Route +{ + + //controller,action couples that can be reached by the browser + //set 'all' if you want that all the controller,action couples can be reached by the browser + public static $allowed = array( + 'contact,index', + 'credits,index', + 'hardware,catalogue', + 'help,page', + 'faq,page', + 'home,index', + 'image,captcha', + 'issues,viewall', + 'issues,view', + 'my,home', + 'my,password', + 'my,email', + 'my,profile', + 'my,goodbye', + 'notebooks,catalogue', + 'notebooks,view', + 'notebooks,history', + 'notebooks,revision', + 'notebooks,insert', + 'notebooks,update', + 'notebooks,differences', + 'notebooks,climb', + 'notebooks,talk', + 'project,index', + 'users,login', + 'users,logout', + 'users,add', + 'users,confirm', + 'users,change', + 'users,forgot', + 'users,notice', + 'meet,user', + 'meet,contributions', + 'meet,hardware', + 'meet,issues', + 'meet,messages', + 'meet,talk', + 'meet,wiki', + 'meet,wikitalk', + 'wifi,catalogue', + 'wifi,view', + 'wifi,history', + 'wifi,revision', + 'wifi,insert', + 'wifi,update', + 'wifi,differences', + 'wifi,climb', + 'wifi,talk', + 'videocards,catalogue', + 'videocards,view', + 'videocards,history', + 'videocards,revision', + 'videocards,insert', + 'videocards,update', + 'videocards,differences', + 'videocards,climb', + 'videocards,talk', + 'printers,catalogue', + 'printers,view', + 'printers,history', + 'printers,revision', + 'printers,insert', + 'printers,update', + 'printers,differences', + 'printers,climb', + 'printers,talk', + 'scanners,catalogue', + 'scanners,view', + 'scanners,history', + 'scanners,revision', + 'scanners,insert', + 'scanners,update', + 'scanners,differences', + 'scanners,climb', + 'scanners,talk', + 'search,form', + 'search,results', + 'search,pciid', + 'search,lspci', + 'generic,del', + 'generic,cleared', + 'news,index', + 'download,index', + 'download,all', + 'download,notebooks', + 'download,wifi', + 'download,videocards', + 'download,printers', + 'download,scanners', + 'download,threegcards', + 'download,soundcards', + 'download,webcams', + 'download,bluetooth', + 'download,acquisitioncards', + 'download,fingerprintreaders', + 'download,ethernetcards', + 'download,sdcardreaders', + 'download,modems', + 'download,raidadapters', + 'download,hostcontrollers', + 'history,hide', + 'history,show', + 'history,block', + 'history,unblock', + 'history,open', + 'history,close', + 'history,pageblock', + 'history,pageunblock', + 'history,viewall', + 'history,pagehide', + 'history,pageshow', + 'history,devicehide', + 'history,deviceshow', + 'history,deviceapprove', + 'history,deviceclear', + 'history,issuehide', + 'history,issueshow', + 'threegcards,catalogue', + 'threegcards,view', + 'threegcards,history', + 'threegcards,revision', + 'threegcards,insert', + 'threegcards,update', + 'threegcards,differences', + 'threegcards,climb', + 'threegcards,talk', + 'soundcards,catalogue', + 'soundcards,view', + 'soundcards,history', + 'soundcards,revision', + 'soundcards,insert', + 'soundcards,update', + 'soundcards,differences', + 'soundcards,climb', + 'soundcards,talk', + 'webcams,catalogue', + 'webcams,view', + 'webcams,history', + 'webcams,revision', + 'webcams,insert', + 'webcams,update', + 'webcams,differences', + 'webcams,climb', + 'webcams,talk', + 'rss,modifications', + 'rss,statusnet', + 'rss,notapproved', + 'special,modifications', + 'special,modactions', + 'special,adminactions', + 'special,usersactions', + 'special,deleted', + 'special,notapproved', + 'wiki,insert', + 'wiki,update', + 'wiki,page', + 'wiki,history', + 'wiki,revision', + 'wiki,differences', + 'wiki,climb', + 'wiki,talk', + 'wiki,modifications', + 'wiki,pages', + 'wiki,deleted', + 'wiki,blocked', + 'bluetooth,catalogue', + 'bluetooth,view', + 'bluetooth,history', + 'bluetooth,revision', + 'bluetooth,insert', + 'bluetooth,update', + 'bluetooth,differences', + 'bluetooth,climb', + 'bluetooth,talk', + 'client,licenseinfo', + 'client,userinfo', + 'acquisitioncards,catalogue', + 'acquisitioncards,view', + 'acquisitioncards,history', + 'acquisitioncards,revision', + 'acquisitioncards,insert', + 'acquisitioncards,update', + 'acquisitioncards,differences', + 'acquisitioncards,climb', + 'acquisitioncards,talk', + 'fingerprintreaders,catalogue', + 'fingerprintreaders,view', + 'fingerprintreaders,history', + 'fingerprintreaders,revision', + 'fingerprintreaders,insert', + 'fingerprintreaders,update', + 'fingerprintreaders,differences', + 'fingerprintreaders,climb', + 'fingerprintreaders,talk', + 'ethernetcards,catalogue', + 'ethernetcards,view', + 'ethernetcards,history', + 'ethernetcards,revision', + 'ethernetcards,insert', + 'ethernetcards,update', + 'ethernetcards,differences', + 'ethernetcards,climb', + 'ethernetcards,talk', + 'sdcardreaders,catalogue', + 'sdcardreaders,view', + 'sdcardreaders,history', + 'sdcardreaders,revision', + 'sdcardreaders,insert', + 'sdcardreaders,update', + 'sdcardreaders,differences', + 'sdcardreaders,climb', + 'sdcardreaders,talk', + 'modems,catalogue', + 'modems,view', + 'modems,history', + 'modems,revision', + 'modems,insert', + 'modems,update', + 'modems,differences', + 'modems,climb', + 'modems,talk', + 'raidadapters,catalogue', + 'raidadapters,view', + 'raidadapters,history', + 'raidadapters,revision', + 'raidadapters,insert', + 'raidadapters,update', + 'raidadapters,differences', + 'raidadapters,climb', + 'raidadapters,talk', + 'hostcontrollers,catalogue', + 'hostcontrollers,view', + 'hostcontrollers,history', + 'hostcontrollers,revision', + 'hostcontrollers,insert', + 'hostcontrollers,update', + 'hostcontrollers,differences', + 'hostcontrollers,climb', + 'hostcontrollers,talk', + ); + + //it can be 'yes' or 'no' + //set $rewrite to 'yes' if you want that EasyGiant rewrites the URLs according to what specified in $map + public static $rewrite = 'no'; + + //define the urls of your website + //you have to set $rewrite to 'yes' + public static $map = array(); + +} \ No newline at end of file diff --git a/Credits.txt b/Credits.txt new file mode 100755 index 0000000..0e2adb1 --- /dev/null +++ b/Credits.txt @@ -0,0 +1,34 @@ +jQuery: +The jQuery JavaScript Library v1.4.2 have been used through the website (see Public/Js/jquery) +http://jquery.com/ +Copyright 2010, John Resig +Dual licensed under the MIT or GPL Version 2 licenses (http://jquery.org/license) +Includes Sizzle.js (http://sizzlejs.com/) +Copyright 2010, The Dojo Foundation +Released under the MIT, BSD, and GPL Licenses. + +jQuery UI 1.8.4 +Copyright 2010 (http://jqueryui.com/about) +Dual licensed under the MIT or GPL Version 2 licenses (http://jquery.org/license) +http://docs.jquery.com/UI + +markitup: +The markitup jQuery plugin (licensed under MIT/GPL) has been used in order to help the user to insert wiki tags (see Public/Js/jquery/markitup) +Copyright (C) 2007-2010 Jay Salvat +Dual licensed under the MIT and GPL licenses. +http://markitup.jaysalvat.com/ + +php diff algoritm: +Paul's Simple Diff Algorithm v 0.1 algorithm (licensed under the zlib free license) has been used in order to highlight the differences between two different revisions of the same hadrware model () +(C) Paul Butler 2007 +May be used and distributed under the zlib/libpng license. + +swiftmailer: +the swiftmailer program has been used to send mail from h-node.com (see the folder external) +© 2009 Chris Corbyn +see http://swiftmailer.org/ +license: GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 + +Icons: +The icons used inside h-node.com are taken from the ACUN Simgeleri 0.7 incon theme (http://kde-look.org/content/show.php/ACUN+Simgeleri?content=83018) and from the H2O Icon Theme 0.0.5 (http://kde-look.org/content/show.php/ACUN+Simgeleri?content=83018), both licensed under the GNU GPL license, from the Crystal Projects icons (http://www.everaldo.com/crystal/?action=downloads), licensed under the LGPL, from the glaze icons set (http://www.notmart.org/index.php/Graphics) (LGPL) and from the DarkGlass_Reworked icons theme (http://kde-look.org/content/show.php/Dark-Glass+reviewed?content=67902) (GPL). The flag icons are taken from the FAMFAMFAM (http://www.famfamfam.com/lab/icons/flags/) icons set (Public Domain) + diff --git a/Css/comune.css b/Css/comune.css new file mode 100644 index 0000000..b6ecdd3 --- /dev/null +++ b/Css/comune.css @@ -0,0 +1,130 @@ +/*parte di login.css*/ + +/*controller:users*/ +/*action:login*/ +.login_box { + margin:10px 10px 20px 10px; +} +.login_box input { + border:1px solid orange; +} + +/*action:logout*/ +.logout_box { + margin:10px 10px 20px 10px; +} + +.logout_button a{ + margin:20px; + padding:10px; + background:orange; + border:1px solid black; +/* width:30px; */ +} + + +/*parte di scaffold.css*/ + +td { + font-size: 12px; +} + +td.editForm, td.delForm, td.associateForm, td.moveupForm, td.movedownForm { + width:3%; +} + +td.editForm input, td.delForm input, td.associateForm input, td.moveupForm input, td.movedownForm input +{ + height:30px; +} + +/*alert string*/ +.alert { + font:bold 12px/1.5 Verdana,arial; + padding:5px; + margin:5px 5px 15px 5px; + background:TOMATO; + border-top:2px solid MAROON; + border-bottom:2px solid MAROON; + color:MAROON; +} + +/*executed operation string*/ +.executed { + font:bold 12px/1.5 Verdana,arial; + padding:5px; + margin:5px 5px 15px 5px; + background:#E0FFFF; + border-top:2px solid #ADD8E6; + border-bottom:2px solid #ADD8E6; + color:#4169E1; +} + +/*action:main*/ +tr.listRow { + background:#E6E6FA; +} + +tr.listHead { + font-weight: bold; + background:#d1deed; + border:1px solid #4169E1; + border-bottom:1px solid #4169E1; +} + +tr.listHead td { +/* font-weight: bold; */ +/* background:#d1deed; */ + border-top:1px solid #4169E1; + border-bottom:1px solid #4169E1; +} + +.recordsBox { + margin:10px 0px; +} + +.recordsBox table { + width:100%; +} + +.listItemForm { + margin:0px; +} + +a.linkItem { +/* background:red; */ + font:bold 12px/1 Verdana,arial; +} + +/*controller:panel +/*action:main*/ +.main_box { + padding:50px 20px; + width:700px; + height:250px; +} +.top_color { + text-align:center; + width:160px; + height:35px; + margin:0; + padding:0; +} +.bottom_color { + background:lavender; + text-align:center; + width:160px; + margin:0; + padding:5px 0; +} + + + +/*box che dice dove ti trovi, in che controller*/ +.controller_info_header +{ + background:#E6E6FA; + padding:5px; + font: bold 16px/1.75em sans-serif; + border-bottom:1px solid #4169E1; +} \ No newline at end of file diff --git a/Css/explorer6.css b/Css/explorer6.css new file mode 100755 index 0000000..29b6456 --- /dev/null +++ b/Css/explorer6.css @@ -0,0 +1,112 @@ +ul#menuBlock li { + height:24px; +} + +ul#menuBlock li ul { + top:25px; + margin-left:3px; +} + +ul#menuBlock li ul li { + margin-top:-1px; +} + +.view_page_top_box +{ + height:32px; +} + +.update_submit_class +{ + padding:7px; +} + +.view_page_update_button +{ + width:35px; +} + +/*div that contains the update form*/ +.view_page_update_button +{ + margin-top:2px; + margin-right:5px; +} +.update_submit_class +{ + padding:2px; + width:45px; +} +.notebooks_insert_form +{ + margin-right:-30px; +} + +.notebook_insert_link +{ + margin:0px 0px 0px 5px; + padding-right:0px; + width:245px; +} +.view_page_history_button +{ + margin-left:10px; +} +.top_left_images_help +{ + height:22px; + margin-bottom:-3px; +} +ul#menuBlock li { + height:26px; +} +ul#menuBlock li ul { + left:-6px; +} +.user_logged +{ + margin-left:62px; +} +.viewall_popup_menu_status_item +{ + padding-left:2px; +/* background:red; */ +} +.copyright_notice_box +{ + width:140px; +} +.language_links_box ul +{ + width:100%; + margin:-1px 5px 30px 5px; +} +.language_links_box ul li +{ + margin-bottom:5px; +} +.language_links_box ul li a +{ + height:30px; +} +.talk_numb_ext +{ + margin-top:-30px; +} +.talk_numb_ext a, .talk_numb_ext_wiki a +{ + margin-bottom:0px; +} +.talk_numb_ext_wiki +{ + width:130px; +} +.language_links_box a.current_lang +{ + background:#6495ED; +} + +.last_modifications ul +{ + margin-left:0px; +} \ No newline at end of file diff --git a/Css/explorer7.css b/Css/explorer7.css new file mode 100644 index 0000000..f63bf5b --- /dev/null +++ b/Css/explorer7.css @@ -0,0 +1,25 @@ +.viewall_popup_menu_status_item +{ + width:129px; +} +.talk_numb_ext +{ + margin-top:-30px; +} +.language_links_box a.current_lang +{ + background:#6495ED; +} + +.last_modifications ul +{ + margin-left:0px; +} +.talk_numb_ext a, .talk_numb_ext_wiki a +{ + margin-bottom:0px; +} +.talk_numb_ext_wiki +{ + width:130px; +} \ No newline at end of file diff --git a/Css/files.css b/Css/files.css new file mode 100644 index 0000000..e98e681 --- /dev/null +++ b/Css/files.css @@ -0,0 +1,113 @@ +form +{ + padding:0px; + margin:0px; +} + +/*external box*/ +.EGexternalBox +{ + height:500px; + overflow:scroll; +} + +/*top box containing the forms: upload,create folder,got to folder*/ +.EGformBox +{ + padding-left:10px; + padding-right:10px; + height:35px; + margin:5px; + border-top:1px solid #DC143C; + border-bottom:1px solid #DC143C; + background:#FF7F50; +} + +/*item box: folder*/ +.EGfolderBox +{ + padding-left:10px; + padding-right:10px; + height:55px; + margin:5px; +/* border-top:1px solid black; */ + background:#E6E6FA; +} + +/*item box: file*/ +.EGfileBox +{ + padding-left:10px; + padding-right:10px; + height:55px; + margin:5px; +/* border-top:1px solid black; */ + background:#E0FFFF; +} + +/*back box*/ +.EGbackBox +{ + padding-left:10px; + padding-right:10px; + height:50px; + margin:5px; + border-top:1px solid #6495ED; + border-bottom:1px solid #6495ED; + background:#ADD8E6; +} + +/*folder image and back image*/ +.EGfolderImage, .EGbackImage, .EGfileImage +{ + margin:3px; +/* padding:2px; */ + width:55px; +/* background:red; */ + float:left; +} + +/*box containing the form to create a new folder*/ +.EGcreateFolderBox +{ + margin:5px; + width:300px; + float:left; +} + +/*box containing the form to upload a file*/ +.EGuploadFileBox +{ + margin:5px; + margin-left:50px; + width:400px; + float:left; +} + +.EGcreateFolderBox input:text +{ + width:150px; +} + +/*name of the folder*/ +.EGfolderName, .EGfileName, .EGcurrentDirectory +{ + width:500px; + float:left; + font:normal 12px/1 Verdana,arial; + margin:10px; +} + +/*del image*/ +.EGfolderDelImage, .EGfileDelImage +{ + float:right; + margin:2px; +} + +/*preview of the image in upload file*/ +#imagePreview +{ + margin:10px; + height:120px; +} diff --git a/Css/form.css b/Css/form.css new file mode 100755 index 0000000..911af19 --- /dev/null +++ b/Css/form.css @@ -0,0 +1,31 @@ +.entryLabel { + display:block; + font:bold 12px/1em Verdana,arial; + padding:3px 0px; + margin-top:10px; + background:#E6E6FA; + width:500px; +} + +.formEntry textarea{ + width:500px; + height:300px; +} + +.formEntry input,.formEntry textarea { + width:500px; + padding:3px; + border: 1px solid #4169E1; +} + +.formClass { + margin:10px; +} + +.inputEntry { + margin:10px 0px; +} + +.formEntry #abstract { + height:100px; +} \ No newline at end of file diff --git a/Css/index.html b/Css/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Css/index.html @@ -0,0 +1 @@ + diff --git a/Css/login.css b/Css/login.css new file mode 100644 index 0000000..7c42964 --- /dev/null +++ b/Css/login.css @@ -0,0 +1,21 @@ +/*controller:users*/ +/*action:login*/ +.login_box { + margin:10px 10px 20px 10px; +} +.login_box input { + border:1px solid orange; +} + +/*action:logout*/ +.logout_box { + margin:10px 10px 20px 10px; +} + +.logout_button a{ + margin:20px; + padding:10px; + background:orange; + border:1px solid black; +/* width:30px; */ +} \ No newline at end of file diff --git a/Css/main.css b/Css/main.css new file mode 100644 index 0000000..080e613 --- /dev/null +++ b/Css/main.css @@ -0,0 +1,2249 @@ +/*stili per il layout fisso*/ +html, body +{ + margin: 0; + padding:0; +} + +body +{ + font:normal 15px/1.3 sans-serif,arial; + text-align: center; + background:#ffffff; +} + +img +{ + border:0px; +} + +.message_view_description li, .issues_view_description li, .talk_message_item_content li, .message_view_description_hidden li +{ + margin-left:1em; +} + + +div#container +{ + width: 950px; + margin: 0px auto; + text-align: left; + background:white; +} + + +/*stile header grande*/ +div#external_header { + background:#b7f18c; + text-align:center; + height:80px; +} +div#header { + background:#b7f18c; + width: 950px; + margin: 0px auto; + text-align:left; + height:80px; +} + +div#top_menu_external +{ + text-align:center; + background:#015512; + margin-bottom:50px; +/* border-top:1px solid #4169E1; */ +/* border-bottom:1px solid #4169E1; */ +} + +div#top_menu +{ + font:bold 15px sans-serif,arial; + text-align:left; + padding:0.4em 0px; + background:#015512; + width: 950px; + margin: 0px auto; +} +#top_menu .currentitem a +{ + background:#DC143C; + color:#FFF; +} + +div#top_menu a +{ + font:bold 16px sans-serif,arial; + padding:0.4em 10px; + text-decoration:none; + font-weight:bold; + color:#FFF; +/* border-left:1px solid #4169E1; */ +} +#top_menu a:hover, +#top_menu a:focus, +#top_menu a:active +{ + background:#61c418; +} + +div#top_menu ul +{ + list-style-type: none; + display:inline; + margin:0px; + padding:0px; +} + +div#top_menu li +{ + display:inline; +/* padding:10px; */ +} + + +div#left +{ + width:730px; + float:left; +} + +div#right +{ + width:198px; + float:right; +} + +.login_username_input,.login_password_input +{ + width:150px; +} + +.login_table_box +{ + clear:left; + margin:5px; + margin-bottom:35px; +/* border:1px solid #B7F18C; */ +/* padding:5px; */ +} +.statistics_ext_box +{ + margin:5px; + margin-bottom:30px; +} +.statistics_int_title +{ + margin:5px 0px 15px 0px; + padding:3px 0px; +/* background-color:#B7F18C; */ + border-bottom:2px solid #DC143C; + font-weight:bold; +} +.statistics_hard_title +{ + margin:5px 0px; + color:#808080; +} +.user_logged +{ + margin-left:55px; + color:black; + font-weight:bold; +} +.login_right_label +{ + font-weight:bold; +} +.login_right_form input +{ + border:1px solid #6495ED; + width:180px; + padding:2px; + margin:3px 0px; +} + +.login_input +{ + width:100px; +} + +.login_form_title +{ + color:black; + +/* padding:10px; */ +/* background:#5c98dc; */ +} + +.login_box +{ + margin-bottom:400px; +} + +.hardware_element +{ + width:335px; + float:left; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; + margin:2px; + margin-left:5px; + margin-bottom:5px; + padding:10px; + background:#c7daef; +/* border-bottom:1px solid #6495ED; */ +} +.hardware_element_link +{ + display:block; + width:250px; + float:left; + margin:0px 10px; + margin-top:10px; +} +.notebook_view_title +{ + width:400px; + height:50px; + float:left; + overflow:hidden; +/* background:red; */ + margin:10px 0px 10px 10px; + font:normal 14px/1 sans-serif,arial; +} + +.notebook_insert_link +{ +/* border:1px solid black; */ +/* background-color:#c1e3ef; */ + width:200px; +/* background:orange; */ + float:right; + padding:3px 6px 1px 3px; + margin:0px 5px 30px 5px; + text-align:right; + overflow:hidden; + height:48px; +} + +.select_entry +{ +/* width:400px; */ + padding:2px; +/* border:1px solid #6495ED; */ +} +.input_entry, .talk_input_entry +{ + width:400px; + padding:2px; + border:1px solid #6495ED; +} +.textarea_entry, .talk_textarea_entry, .device_textarea_entry +{ + width:630px; + height:300px; + padding:2px; + border:1px solid #6495ED; +} +.device_textarea_entry +{ + width:400px; + height:50px; +} +/*.talk_input_entry +{ + border:1px solid #CECECE; +}*/ +.form_entry .talk_textarea_entry +{ + width:400px; + height:200px; + border:1px solid #6495ED; +} +.notebooks_insert_form +{ + width:710px; + margin-left:10px; +} +.notebooks_insert_form .entry_label +{ + display:block; + padding:3px 0px; +/* background:#E6E6FA; */ + width:600px; + font-weight:bold; +} +.form_entry +{ + margin:20px 0px; +} + + +div#footer{ + margin:0px; + color: #000; + height:40px; + background:#b7f18c; + clear:both; +} + +/*div#navigation li{background: url(immagini/tabella1.png) no-repeat left center;}*/ +a.link_menu +{ + font: bold 16px/1.75em sans-serif,arial; + text-decoration: none; + color:#4169E1; + margin-left:10px; +} + + +/*box contenente i link per tornare nel pannello utente e per sloggarsi*/ +.your_status_box +{ + background:#E6E6FA; + padding:5px; +} + +.login_note +{ + color:#8080a6; + margin:10px; + padding:5px 0px; + border-top:2px solid #8080a6; + border-bottom:2px solid #8080a6; + + font: normal 16px/1.3 sans-serif,arial; +} + +/*singolo box contentente un portatile in view all*/ +.notebooks_viewall +{ + clear:both; + clear:right; + margin:40px 0px; + padding:3px; +/* border:2px solid #7dafe7; */ + font: normal 14px/1.5 sans-serif,arial; + +} +.model_viewall +{ + margin:40px 10px; + margin-left:0px; +/* background-color:#F7F7F7; */ +/* border:1px solid #CECECE; */ +/* padding:10px; */ +} +.notebook_model +{ +/* background:orange; */ + padding:5px 0px; + margin:0px 5px; + overflow:hidden; + width:100%; +/* margin-bottom:10px; */ + font:normal 14px/1 sans-serif,arial; + border-bottom:1px solid #7e0000; +} +.notebook_vendor, .notebook_compatibility, .notebook_kernel, .model_tested_on +{ + margin:5px 0px; +/* background:#eaebec; */ + padding:5px; + width:654px; + overflow:hidden; +/* border-top:2px solid #a4c8f1; */ +} +.inner_label +{ + float:left; + width:320px; +} +.inner_value +{ + float:left; + width:280px; + color:#1f538e; + font-weight:bold; +} +.notebook_description_label +{ +/* background:#B7F18C; */ + padding:5px 0px; + margin:0px 5px; + margin-top:1.5em; +/* margin-bottom:10px; */ + font:bold 14px/1 sans-serif,arial; + border-bottom:1px solid #7e0000; +/* border-bottom:1px solid #228B22; */ +} +.notebook_description_value +{ +/* border-top:2px solid #a4c8f1; */ + margin:5px 0px; +/* background:#eaebec; */ + padding:5px 5px; + width:704px; + overflow:hidden; +} +.notebook_view_link +{ + margin-top:10px; + margin-left:5px; +} + + +/*alert string*/ +.alert { + clear:left; + clear:right; + font:bold 12px/1.5 sans-serif,arial; + padding:10px; + margin:5px 0px 15px 0px; +/* background:TOMATO; */ + border-top:2px solid MAROON; + border-bottom:2px solid MAROON; + color:MAROON; +} + +/*executed operation string*/ +.executed { + font:bold 12px/1.5 sans-serif,arial; + padding:5px; + margin:5px 5px 15px 5px; + background:#E0FFFF; + border-top:2px solid #ADD8E6; + border-bottom:2px solid #ADD8E6; + color:#4169E1; +} + +.view_page_top_box +{ + overflow:hidden; + width:664px; +} +/*div that contains the update form*/ +.view_page_update_button +{ + float:right; +} +/*.view_page_update_button input +{ + height:35px; +}*/ +.view_page_update_button form +{ + width:38px; + padding:0px; +} +.view_page_back_button +{ + float:left; + width:50px; +} +/*the update submit button*/ +.update_submit_class +{ + padding:2px; + width:45px; + font:normal 14px/1 sans-serif,arial; + cursor:pointer; +} +/*div that contains the link to the history page*/ +.view_page_history_button +{ + float:right; + width:30px; + padding:3px; + margin-left:17px; +/* border:1px solid #a4c8f1; */ +/* height:30px; */ +} +.view_page_history_button a +{ + text-decoration:none; + color:#000; +} + +.page_history +{ + margin:0px; + padding:0px; +} +.page_history_item +{ + list-style-type: none; + padding:5px; + margin:2px; + border-top:1px dashed #a4c8f1; +} +.page_history_current_item +{ + list-style-type: none; + padding:5px; + margin:5px 0px; +/* background:#ADD8E6; */ +} +.history_title +{ + font:normal 14px/1 sans-serif; + margin:10px; + padding:3px; +} + +.revision_alert +{ + background:#f1d8d8; + padding:8px; + margin:5px; + margin-bottom:20px; + border-bottom:1px solid #d26262; + border-top:1px solid #d26262; + clear:both; +} + +/*page list in history*/ +.history_page_list, .history_page_list_news { + text-align:left; + font:normal 14px/1 sans-serif,arial; + padding:10px; + margin-bottom:15px; +} +.history_page_list_news +{ + background:#C7DAEF; + margin:5px; +} +div.history_page_list a, div.history_page_list_news a { + padding:5px 10px; + border-left:1px outset #000; +/* border:1px outset #708090; */ +/* color:#B0E0E6; */ +/* background:#4169E1; */ +} + +div.history_page_list a.currentPage, div.history_page_list_news a.currentPage +{ + font-weight:bold; + background:#DCDCDC; +} +div.history_page_list_news a +{ + border-left:none; + color:#4169E1; + font-weight:bold; +} + +.viewall_no_items_found +{ + font:normal 14px/1 sans-serif,arial; + margin:20px 5px; + padding:5px; +/* color: #FF4500; */ + border-top:1px solid #FF4500; + border-bottom:1px solid #FF4500; +} + + + +.viewall_popup_menu_box { + width:725px; + height:30px; + margin-bottom:0px; + margin-top:10px; + margin-left:0px; + position:relative; + z-index:4; +} +.more_filters +{ + position:relative; + z-index:3; +} + +.viewall_popup_menu_status +{ + clear:left; + width:725px; +/* overflow:hidden; */ + margin-left:0px; + text-align:center; +} +.viewall_popup_menu_status_item +{ + width:139px; + float:left; + margin-left:3px; + color:#FF4500; + font-weight:bold; + font: bold 13px/1 sans-serif,arial; +} + +ul#menuBlock { +/* float:right; */ + float:left; + margin:0px; + padding:0px; + list-style:none; + height:25px; +} +ul#menuBlock li.innerItem +{ + height:22px; + padding-top:5px; + font-size:12px; +} +ul#menuBlock li { + position:relative; + display:block; + float:left; + margin-left:3px; + width:139px; +/* height:22px; */ + text-align:center; + background: url('../Img/popup_back.png') no-repeat top left; +/* background:#FFA500; */ +} + +ul#menuBlock li a { + color:#000000; + font: normal 12px/1 sans-serif,arial; +} + +ul#menuBlock li ul { + margin:0px; + padding:0px; + list-style:none; + position:absolute; + top:24px; + left:-3px; + display:none; +} +ul#menuBlock:hover li ul +{ + display:block; +} +ul#menuBlock li ul li { + background:#ffef84; + border-top:1px solid #ec8459; + padding:3px 0; +} + + +/*view files with differences*/ +.diff_ext_box +{ + margin:0px 5px 30px 5px; +} +.diff_item_label +{ +/* background:#ADD8E6; */ +/* padding:3px; */ + border-bottom:1px solid black; +} +.diff_item_text +{ + color:#7c7a7a; + background:#F0FFF0; + padding:3px; +} +del +{ + color:red; +} +ins +{ + color:green; +} + + + +/*tree navigation*/ +.position_tree_box +{ + margin:5px 5px 25px 5px; + padding:5px; + font:normal 14px/1 sans-serif,arial; + border-top:1px solid #DC143C; + border-bottom:1px solid #DC143C; +} +.position_tree_box a +{ + text-decoration:none; + color:#DC143C; +} +.last_tree_element +{ + font-weight:bold; +} + + + +.td_with_distribution_checkboxes +{ + position:relative; + display:block; +} +.dist_checkboxes_hidden_box +{ + display:none; + position:absolute; + background:#C1E3EF; + top:20px; + left:0px; + width:400px; + padding:3px; +} +.dist_checkboxes_hidden_box_inner +{ + height:150px; + overflow:auto; + z-index:400; +} +.hidden_box_item +{ + margin-bottom:10px; +} +.tables_of_contents +{ + margin:20px 0; + padding:5px; + background-color:#EAF2F4; + border:1px solid #C7DAEF; + -moz-border-radius: 15px; + -webkit-border-radius: 15px; + border-radius: 15px; +} +.tables_of_contents a +{ + font-size:14px; +} +.tables_of_contents_title +{ + margin:10px 25px; + font-weight:bold; +} +/*wiki code*/ +.code_pre +{ +/* width:650px; */ + max-height:300px; + overflow:auto; + background:#f9f4a7; + padding:5px 0 5px 5px; + font-size:12px; +/* color:#4169E1; */ + border:1px dashed #d4cb3b; +} + +.div_h1 +{ + font:bold 18px/1 sans-serif,arial; + border-bottom:1px solid gray; + padding:3px 0px; + margin:20px 0px 10px 0px; + color:gray; +} +.div_h2 +{ + font:bold 17px/1 sans-serif,arial; + color:gray; + padding:2px 0; +} +.div_h3 +{ + font:bold 16px/1 sans-serif,arial; + color:gray; + padding:2px 0; +} +.div_lang +{ + margin-top:4em; + padding:8px; + background:#cfe2ff; + /*border-top:1px solid #FFA500; + border-bottom:1px solid #FFA500;*/ +} +.div_lang a +{ + padding:0px 3px; +} +.talk_login_notice +{ + margin:5px 5px; + padding:5px; + font:bold 14px/1 sans-serif,arial; +/* border:1px solid #4169E1; */ +/* color:#4169E1; */ +/* background:#9acee3; */ +} +.talk_message_item +{ + margin:5px 0px 35px 5px; +} +.talk_message_item_title_date +{ + border-bottom:1px solid gray; + padding-bottom:5px; +/* width:300px; */ +} +.talk_message_item_title +{ + font:bold 14px/1 sans-serif,arial; + margin-bottom:5px; +} +.talk_message_item_date +{ + font:normal 12px/1 sans-serif,arial; + color:gray; +} +.talk_message_item_content +{ + padding:5px 0px; +} +.talk_form_external_box +{ + margin-bottom:20px; +} + +.model_id +{ + font:normal 12px/1 sans-serif,arial; +/* color:gray; */ + margin:5px 3px; + padding:3px; +} + +.top_left_images +{ + height:45px; + margin-top:2px; +} +.top_left_note_image +{ + height:45px; +} +.top_left_images_help +{ + height:30px; + margin-bottom:-10px; +} + +.who_you_are_and_logout, .your_panel_link +{ + margin:0px 0px 10px 0px; + padding:5px 10px; + background-color:#B7F18C; +/* font-weight:bold; */ +/* border-top:1px solid #015512; */ +/* border-bottom:1px solid #015512; */ +} +.your_panel_link +{ + background:#DC143C; + margin-bottom:0px; +/* color:#FFF; */ +} +.your_panel_link a +{ + font-weight:bold; + color:#FFF; +} + +/*form*/ +.entryLabel { + display:block; + font:bold 12px/1em sans-serif,arial; + padding:3px 0px; + margin-top:10px; +/* background:#E6E6FA; */ + width:450px; +} + +.formEntry { + margin:20px 0px; +} + +.formEntry input, .formEntry textarea { + width:450px; + padding:3px; + border: 1px solid #CECECE; +} + +.form_input_text input,.form_textarea textarea { + width:450px; + padding:3px; + border: 1px solid #CECECE; +} +.form_textarea textarea +{ + height:100px; +} +.formClass { + margin:10px; + margin-right:-40px; + width:450px; +} + +.inputEntry { + margin:10px 0px; + float:left; + width:80px; + height:30px; +} + +.panel_top_box +{ + background-color:#C1E3EF; + margin:5px 5px 35px 5px; + padding:10px; + font:bold 14px/1 sans-serif,arial; + border-bottom:1px solid #097fbc; +} +.panel_top_box a +{ + color:#097fbc; +} + +/*list of application in the panel main action*/ +.panelApplicationList +{ + padding:0px; + margin:0px; +} +.panelApplicationList li +{ + display:block; + width:450px; + height:30px; + margin:5px; + padding-top:9px; +} + +.panelApplicationList li a +{ + margin:5px; + font: bold 14px/1 sans-serif,arial; + color:#097fbc; +} + +.confirm_notice +{ + margin:10px; +/* padding:10px; */ + font:normal 14px/1.5 sans-serif,arial; +} + +.meet_item +{ + margin:20px 0px; +} +.meet_item_inner +{ + border-bottom:1px dashed #ed9f4a; + font-weight:bold; +/* color:#8f0754; */ +} +.meet_contrib_link, .contrib_explain_box +{ + margin:10px; +} +.users_contrib_item +{ + margin:10px; + padding:2px 0px; + border-bottom:1px dashed #ed9f4a; +/* color:#8f0754; */ +} +.external_users_contrib +{ + margin-bottom:40px; +} +.contrib_explain_box +{ + font-weight:bold; + margin-bottom:30px; +} +.users_meet_box +{ + margin:25px 30px; + padding:5px 20px; + background:#f6ea99; + border-bottom:1px solid #ed9f4a; + border-top:1px solid #ed9f4a; +} +.delete_account_notice_box +{ + margin:25px 10px; +} +.climb_form_ext_box +{ + margin:25px 10px; +} + +.new_account_title +{ + margin:10px; +} + +.viewall_popup_menu_box_external, .edit_form +{ + clear:left; + clear:right; + margin-bottom:30px; +/* background:#E0FFFF; */ + padding:0px 10px 10px 0px; +} + +.manage_account_link_box +{ + margin-top:5px; +} +.manage_account_link_box a +{ + color:#000; +} +.login_right_box +{ + margin-bottom:15px; +} + +.mandatory_fields_notice +{ + margin:10px 0px; +} + +.help_tables_of_contents +{ + margin:10px; + padding:10px; +} + +.bottom_licence_notice +{ + clear:left; + clear:right; + font:normal 12px/1.2 sans-serif,arial; + padding:10px; + background:#E0FFFF; + margin:25px 0px 5px 0px; +} +.top_licence_notice +{ + clear:left; + clear:right; + font:normal 12px/1.2 sans-serif,arial; + padding:10px; + background:#E0FFFF; + margin:25px 0px 5px 0px; + text-align:left; +} + +/*.copyright_notice_box +{ + text-align:right; + font: normal 12px/1 sans-serif,arial; + padding:14px; +}*/ + +.copyright_notice_box, .footer_credits_box +{ + text-align:center; + width:120px; + float:right; + font: normal 12px/1 sans-serif,arial; + padding:14px; + border-left:3px solid #FFF; +} +.footer_credits_box +{ + width:60px; + border-left:3px solid #FFF; +} +.home_objectives_description +{ + margin:5px; + overflow:hidden; + width:100%; +} +.home_objectives_description img +{ + float:left; + margin-right:5px; +} +.home_objectives_title +{ + margin:15px 5px 5px 5px; +/* background:#90EE90; */ + font-weight:bold; + padding:5px 0px; + border-bottom:1px solid #228B22; +} + +.credits_item_title +{ + margin:15px 5px 5px 5px; +/* background:#90EE90; */ + padding:5px; + border-bottom:1px solid #228B22; + font-weight:bold; +} +.credits_item_description +{ + padding:5px; + margin:5px; + overflow:hidden; + width:100%; +} + +.home_container +{ + margin:20px 0px; +} + +.issues_external_box +{ + margin:40px 5px; +} +.issues_viewall_title +{ + margin:10px 2px; + font-weight:bold; +} +.issues_viewall_table +{ + font:normal 13px/1 sans-serif,arial; +} + +.issues_viewall_table td +{ +/* background:#F0FFFF; */ + padding:5px; +/* border-bottom:1px solid #E6E6FA; */ +} +.issues_viewall_table td a +{ + color:#3E3E3E; +} +.issue_deleted_yes td +{ + background-color:#E6E6FA; +} + +.issue_deleted_yes span +{ + color:red; + padding-left:5px; + font-size:10px; +} + +.issue_deleted_no span +{ + display:none; +} + +.issue_deleted_yes, +.issue_deleted_yes td a +{ + color:#808080; +} + +.issues_viewall_table th +{ + background:#ADD8E6; +/* font-weight:normal; */ +/* border-top:1px solid #4169E1; */ +/* border-left:4px solid #4169E1; */ +/* border-bottom:1px solid #4169E1; */ + padding:5px; +} + +.issues_view_title, .issues_view_description_title +{ + font:bold 14px/1 sans-serif,arial; + padding:5px 0px; + border-bottom:1px solid black; +} +.issues_view_status_and_priority +{ + margin:20px 0px; + font:normal 12px/1 sans-serif,arial; +} +.issues_view_description +{ + margin:20px 0px; +} + +.add_issue_form_title +{ + margin:30px 5px; + font-weight:bold; +} +.add_issue_form +{ + margin:30px 5px; +} + +.contact_div +{ + margin:10px; +} + +.help_external_box +{ + margin:5px; +} +.help_wiki_table thead +{ + text-align:left; +} + +.hardware_element_image +{ + height:50px; + float:left; +} +.markItUpContainer +{ + z-index:0; +} + +.search_form +{ + clear:both; + margin:5px 5px 50px 5px; +} +.search_form_pciid +{ + clear:both; + margin:5px 5px 50px 5px; +} +.search_form_label +{ + overflow:hidden; + height:22px; + margin:15px 5px 20px 5px; +/* background:#90EE90; */ + padding:5px 0px; + border-bottom:1px solid #228B22; + font-weight:bold; +} +.input_entry_search +{ + width:250px; + border: 1px solid #CECECE; + padding:2px; +} + +.search_result_item +{ + margin:5px 5px 15px 5px; + border-top:1px solid #CECECE; + padding:5px 0px; +} +.search_result_item .first_level +{ + overflow:hidden; +} + +.search_result_item_left +{ + width:300px; + float:left; +} +.search_result_item_right +{ + width:400px; + float:left; +} +.diff_color_notice +{ + background:#f1d8d8; + padding:8px; + margin:5px; + margin-bottom:20px; + border-bottom:1px solid #d26262; + border-top:1px solid #d26262; +} + +.gray_text_notice +{ + color:#7c7a7a; +} +.credits_external_box +{ + margin-bottom:40px; +} +.notebook_model img +{ + float:left; +} +.span_model_name +{ + float:left; + margin-left:10px; + padding-top:5px; +} + +/*dialog*/ +#dialog-form, #delete_dialog +{ + display:none; +} +#suggest_dialog +{ + display:none; +} +#dialog-form table +{ + text-align:left; +} +#dialog-form input +{ + width:300px; + border:1px solid #CECECE; +} +#dialog-form textarea, #delete_dialog textarea +{ + width:300px; + height:100px; + border:1px solid #CECECE; +} +.ask_for_removal_class +{ + float:right; + padding-top:5px; +} +.deletion_motivations_title +{ + margin:15px 5px; + border-bottom:1px solid #D26262; +} + +.deletion_motivations_iternal +{ + margin:15px 5px; + padding:5px; + border:1px dashed #D26262; +} +.deletion_motivations_iternal_message +{ + +} + +.news_external_box +{ + margin:5px; + margin-bottom:40px; +} +.news_item +{ +/* background:#f8f1b2; */ +/* padding:5px; */ + margin:30px 0px; +/* border:1px solid #f99f4f; */ +} +.news_item_title +{ + font-weight:bold; + margin:0px 0px 4px 0px; + padding-bottom:5px; + border-bottom:1px solid #9d1d04; + color:#9d1d04; +} +.news_item_date +{ + font: normal 13px/1 sans-serif,arial; +/* color:#e86a17; */ + color:gray; + margin:0px 0px 10px 0px; +} + +.discover_hardware, .download_database +{ + text-align:center; + margin-bottom:5px; +} +.download_database +{ + margin-bottom:30px; +} + +.download_table +{ + margin:10px 0px; + padding:5px; +} +.download_table td +{ + padding:5px 5px; + background:#E0FFFF; +} + +.help_external_box h1 +{ + background:#FFD700; + padding:5px 10px; + color:#800000; + border-top:1px solid #800000; + border-bottom:1px solid #800000; + font:normal 20px/1 sans-serif,arial; +} + +.right_box_ext_box +{ + margin:5px; + margin-bottom:300px; +} + +.add_message_form_title +{ + margin:15px 0px; + font-weight:bold; + padding:5px 0px; + color:#4169E1; +} + +.issues_message_item, .issues_message_item_preview, .issues_message_item_hidden, .talk_message_item_hidden +{ + -moz-border-radius: 12px; + -webkit-border-radius: 12px; + border-radius: 12px; + padding:10px; + margin:20px 0px; + background:#eaf2f4; +/* border-top:1px solid #4169E1; */ +/* border-bottom:1px solid #4169E1; */ +} +.issues_message_item_hidden, .talk_message_item_hidden +{ + background:#FFF; +/* background:#b5d6e0; */ + border-top:1px dashed #bcbcbc; + border-bottom:1px dashed #bcbcbc; +} +.issues_message_item_preview +{ + margin:5px 0px 20px 0px; + background:#FFF; + border:1px dashed #f9a92b; +} +.description_preview +{ + padding:10px; + margin:0px 0px; + border:2px dashed #f9a92b; +} +.description_preview_title +{ + padding:5px 0px; + margin:0px 0px; + font-style:italic; + color:#f9a92b; + font-weight:bold; +} +.talk_message_item_hidden +{ + margin-bottom:40px; +/* background:#f1f1f1; */ +} +.message_view_description +{ + clear:both; + margin-bottom:5px; +} +.message_view_description_hidden +{ + margin-top:5px; +} +.message_preview_notice +{ + color:#f9a92b; + margin:3px 3px; + font:italic 14px/1 sans-serif,arial; +} +.useful_links_ext div +{ + margin:3px 0px; + padding:1px; + padding-left:20px; + background: url(../Img/link.png) no-repeat left center; +} +.useful_links_ext div a +{ + color:#000; + text-decoration:none; + font:normal 14px/1 sans-serif,arial; +} +.issues_message_item_user +{ + overflow:hidden; + font-weight:bold; + margin-bottom:1em; +} +.issues_message_item_user_inner +{ + float:left; + width:500px; +} + +.hide_general, .block_general +{ + clear:right; + float:right; + margin-left:10px; + font-weight:bold; + text-decoration:none; + color:#000; + font-size:13px; + padding-bottom:4px; +} +.hide_general img +{ + margin-right:5px; + margin-bottom:-2px; +} +.block_general img +{ + margin-right:5px; + margin-bottom:-5px; +} +.language_links_box ul +{ + overflow:hidden; + margin:4px 5px 20px 5px; + padding:0px; + list-style-type:none; +} +.language_links_box ul li +{ + float:left; + width:92px; +/* background:red; */ + margin-bottom:10px; +/* margin-right:10px; */ + margin-top:5px; +} +.language_links_box ul li a +{ + padding:5px; + text-decoration:none; + color:black; +} +.language_links_box ul li a span +{ + margin-left:3px; +} +.language_links_box a.current_lang +{ + border-top:1px dashed #6495ED; + border-bottom:1px dashed #6495ED; +} + +.talk_numb_ext +{ + clear:both; + text-align:left; + margin-left:10px; +} +.talk_numb_ext a, .talk_numb_ext_wiki a +{ + display:block; + width:150px; + text-align:center; + padding:10px 0px; + text-decoration:none; + color:black; + background: url(../Img/talk_messages.png) no-repeat left center; + margin-bottom:10px; + float:right; + overflow:hidden; +} + +.details_of_hidden_message +{ + display:none; +} +.details_of_hidden_message_inner, .details_of_actions_inner, .details_of_actions_inner_user +{ + margin:10px 0px; + background:#fbfbfb; + padding:5px; + border:1px solid #BCBCBC; +} +.details_of_actions_inner +{ + background:#ecfffe; + border:1px solid #7ed0cb; +} +.details_of_actions_inner_user +{ +/* background:#F6EA99; */ +/* border:1px solid #F65637; */ +} +.md_type +{ + display:none; +} +.hidden_message_view_details, .hidden_message_view_page +{ + font:normal 12px/1 sans-serif,arial; +} +.deleted_message_show +{ + margin:8px 0px 0px 0px; + font:normal 13px/1 sans-serif,arial; +} + +.noscript_dist_alert +{ + margin-bottom:5px; +} +.noscript_dist_alert span +{ + color:#6495ED; +} + +.isp_notice +{ + background:#dff1f8; + border:1px solid #6495ED; + padding:5px; + font:normal 14px/1.5 sans-serif,arial; +} + +.user_hardware_pages +{ + margin:10px 5px; + padding:10px; + background:#F1D8D8; + /*border-bottom:1px solid #DC143C; + border-top:1px solid #DC143C;*/ +} + +.moderator_box, .moderator_box_deleted +{ + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + border-radius: 10px; + overflow:hidden; + padding:10px; + margin:5px 5px 25px 5px; + background:#fbd59a; +/* border:1px solid #f65637; */ +} +.moderator_box_deleted +{ + background:#C7DAEF; +/* border:1px solid #ADD8E6; */ +} + +.listTable +{ + margin:20px 5px; + width:100%; +} + +/*MODERATORS' PAGE*/ +tr.listRow td +{ + font: normal 13px/1 sans-serif,arial; + padding:5px 5px; +} +tr.listRow td.type_column +{ + width:15%; +} +tr.listHead { + font: bold 13px/1 sans-serif,arial; +} + +tr.listHead td { + padding:8px 4px; + background:#ADD8E6; +/* border-top:1px solid #4169E1; */ +/* border-bottom:1px solid #4169E1; */ +} + +.recordsBox { + margin:10px 5px; +} + +.recordsBox table { + width:100%; +} + +a.linkItem { +/* background:red; */ + font:bold 12px/1 sans-serif,arial; +} + +td.text_item_date +{ + width:25%; +} +.moderator_panel_link, .admin_panel_link +{ + margin:5px; + padding:10px; +/* border:1px solid #ED9F4A; */ +/* background:#F6EA99; */ +} +.admin_panel_link +{ +/* border:1px solid #DA70D6; */ +/* background:#F6EA99; */ +} +.noscript_notice +{ + margin:10px 5px; + padding:5px 10px; + background:#B0E0E6; + border:1px solid #4169E1; + color:#4169E1; +} +.search_img +{ + float:left; +} +.span_search_desc +{ + float:left; + margin-left:10px; + padding-top:0px; +} +.textarea_entry_search +{ + width:430px; + height:200px; + padding:3px; + border: 1px solid #CECECE; +} +.lspci_notice +{ + margin:10px 0px; + padding:5px 10px; + background:#B7F18C; + font-weight:bold; +/* border: 1px solid #CECECE; */ +} + +.lspci_item_found, .lspci_item_not_found +{ + margin:20px 5px; + background: url('../Img/search_back.png') no-repeat top left; +/* background: #C7DAEF; */ + padding:12px 15px; + border-bottom:3px solid #8eb5df; + border-right:1px solid #8eb5df; +} +.lspci_item_found_compat +{ + padding-left:37px; +} + +.search_result_model_name +{ + padding-left:10px; +} + +.search_item_found +{ + margin:5px; +} + +.lspci_item_not_found +{ + background: #ffe170; + border-bottom:3px solid #e8c224; + border-right:1px solid #e8c224; +} +.lspci_item_found_compat ul li +{ + list-style-type:none; +} +.lspci_item_found_compat ul +{ + margin:10px 20px; + padding:0px; +} +.found_ext +{ + margin-bottom:2em; +} + +.lspci_item_found_compat a +{ + text-decoration:none; + font:normal 16px/1 sans-serif; +} + +.last_modifications, .wiki_control_box +{ + margin:5px; + width:190px; + margin-bottom:2em; + background: url(../Img/back_last.png) no-repeat top left; +} +.wiki_control_box +{ + background: url(../Img/back_wiki.png) no-repeat top left; +} +.last_modifications ul, .wiki_control_box ul +{ + padding:8px; + padding-top:0px; +} +.wiki_control_box ul +{ + background: url(../Img/back_wiki.png) no-repeat bottom left; +} +.last_modifications li, .wiki_control_box li +{ + list-style-type:none; + margin:10px 5px; +} +.last_modifications_title +{ + padding-top:10px; + padding-left:14px; + font:bold 15px/1 sans-serif; +} +.last_modifications a +{ + +} +.last_modifications_model +{ + color:#3e3e3e; + text-decoration:none; +} +.last_modifications_all +{ + background: url(../Img/back_last.png) no-repeat bottom left; + padding-bottom:10px; +} +.last_modifications_all span +{ + margin-left:10px; + font:normal 14px/1 sans-serif; +} + +.wiki_external_box +{ + margin:4em 5px; + clear:both; + clear:right; +} +.wiki_page_title +{ + font:bold 18px/1 sans-serif,arial; + color:gray; + margin:20px 0px; + padding-bottom:4px; + border-bottom:1px solid #000; +} +.wiki_page_content +{ + margin:2em 0px; +} + +.talk_numb_ext_wiki +{ + float:left; + text-align:left; + margin-left:10px; +} +.blocked_notice +{ + float:right; + font:normal 12px/1 sans-serif; + color:#000; +} +.entry_label_small +{ + font-weight:normal; + font-size:12px; + color:#808080; +} + +.clear_right +{ + clear:right; +} +#admin_box, #moderator_box +{ + margin:20px 10px; +/* border-bottom:1px solid #DC143C; */ +/* border-top:1px solid #DC143C; */ + border-left:10px solid #DC143C; +/* background-color:#F0FFFF; */ + padding:10px; +} +#moderator_box +{ +/* background-color:#fffc8e; */ +/* border-bottom:1px solid #FFA500; */ + border-left:10px solid #FFA500; +} +.admin_box_title, .moderator_box_title +{ + margin-bottom:10px; + font-size:12px; + font-weight:bold; +/* color:#FFF; */ +} +#admin_box ul, #moderator_box ul +{ + margin:0px; + padding:0px; + margin-left:15px; +} +#admin_box ul li, #moderator_box ul li +{ + list-style-type:none; + padding:5px 0px; +} +#admin_box ul li a, #moderator_box ul li a +{ + color:#DC143C; + font-weight:bold; +} +#admin_box ul li a.not_bold +{ + color:#000; + font-weight:normal; +} +#moderator_box ul li a +{ + color:#FF4500; +} +.display_none +{ + display:none; +} + +.moderation_details_box +{ + clear:right; + margin-top:5px; +} + +.not_logged_license +{ + padding:10px; + background-color:#F1D8D8; + font-size:12px; +} +.rss_right_box +{ + text-align:center; + padding:5px; + margin-bottom:15px; +/* margin-bottom:25px; + padding:5px; + overflow:hidden; + height:32px; + background-color:#C7DAEF; + color:#FFF;*/ +} + +/*.rss_right_box img +{ + float:left; +} +.rss_right_box_text +{ + float:left; + margin:5px 10px; + font-weight:bold; +} +.rss_right_box_text a +{ + color:#000; +/* text-decoration:none; */ + font-weight:normal; +}*/ + +/*tabs*/ +.description_tabs +{ + margin-top:10px; +} +div#description_tabs_content +{ + clear:left; +/* width:707px; */ +/* padding-left:5px; */ + border:1px solid #DCDCDC; + position:relative; + z-index:1; +} +.description_tabs_page +{ + margin:10px; +} +.description_tabs ul.desc_menu +{ + width:700px; +/* border-bottom:1px solid #DCDCDC; */ +/* overflow:hidden; */ + margin:0px; +/* height:34px; */ + padding:0px; + position:relative; + z-index:4; +/* background-color:red; */ + top:1px; +/* padding-left:10px; */ +} +.description_tabs li.desc_tabs +{ + display:block; + float:left; + width:70px; + text-align:center; + padding:6px 8px; + border:1px solid #DCDCDC; + background-color:#E6E6FA; + position:relative; + margin-right:8px; + margin-left:0px; + z-index:5; +} +.description_tabs li.current_tab +{ + background-color:#FFF; + border-bottom:1px solid #FFF; +} +.description_tabs li.desc_tabs a +{ +/* text-decoration:none; */ + color:#000; +/* font-weight:bold; */ +} +.separation_line +{ + background-color:#DCDCDC; + padding:6px 8px; + margin:20px 0; +} +.lspci_item_not_found_inner +{ + margin:10px 0 5px 0; + font-weight:bold; +} +.insert_suggestion_list +{ + list-style-type:none; +} +.insert_suggestion_list li +{ + margin:10px 0; +} + +.issue_hidden_notice, .wiki_hidden_notice +{ + width:450px; + float:left; + margin-bottom:10px; + color:red; +} +.wiki_hidden_notice +{ + color:#000; +} +.show_hidden_box_ext +{ + clear:left; +} +.box_module_how_to_compile +{ +/* height:30px; */ + background-color:#F0E68C; +/* clear:left; */ + margin-top:5px; + padding:10px; + font-size:12px; +} +.box_module_label a +{ + color:#FF4500; + font-size:12px; +} + +.track_alert +{ + border:10px solid red; + padding:5px; +} + +.catalogue_top_notice +{ + clear:right; + margin:0 5px; +} + +.version_div +{ + margin-bottom:30px; + text-align:center; +} + +.model_string_search_form +{ + margin:5px; + padding:8px; + background-color:#C7DAEF; + border: 1px solid #6495ED; + width:685px; +} + +.model_string_search_form img +{ + vertical-align:-3px; +} + +.user_action_filter +{ + width:190px; +} +.user_action_filter img, .user_action_filter_submit +{ + vertical-align:middle; +} +.user_action_filter_text +{ + width:130px; +} + +.no_bold +{ + font-weight:normal; +} + +/*.version_div a +{ + display:block; + background-color: #C7DAEF; + margin: 5px 5px; + margin-bottom:20px; + padding: 5px 10px; + padding-left:5px; + color:#000; + text-decoration:none; + font-weight:bold; +} +.version_div a img +{ + vertical-align:middle; +}*/ +/*.version_div a div +{ + padding-top:14px; +}*/ +/* +Start - temporarily added due to transformation of help pages +2011-05-29 joeko +*/ +.help_external_box ul { + line-height: 1.5em; + list-style-type: square; + margin: .3em 0 0 1.5em; + padding: 0; +} +.help_external_box ol { + line-height: 1.5em; + margin: .3em 0 0 3.2em; + padding: 0; + list-style-image: none; +} +.help_external_box li { + margin-bottom: .1em; +} +.help_external_box dt { + font-weight: bold; + margin-top: .5em; + margin-bottom: .3em; + color: #3D6300; +} +.help_external_box dl { + margin-top: .4em; + margin-bottom: .2em; +} +.help_external_box dd { + line-height: 1.5em; + margin-top: .5em; + margin-left: 2em; + margin-top: .5em; + margin-bottom: .5em; +} +.help_external_box p, .help_external_box dd { + margin-top: .5em; + margin-bottom: .5em; +} +.help_external_box p.attention { + /* taken from home page */ + padding: 0.5em; + background: none repeat scroll 0% 0% rgb(255, 160, 122); + margin: 0.5em; + border-top: 1px solid rgb(220, 20, 60); + border-bottom: 1px solid rgb(220, 20, 60); + font-size: 16px; +} +.help_external_box p.example, dd.example { + border-bottom: 0; + color: #3d6300; +} +.help_external_box p.note dd.note { + margin-left: 2em; + margin-right: 0; + font-weight: bolder; + color: #3d6300; /* background: #CFC bottom right no-repeat;*/; + font-style: normal; + font-style: italic; +} +.help_external_box p.opt, dd.opt { + color: #3d6300; + font-weight: bold; + font-style: italic; +} + +.help_external_box h2,.help_external_box h3,.help_external_box h4 +{ + margin: 0 4px 0 0; + padding: 0.2em 0 0.3em 1.25em; + font-size: 1.4em; + color: #353535; + background: #D8FF9E; +} +.help_external_box h2 +{ + font-size: 1.3em; + color: #3D6300; +} +.help_external_box h3 +{ + font-size: 1.2em; + color: #3D6300; + background-color: White; +} +.help_external_box h4 +{ + font-size: 1.1em; + color: #3D6300; + background-color: White; +} +.help_external_box p.terminal,.help_external_box pre.terminal +{ + font-family: monospace; + padding: .5em 1em; + background-color: rgb(50,50,50); + border-left: 2px solid rgb(97,97,97); + color: white; +} + +/* +End +*/ diff --git a/Css/mainmenu.css b/Css/mainmenu.css new file mode 100755 index 0000000..615c8bf --- /dev/null +++ b/Css/mainmenu.css @@ -0,0 +1,78 @@ +/*stile header di ogni view*/ +.mainMenu { + height:50px; +/* border-top:1px solid #ADD8E6; */ + border-bottom:1px solid #4169E1; + padding-top:6px; + margin-bottom:10px; + background:#d1deed; +} +.mainMenuItem { + float:left; + width:60px; + height:40px; + margin-left:5px; + border:1px outset #708090; + background:#4169E1; + text-align:center; +} + +.mainMenuItem a { +/* margin:8px 5px 1px 10px; */ + display:block; + margin-top:12px; + color:#B0E0E6; + font:bold 14px/1 Verdana,arial; +} + +.verticalMenu { + margin-bottom:30px; + margin-left:10px; +/* text-align:right;*/ +} + +ul#menuBlock { +/* float:right; */ + float:left; + margin:0px; + padding:0px; + list-style:none; + height:24px; +} + +ul#menuBlock li { + position:relative; + display:block; + float:left; + width:100px; + border:1px outset #D3D3D3; + height:21px; +# height:24px; + text-align:center; + background:#E6E6FA; + padding-top:3px; +} + +ul#menuBlock li a { + color:#696969; + font: bold 12px/1 Verdana,arial; +} + +ul#menuBlock li ul { + margin:0px; + padding:0px; + list-style:none; + position:absolute; + top:24px; +# top:25px; + left:-1px; + display:none; +} + +ul#menuBlock li ul li { +# margin-top:-3px; +} + +/*ul#menuBlock li:hover ul{ + display:block; +}*/ \ No newline at end of file diff --git a/Css/mobile.css b/Css/mobile.css new file mode 100644 index 0000000..4fa4c83 --- /dev/null +++ b/Css/mobile.css @@ -0,0 +1,271 @@ +/*stili per il layout fisso*/ +html, body +{ + margin: 0; + padding:0; +} + +body +{ + font:normal 15px/1.3 sans-serif,arial; + text-align: left; + background:#ffffff; +} + +img +{ + border:0px; +} + +#footer +{ + /*padding-bottom:5px; + padding-top:5px;*/ +} +#footer div +{ + text-align:center; +} +#footer a +{ +/* color: #DC143C; */ +} + +.navigation-bar +{ + background-color: #015512; + height:35px; + padding-top:5px; + padding-right:5px; +} + +/*tree navigation*/ +.position_tree_box +{ + margin:5px 0px 25px 0px; + padding:5px; + font:normal 14px/1 sans-serif,arial; + border-top:1px solid #DC143C; + border-bottom:1px solid #DC143C; +} +.position_tree_box a, .position_tree_box a.ui-link:visited, .position_tree_box .ui-link +{ + text-decoration:none; + color:#DC143C; +} +/*.ui-body-d .ui-link { + color:#DC143C; + font-weight: bold; +}*/ +.last_tree_element +{ + font-weight:bold; +} + +.credits_item_title +{ + margin:15px 5px 5px 5px; + padding:5px; + padding-left:0px; + border-bottom:1px solid #228B22; + font-weight:bold; +} +.credits_item_description +{ + padding:5px; + padding-left:0px; + margin:5px; + overflow:hidden; + width:100%; +} + +#hardware_list +{ +/* padding:0 15px; */ + margin-top:20px; + margin-bottom:20px; +} +.bottom_licence_notice +{ + clear:left; + clear:right; + font:normal 12px/1.2 sans-serif,arial; + padding:10px; + background:#E0FFFF; + margin:25px 0px 5px 0px; +} +.page_list +{ + margin-top:28px; +} + +.notebook_view_title +{ + margin-bottom:28px; +} +/*jquery mobile*/ +.ui-header { + background: #B7F18C; +} + +.ui-li-thumb { + left: 5px; + max-height: 70px; + max-width: 70px; + position: absolute; + top: 5px; +} + +.ui-content .ui-listview { + margin: 15px -15px; +} + +#language-dialog .ui-header .ui-title +{ + display: block; + font-size: 16px; + margin: 0.7em 0; + margin-left:30px; + margin-top:0.8em; + text-align: left; +} +.main_content_element +{ + padding:5px 0; + border-top:1px dashed #000; +} + +.track_alert +{ + border:10px solid red; + padding:5px; +} + +.device_description +{ + background-color:#E6E6FA; + padding:5px; +} + +.viewall_no_items_found +{ + font:normal 14px/1 sans-serif,arial; + margin:20px 5px; + padding:5px; +/* color: #FF4500; */ + border-top:1px solid #FF4500; + border-bottom:1px solid #FF4500; +} + +.home_objectives_description +{ + margin:5px; + overflow:hidden; + width:100%; +} +.home_objectives_description img +{ + float:left; + margin-right:5px; +} +.home_objectives_title +{ + margin:15px 5px 5px 5px; +/* background:#90EE90; */ + font-weight:bold; + padding:5px 0px; + border-bottom:1px solid #228B22; +} + +.home_container +{ + margin:20px 0px; +} + +.tables_of_contents +{ + margin:20px 0; + padding:5px; + background-color:#EAF2F4; + border:1px solid #C7DAEF; + -moz-border-radius: 15px; + -webkit-border-radius: 15px; +} +.tables_of_contents a +{ + font-size:14px; +} +.tables_of_contents_title +{ + margin:10px 25px; + font-weight:bold; +} +/*wiki code*/ +.code_pre +{ +/* width:650px; */ + max-height:300px; + overflow:scroll; + background:#f9f4a7; + padding:5px 0 5px 5px; + font-size:12px; +/* color:#4169E1; */ + border:1px dashed #d4cb3b; +} + +.div_h1 +{ + font:bold 18px/1 sans-serif,arial; + border-bottom:1px solid gray; + padding:3px 0px; + margin:20px 0px 10px 0px; + color:gray; +} +.div_h2 +{ + font:bold 17px/1 sans-serif,arial; + color:gray; + padding:2px 0; +} +.div_h3 +{ + font:bold 16px/1 sans-serif,arial; + color:gray; + padding:2px 0; +} +.div_lang +{ + margin-top:4em; + padding:8px; + background:#cfe2ff; + /*border-top:1px solid #FFA500; + border-bottom:1px solid #FFA500;*/ +} +.div_lang a +{ + padding:0px 3px; +} + +.ui-body { + padding-top: 0.8em; + margin-top:10px; +} + +.ui-li-desc { white-space: normal; } +.ui-li-heading { white-space: normal; } +.ui-li .ui-btn-text a.ui-link-inherit { white-space: normal; } + +.devices_list .ui-li-desc +{ +/* border-bottom:1px dashed #A9A9A9; */ +} + +.ui-listview .ui-li-icon { + top: 1.3em; +} + +/*.ui-icon, .ui-icon-searchfield:after { + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + background: url("images/icons-18-white.png") no-repeat scroll 0 0 rgba(0, 0, 0, 0.4); +}*/ diff --git a/Css/pagelist.css b/Css/pagelist.css new file mode 100644 index 0000000..93c8454 --- /dev/null +++ b/Css/pagelist.css @@ -0,0 +1,29 @@ +/*page division*/ +.pageList { + text-align:left; + font:normal 14px/1 Verdana,arial; + padding:10px; +} + +div.pageList a { + padding:5px 10px; + border:1px outset #708090; + color:#B0E0E6; + background:#4169E1; + margin-right:5px; +} + +/*view footer*/ +.viewFooter { + height:50px; + border-top:1px solid #4169E1; + padding-top:6px; + margin-bottom:10px; + background:#d1deed; +} + +div.pageList a.currentPage +{ + font-weight:bold; + background:#0000CD; +} \ No newline at end of file diff --git a/Css/panel.css b/Css/panel.css new file mode 100644 index 0000000..8b9f9a9 --- /dev/null +++ b/Css/panel.css @@ -0,0 +1,74 @@ +ul { + list-style-type: none; +} + +div.mainPanel { + +} + +/*logout button*/ +.logoutButton +{ + float:left; + width:70px; + height:40px; + margin-left:5px; + border:1px outset #708090; + background:#4169E1; + text-align:center; +} +.logoutButton a +{ + display:block; + margin-top:13px; + color:#B0E0E6; + font:bold 12px/1 Verdana,arial; +} + +/*list of application in the panel main action*/ +.panelApplicationList +{ + padding:0px; +} +.panelApplicationList li +{ + display:block; + width:200px; + height:30px; + border:1px outset #708090; + margin:5px; + background:#4169E1; + padding-top:9px; +} + +.panelApplicationList li a +{ + margin:5px; + font: bold 14px/1 Verdana,arial; + color:#B0E0E6; +} + +/*list of groups an user is inserted within*/ +.groupsList +{ + margin:20px 5px 5px 5px; + font:normal 14px/1 Verdana,arial; +} +.groupsList li +{ + margin:5px 0px; + padding:0px; + font:bold 14px/1 Verdana,arial; +} +.groupsList ul +{ + padding:10px; +} + +/*list of logged users in panel*/ +.usersLoggedList +{ + margin:5px; + text-align:right; + font:normal 14px/1 Verdana,arial; +} \ No newline at end of file diff --git a/Css/popupmenu.css b/Css/popupmenu.css new file mode 100755 index 0000000..66a202e --- /dev/null +++ b/Css/popupmenu.css @@ -0,0 +1,49 @@ +.verticalMenu { + margin-bottom:50px; + margin-left:10px; +/* text-align:right;*/ +} + +ul#menuBlock { +/* float:right; */ + float:left; + margin:0px; + padding:0px; + list-style:none; + height:24px; +} + +ul#menuBlock li { + position:relative; + display:block; + float:left; + width:150px; + border:1px outset #D3D3D3; + height:21px; + text-align:center; + background:#E6E6FA; + padding-top:5px; + padding-bottom:-2px; +} + +ul#menuBlock li a { + color:#696969; + font: bold 12px/1 Verdana,arial; +} + +ul#menuBlock li ul { + margin:0px; + padding:0px; + list-style:none; + position:absolute; + top:24px; + left:-1px; + display:none; +} + +ul#menuBlock li ul li { +} + +/*ul#menuBlock li:hover ul{ + display:block; +}*/ \ No newline at end of file diff --git a/Css/scaffold.css b/Css/scaffold.css new file mode 100755 index 0000000..8cc7529 --- /dev/null +++ b/Css/scaffold.css @@ -0,0 +1,105 @@ +html, body{margin: 0;padding:0} + +body{ + font-family: Verdana,arial,sans-serif; + font-size: 11px; + text-align: center; +/* background: #93045a; */ +} + +td { + font-size: 12px; +} + +img { + border:none; +} + +td.editForm, td.delForm, td.associateForm, td.moveupForm, td.movedownForm { + width:3%; +} + +td.editForm input, td.delForm input, td.associateForm input, td.moveupForm input, td.movedownForm input +{ + height:30px; +} + +/*alert string*/ +.alert { + font:bold 12px/1.5 Verdana,arial; + padding:5px; + margin:5px 5px 15px 5px; + background:TOMATO; + border-top:2px solid MAROON; + border-bottom:2px solid MAROON; + color:MAROON; +} + +/*executed operation string*/ +.executed { + font:bold 12px/1.5 Verdana,arial; + padding:5px; + margin:5px 5px 15px 5px; + background:#E0FFFF; + border-top:2px solid #ADD8E6; + border-bottom:2px solid #ADD8E6; + color:#4169E1; +} + +/*action:main*/ +tr.listRow { + background:#E6E6FA; +} + +tr.listHead { + font-weight: bold; + background:#d1deed; + border:1px solid #4169E1; + border-bottom:1px solid #4169E1; +} + +tr.listHead td { +/* font-weight: bold; */ +/* background:#d1deed; */ + border-top:1px solid #4169E1; + border-bottom:1px solid #4169E1; +} + +.recordsBox { + margin:10px 0px; +} + +.recordsBox table { + width:100%; +} + +.listItemForm { + margin:0px; +} + +a.linkItem { +/* background:red; */ + font:bold 12px/1 Verdana,arial; +} + +/*controller:panel +/*action:main*/ +.main_box { + padding:50px 20px; + width:700px; + height:250px; +} +.top_color { + text-align:center; + width:160px; + height:35px; + margin:0; + padding:0; +} +.bottom_color { + background:lavender; + text-align:center; + width:160px; + margin:0; + padding:5px 0; +} \ No newline at end of file diff --git a/External/Fonts/FreeFont/AUTHORS b/External/Fonts/FreeFont/AUTHORS new file mode 100755 index 0000000..4148c93 --- /dev/null +++ b/External/Fonts/FreeFont/AUTHORS @@ -0,0 +1,208 @@ +-*- mode:text; coding:utf-8; -*- + GNU FreeFont Authors + ==================== + +The FreeFont collection is being maintained by + Steve White +The folowing list cites the other contributors that contributed to +particular ISO 10646 blocks. + +* URW++ Design & Development GmbH + + Basic Latin (U+0041-U+007A) + Latin-1 Supplement (U+00C0-U+00FF) (most) + Latin Extended-A (U+0100-U+017F) + Spacing Modifier Letters (U+02B0-U+02FF) + Mathematical Operators (U+2200-U+22FF) (parts) + Block Elements (U+2580-U+259F) + Dingbats (U+2700-U+27BF) + +* Yannis Haralambous and John + Plaice + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + Greek (U+0370-U+03FF) + Armenian (U+0530-U+058F) + Hebrew (U+0590-U+05FF) + Arabic (U+0600-U+06FF) + Currency Symbols (U+20A0-U+20CF) + Arabic Presentation Forms-A (U+FB50-U+FDFF) + Arabic Presentation Forms-B (U+FE70-U+FEFF) + +* Young U. Ryu + + Arrows (U+2190-U+21FF) + Mathematical Symbols (U+2200-U+22FF) + Mathematical Alphanumeric Symbols (U+1D400-U+1D7FF) + +* Valek Filippov + + Cyrillic (U+0400-U+04FF) + +* Wadalab Kanji Comittee + + Hiragana (U+3040-U+309F) + Katakana (U+30A0-U+30FF) + +* Angelo Haritsis + + Greek (U+0370-U+03FF) + +* Yannis Haralambous and Virach Sornlertlamvanich + + Thai (U+0E00-U+0E7F) + +* Shaheed R. Haque + + Bengali (U+0980-U+09FF) + +* Sam Stepanyan + + Armenian (U+0530-U+058F) + +* Mohamed Ishan + + Thaana (U+0780-U+07BF) + +* Sushant Kumar Dash + + Oriya (U+0B00-U+0B7F) + +* Harsh Kumar + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + +* Prasad A. Chodavarapu + + Telugu (U+0C00-U+0C7F) + +* Frans Velthuis and Anshuman Pandey + + + Devanagari (U+0900-U+097F) + +* Hardip Singh Pannu + + Gurmukhi (U+0A00-U+0A7F) + +* Jeroen Hellingman + + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + +* Thomas Ridgeway + + Tamil (U+0B80-U+0BFF) + +* Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>, + Prof. Dr. Manfred Kudlek , Olaf + Kummer , and Jochen Metzinger + + Ethiopic (U+1200-U+137F) + +* Maxim Iorsh + + Hebrew (U+0590-U+05FF) + +* Vyacheslav Dikonov + + Syriac (U+0700-U+074A) + Braille (U+2800-U+28FF) + +* Panayotis Katsaloulis + + Greek Extended (U+1F00-U+1FFF) + +* M.S. Sridhar + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Tamil (U+0B80-U+0BFF) + Telugu (U+0C00-U+0C7F) + Kannada (U+0C80-U+0CFF) + Malayalam (U+0D00-U+0D7F) + +* DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt + + + Sinhala (U+0D80-U+0DFF) + +* Dan Shurovich Chirkov + + Cyrillic (U+0400-U+04FF) + +* Abbas Izad + + Arabic (U+0600-U+06FF) + Arabic Presentation Forms-A (U+FB50-U+FDFF) + Arabic Presentation Forms-B (U+FE70-U+FEFF) + +* Denis Jacquerye + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + +* K.H. Hussain and R. Chitrajan + + Malayalam (U+0D00-U+0D7F) + +* Solaiman Karim and Omi Azad + + Bengali (U+0980-U+09FF) + +* Sonali Sonania and Monika Shah + + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + +* Pravin Satpute , Bageshri Salvi + , Rahul Bhalerao and Sandeep Shedmake + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + Tamil (U+0B80-U+0BFF) + +* Kulbir Singh Thind + + Gurmukhi (U+0A00-U+0A7F) + +* Gia Shervashidze + + Georgian (U+10A0-U+10FF) + +* Daniel Johnson + + Cherokee (U+13A0-U+13FF) + +* George Douros + + Gothic (U+10330-U+1034F) + Phoenecian (U+10900-U+1091F) + Byzantine Musical Symbols (U+1D000-U+1D0FF) + Western Musical Symbols (U+1D100-U+1D1DF) + Mathematical Alphanumeric Symbols (U+1D400-U+1D7FF) + Mah Jong Tiles (U+1F000-U+1F02B) + Dominoes (U+1F030-U+1F093) + +* Steve White + Coptic (U+2C80-U+2CFF) + +* Primož Peterlin + maintained FreeFont for several years, and is thanked for all his work. + +Please see the CREDITS file for details on who contributed particular +subsets of the glyphs in font files. + +-------------------------------------------------------------------------- +$Id: AUTHORS,v 1.18 2009/01/04 15:57:54 Stevan_White Exp $ diff --git a/External/Fonts/FreeFont/COPYING b/External/Fonts/FreeFont/COPYING new file mode 100755 index 0000000..94a9ed0 --- /dev/null +++ b/External/Fonts/FreeFont/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/External/Fonts/FreeFont/CREDITS b/External/Fonts/FreeFont/CREDITS new file mode 100755 index 0000000..0f47440 --- /dev/null +++ b/External/Fonts/FreeFont/CREDITS @@ -0,0 +1,528 @@ +-*- mode:text; coding:utf-8; -*- + GNU FreeFont Credits + ==================== + +This file lists contributors and contributions to the GNU FreeFont project. + + +* URW++ Design & Development GmbH + +URW++ donated a set of 35 core PostScript Type 1 fonts to the +Ghostscript project , to be available +under the terms of GNU General Public License (GPL). + + Basic Latin (U+0041-U+007A) + Latin-1 Supplement (U+00C0-U+00FF) + Latin Extended-A (U+0100-U+017F) + Spacing Modifier Letters (U+02B0-U+02FF) + Mathematical Operators (U+2200-U+22FF) + Block Elements (U+2580-U+259F) + Dingbats (U+2700-U+27BF) + + +* Yannis Haralambous and John + Plaice + +Yannis Haralambous and John Plaice are the authors of Omega typesetting +system, . Omega is an extension of TeX. +Its first release, aims primarily at improving TeX's multilingual abilities. +In Omega all characters and pointers into data-structures are 16-bit wide, +instead of 8-bit, thereby eliminating many of the trivial limitations of TeX. +Omega also allows multiple input and output character sets, and uses +programmable filters to translate from one encoding to another, to perform +contextual analysis, etc. Internally, Omega uses the universal 16-bit Unicode +standard character set, based on ISO-10646. These improvements not only make +it a lot easier for TeX users to cope with multiple or complex languages, +like Arabic, Indic, Khmer, Chinese, Japanese or Korean, in one document, but +will also form the basis for future developments in other areas, such as +native color support and hypertext features. ... Fonts for UT1 (omlgc family) +and UT2 (omah family) are under development: these fonts are in PostScript +format and visually close to Times and Helvetica font families. +Omega fonts are available subject to GPL + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + Greek (U+0370-U+03FF) + Armenian (U+0530-U+058F) + Hebrew (U+0590-U+05FF) + Arabic (U+0600-U+06FF) + Currency Symbols (U+20A0-U+20CF) + Arabic Presentation Forms-A (U+FB50-U+FDFF) + Arabic Presentation Forms-B (U+FE70-U+FEFF) + +Current info: + +* Valek Filippov + +Valek Filippov added Cyrillic glyphs and composite Latin Extended A to +the whole set of the abovementioned URW set of 35 PostScript core fonts, +. The fonts are available under GPL. + + Latin Extended-A (U+0100-U+017F) + Cyrillic (U+0400-U+04FF) + + +* Wadalab Kanji Comittee + +Between April 1990 and March 1992, Wadalab Kanji Comittee put together +a series of scalable font files with Japanese scripts, in four forms: +Sai Micho, Chu Mincho, Cho Kaku and Saimaru. The font files are +written in custom file format, while tools for conversion into +Metafont and PostScript Type 1 are also supplied. The Wadalab Kanji +Comittee has later been dismissed, and the resulting files can be now +found on the FTP server of the Depertment of Mathematical Engineering +and Information Physics, Faculty of Engineering, University of Tokyo +. + + Hiragana (U+3040-U+309F) + Katakana (U+30A0-U+30FF) + + +* Young U. Ryu + +Young Ryu is the author of Txfonts, a set of mathematical symbols +designed to accompany text typeset in Times or its variants. In the +documentation, Young adresses the design of mathematical symbols: "The +Adobe Times fonts are thicker than the CM fonts. Designing math fonts +for Times based on the rule thickness of Times = , , + , / , < , +etc. would result in too thick math symbols, in my opinion. In the TX +fonts, these glyphs are thinner than those of original Times +fonts. That is, the rule thickness of these glyphs is around 85% of +that of the Times fonts, but still thicker than that of the CM fonts." +TX fonts are are distributed under the GNU public license (GPL). +. + + Arrows (U+2190-U+21FF) + Mathematical Symbols (U+2200-U+22FF) + + +* Angelo Haritsis + +Angelo Haritsis has compiled a set of Greek Type 1 fonts, available on +. +The glyphs from this source has been used to compose Greek glyphs in +FreeSans and FreeMono. + +Angelo's licence says: "You can enjoy free use of these fonts for +educational or commercial purposes. All derived works should include +this paragraph. If you want to change something please let me have +your changes (via email) so that they can go into the next +version. You can also send comments etc to the above address." + + Greek (U+0370-U+03FF) + + +* Yannis Haralambous and Virach Sornlertlamvanich + +In 1999, Yannis Haralambous and Virach Sornlertlamvanich made a set of +glyphs covering the Thai national standard Nf3, in both upright and +slanted shape. The collection of glyphs have been made part of GNU +intlfonts 1.2 package and is available under the GPL at +. + + Thai (U+0E00-U+0E7F) + + +* Shaheed R. Haque + +Shaheed Haque has developed a basic set of basic Bengali glyphs +(without ligatures), using ISO10646 encoding. They are available under +the XFree86 license at . + +Copyright (C) 2001 S.R.Haque . All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL S.R.HAQUE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of S.R.Haque shall not be +used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from +S.R.Haque. + + Bengali (U+0980-U+09FF) + + +* Sam Stepanyan + +Sam Stepanyan created a set of Armenian sans serif glyphs visually +compatible with Helvetica or Arial. Available on +. On +2002-01-24, Sam writes: "Arial Armenian font is free for +non-commercial use, so it is OK to use under GPL license." + + Armenian (U+0530-U+058F) + + +* Mohamed Ishan + +Mohamed Ishan has started a Thaana Unicode Project + and among other things created a +couple of Thaana fonts, available under FDL or BDF license. + + Thaana (U+0780-U+07BF) + + +* Sushant Kumar Dash (*) + +Sushant Dash has created a font in his mother tongue, Oriya. As he +states on his web page : +"Please feel free to foreword this mail to your Oriya friends. No +copyright law is applied for this font. It is totally free!!! Feel +free to modify this using any font editing tools. This is designed for +people like me, who are away from Orissa and want to write letters +home using Computers, but suffer due to unavailability of Oriya +fonts.(Or the cost of the available packages are too much)." + + Oriya (U+0B00-U+0B7F) + + +* Harsh Kumar + +Harsh Kumar has started BharatBhasha - +an effort to provide "FREE software, Tutorial, Source Codes +etc. available for working in Hindi, Marathi, Gujarati, Gurmukhi and +Bangla. You can type text, write Web pages or develop Indian Languages +Applications on Windows and on Linux. We also offer FREE help to +users, enthusiasts and software developers for their work in Indian +languages." + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + + +* Prasad A. Chodavarapu + +Prasad A. Chodavarapu created Tikkana, a Telugu font available in Type +1 and TrueType format on . +Tikkana exceeds the Unicode Telugu range with some composite glyphs. +Available under the GNU General Public License. + + Telugu (U+0C00-U+0C7F) + + +* Frans Velthuis and Anshuman Pandey + + +In 1991, Frans Velthuis from the Groningen University, The +Netherlands, released a Devanagari font as Metafont source, available +under the terms of GNU GPL. Later, Anshuman Pandey from the Washington +University, Seattle, USA, took over the maintenance of font. Fonts can +be found on CTAN, . I +converted the font to Type 1 format using Péter Szabó's TeXtrace +program and removed some +redundant control points with PfaEdit. + + Devanagari (U+0900-U+097F) + + +* Hardip Singh Pannu + +In 1991, Hardip Singh Pannu has created a free Gurmukhi TrueType font, +available as regular, bold, oblique and bold oblique form. Its license +says "Please remember that these fonts are copyrighted (by me) and are +for non-profit use only." + + Gurmukhi (U+0A00-U+0A7F) + + +* Jeroen Hellingman + +Jeroen Hellingman created a set of Malayalam metafonts in 1994, and a +set of Oriya metafonts in 1996. Malayalam fonts were created as +uniform stroke only, while Oriya metafonts exist in both uniform and +modulated stroke. From private communication: "It is my intention to +release the fonts under GPL, but not all copies around have this +notice on them." Metafonts can be found on CTAN, + and +. + + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + + +* Thomas Ridgeway <> (*) + +Thomas Ridgeway, then at the Humanities And Arts Computing Center, +Washington University, Seattle, USA, (now defunct), created a Tamil +metafont in 1990. Anshuman Pandey from the same university took over +the maintenance of font. Fonts can be found at CTAN, +. + + Tamil (U+0B80-U+0BFF) + + +* Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>, + Prof. Dr. Manfred Kudlek , Olaf + Kummer , and Jochen Metzinger + +Beyene, Kudlek, Kummer and Metzinger from the Theoretical Foundations +of Computer Science, University of Hamburg, prepared a set of Ethiopic +metafonts, found on +. They also +maintain home page on the Ethiopic font project, +, +and can be reached at . The current +version of fonts is 0.7 (1998), and they are released under GNU GPL. I +converted the fonts to Type 1 format using Péter Szabó's TeXtrace-A +program and removed some +redundant control points with PfaEdit. + + Ethiopic (U+1200-U+137F) + + +* Maxim Iorsh + +In 2002, Maxim Iorsh started the Culmus project, aiming at providing +Hebrew-speaking Linux and Unix community with a basic collection of +Hebrew fonts for X Windows. The fonts are visually compatible with +URW++ Century Schoolbook L, URW++ Nimbus Sans L and URW++ Nimbus Mono +L families, respectively, and are released under GNU GPL license. See +also . + + Hebrew (U+0590-U+05FF) + + +* Panayotis Katsaloulis + +Panayotis Katsaloulis helped fixing Greek accents in the Greek +Extended area. + + Greek Extended (U+1F00-U+1FFF) + + +* Vyacheslav Dikonov + +Vyacheslav Dikonov made a Braille unicode font that could be merged +with the UCS fonts to fill the 2800-28FF range completely. (uniform +scaling is possible to adapt it to any cell size). He also contributed +a free syriac font, whose glyphs (about half of them) are borrowed +from the "Carlo Ator" font freely downloadable from +. Vyacheslav also filled in a few missing +spots in the U+2000-U+27FF area, e.g. the box drawing section, sets of +subscript and superscript digits and capital Roman numbers. + + Syriac (U+0700-U+074A) + Box Drawing (U+2500-U+257F) + Braille (U+2800-U+28FF) + + +* M.S. Sridhar + +M/S Cyberscape Multimedia Limited, Mumbai, developers of Akruti +Software for Indian Languages (http://www.akruti.com/), have released +a set of TTF fonts for nine Indian scripts (Devanagari, Gujarati, +Telugu, Tamil, Malayalam, Kannada, Bengali, Oriya, and Gurumukhi) +under the GNU General Public License (GPL). You can download the fonts +from the Free Software Foundation of India WWW site +(http://www.gnu.org.in/akruti-fonts/) or from the Akruti website. + +For any further information or assistance regarding these fonts, +please contact mssridhar AT vsnl.com. + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Tamil (U+0B80-U+0BFF) + Telugu (U+0C00-U+0C7F) + Kannada (U+0C80-U+0CFF) + Malayalam (U+0D00-U+0D7F) + + +* DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt + + +Noah Levitt found out that the Sinhalese fonts available on the site + are released under GNU GPL, or, +precisely, "Public Domain under GNU Licence Produced by DMS +Electronics for The Sri Lanka Tipitaka Project" (taken from the font +comment), and took the effort of recoding the font to Unicode. + + Sinhala (U+0D80-U+0DFF) + + +* Daniel Shurovich Chirkov + +Dan Chirkov updated the FreeSerif font with the missing Cyrillic +glyphs needed for conformance to Unicode 3.2. The effort is part of +the Slavjanskij package for Mac OS X, +. + + Cyrillic (U+0400-U+04FF) + + +* Denis Jacquerye + +Denis Jacquerye added new glyphs and corrected existing ones in the +Latin Extended-B and IPA Extensions ranges. + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + + +* K.H. Hussain and R. Chitrajan + +`Rachana' in Malayalam means `to write', `to create'. Rachana Akshara Vedi, +a team of socially committed information technology professionals and +philologists, has applied developments in computer technology and desktop +publishing to resurrect the Malayalam language from the disorder, +fragmentation and degeneration it had suffered since the attempt to adapt +the Malayalam script for using with a regular mechanical typewriter, which +took place in 1967-69. K.H. Hussein at the Kerala Forest Research Institute +has released "Rachana Normal" fonts with approximately 900 glyphs required +to typeset traditional Malayalam. R. Chitrajan apparently encoded the +glyphs in the OpenType table. + +In 2008, the Malayalam ranges in FreeSerif were updated under the advise +and supervision of Hiran Venugopalan of Swathanthra Malayalam Computing, +to reflect the revised edition Rachana_04. + + Malayalam (U+0D00-U+0D7F) + + +* Solaiman Karim + + Bengali (U+0980-U+09FF) + +Solaiman Karim has developed several OpenType Bangla fonts and +released them under GNU GPL on . + + +* Sonali Sonania and Monika Shah + + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + +Glyphs were drawn by Cyberscape Multimedia Ltd., #101,Mahalakshmi +Mansion 21st Main 22nd "A" Cross Banashankari 2nd stage Banglore +560070, India. Converted to OTF by IndicTrans Team, Powai, Mumbai, +lead by Prof. Jitendra Shah. Maintained by Monika Shah and Sonali +Sonania of janabhaaratii Team, C-DAC, Mumbai. This font is released +under GPL by Dr. Alka Irani and Prof Jitendra Shah, janabhaaratii +Team, C-DAC, Mumabi. janabhaaratii is localisation project at C-DAC +Mumbai (formerly National Centre for Software Technology); funded by +TDIL, Govt. of India. Contact:monika_shah AT lycos.com, +sonalisonania AT yahoo.com, jitendras AT vsnl.com, alka AT ncst.ernet.in. +website: www.janabhaaratii.org.in. + + +* Pravin Satpute , Bageshri Salvi + , Rahul Bhalerao and Sandeep Shedmake + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + Tamil (U+0B80-U+0BFF) + +In December 2005 the team at www.gnowledge.org released a set of two +Unicode pan-Indic fonts: "Samyak" and "Samyak Sans". "Samyak" font +belongs to serif style and is an original work of the team; "Samyak +Sans" font belongs to sans serif style and is actually a compilation +of already released Indic fonts (Gargi, Padma, Mukti, Utkal, Akruti +and ThendralUni). Both fonts are based on Unicode standard. You can +download the font files (released under GNU/GPL License) from +http://www.gnowledge.org/Gnoware/localization/font.htm + + +* Kulbir Singh Thind + + Gurmukhi (U+0A00-U+0A7F) + +Dr. Kulbir Singh Thind designed a set of Gurmukhi Unicode fonts, +AnmolUni and AnmolUni-Bold, which are available under the terms of GNU +Generel Public Licens from the Punjabu Computing Resource Center, +http://guca.sourceforge.net/typography/fonts/anmoluni/. + + +* Gia Shervashidze + + Georgian (U+10A0-U+10FF) + +Starting in mid-1990s, Gia Shervashidze designed many +Unicode-compliant Georgian fonts: Times New Roman Georgian, Arial +Georgian, Courier New Georgian. His work on Georgian localization can +be reached at http://www.gia.ge/. + + +* Primož Peterlin + +Primož Peterlin filled in missing glyphs here and there (e.g. Latin +Extended-B and IPA Extensions ranges in the FreeMono familiy), and +created the following UCS blocks: + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + Arrows (U+2190-U+21FF) + Box Drawing (U+2500-U+257F) + Block Elements (U+2580-U+259F) + Geometrical Shapes (U+25A0-U+25FF) + +* Mark Williamson + +Made the MPH 2 Damase font, from which + Hanunóo (U+1720-U+173F) + Buginese (U+1A00-U+1A1F) + Tai Le (U+1950-U+197F) + Ugaritic (U+10380-U+1039F) + Old Persian (U+103A0-U+103DF) + +* Jacob Poon + +Submitted a very thorough survey of glyph problems and other suggestions. + +* Alexey Kryukov + +Made the TemporaLCGUni fonts, based on the URW++ fonts, from which at one +point FreeSerif Cyrillic, and some of the Greek, was drawn. He also provided +valuable direction about Cyrillic and Greek typesetting. + +* George Douros + +The creator of several fonts focusing on ancient scripts and symbols. +Many of the glyphs are created by making outlines from scanned images +of ancient sources. + + Aegean: Phoenecian + Analecta: Gothic (U+10330-U+1034F) + Musical: Byzantine & Western + Unicode: many Miscellaneous Symbols, Miscellaneous Technical, + supplemental Symbols, and Mathematical Alphanumeric symbols, + Mah Jong, and the outline of the Domino. + +* Daniel Johnson + +Created by hand a Cherokee range specially for FreeFont to be "in line with +the classic Cherokee typefaces used in 19th century printing", but also to +fit well with ranges previously in FreeFont. + Cherokee (U+13A0-U+13FF) + +Notes: + +*: The glyph collection looks license-compatible, but its author has + not yet replied and agreed on their work being used in part of + this glyph collection. + +-------------------------------------------------------------------------- +$Id: CREDITS,v 1.23 2009/01/04 15:57:54 Stevan_White Exp $ diff --git a/External/Fonts/FreeFont/ChangeLog b/External/Fonts/FreeFont/ChangeLog new file mode 100755 index 0000000..d5345d0 --- /dev/null +++ b/External/Fonts/FreeFont/ChangeLog @@ -0,0 +1,4525 @@ +$Id: ChangeLog,v 1.254 2009/01/04 16:12:59 Stevan_White Exp $ +2009-01-04 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added 2009 to copyright dates + + * AUTHORS, CREDITS: + + Removed Glagolitic range author + + * FreeSans.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added some TrueType names + +2009-01-01 Stevan_White + * FreeSerif.sfd: + + Removde Glagolitic range, since have not (yet) received OK from author. + + Added some TrueType Names + +2008-12-31 Stevan_White + * COPYING: + + Updated license to GPL v3 + +2008-12-30 Stevan_White + * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Oblique versions of Daniel Johnson's Cherokee. + + * FreeSerifBold.sfd: + + Cherokee Bold range from Daniel Johnson. + +2008-12-27 Stevan_White + * isMonoMono.py: + + 900 EM -> 800 + + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd: + + Made glyphs to lie between -200 and 800 EM + + * isMonoMono.py: + + check that glyphs lie in vertical bounding boxes + + * FreeMono.sfd, FreeSerif.sfd: + + Extensible bracket characters didn't exactly line up. Fixed. + Mono: a couple of glyphs had gotten out of their bounding boxes again. + +2008-12-26 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Final pre-release cleanup + + * FreeSerif.sfd: + + Buginese vowel u was misnamed + + * FreeMono.sfd: + + Yatcyrillic somehow was a mark character ... fixed + + * FreeSans.sfd, FreeSansOblique.sfd: + + Had to un-link references in + Sans: uni02B2, uni02B5 + SansOblique: uni0363 + because validation of the TTF file said the glyph + "is drawn in wrong direction" + I would have preferred to have understand this... + + * Makefile: + + Added quick test for FontForge version. + + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd: + + Removed kerning tables (?? what were they doing here anyway??) + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Kerning tables for Thai. + Handles one common case: short letter followed by a tall one with + an overhang to the left. + +2008-12-25 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + More putzing with kerning tables + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Copied kerning classes + Serif -> SerifBold + SerifItalic -> SerifBoldItalic + Sans -> SansOblique SansBold SansBoldOblique + Some associated naming of characters, etc + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Additions and correction in Spacing Modifier letters and IPA Extensions + +2008-12-23 Stevan_White + * FreeSerif.sfd: + + Applied patch to Cherokee range + +2008-12-20 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Fixed kern classes that end in space (crashes FontForge) + + * FreeSerifItalic.sfd, FreeSerif.sfd: + + kerning + +2008-12-19 Stevan_White + * FreeSerifItalic.sfd: + + kerning + + * FreeSerif.sfd: + + kerning + Some adjustments to Glagolitc spacing, mark positioning + +2008-12-18 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + +2008-12-17 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + +2008-12-11 Stevan_White + * FreeSans.sfd, FreeSerif.sfd: + + kerning + +2008-12-10 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd: + + kerning + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd: + + kerning + +2008-12-09 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + +2008-12-08 Stevan_White + * FreeSansOblique.sfd: + + Slanted small final sigma. Remedies + bug #24993: U+03C2 "Greek small letter final sigma" not slanted in + Free Sans Oblique + https://savannah.gnu.org/bugs/index.php?24993 + +2008-12-07 Stevan_White + * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + kerning, etc + +2008-12-06 Stevan_White + * FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: + + kerning + Tweek in Sans having to do with addition of Latin Extended + +2008-12-05 Stevan_White + * FreeSansBold.sfd, FreeSansBoldOblique.sfd: + + Tweeks to Latin Extended Additional + + * FreeSansBoldOblique.sfd: + + Added Latin Extended Additional range + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Extra space at end of kern class names has bad effect on FornForge + script that try to run through kern classes. Some FontForge call + corrupts memory. + Got rid of extra space. + +2008-12-02 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Replaced U+0387 GREEK ANO TELEIA with top dot of colon. + See bug #24987: U+0387 GREEK ANO TELEIA too low + https://savannah.gnu.org/bugs/index.php?24987 + + * FreeSerif.sfd: + + more kerning in Cyrillic (broke into two tables of classes) + +2008-12-01 Stevan_White + * FreeSerif.sfd: + + tweeks to kernin + + * FreeSerifBoldItalic.sfd: + + kerning + +2008-11-30 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Kerning for Latin and Cyrillic fairly complete in Serif faces. + Complete in sense that it looks pretty good under Pango for + English French German Spanish Polish Czech Latvian + But have not done Vietnamese (will require many more entries). + I adjust roman and italic, then copy tables by hand to bold and + bolditalic. + Misgiving: bolditalic is much too crammed + Overall, I may have over-kerned. (A difficult temptation to master.) + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + + * FreeSans.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + In Serif, modified widths of some extended latin glyphs + +2008-11-29 Stevan_White + * FreeSerif.sfd: + + Broke Latin kerning subtable into four, hoping it will be easier to + understand and maintain. + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, + FreeSerifItalic.sfd, FreeSerifBold.sfd, FreeSansOblique.sfd, + FreeSans.sfd: + + kerninig + +2008-11-28 Stevan_White + * FreeSans.sfd, FreeSerif.sfd: + + more kerning; + made guillemot narrower + + * FreeSansOblique.sfd, FreeSerif.sfd: + + previous commit was incomplete + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Adjusted width of single quotes (and apostrophe) to be "punctuation width" + More fiddling with kerning. + +2008-11-27 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: + + much fiddling with kerning + +2008-11-26 Stevan_White + * FreeSerifBold.sfd: + + Basic kerning, named main Cyrillic letters + + * FreeSerifItalic.sfd: + + Basic Cyrillic kerning + + * FreeSerif.sfd: + + Tweeks to Cyrillic kerning + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd, Makefile: + + Much fiddling with kerning, tables, and generating fonts whose kerning + tables work with OpenOffice. + +2008-11-24 Stevan_White + * FreeSerif.sfd: + + regularized padding in Miscellaneous symbols. + At least within related ranges tried to make similar. + Made to validate + +2008-11-23 Stevan_White + * FreeSerif.sfd: + + Filled out Miscellaneous Symbols. Used George Douros' Unicode font. + Completed Miscellaneous Symbols, with some drawings from George Douros' + Unicode Symbols, and some of mine. + + * FreeMono.sfd, FreeMonoOblique.sfd: + + Replaced Greek Exteded psili and dasia with scaled versions of the + "bent quote" mark. I think it's distinctive enough, but not so silly. + + Remedies bug #22997: Mono: Greek Extended psili is ugly + https://savannah.gnu.org/bugs/?22997 + + * FreeSerif.sfd: + + Made some recycling symbols + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Finished with Hebrew Pointed letters in all faces. + +2008-11-22 Stevan_White + * FreeSans.sfd: + + Fiddled with Hebrew Pointed letters + + * FreeSerifItalic.sfd: + + Marks for Vietnamese + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Letter pe had strange thick middle ear that looked awful. lamed had ben + bumped at some point. Fixed. Adjusted some of the points. + +2008-11-21 Stevan_White + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + repairs to Pointed Hebrew + + * FreeSerif.sfd: + + Numeral line positioning marks for Gothic + + * FreeSerifItalic.sfd: + + Added Combining Marks for Symbols (some question about obliqueness of + some symbols) + Cleaned up some empty glyphs in Pointed Hebrew. + +2008-11-20 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Provided Hebrew pointed letters, with lookups, for all Serif faces. + +2008-11-19 Stevan_White + * FreeSerifBoldItalic.sfd: + + renamed Hebrew lookups + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Completed Hebrew in Bold faces. + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + More tweeks to Hebrew points + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Adjustments corrections and additions to Hebrew points + +2008-11-18 Stevan_White + * FreeSansBold.sfd: + + Cleaned out a lot of ridiculous kernings + +2008-11-17 Stevan_White + * FreeSansBoldOblique.sfd: + + fiddled with Armenian ligatures + + * FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Added Armenian (with ligatures) to BoldOblique + Fiddled with character spacing + +2008-11-16 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added U+01f9 and paragraph end marker to Georgian + Fiddled with Armenian ligatures + +2008-11-15 Stevan_White + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Another pass at letter spacing in Cyrillic. + Also went through ancient letters. + + Added Georgian paragraph separator 10FB + Added Georgian turned gan 10F9 (because it was easy) + + Re-worked letter spacing through modern Cyrillic range. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd: + + Letter spacing + +2008-11-14 Stevan_White + * FreeSerif.sfd: + + Added several characters to Cyrillic Extended-B + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd: + + Made Cyrillic hooked e U+04BC-F to look less goofy. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Based on assertion on Pechatnyj Dvor's web site, Cyrillic Fita + U+0472-3 and "Barred O" U+04E8-9 are different styles the same letter, + and the fact that the tilde in the O never looked good in Sans, I + made them all barred O's. + + * FreeSerif.sfd: + + Added Cyrillic Yn, yn (U+a65e-f) + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Synced up Cyrillic and Combining Diacritics ranges, + Couple of tweeks in Gujarati to make TT validate + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Changes to older Cyrillic letters, in response to further information. + Made omegas, omegas with titlo, and OT to all be of the same size and + shape in Serif. + Un-linked Cyrillic Psi and psi from Greek, made squarer versions. + + Some more Cyrillic diacritical marks in Sans. Re-worked U+04bc-f . + Experimenting with mark positioning for Cyrillic + +2008-11-12 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Strove to make Euro look more like the EC logo design, while making + glyph fit better with the design of its face. Bug #3576: Euro design + https://savannah.gnu.org/bugs/?23576 + + * FreeSans.sfd, FreeSerif.sfd: + + Adjustments mostly to GPOS tables having to do with Vietnamese marks. + The WAZU Vietnamese test page looks pretty good in Sans now. + Still not thrilled with below-dot when it appears with a mark over + e.g. U+0102. Pango positions one or the other but not both. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Extensive modification of GPOS lookup tables for mark positioning. + I think they're now all functional (except styled Mono faces have none). + Also added lots of marks to faces that didn't have them, and also + fiddled with Combining Diacritical Marks. + +2008-11-10 Stevan_White + * FreeSerif.sfd: + + Made one combining mark really combining + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made a few combining characters to be zero-width in Mono, + Added them to other styles. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Figured out why below marks in Thai weren't working in the lowest + letters. I think Pango and other font renderers ignore 'blwm'. + However, 'mark' works. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Tweeks to Thai marks + +2008-11-09 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Several bugfixes in Thai, mostly having to do with mark placement and + ligatures. Implemented ru-saraaa and lu-saraaa with ligatures. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + added and named dottedcircle (used by Pango to render + combining mark base) + + * FreeSerif.sfd: + + Tweeks to Coptic, after viewing more papyrus samples and web pages. + + * FreeSerif.sfd: + + Weight of Coptic small letters made to match that of Latin and Greek ones. + +2008-11-08 Stevan_White + * FreeSerif.sfd: + + Made Coptic to comply better with + http://www.wazu.jp/gallery/Test_Coptic.html + Made a flourish at foot of letters with long diagonal. + + More tweeks to Coptic; put in a mark lookup table. + + Note: for small letters I made scaled references to captials. + Results in those letters looking quite light next to the capitals and + next to small Latin letters. Also, there are a few variant forms for + capitals (Unicode samples don't show this). It would be good to + re-work + + Added Coptic alphabet in u+2C80-2CB1 and u+03E2-u+03EF, drawn/built by + me, based on Unicode samples, TeX font copte, and scans at WikiPedia. + +2008-11-07 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Further tweeks to dieresis in Greek and Cyrillic + + * FreeSerif.sfd: + + replaced Greek I dieresis with references, tweeked height of dieresis. + +2008-11-04 Stevan_White + * FreeSerif.sfd: + + Added a few Cyrillic Extended-B letters seen in web pages while looking + for Glagolitic text. + + * FreeMono.sfd, FreeMonoOblique.sfd: + + Added a few old Cyrillic characters. + + * FreeSerif.sfd: + + Several corrections and tweeks to Glagolitic. + Still missing six slots from Unicode, but don't see them in the TeX + fonts. + On the other hand, several on-line Glagolitic pages (bibles etc) don't + seem to use these. Maybe it's OK as-is. + +2008-11-03 Stevan_White + * FreeSerif.sfd: + + Added lowercase range to Glagolitic, as a facile scaling of the + uppercase. + + Added letter to Glagolitic, scaled range. + +2008-11-02 Stevan_White + * FreeSerif.sfd: + + Replaced fraktur bold from Mathematical Alphanumeric Symbols with that + from TX Fonts by Young Ryu. + One concern: letter k is damaged (in both medium and bold). I just + hacked something up. + + Added Glagolitic "round type" font (Croation capitols only) from the + collection of Croatian fonts for LaTeX by Darko Zubrinić + ftp://ftp.dante.de/tex-archive/languages/croatian/ + http://www.tug.org/TUGboat/Articles/tb17-1/tb50zubr.pdf + + Several letters are missing besides the small letters. + + * FreeSerifBoldItalic.sfd: + + A couple of Thai references got obliqued twice. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + By popular demand, removed 'ears' from Greek Upsilon and Psi. + Copied resulting glyphs to Serif Mathematical Alphanumeric Symbols. + + * FreeSerif.sfd: + + Some pointwise cleanup of main Tamil range + + Tried some things with lookups. Didn't make much headway. + +2008-11-01 Stevan_White + * FreeMono.sfd: + + somehow made a letter with wrong width + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added similar lookups and ligatures to Thai ranges. + + * FreeSerif.sfd: + + Lookups now work no worse than those for other Thai fonts, at least + in Pango. Still perplexed by behaviour of "Required" lookups. + + For Thai, made ligatures and lookups for yoying and thothan combined + with a lower vowel. These work well. + Attempted looksups for saraaa with ru and lu, and for saraam. + Not working. + + Cleaned up a few of the Bengali ligatures + + * FreeSerifBold.sfd: + + Tweek Thai + +2008-10-31 Stevan_White + * FreeSerif.sfd: + + Fixed ligatures and mark positioning for Hanunóo. + Problem with ligatures: Gnome pango doesn't do 'rlig', only 'liga' + + * FreeSerifItalic.sfd: + + Changed lookup table scripts for Devanagari and Bengali. + Find Problems -> ATT found several problems showing lookups acting on + glyphs that weren't listed in the script ranges, including dev2, bng2 + (why not deva and beng, I don't know). + + danda and doubledanda of Devanagari I understand are to be shared among + Indic scripts. So included bng2 and dev2 in the 'aalt' table for those. + + The 'init' and 'half' tables for Bengali made active for bng2. + + The 'locl' table for Bengali didn't do anything I could see: It mapped + the Devanagari danda to itself, and the doubledanda to itself. Deleted. + + Cleaned up some kern tables. + adjustments of under 5 EM are invisible. Some others I just didn't like. + Some were putting a letter beneath another, with is wrong. + + * FreeSerifBoldItalic.sfd: + + Added Thai + + * FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Changes to mark positioning lookups, esp. in Italic. + Widened numerals in Bold + +2008-10-27 Stevan_White + * FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Tweeks regarding Armenian and lookups + + * FreeSansBold.sfd: + + Added Armenian ligatures FB13-FB17 with lookups + Also made a historical ligature ('hlig') table for u+0587. + + Toward bug #15183: missing characters from Armenian range + https://savannah.gnu.org/bugs/index.php?15183 + + * FreeSansOblique.sfd: + + Added Armenian ligatures, lookups. Cleaned up contours. + + * FreeSans.sfd: + + Added 5 Armenian ligatures to U+FB13 – FB17, and made corresponding + 'liga' lookup. Found there one ligature u+0587 that according to + http://en.wikipedia.org/wiki/Armenian_alphabet + + "in new orthography the և character is not a typographical ligature anymore, and must never be treated as such. It is a distinct letter and has its place in the new alphabetic sequence." + So moved this out of the 'liga' lookup and into a new 'hlig' lookup. + +2008-10-26 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Lots of improvements to Thai. + Completely revised letter spacing in Italic, and fiddled with combining + marks in all. + Still aren't working quite right, especially in Italic. + Still need to work over digits (in Bold they aren't even bold yet) + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Bold Thai : added (painstakingly) constructed glyphs, lookups + roman Thai: tweeks + Italic Thai: tweeks (Note this still has multiple problems) + +2008-10-25 Stevan_White + * FreeSerif.sfd: + + WAZU says + http://www.wazu.jp/gallery/Fonts_Hanunoo.html + + MPH 2B Damase doesn't support the consonant-vowel ligatures necessary + to render Buhid writing. + + OK, so I made 'mark' lookups for combining marks and a bunch of + ligatures in an 'rlig' lookup. The latter still not working: + don't know why. + + Made page to match the example of the combining forms at + http://www.omniglot.com/writing/hanunoo.htm + +2008-10-24 Stevan_White + * FreeSerif.sfd: + + Removed some marks from Mathematical Alphanumeric Symbols + + * FreeSerif.sfd: + + Tweeked combining marks for Vietnamese. Made to satisfy + WAZU JAPAN Comprehensive Unicode Test Page for Vietnamese + http://www.wazu.jp/gallery/Test_Vietnamese.html + Could still use some tweeking... + + * FreeSerif.sfd: + + Added marks for composition of Vietnamese + + * FreeMono.sfd, FreeSerif.sfd: + + Put "below" combining mark on lots of vowels and derivatives, + for Vietnamese. + Named a bunch of composit Latin, expecting to make substitutions. + +2008-10-23 Stevan_White + * FreeSerif.sfd: + + Thai spacing alterations based on advice of a native speaker. + +2008-10-22 Stevan_White + * FreeSerif.sfd: + + re-named Thai lookups according to order + +2008-10-21 Stevan_White + * FreeSans.sfd: + + Cleanup of glyphs in Gujarati, Devanagari. + + Note: Serious problem with Sans GPOS abvm in Devanagari + "'abvm' Above Base Mark in Devanagari subtable" "gujr-0" + But all the characters that list gujr-0 are in Gujarati. + Not sure how this got broken or how to fix it. + + * FreeSerif.sfd: + + Fiddled with Thai mark positioning: passes my tests now OK. + Made a few more references in Math Symbols; more regularization of + stroke. + + * FreeSerif.sfd: + + Added mark class for Vietnamese "horn" + Several references made in General Punctuation, Arrows + + * FreeMono.sfd: + + added some Combining Diacritical Marks + +2008-10-20 Stevan_White + * FreeSerif.sfd: + + Made some references from serifed Latin capitals to Greek counterparts. + + * FreeSerif.sfd: + + Made a few repeated glyphs into references in Musical Symbols + +2008-10-19 Stevan_White + * FreeSerif.sfd: + + Moved several glypns from Mathematical Alphanumeric Symbols to + Letterlike Symbols. + Couple tweeks in Mathematical Symbols. + + * FreeMono.sfd, FreeSerif.sfd: + + Fiddling with Mathematical Symbols. + In Serif, trying to make stroke width more consistent. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd: + + Added some Greek symbols in Mono and Sans to make a little more regular + and correspond better with TeX. + Tweek of serif. + + * FreeSansBold.sfd: + + a few more improvements. + + One problem with the Mathematical Alphanumeric area is, one must + remember to change it any time another face is altered... + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerifBold.sfd: + + Several improvements and additions to Sans faces (mostly in Greek) from + experience of pasting into FreeSerif Mathematical Alphanumeric Symbols. + + * FreeSerif.sfd: + + Replaced most of Mathematical Alphanumeric Symbols + roman italic bold (latin and greek) + gothic italic bold (latin and greek) + typewriter + and numerals + with glyphs from FreeFont. These were scaled to uniform height. + + Remains: Blackboard Bold, Fraktur, Calligraphic, Script + + * FreeSerif.sfd: + + Tidied lookup table names for Malayalam + + * FreeSerif.sfd: + + Applied Malayalam patch from Hiran Venugopalan + + * FreeMono.sfd: + + Added/corrected many Mathematical Symbols + + * FreeSansOblique.sfd: + + more IPA + +2008-10-18 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Made lots more IPA and Phonetic Extensions + Note: fontforge is reporting an error in a few glyphs made by scaling + another, that the glyphs are drawn in the wrong direction--only in + TrueType though. Suspect a FontForge bug. + + Added several Combining Diacritical Marks + +2008-10-17 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Made several Spacing Modifier Letters, Combining Diacritical Marks, + and IPA and Phonetic Extensions + +2008-10-16 Stevan_White + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added some Superscripts and Subscripts + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Finished off Superscripts and subscripts + + Completed General Punctuation for Mono faces + + Added some General Punctuation + +2008-10-15 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + more Letterlike Symbols, Currency Symbols + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Made some Combining Diacritical Marks for Symbols, Letterlike Symbols + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Added some General Punctuation + +2008-10-14 Stevan_White + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Added double slanted hyphen, made General Punctuaton Supplement like + Serif's + + * FreeSansBoldOblique.sfd: + + Filled out Greek Extended + + * FreeMono.sfd, FreeSerifItalic.sfd: + + fixes to last 2 commits + + * FreeSerifItalic.sfd: + + Last character to General Punctuation + + * FreeMono.sfd: + + Built some Enclosed Alphanumerics (1-10) + + * FreeSerif.sfd: + + Copied in Daniel Johnson's changes to Cherokee. + +2008-10-12 Stevan_White + * FreeSerif.sfd: + + Included Daniel Johnson's Cherokee glyphs. + +2008-10-05 Stevan_White + * FreeMono.sfd: + + Further corrections to diaresis in Cyrillic -- legibility in small sizes + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSerif.sfd: + + Regularized placement of diaresis in Cyrillic + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added same set of glyphs to Cyrillic Supplement + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Added some of the easier letters from Cyrillic Supplement + +2008-10-04 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSerifItalic.sfd: + + Finished high Cyrillic range for MonoBold and MonoBoldOblique. + (Remaining: historic ranges, Cyrillic extensions) + Tweeked others. + + * FreeMonoBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Serif*Italic: Added last Abkhazian letters to Cyrillic + MonoBold: tweek + +2008-10-03 Stevan_White + * FreeMono.sfd, FreeMonoOblique.sfd, FreeSerif.sfd, FreeSerifBoldItalic.sfd: + + Mono: Some additions to historic letters + + * FreeSerif.sfd: + + Added some punctuation and combining numeric marks from + Cyrillic Extended B + + * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Various technical tweeks, mostly concerning recent additions. + Also did a bit more "Points too close" and "irrelevant control points". + Cyrillic millions redesign meant could not maintain use of refrences + for it. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More high Cyrillic + Included old Cyrillic millions combining mark in Sans, changed design + in Serif + +2008-10-02 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + More high Cyrillic + + * FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd: + + More high Cyrillic glyphs + + * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More glyphs in high Cyrillic. Remains only some whose form I'm unsure + of in italic. + + * FreeSerifBoldItalic.sfd: + + More glyphs in higher Cyrillic range + + * FreeSerifItalic.sfd: + + Same process of tightening el, em, ge (but a P.S. to previous commit: + also did ya, ze for SerifBold.) + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + BoldItalic: Tightened up spacing on left of el, em, ge (could go + farther, but it is partly a problem with glyph design... + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More additions to Cyrillic. Finished SerifBold except for Nivkh + additions. + Used references on number combining forms. + +2008-09-30 Stevan_White + * FreeSerif.sfd: + + Added four (obsolete) Chuvash letters to Cyrillic Supplement + - completing it. + +2008-09-29 Stevan_White + * FreeSerif.sfd: + + Greek adjustments + Adjusted spacing of kappa slightly + Got rid of ears on Psi, following similar request for Upsilon. + +2008-09-28 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Adding and fiddling with Spacing Modifiers and Combining Diacriticals + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Revisions of several Combining Diacritical marks + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + A few Combining Diacriticals and Spacing Modifiers + + MonoBoldOblique: Primarily filling out Spacing Modifier Letters + others: little fixes found along the way + +2008-09-27 Stevan_White + * FreeSerif.sfd: + + Replaced Malayalam range with that from Rachana_04 found on + Swathanthra Malayalam Computing project page + http://savannah.nongnu.org/projects/smc/ + Besides scaling and converting to cubic, performed much clean-up of + glyphs, added an r2 character, and re-named a bunch of characters. + +2008-09-22 Stevan_White + * FreeSerif.sfd: + + Filled in as much of Phonetic Extensions as I could without artistic + abilities. + Note 1D48-9 are not references due to apparent FontForge bug, that says + scaled references go in wrong direction. + + * FreeSerif.sfd: + + Cleaup of some Bengali glyphs. + Note many of the ligatures remain very very messy. + + * Makefile: + + added more validations + made to work with GenerateOpenType + + * FreeSerif.sfd: + + Built two more easy Phonetic Extensions + + * FreeSerif.sfd: + + Built some Phonetic Extensions letters, those with middle tilde + +2008-09-21 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Added lots of Spacing Modifier Letters and Combining Diacritical Marks. + + * FreeMono.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSerif.sfd: + + Wrote script to check if glyph encodings were in stated ranges, fixed + most discrepancies. + + There were a bunch of incompletely deleted characters in several faces. + + Sans: found several other problems in the process + # Tamil + Four slots labelled 0BDA-D have glyphs, not in Unicode. also 0BE1 + I think they are misplaced; added 0010 to each of them + + # Devanagari + Slot labelled U+093B is not in Unicode--can't find glyph: deleted + likewise 094F (may have been meant to be 0954) + 0955, 0973-0976 + + 0954 should be a combining mark, but it appears on the wrong side of 0. + 0971 was just wrong--made into simple dot. + 0972 is also wrong--made my own Candra A. + + # Gujarati + Slots labelled 0AE4-5 are not in Unicode; seem not to belong at all. + Deleted. 2800 is a dup of 2790. Deleted + + Serif: phillipine_double u1736 was misplaced + + A bunch of the Math Alphanumeric symbols are empty in the standard, + because they're represented elsewhere. These should be deleted + First need to make style consistent with existing symbols. + + * FreeSerif.sfd: + + Applied patch from Daniel J + Remedies bug + FreeSerif: Missing glyphs with palatal hook + https://savannah.gnu.org/bugs/index.php?24298 + Adding several letters to Phoenetic Extensions range U+1D80-BF + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made four characters U+200C-F to be zero-width + Remedy to bug #23593: Mono 0-width chars: zero-width or space? + https://savannah.gnu.org/bugs/index.php?23593 + + * FreeSerif.sfd: + + Made Mahjong tiles to take up less space using references + Cleaned up several validation problems + +2008-09-19 Stevan_White + * FreeSerif.sfd: + + Added several Hebrew Alphabetic Presentation Forms (some easy ones), to + make its coverage the same as Serif Bold. + + * FreeSerifBold.sfd: + + Re-encoded. + Deleted several glyphs in Hebrew Alphabetic Presentation Forms that + didn't correspond valid Unicode + + * FreeMonoBold.sfd, FreeSans.sfd, FreeSerifItalic.sfd: + + Ran script to find mis-numbered glyphs. Several were simply typos, + some offset by one. + + * FreeSansOblique.sfd: + + Numerous cases of glyphs in Private Use area incorrectly assigned + Unicode numbers and names. Gave all -1 for Unicode and named like + "slot.XXXX". + + * FreeSerif.sfd: + + Adapted Mahjong Tiles from George Douros' Unicode Symbols font. + + * FreeSerif.sfd: + + Added Domino Tiles. Domino outline is copied from George Douros' + Unicode Symbols, but the rest I preferred to do with references. + +2008-09-18 Stevan_White + * FreeSerif.sfd: + + Adapted Mathematical Alphanumeric Symbols from George Douros' Unicode + Symbols font. + + * FreeMonoBoldOblique.sfd: + + This one got away from me--I don't know what I did. + Looks like some small contour edits. + + * FreeSansBoldOblique.sfd: + + Fixed one mis-numberd character in Latin Extended-B + + * FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Fixed several mis-numbered characters. + + * FreeSansBold.sfd: + + SansBold: one Georgian letter with no name, one Zapf Dingbat was + unnumbered + ATT test shows a bunch of problems with Gurmukhi and 'blwf' table + indeed shows those letters at 0x10000+ + Sans names them like uni0A30_uni0A4D.blwf: they are in range + ECC6 to ED06 + + I meant to move this range into Private Use in last release, and + missed it. So now it is moved, into same range as Sans. + + Both Sans and SansBold in nukt table for Gurmukhi have duplicate + entries for uni0A15 uni0A3C. Deleted dups. + + * FreeMonoOblique.sfd: + + fixed a number of Unassigned Code Points in Greek Extended + + * FreeSansOblique.sfd: + + mis-numbered Combining Diacritics + + * FreeSansOblique.sfd: + + Several chars in Latin Extended hadn't been named. + One spurious letter in Letterlike Symbols + +2008-09-16 Stevan_White + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd: + + Lots of additions: unless otherwise noted, they are from George Duros' + fonts Analecta, Music, and Unicode (haven't got final confirmation of + the eligibility of these glyphs, so this is just for testing.) + + Added some combining marks, fiddled a bit. In both Serif & Mono, tried + to get a key symbol characters to fit inside the key combining mark + + Serif + Got rid of ears on Upsilon + Added: + # Gothic + # Western & Byzantine Musical Symbols + + # Misc Symbols, Misc Technical Symbols (drew many myself) + # Supplemental Symbols and Arrows + + Mono + Added: + # lotsa Misc Technical Symbols + # OCR Symbols + # drew many Supplemental Symbols and Arrows, Misc Technical + + Sans + Added # Phoenecian + Made a few Letterlike Symbols; Made Re and Im to be sans-serif. + +2008-09-11 Stevan_White + * FreeSerif.sfd: + + Removed pointless entries from Latin kern table + + Tidied points in Sinhala + +2008-09-07 Stevan_White + * FreeSerif.sfd: + + Tidied up Tamil ligatures EEA8-EEAB to fix TT build warning + "MonotonicFindAlong: Never found our spline." + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, Makefile: + + + Added APL characters to FreeMono (why?...) + + Fixed several last-minute problems, including + + Serif: Tweeked GPOS mark table for Cyrillic + Sans: Added a GPOS table for Cyrillic (but several diacritics missing) + + Serif, Mono: tweeked some bugs in extensible brackets & integrals + + Serif: Vietnamese o circumflex: accent was a bit high. fixed. + + MonoBoldOblique OTF build + uni213b intersects self + + Generation of TT fonts complains about several things to stderr, + including: + + SerifBold: "There exists a 'fpgm' code that seems incompatible with FontForge's. Instructions generated will be of lower quality. If legacy hinting is to be scrapped, it is suggested to clear the `fpgm` and repeat autoinstructing. It will be then possible to append user's code to FontForge's 'fpgm', but due to possible future updates, it is extremely advised to use high numbers for user's functions." + Probably has been there since I first copied the TT instructions in. + Just repeated the copying process carefully, and the warning went away. + + Serif: "FindMatchingHVEdge fell into an impossible position" + fixed a bunch of point too close + + REMAINING PROBLEM in Serif TT build + "MonotonicFindAlong: Never found our spline." + fixed several bad TT matrices-- there are several more + fixed many "control points too close" no luck + +2008-09-03 Stevan_White + * FreeSans.sfd, FreeSansOblique.sfd: + + Added/corrected some Misc. Symbols by copying from Serif. + Note this is only a stopgap solution. Want real sans-serif symbols. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added minimal Miscellaneous Symbols: card suites and some musical notes. + Note not happy with shapes...some I just drew. Sans isn't really sans. + + Fixed one APL symbol in Mono so it verified in OTF version + +2008-08-31 Stevan_White + * FreeMono.sfd: + + Built set of APL symbols. + +2008-08-30 Stevan_White + * FreeSans.sfd: + + Un-linked references in uni02B2 and uni02B5, because when validating the + TrueType version, FontForge gave an error "is drawn in wrong direction". + I suspect a bug in FontForge. Other similar glyphs make no errors. + + Fixed missing extrema in TrueType. + These were the last cases being reported by validate in all the faces. + + * FreeSerifItalic.sfd: + + fixed last missing extrema in TrueType + + * Makefile: + + restructured validation to look in a directory + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd: + + Fixed missing extrema in TrueType versions + +2008-08-15 Stevan_White + * FreeSans.sfd: + + Same problem with uni0A83 as with bn_llikaar. Just made zero-width. + +2008-08-14 Stevan_White + * FreeSans.sfd, FreeSansOblique.sfd: + + Glyph bn_llikaar, U+09E3 BENGALI VOWEL SIGN VOCALIC LL, + has right bound positioned far into the negative. Causes a warning in + FontForge when opening OTF version. + Comparing with other fonts supporting Bengali, found no others that + do this. + Serif makes glyph width 0 (which sounds right according to Unicode) + and puts glyph wholly to left of 0. But, I haven't found this letter + in text anywhere. I wonder if it is really used in writing. + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Further TrueType validation fixes. + Sans still has two glyps in wrong direction. + + * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Fixed more TrueType problems...all missing extrema in TTF validation + +2008-08-13 Stevan_White + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + fixed all the TrueType validation problems of type "intersects itself" + and all but two of the "wrong directions", as well as a lot of + "missing extrema". But there remain hundreds of missing extrema in the + TrueType version. + Also, bn_llikaar in Sans and Oblique still has a problem in OTF version. + + * FreeMono.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd: + + Made .ttf files to validate. Other faces have many more problems still. + +2008-08-12 Stevan_White + * FreeMonoOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Continuing to make OTF versions validate. + + * FreeMonoOblique.sfd: + lots of missing points at extrema + * FreeSerif.sfd: + 12 wrong directions, 1 missing extrema + * FreeSerifItalic.sfd: + many missing points at extrema, 1 self-intersecting + + What was wrong: in several oblique cases, an already-italic glyph was + made more italic, thereby fouling up extrema (although why it passed + validation in the SFD I don't know). Some glyphs were + overly-complicated with many near points. Cleaned up, rounded to int. + + Remaining problem: OTF FreeSansOblique FreeSans. one Bengali glyph in + each whose advance width and htmx don't match. + + Moral of story: validate the OTF and TTF versions too before a release. + + * FreeSansOblique.sfd: + + Reverse a mistake from last commit: somehow this file was converted to + quadratic, or something. + +2008-08-11 Stevan_White + * FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Found that SFD files that validated produced OpenType files that don't. + These represent the easy fixes. Some were result of conversion to + quadratic; some shouldn't have validated in the SFD... + + * MonoBoldOblique: uni0250 missing pts at extrema [reference glyph rotated...] + * Sans: uni0AC4 wrong direction [simplified, rounded to int] + * SansOblique: uni01EA wrong direction [rounded to int] + * SerifBold: uni023f wrong direction [round to int] + * SerifBoldItalic: uni0245 missing pts at extrema [ungrouped ref, added extrema] + +2008-08-06 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd: + + Re-set font metrics, which were somehow making uneven vertical spacing. + +2008-06-22 Steve White + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Made to validate + + * ranges.py: + + Brought more into line with OpenType + Added some ranges + Fixed bug with ranges outside of font + + * CREDITS: + + 3 new ranges + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Cyrillic: tweeked accents for consistency, and for readability in small + sizes. + + * FreeSerif.sfd: + + Thanna range: tweeking + + Thaana range: Scaled up by about 15%, raised by 100EM, tightened + some of the diacritics to get inside 900 to -300 EM limits. + + * FreeSans.sfd: + + Added Old Persian and Ugaritic from MPH2BDamase font. + +2008-06-21 Steve White + * FreeSerif.sfd: + + Added Tai Le range adapted from MPH2BDamase font. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Added some ancient Greek numerals from Tempora to high Unicode area, + (partly just to show it can now be done.) + + * FreeSerifItalic.sfd: + + Couple of tweeks putting glyphs above -300EM. + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Surgery to Thai letter 'tho than', u+0e10, to push it above -300 EM. + This makes Thai range completely between 900 and -300 EM. + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Many auxilary characters (esp. for Malayalam, Bengla, and Tamil) + representing ligatures and alternative forms without their own Unicode, + were moved from + ranges above 0xFFFF (which ought to have been slots for other defined + Unicode ranges) into the Private Use area. + + In Serif, I segregated the scripts, in Sans it was hard to see where one + began and another ended, so I moved them en masse. + + Note several problems with wrongly-named characters: + I already re-named glyph570 and glyph582. + But there are others with names starting with A... + + * FreeSansBold.sfd, FreeSansOblique.sfd: + + Fixed (I hope the last) problem with scripts in lookups + Find Problems -> ATT (all selected) finds multiple issues, + + * FreeSansBold.sfd: + In addition to script 'guru', added 'gur2' to the scripts for these + lookups + 'nukt' Nukta forms in Gurmukhi + 'blwf' Below Base Forms in Gurmukhi + 'pstf' Post Base Forms in Gurmukhi + 'blws' Below Base Substitutions in Gurmukhi + 'abvs' Above Base Substitutions in Gurmukhi + 'psts' Post Base Substitutions in Gurmukhi + + * FreeSansOblique.sfd: + In addition to script 'beng', added 'bng2' to the scripts for the lookup + 'half' Half Forms in Bengali + + Moreover, the lookup + 'aalt' Access All Alternates in Latin + contains only Bengali letters. + Re-named as Bengali, made to work on beng, bng2 scripts + +2008-06-20 Steve White + * FreeSerif.sfd: + + Scaled Sinhala range. + Remedies bug #23656: Sinhala letters over-sized + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Mostly messing with Greek Extended accents again. + re-positioned ypogegrammani on advice of Alexey Kryukov + Put prosgegrammani beneath main letters in Mono, to make narrower glyphs + Implemented more distinction between tonos and acute. + +2008-06-19 Steve White + * FreeMonoBoldOblique.sfd: + + Completed fit of Mono to 800 to -200 EM. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd: + + Set Metrics to recommended values + + * FreeMonoOblique.sfd: + + Now Mono Oblique, as well as roman and Bold, are within 800 to -200 EM. + Just BoldOblique to go. + + * FreeMono.sfd, FreeMonoBold.sfd: + + More toward fitting to 800 to -200 EM. + Basically, reduced Georgian by 92%. + Also made an over-all offset, so Georgian is somehow centered (Bold...I + guess I already did this in roman). + Want to also do an emboldening to make stroke like rest of font, but + current FontForge has a nasty crash that loses data on this function. + + * FreeMono.sfd: + + In effort to make fit in 800 to -200 EM, + Scaled Georgian by 92%, centered on 600 wide box. + Next: Embolden a bit. + +2008-06-18 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Toward making all glyphs lie between -200 and 800 EM. + Numerous small changes, especially raising descenders of some Hebrew + letters. + Georgian remains a problem + +2008-06-13 Steve White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Moved prosgegrammeni up to baseline, + (and then moved all references down to baseline) + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added Control Picture "blank" to all faces. + Switched U+0222-3 from TemporaLGCUni + +2008-06-11 Steve White + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More fiddling with Greek Extended accents + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Tweeks to accents etc in Greek Extended and Cyrillic + +2008-06-10 Steve White + * FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Fixed a few big horizontal spacing problems + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Implemented TemporaLCGUni glyphs in Cyrillic ranges. + Added a breve_cyrillic for the moustache breve mark. + +2008-06-08 Steve White + * FreeSerif.sfd: + + Replaced most of Cyrillic range with TemporaLGCUni. + Remodelled many of the derived Cyrillic characters after these. + Fiddled globally with spacing of small letters. + Unclear on diacritics 485-6, unhappy with breve. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Started implementing TemporaLCGUni in Greek ranges. + + Replaced 3DC-3E1 from Tempora, because I thought they looked nicer and + more like the other existing FreeFont glyphs. + Replaced 3DA-B from Tempora, because they look more like Unicode + samples, and nicer. + Added 03f3-4, 03F7-F. + Prefer my own lunate epsilon. + Replaced Phi and Omega from Tempora. + These plainly fit the other FreeFont glyphs better than the origninals. + (How did this happen?) + + In bold, replaced U+03D7 + + Copied lbbar u+2114 + + Small italic greek--replaced most except phi, psi, omega + + Based on new information, broke the identification of oxia with Latin + acute. + +2008-06-07 Steve White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Efforts to control heights of characters + +2008-06-06 Steve White + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made to validate + +2008-06-05 Steve White + * FreeSans.sfd: + + Fixed undefined character in kerning classes + +2008-06-04 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + tweeks and additions to General Punctuation + +2008-06-03 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansOblique.sfd: + + Completed/tweeked Number Forms + + * FreeMono.sfd, FreeSerif.sfd: + + Added some Miscellaneous Technical symbols + +2008-06-02 Steve White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Tweeks...mostly Letterlike + +2008-06-01 Steve White + * FreeMono.sfd, FreeSerif.sfd: + + Added Box Drawing characters to Serif. + Tweeked a glyph in Mono + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added several glyphs to Letterlike Characters + +2008-05-31 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Validation pass + + SansOblique and SansBoldOblique had validation problem with BlueValues + Private Dictionary + Elements in BlueValues/OtherBlues array are disordered + Elements in BlueValues/OtherBlues array are too close + (Change BlueFuzz) + StemSnapV does not contain StdVW value. + So I ordered the array, and based on other slanted fonts, + removed StemSnapV. + + Note however, I still think the two top Blues lines are too close + But I don't even know what the second-to-top line is meant to do. + + * FreeSerif.sfd: + + Added to Block Elements, Geometric Shapes + Made to validate + +2008-05-29 Steve White + * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Looking at special symbols. + Drew several Miscellaneous Symbols in Mono and Serif + > Completed/corrected planetary symbols, added Dice, + some other easy ones + > Completed Dingbats in Serif (using URW Dingbats) + Added some Block Elements to Serif + +2008-05-26 Steve White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More changes stemming from J. Poon's report. + +2008-05-25 Steve White + * FreeSerif.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Height surgery on SerifBoldItalic. + More fiddling with accents in others. + + * FreeSerifItalic.sfd: + + More height surgery. Only a few left in Benglai and Thai + + * FreeSerifBold.sfd: + + Re-applied surgery to make glyphs between 900 and -300EM + + *** Regression + Inadvertently un-linked all references in SerifBold in r1.83. + This reverses that error (but also un-does the surgery mentioned there) + + * FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Applied surgery to make Latin letters go under 900EM. + One exception yet... + +2008-05-24 Steve White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Serif: much fiddling with accents in Latin ranges. + Re-thought some glyphs (there are still a few messy ones, especially + in bold) + Checked horizontal spacing...fixed a number of problems. + +2008-05-23 Steve White + * FreeSansBold.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Made Latin Extended-B coverage consistent across Serif; cleaned up some + glyphs + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Filled more of General Punctuation in Sans and Serif + Made all agree on coverage of Latin Extended Additional + +2008-05-22 Steve White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Added Latin Extended Additional to SansOblique. + Made Latin Extended Additional coverage consistent across Sans, B, I + Made Latin Extended-B coverage same in SerifBold. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSansBold.sfd: + + Mono* made Latin-B coverage consistent across faces + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Made set of Latin Extended-B consistent across Sans faces + + * FreeSans.sfd, FreeSansBold.sfd: + + More filling in General Punctuation + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Another bunch of J. Poon's reports + also, filling in some Combining Diacriticals, Spacing Modifiers, and + General Punctuation in bold faces + +2008-05-21 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Mucking about with mark tables in Thai (Serif) + Other faces: Making changes from J. Poon's report + +2008-05-20 Steve White + * CREDITS: + + Mark Williamson + Jacob Poon + + * Makefile: + + added tests target + +2008-05-18 Steve White + * ranges.py: + + Put table explanation back in + + Improved behaviour for high Unicode + + * FreeSans.sfd: + + Revision of kerning + + * FreeSerif.sfd: + + Made Latin kerning a little more reasonable: + reduced many excessive kerns (some had letters apparently + overlapping, which shouldn't happen) + made kerns increment by 5EM for ease of reading + got rid of kerns too small to be seen + + * FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerifBold.sfd: + + Made to verify + +2008-05-13 Steve White + * FreeSerif.sfd: + + Made to validate + + * FreeSerif.sfd: + + Gurmukhi: filled range in Serif, taking glyphs from the original + Punjabi font by Hardip Singh Pannu + http://members.aol.com/hspannu/punjabi.html (file pb_win95.exe) + +2008-05-12 Steve White + * FreeSans.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Hebrew, basic. Some faces missing punctuation marks, added. + + * FreeMono.sfd, FreeSans.sfd: + + Armenian: Sans tried to make verticals and horizontals of more uniform + width both, finddled with punctuation + + * FreeMonoOblique.sfd: + + made to validate + + * FreeMonoBold.sfd: + + made to validate + + * FreeSans.sfd, FreeSansBold.sfd: + + Armenian in Sans: regularized letter spacing + + * FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd: + + Armenian: fill out ranges and clean up + SansBold especially had a lot of incorrect references. + Now all the ranges with Armenian at least share the same set of + characters. + + * FreeMono.sfd: + + Fixed glyph with wrong width. + +2008-05-11 Steve White + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifItalic.sfd: + + 1) made to validate + 2) Mono: copied in Spacing Modifier Letters (glyphs not yet named) + 3) SerifItalic: Filled in General Punctuation + + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made to validate, and pass all other FontForge tests. + Expedient: rounded everything to int + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Made to have the same Greek Symbols, + Made to validate + + * FreeSans.sfd, FreeSansBold.sfd: + + Made Greek Symbols as full as rest of Sans. Changed a name in Sans. + + * FreeMonoOblique.sfd: + + Made Greek as full as other faces + Made to validate + + * FreeSansBold.sfd: + + Deleted seven orphaned Arabic characters; looks like somebody started, + didn't get very far, putting Arabic in bold. + + Deleted orphaned Arabic glyph from Arabic Presentation forms-B + + * FreeSerifBold.sfd: + + Deleted the single Arabic character: it was clearly there by mistake. + + * FreeSansOblique.sfd: + + Made Greek Symbols as full as rest of Sans + + Tweeks to Armenian + + Comment from previous commit of FreeSans was meant for FreeSansOblique. + In FreeSans, only tweeked a few letters during putting more characters + in this face. + + Filled in Spacing Modifier Letters, increased General Punctuation. + + * FreeSans.sfd: + + Filled in Spacing Modifier Letters, increased General Punctuation + + * FreeMono.sfd: + + Made Armenian as full as other roman faces. + + Completed Spacing Modifier Letters + Added a couple of Greek Punctuation + + added more Spacing Modifier Letters + +2008-05-10 Steve White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Did same process of scaling and sizing for Thai in Sans as in Serif. + Added mark tables to Sans. Improvement, but there are questions... + + * FreeSans.sfd: + + Tidied some Gurmukhi glyphs, validated. + + Deleted ranges for Oriya, Kannada, on account of + 1) they only contained a subset of the consonant glyphs of the scripts, + few if any vowels, and had no ligature lookups as required + 2) Kannada was based on the Akurti fonts, which have copyright issues. + + See + bug #23225: Oriya range only partial + bug #23224: Kannada range only partial + + * FreeMonoBoldOblique.sfd: + + Made metrics like rest of Mono + +2008-05-09 Steve White + * ranges.py: + + More info on range intervals + + * FreeSerif.sfd: + + Deleted Telugu range. + It didn't represent a complete writing system for the language. + + See notes at https://savannah.gnu.org/bugs/index.php?23202 + Serif: Telugu range missing many characters; many wrong + + Got a copy of the original Tikkana font, + Copied in remaining consonants and vowels that I could find there. + I think one vowel 0C55 is missing according to unicode). + Strangely, the Telugu digits are alo missing. + In Tikkana, the default "checkmark" structural mark is missing from many + consonants, according to Unicode, but is a separate glyph. I put + the checkmark on. + This, and scaled up by 150% and cleaned up intersecting glyphs and + many unnecessary points. + +2008-05-08 Steve White + * FreeSerif.sfd: + + Filled out Telugu consonants. + Vowels still need to be done + +2008-05-07 Steve White + * FreeSerif.sfd: + + Operated on Latin glyphs with stacked accents to make them fit under + 900EM. + Scaled Telugu bu 150%. + +2008-05-06 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeSansBold.sfd, FreeSerif.sfd: + + Corrected further fontforge "find problems" + Added some math characters to FreeSerif + +2008-05-05 Steve White + * FreeSansBold.sfd: + + Made to validate, and fixed bad TT transformations + +2008-05-04 Steve White + * FreeMono.sfd, FreeSerif.sfd: + + Mainly TeX additions trying to satisfy Markus Kuhn's TeX-as-Unicode page + + * FreeMono.sfd: + + Adjusted heights of extensible brackets + + Fixed problems with extensible brackets, thanks to Markus Kuhn's page + http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt + + * ranges.py: + + fiddled with ranges, doc + + made some ranges more correct? + + fixed some bugs in ranges + better error reporting + + Got rid of Unicode 1.1 references + + made to use OpenType table + + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd: + + made to validate + +2008-05-03 Steve White + * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Removed digits from Private Use Area. + See bug 23050. + + * FreeMono.sfd, FreeSans.sfd: + + Completed General Punctuation + + * FreeSans.sfd: + + Completed IPA Extensions + + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd: + + More work on Superscripts and Subscripts, Spacing Modifiers. + Sans is now complete in both. + Added Pfennig to Sans and Mono. + + * ranges.py: + + Restructure text output + Rearrangement and cosmetic ...except I had broken it. now fixed + Seems to be in a useful form at this point. + More docs, date + + * FreeSerif.sfd: + + Added a hand-drawn old German Pfennig to Currency Symbols + + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Further additions to General Punctuation, Super and Sub Scripts, + Spacing Modifiers, etc. + +2008-05-02 Steve White + * FreeSans.sfd: + + additions to Spacing Modifiers, IPA + + * FreeSerifItalic.sfd: + + Shortening stacked accents to maintain readability when clipped + +2008-05-01 Steve White + * FreeSans.sfd: + + Additions to Spacing Modifiers and changes to Combining Diacritics + + * FreeSerif.sfd: + + Made sure all the half rings in Combining Diacriticals and Spacing + Modifiers were really half rings (J. Poon had complained about this) + + Filled out General Punctuation + Some work on Spacing Modifiers + + Filled out Mathematical Operators + still needs lots of work + Made to validate + + Filled out Latin Extended B + Added some letters with curls to Latin Extended B + More fiddling with Latin Extended B accents + +2008-04-30 Steve White + * FreeSerif.sfd: + + Added Hanunóo script, with characters based on those in + font MPH2BDamase, on request from the maintainer of that font, + http://packages.debian.org/sid/ttf-mph-2b-damase + + Glyphs are simple vector strokes. Could be a little more uniform. + + Added Buginese script "Lontara", with characters based on those in + font MPH2BDamase, on request from the maintainer of that font, + http://packages.debian.org/sid/ttf-mph-2b-damase + + Note the glyphs are pretty rough, clearly a digitization of handwriting. + I just cleaned them up, and corrected discrepancies with Unicode, + and compared with some pictorial samples of the script I could find. + +2008-04-29 Steve White + * ranges.py: + + Improved look a lot--still unhappy with some ranges + OS/2 seems sometimes bang-on, sometimes unrelated to anything (including + fontforge's OS/2 listing) + + * FreeSerif.sfd: + + Much fiddling with Tamil range. + First scaled to 78% (avoiding the references) + This gets it in the ballpark height-wise. [A bit taller than the Latin + letters, but the stroke is narrower, but then the glyphs are busier.] + Then had to re-align combined references, the trickiest being the + halants. + Checked with other fonts with Tamil text. + +2008-04-28 Steve White + * FreeSans.sfd, FreeSerif.sfd: + + Cleanup of control points in Arabic and Thaana + + * FreeSerif.sfd: + + Cleanup of missing extrema in Arabic and Thaana + + Many changes to Thai, trying to make the script fit between some lines, + so accents won't get clipped, etc. + Also, stroke weight was heavier than that of Latin. + + Scaled whole thing by 93%. + Shrank the tallest letters 0E42-4 to get them under 900EM. + Shaved off top of maiek. + Fiddled with positioning of all accents. + Made positioning tables for accents. + Note: unclear these are working correctly + + Fixed a bug having to do with character replacements for characters + named 'ng' and 'nj'; these names had been taken on by other characters. + + Made to validate + + Unicode positions of two Cyrillic Extended characters were switched. + Fiddled with a couple of Cyrillic combining diacritics + +2008-04-27 Steve White + * FreeSans.sfd: + + bugfix: a left harpoon mysteriously appeared to the left of letter p! + +2008-04-26 Steve White + * FreeMono.sfd: + + Made to validate + + * FreeSans.sfd: + + Made to validate + + Toward J. Poons report + Made 032B more like proper double-arches (and distinct fro 033C seagull) + Made 032b more like a seagull + + * FreeSans.sfd, FreeSansBold.sfd: + + Sans: fiddling with widths and terminators of math symbols, + toward J. Poon's report + R & B: removed u+2741 because it didn't match the Unicode description + + * FreeMono.sfd: + + Extensible parenthesis symbols weight/terminators + Toward bug # 23064: https://savannah.gnu.org/bugs/index.php?23064 + Rounded a bunch of terminators + +2008-04-22 Steve White + * FreeSerif.sfd: + + Small alignment problem in Greek Extended + + One more tweek to spacing in Cyrillic Extended + + Corrected spacing in Cyrillic Supplement + + Added Cyrillic Supplement letters for + Enets, Khanty, Chukchi, Itelmen, Mordvin, Kurdish, Aleut + + Added Cyrillic letters for Nivkh (completing Cyrillic range) + More tightening of accents in Latin Extended. + + * FreeSans.sfd: + + Fiddled with math--consequences of changing the "similar" operator + + More tightening of accents + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Adjustments to h and k with caron and cedilla in Latin A and B + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd: + + FreeSerifBold: deleted 3 dotted Hebrew letters in Private/Corporate use + (E801-3). They weren't ligatures or in any other lookup, and they + weren't present in FreeSerif. + + * FreeSansBold: + Unlinked and deleted F6C3, which called itself commaaccent. + Made some new spacing and non-spacing accents to make up for it. + + * FreeSansBoldOblique: + Made references of many Latin Extended. + Also corrected several wrong ones. + + * Freeserif: + Re-named commaaccent + +2008-04-21 Steve White + * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd, FreeSerifBold.sfd: + + Deleted Hiragana and Katakana ranges, as discussed on bugs list. + Cleaned up some encoding issues, unnamed glyphs + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Roman: added 'sine' -- not beautiful, but I liked drawing it + All: Made special lookup for Dutch ligatures 'IJ' and 'ij' + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Roman: ffi etc Latin ligatures from 'liga' to 'dlig' (these weren't + really ligatures anyway, and only looked very bad when used. + Retain for condensed type. + Others: deleted Latin 'liga' table altogether + BoldOblique : added j to ij ligature + + Toward J. Poon's Report: + Except for issues of terminators not always vertical or horizontal, + and a few things that were too hard or I was unsure of. + +2008-04-20 Steve White + * FreeSerif.sfd: + + Futzing with accents in Latin Extended Additional and Latin Extended-B + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Added primemod character, referenced by Greek number sign + + * FreeMono.sfd, FreeMonoOblique.sfd: + + Following J. Poon's report, disconnected NJ (01CA) + +2008-04-19 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + First pass throught J. Poon's bug list. + See bug reports for details. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made underscore slanted in Oblique faces, made all to be width of + space character. + Towards J. Poon's report. + Disturbed that xterm and some other apps put small space between + characters when none was called for. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSansOblique.sfd: + + Corrections on Currency Symbols + + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More corrections, additions to Currency Symbols + + * FreeSans.sfd, FreeSerif.sfd: + + Filled out and corrected Currency Symbols + +2008-04-18 Steve White + * FreeSans.sfd, FreeSerif.sfd: + + Adjustments to Combining Marks for Symbols + Additions to range in Sans, and re-structured its marks table so that + "middle" can apply to any range + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Made reference between combining koronis and lenis of Greek Extended. + In Serif, re-worked combining marks lookup tables, added anchors in + Latin, moved so without marks they work in kedit (but now I'm doubting + kedit does a reasonable thing...what is a better application for + testing this?) + +2008-04-16 Steve White + * FreeSerifItalic.sfd: + + Adjusting of spacing and accents in Greek + + * FreeMono.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd: + + Much futzing with Greek letter spacing and accents. + Added lenis to FreeMono. + + * FreeMono.sfd, FreeSerif.sfd: + + Adjusted spacing of dots of Greek dieresistonons in Serif + Whipped up something for Greek kappascript in Mono (could use revision) + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Raised dots on double-dotted Cyrillic i, to match that of i and j. + +2008-04-14 Steve White + * FreeMono.sfd: + + Corrected 27e6-7 "white bracket" + Note it is probably a FontForge bug these symbols aren't showing up. + FontForge thinks they are in Supplemental Arrows, but they should be + in Supplemental Math-A + + Named some Greek characters + + * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Spacing of some Cyrillic characters + +2008-04-13 Steve White + * FreeSerif.sfd: + + Some fiddling with accents + 'yogh' was too wide + + * FreeSansBold.sfd, FreeSansOblique.sfd: + + Character spacing was chaos--tried to improve. BoldOblique also needs + it. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Completed the fix of bug #12798, Greek glyphs with accents to side + Much mucking with accents here, and fixed a few things that were just + wrong. + +2008-04-12 Steve White + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made Mono curly quotes "bent" + + * FreeMono.sfd: + + More fiddling with Greek accents + Made quotes "bent" + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Adjustments on Greek diaresistonos etc. + Adjustments in Serif on combining marks for symbols + + * FreeSerif.sfd: + + More additions to Combining marks for Symbols + + Additions to Combining marks for Symbols -- now mostly full. + Lots of adjustments to middle anchor point in Latin to make big circle + (nearly) encircle preceding latter + +2008-04-11 Steve White + * FreeMono.sfd: + + Bugfix: + Had indroduce a glyph of width other than 600, making kterminal not + recognize it as a monospace font. + +2008-04-10 Steve White + * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More messing with accents. + Further to bug #12798, Greek glyphs with accents to side + Much messing with glyphs in Greek Extended range + +2008-04-09 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerif.sfd: + + Revisited Latin-1 and Latin-A accents. + Glyph B7 was called "periodcentered", but Unicode callse it Mid Dot, + and the description doesn't refer to the period. I made it like the + dot accent. throughout, and referred L-dot to it. + + Also double-checked "commaaccent" characters (some in Unicode called + cedilla, but the Unicode example shows a comma...mystery) + + Also the funny IPA upside-down f often had two bars, incorrectly. + + To do: go through rest of Serif, and Sans + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Completed re-structuring of stacked Latin accents in Mono. + Also: lots of associated adjustments of Greek Extended accents. + (Trying to at least center extremely wide characters on their box) + Repaired some victems of "find overlaps" sweeps + Worked on glyphs with apostrope/comma parts + Corrected a few wrong glyphs. + + Trying out a "bent quotes" solution to making primes distinct from + quotes. + +2008-04-08 Steve White + * FreeMonoOblique.sfd: + + Toward reducing overall height + Did similar process as for Mono, fixing a few errors along the way. + Also the Greek Extended range was very messed up vertical and + horizontally. + Horizonal spacing of the heavily accented Greek is a real problem in + Mono... + To do: + revisit "commaaccent" characters in all faces: do some have + edillas? + some Hebrew glyphs are a little low + Georgian generally is way out of bounds + +2008-04-07 Steve White + * INSTALL: + + Various updates and corrections, tweeked formatting + + * FreeMonoBold.sfd: + + Tweeking of accents + +2008-04-06 Steve White + * FreeMono.sfd, FreeMonoBold.sfd: + + Re-worked accents in FreeMonoBold.sfd to make Latin ranges lie between + 800 and -200 EM, as with FreeMono. + + * FreeMono.sfd: + + Latin Extended ranges: Implemented new policy of shortening the letters + of the characters with the highest-stacked accents. + + At this point all the Latin glyphs lie betweeen 800 and -200 EM. + + Also checked for readability of all the Latin extended letters in xterm. + (Issue: it chops letters outside their bounding boxes; many accents had + been a bit outside. Made sure that if they were chopped, they were at + least still recognizable.) + +2008-04-05 Steve White + * FreeMono.sfd: + + Following exchange about Mono on freefont-bugs with Joe Wells, who + > doesn't like the curly quote marks + > wants combining diacritics to work + > wants tight line spacing + + Trying to reduce font height: + > exclamdown was below -200 + > Throughout Extended Greek, ypogegrammeni were too low. Shortened + glyph, and raised all references. + > Lots of messing with Latin Extended ranges to make glyphs mostly + fit into 800 height. Mostly succeeded. A couple will get chopped. + > Messed with "commaaccent" glyphs, which were very low + > Cyrillic 04B1 had a tail that was incorrectly low + > Much mucking with Georgian range. Moved up by 95 (read that Georgian + is written as though centered between two horizontal lines, rather than + as sitting on a baseline) There are still a few very high glyphs. + + FontForge U+0122 called Gcommaaccent, glyph looks like that, but + Unicode says it's Gcedilla. Made the ones called cedilla by Unicode + to be cedillas + + Note bug in Unicode: standard for 0122, 0123, 0136, 0137, 013B, 013C, + 0145, 0146, 0156, 0157 all talk about cedilla, say to make it with + cedilla, but example shows comma. + + By the way: + > Got rid of commaaccent and dotlessj in Corporate Use + > Replaced shadedark, with little squares now not overlapping. + > Corrected IPA symbol 'ts' 02A6, added 02a8, 02a9, 02aa, 02ab, 02ac, + 02ad, 02ae, 02af + + (so many changes...the CVS server was down...) + + * FreeSerif.sfd: + + Re-named arabic and hebrew characters + Big adjustment to comma-accents. Mostly effects Greek Extended. + Made such accents to be like comma, rather than like Russian apostrophe + (and de-referenced that symbol) + +2008-04-04 Steve White + * FreeMono.sfd, FreeSerif.sfd: + + Raised dot on superscript i (2071) -- more distinct at small sizes + + * FreeMono.sfd: + + added two IPA symbols + +2008-04-02 Steve White + * FreeSerif.sfd: + + fixed a few more control points too close + + Fixed names of languages in ligature table for latn "w/i". + This fixes a crash when FontForge opened the ttf table + + Motivated by bug crashing FontForge when opening ttf file, + started cleanup of useless control points. Not finished. + Got partway through Sinhala + +2008-03-31 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Fixed various "Find Problems", including glyphs with mixed-up names, + and bad TT matrices. (lots more bad TT matrices remain) + + * FreeSerif.sfd: + + Re-named a bunch of Cyrillic letters + + * FreeSerif.sfd: + + Put above mark on Cyrillic i and double-dot i for Slavonic number forms + +2008-03-30 Steve White + * FreeSans.sfd: + + Tightened spacing on glyphs of last commit + + * FreeSans.sfd, FreeSerif.sfd: + + Concerning bug #16120, Include upper case Wynn and upper case Yogh + Adapted Herman Miller's Thyromanes letters 01F7 021C 021D for Serif + Drew my own versions for Sans. + + * FreeSerif.sfd: + + Added 04F6,7 + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Made more Cyrillic diacritics really combine. + Made a mark lookup just for Cyrillic diacritics, + Marked most of the unadorned Cyrillic alphabet. + + Still not clear on correct shapes for some of the marks. + + * FreeMono.sfd, FreeMonoOblique.sfd: + + Tweeks to accents + +2008-03-29 Steve White + * FreeSans.sfd, FreeSerifItalic.sfd: + + Small adjustments in Cyrillic + + * FreeSerif.sfd: + + Corrected small palochka + Made Cyrillic combining hundred-thousands and millions really combine + Named some combining diacriticals + + * FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Mostly adjusted horizontal spacing of mono oblique faces + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More cleanup of Cyrillic ranges + + Completely re-did horizontal spacing of SerifItalic and SerifBoldItalic. + See bug #17912, poor kerning in Cyrillic oblique... + https://savannah.gnu.org/bugs/index.php?17912 + It looked like chaos to me. + Only so much can be done: the font is flawed. + But I think the changes make text readable in these faces. + + There were dozens of incorrect glyphs in higher-numbered characters. + I deleted all those I found. No glyph is better than a wrong glyph. + + Futzt with accents, shooting for consistency and readability. + + A maintenance thing: making correct references (acyrillic vs a, + although they may be the same glyph) I made a lot of headway, but + it isn't finished. + + Likewise, a large fraction of these are compound characters, which can + be made with references, resulting in easier maintenance, reduced + likelihood of errors, and smaller files. I replaced many. + + * FreeSerif.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Cyrillic italic + Added italic, bolditalic + 0493, 04a7, 04AD + because their form clearly varies in italic. But was just guessing... + + * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Cyrillic italic + + Added italic, bolditalic + 0493, 04AD + because their form clearly varies in italic. + But was just guessing as to exact form. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Overhaul of Cyrillic + + Italic, BoldItalic + added small yat for bug #22588 (note Times New Roman doesn't use + alternate form in Italic) + + All forms of Serif have big problems in Cyrillic. + + The ugliest is in roman. The letters, even of the Russian alphabet, are + of inconsistent height (awfully, small 0438 (ii) 0446 (tse)) + and they vary from the height of Latin + and they vary from the height of italic and bold. + They are a mish-mash of letters from several fonts, of similar (but not + quite identical) weight, and similar, (but not quite identical) size. + + I think the best solution would be to identify the face that best + matches Latin, and fill the range with that. I think this is possible + because the rarer letters seem to be better: the common letters are the + ones that are wrong. + + For now, I just increased the sized of 0438 and 0446, and 048a, 048b, + also 0459 (lje) 045A (nje) 0464 (dje) + + Other issues + +2008-03-27 Steve White + * FreeSerifBoldItalic.sfd: + + Moving all Greek capitals with accent so they don't cover previous + letter. Remedies bug #12798 + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Various tweeks to accented Latin letters. + Connected O-ogonek correctly + + * FreeSerifItalic.sfd: + + Accents of numerous accented Latin letters got shifted in a previous + commit. This fixes it. + + * FreeSerif.sfd: + + Adjusted combining tack left and right (0318-0319) to be above -300 EM. + + * FreeSans.sfd, FreeSerif.sfd: + + Added some "middle" marks for positioning of diacritics + + * FreeSans.sfd: + + Copied 4 enclosing combining diacriticals from Serif 20DD - 20E0 + + * FreeSerif.sfd: + + Adjusted and added some enclosing diacritics 20DD - 20E0 + In response to Debian bug #472566 + ttf-freefont: U+20DD COMBINING ENCOLSING CIRCLE doesn't combine + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=472566 + +2008-03-26 Steve White + * FreeSerif.sfd: + + Lowered a few over-high Latin accents + + * FreeSansBold: + + Devangari--only digits 1 and 2, and nothing else. Deleted + + * FreeMonoBold, FreeMonoOblique, + FreeSerifBold, FreeSeriftalic, FreeSerifBoldItalic, + FreeSansOblique, FreeSansBold, FreeSansBoldOblique: + + Got rid of dotlessj, comma in Corporate Use + Single Substitution lookup, ccmp table + Made proper dotlessj, re-linked j-circumflex + + Note: + FreeSansBold has a commaaccent in Corporate Use, used by several other + characers. Haven't done anything about this. + +2008-03-25 Steve White + * FreeSerif.sfd: + + Added/corrected glyphs for yeh hamza in Arabic, + Added init and medi lookups for yeh hamza. + +2008-03-24 Steve White + * FreeSerif.sfd: + + Added isolated and final forms for + 0629 teh marbuta + 0624 waw hamza + 0626 yeh hamza + 0649 alef maksura + A previous commit had added lookups that referred to these, + + More fiddling with super/subscripts + + * Makefile, Makefile, GenerateTrueType: + + Scripts and Make targets to generate OpenType fonts and zip file + + * maintenance.txt: + + Added gnupload and info about tagging + +2008-03-23 Steve White + * FreeSerif.sfd: + + Last of Find Problems -> ATT + 'mark' Latin lookup: afii10026 is in 'cyrl', also afii10074 + Upper and lower Cyrillic i. Just removed mark from both letters. + + 'half' Bengali lookup Khanda_Ta is in 'bng2'. Added bng2 to lookup + Added TtTable etc + + Clean-up of Points too Close through to end of font. + This episode completes the paths/points clean-up of Serif. + But note: many ranges, esp. Ethiopic, Japanese, and Indic, have way + too many points, resulting in lumpiness. + + At this point, FontForge can convert splines to quadratic, auto-hint, + and auto-instrument without segfault. + + * Makefile, sfd/Makefile, tools/GenerateTrueType: + + Alterations to build process: added a Makefile, and made to work + on my system. Now auto-hints before generating TrueType. + +2008-03-22 Steve White + * sfd/FreeSans.sfd: + Lots of additions of math characters. Should complete for + LaTeX 2e, except for extensible brackets. + +2008-03-21 Steve White + * *.sfd: + + Regularized stacking of accents in Latin Extended Additional + Changed name of 00B5 from 'mu' to 'micro', + 2206 from 'Delta' to 'Delta.math', + 0308 from 'diaerisis' to 'diaerisiscomb' + + * FreeMono.sfd: + + additions to IPA + + * FreeMonoBoldOblique.sfd: + + Moved dotlessj from Corporate Use, + Deleted commaaccent there + Fixed mis-named glyphs tcommaaccent, Tcommaaccent + Changed name of 030A from 'dieresis' to 'ringcomb' + + * FreeSans.sfd: + + Added some arrows, and a couple of blackboard bold characters + + Several characters in U+F600 Corporate Use range + dotlessj, onefitted, commaaccent + + dotlessj referred to by: jcircumflex, uni01F0: + renamed it to uFFFF, re-linked others by hand + + commaaccent + http://diacritics.typo.cz/index.php?id=9 + should be u+0326 but wasn't linked to anything + + * FreeSansBold.sfd: + + U+0617 etc: read glyphs "4GWglm". It should be Arabic. Deleted + + * FreeSansBold.sfd, FreeSansOblique.sfd, FreeSansBoldOblique.sfd: + + Removed bogus glyphs for 200C 200D, ZWJ and ZWNJ + + * FreeSerif.sfd: + + Split lookup for ligatures in latin into two classes; + ff, ffl, fl which are appropriate for all languages, + and fi, ffi, which are not appropriate in Turkish (due to distinction + between short and long i) + Needs to be done for other faces. + + Filled set of extensible brackets in Miscellaneous Technical + + Think IPA is now complete. + +2008-03-18 Steve White + * FreeSans.sfd: + + clean-up of all path issues and points too close + +2008-03-18 Steve White + * FreeSans.sfd: + + Something was causing crashing effects in Windows. Cleanup of + problems eventually made it go away. Now works well. + + Cleaned up many "points too close" + + Cleaned up all ATT problems, of which there were many and various. + + # Incorrectly labelled zero-width joiner used in a ligature + + # Incorrect substitution of dotlessi and dotlessj with i and j was + somehow connected with FontForge crash. Attemts to remove the + substitution would damage a 'ccmp' table; subsequent changes would + result in FontForge crashing on save, and truncating the sfd file. + Surgically removed with vi. + + # A couple of Indic lookups had incorrect script DFLT; one had 'latn'. + + # Don't understand why there are scripts named + dev2 bng2 grj2 gur2 when there are already deva beng gurj guru + But anyway, lots of 'vatu' 'pres' 'haln' and 'liga' lookups contained + characters in the '2' scripts but were lablled only for the 'non-2' + ones. Added the '2' scripts to all these lookups. Suspect a mistake. + + Note: several of these problems are repeated in other Sans faces. + +2008-03-16 Steve White + * FreeMono.sfd: + + Cleanup of many path problems "points too close" + + Strove to make accents Latin Extended range legible at small sizes + + Named some unnamed characters; removed a duplicate + + At this point, all fonts are passing FontForge Validate. + +2008-03-15 Steve White + * FreeSerif.sfd: + + CJK punctuation: made some of the very high glyphs smaller (under 900EM) + The brackets in Sans were very ugly, and not even Sans-serif. + Serif: added extensible square brackets, diddled with integral + corrected direction of some added glyphs + + Several bugs having to do with missing glyphs in Tamil range. + Also a buggy ligature in Devangari. + + Shortened names of many lookup tables + + Futzt with some combining diacriticals + + Added extensible square brackets. + + * FreeSans.sfd: + + Changed names of a bunch of glyphs with invalid + TrueType names, in range 0x1025f+ (not real Unicode). + Took pains to retain information contained in the names. + Wonder if these glyphs have ever been of any use. + + CJK Punctuation: brackets were hand-drawn and very ugly. Improved. + + * *.sfd: + + Set OS/2 Metrics back to absolute 900/300. Offsets are not + interpreted uniformly. + + Cleanup of many path problems up to extrema and self-intersecting + + Ordered PS Blue values. + +2008-03-14 Steve White + * FreeSerif.sfd: + + Got rid of mixed references and contours + Cleanup of many path problems "points too close" + + Started clean-up to satisfy FontForge Validate + + Changed names of three glyphs in the + Tamil ligatures range...all clearly bugs. + + * FreeSans.sfd: + + Added slanted-hyphen + + * *.sfd: + + Unified OS/2 Metrics + Added Grid Fit + +2008-03-13 Steve White + * FreeSans.sfd: + + Rearranged PS BluesValues so they were in increasing order, + Made all 20 in width. + +2008-03-12 Steve White + * FreeSans.sfd, FreeMono.sfd: + + Added TrueType hinting tables. + Fixed glyphs that didn't convert well to quadratics + Got rid of mixed contours and refs + + * FreeSerifBold.sfd: + + Cleanup of path problems + +2008-03-11 Steve White + * FreeMonoOblique.sfd: + + Cleanup of path problems + +2008-03-09 Steve White + * FreeSerif.sfd: + + Corrected L-dot + Further cleanup of path/ref problems + + Found several ligatures that referred to a missing glyph "ZWJ". + Took this to mean the "zero width joiner" u+200D + + * *.sfd: + + Changed OS/2 metrics to be absolute 900/300 + + * FreeSerifItalic.sfd: + + Added Greek lunate epsilon + + * FreeMono.sfd: + + Many additions in math range + Reduced size of binary union, intersection, vee, wedge + Corrected empty set + Corrected logical 'assert' relations, etc. 22a2-22af + Efforts to make Math glyphs legible at small point sizes + + * FreeSans.sfd: + + Added Greek lunate epsilon and rho symbol + Unstacked more stacked diacriticals + + Further cleanup of path/reference problems + +2008-03-08 Steve White + * FreeSans.sfd, FreeSerif.sfd: + + Added some "n-ary" Math operators + + * FreeSerif.sfd: + + Further clean-up of path problems...up to Ethiopic + > Started adding and correcting Math operators for LaTeX 2e + > Corrected n-ary union, intersection, and spikes to be larger + than the binary operators + > Made (many of) the operators based on + - = to use those + symbols directly (by reference or copying). + > Added lunate epsilon + > Corrected empty set + > Tightened up spacing of some other technical characters + > Worked on some more math operators involving = + > triangle + > Several arrows + > Supplemental Arrows-A + + * FreeSans.sfd: + + Clean-up of font paths + Open self-intersecting outermost-clockwise missing-extrema + also flipped references (unlinked) + + Added Greek lunate epsilon and rho symbol + +2008-03-06 Steve White + * sfd/FreeSerif.sfd: Shortened and thickened the combining hook mark, + U+0309, to make more like Unicode samples. + Also see (bug #22499) un-stacked incorrectly stacked accents + +2008-03-05 Steve White + * sfd/FreeSerif.sfd: vertical lines: combining diacritical marks + corrected 0300 030D 0329 0348 (were rendered as straight apostrophes) + Spacing Modifier letters added 02C8 02CC + 02B9 02Ba prime and double-prime + Fixed positioning U+1EC8, 9, I with hook above + +2008-03-03 Steve White + * sfd/FreeSerif.sfd: TT strings updates. + updated Copyright to 2008 + Added Vendor URL as the Savannah freefont site + * sfd/FreeMono.sfd: A standard pangram as the Sample Text for Russian + It reads: In the thickets of the South once there was a citrus + ...--yes, but a fake specimen! + * sfd/*.sfd: Set the OS/2 Sup/Sub settings, which by default looked + like random trash. + +2008-03-02 Steve White + * sfd/FreeSerif.sfd: began cleanup of problems given by FontForge + "Find Problems" feature. (bug #22454) + +2008-03-01 Steve White + * sfd/FreeSerif.sfd: made Arabic work for text display (bug #22329) + Added required contextual replacement tables, + Made a few missing characters, + * sfd/*.sfd: Removde all back layers from glyphs that had them. + +2008-02-27 Steve White + * sfd/FreeSans.sfd: filled in Combining Diacriticals + * sfd/FreeSerif.sfd: shifted whole Arabic range down by 200EM. + +2008-02-26 Steve White + * sfd/FreeSerif.sfd: enabled DPOS table. + +2008-02-24 Steve White + * sfd/*.sfd: Much fiddling with the "combining diacriticals" + range 0300-036F. Made to align with medium-size lowercase + preceding character if not using DPOS table. + +2008-02-23 Steve White + * sfd/FreeSerif.sfd, FreeSans.sfd, FreeMono.sfd: (bug #21784) Filled + in set of HTML 4 Character Entities. + + * sfd/FreeSerif.sfd, FreeSans.sfd, FreeMono.sfd: (bug #18413) + undertie too low -- went on to tidy other similar characters in + Combining Diacriticals range. + +2008-02-21 Steve White + * sfd/*.sfd: Moved capital Greek letters with tonos so tonos doesn't + cover preceding letter (bug #12798) + + * sfd/FreeSerif.sfd, FreeSans.sfd: (bug #13370) made extended + integrals to line up. + +2008-02-20 Steve White + * sfd/*.sfd: started removing glyphs with back layers (printing bug) + * sfd/*.sfd: adjusted vulgar fractions (bug #17756) + * sfd/*.sfd: adjusted numerical superscripts (bug #20278) + +2008-02-18 Steve White + * sfd/FreeSerif.sfd: Offset Hiragana and Katakana ranges (bug #22326) + * sfd/FreeSerif.sfd: U+30FB, KATAKANA MIDDLE DOT to be full width + (bug #18326) + + * sfd/FreeSerif.sfd: Re-promoted + ff ffi ffl fi fl + as standard ligatures in Latin. + +2008-02-17 Steve White + * sfd/*.sfd: committed to FontForge Spline Font Database (SFD) 2 + format. + +2008-02-10 Steve White + * sfd/*.sfd: brought into line with Debian ttf-freefont + Deleted a couple of patches, and applied those applied to Debian. + +2006-09-20 Primoz Peterlin + + * INSTALL: added installation procedure for MacOS X, courtesy + Philipp Kempgen. + +2006-05-04 Primoz Peterlin + + * sfd/FreeMono.sfd: deleted Russian sample text, which did not + conform to UTF-7. + +2006-04-15 Primoz Peterlin + + * sfd/FreeSerif.sfd: corrected U+10D3. + + * sfd/FreeSans.sfd: ligature U+FB06 (LATIN SMALL LIGATURE S T) + changed from mandatory ("liga") to discretionary ("dlig") (bug + #16253). + + * sfd/FreeMono.sfd: deleted incomplete glyph U+FB06 (LATIN SMALL + LIGATURE S T); deleted U+FB00, U+FB01, U+FB02, U+FB05 as + ligatures (bug #16253). + + * sfd/FreeMonoOblique.sfd, sfd/FreeMonoBoldOblique.sfd: added + U+FB00; deleted U+FB01, U+FB02 as ligatures (bug #16253). + + * sfd/FreeMonoBold.sfd: deleted U+FB00, U+FB01, U+FB02 as + ligatures (bug #16253). + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd: added Georgian letters, donated by + Gia Shervashidze + +2006-02-22 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd: ligature U+FB4F + changed from mandatory ("liga") to discretionary ("dlig"). This is + respons to Bug#349657: [bug #15792] Freefont Alef and Lamed + combine + +2006-02-21 Primoz Peterlin + + * sfd/FreeSerifBold.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd, + sfd/FreeSansBold.sfd: ligature U+FB4F changed from mandatory + ("liga") to discretionary ("dlig"). This is respons to Bug#349657: + [bug #15792] Freefont Alef and Lamed combine + + * sfd/FreeSerif.sfd: corrected bug#275759: [bug #15790] FreeSerif + glyphs for U+2198/U+2199 were reversed. + +2006-02-15 Denis Jacquerye + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeMonoBold.sfd: removed ij + and IJ ligatures. + +2006-02-10 Primoz Peterlin + + * sfd/FreeSerif.sfd: added small Georgian letters (mkhedruli), + donated by Gia Shervashidze + + * AUTHORS: Added Gia Shervashidze + + * CREDITS: Added Gia Shervashidze + +2006-01-26 Primoz Peterlin + + * notes/maintenance.txt: Added information on the Makefile now + used; username for FTP login is anonymous. + + * sfd/FreeSansBold.sfd: added U+0569, U+0571, U+0579, U+057B, + U+0586. Armenian small letters completed. + + * sfd/FreeSerif.sfd: added U+0297, U+02AD-02AF. IPA Extensions + section is now complete. Copied a dozen of glyphs from Omega IPA + to Phonetic Extension section. + +2006-01-25 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+01A, U+01A3, U+01A6, U+01B2, U+01BA, + U+01BB, U+01BE, U+01BF. + + * sfd/FreeSans.sfd: aligned small Armenian letters to x-height in + response to bug #15480. Armenian in Free Sans needs a major + cleanup. + +2006-01-24 Primoz Peterlin + + * sfd/FreeSerif.sfd: changed U+0452, U+045B. Cleanup: U+0460, + U+0461, U+04Bc, U+04BD, U+0508. + + * sfd/FreeSansOblique.sfd: replaced accented chars in Latin-1 and + Latin Extended-B sections with references, where possible. + + * sfd/FreeSerif.sfd: changed U+0285. + +2006-01-23 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0195, U+01AA, U+0297, U+03D7, + U+03F0. Several flipped references replaced by outlines. + + * sfd/FreeSansOblique.sfd: Latin Extended-B section more or less + brought in sync with FreeSans. + + * sfd/FreeMonoBoldOblique.sfd: added glyphs from FreeMonoBold in + the Latin Extended-B and IPA Extensions sections. + + * sfd/FreeSerifBold.sfd: Added U+0224, U+0225. Changed U+01B7, + U+01B8, U+04E0, U+0452, U+045B. Replaced accented characters in + the Cyrillic region with references. + +2006-01-21 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0255, U+0264, U+0277, U+0286, + U+029D. Changed U+0261. Deleted spurious glyphs in the control + code area. + +2006-01-19 Primoz Peterlin + + * sfd/FreeSans.sfd: replaced Hardip Pannu Singh's Gurmukhi with + AnmolUni by Kulbir Singh Thind. + +2006-01-17 Primoz Peterlin + + * sfd/FreeSansBold.sfd: Added U+018D, U+0194, U+01B5, U+01B6, + U+01BE, U+0262, U+02A2. + + * sfd/FreeSansBold.sfd: Changed U+0261 in order to distinguish it + from U+0067. Changed U+0251, U+0252. + + * sfd/FreeSerifBold.sfd: Small changes in the Cyrillic + section. Added U+0183, U+018C. + + * sfd/FreeSans.sfd: Added U+2045, U+2046. + + * sfd/FreeSansBold.sfd: Filled in the Gurkmukhi part with the + AnmolUni-Bold by Kulbir Singh Thind. Also some minor corrections + in the Cyrillic part. + + * CREDITS: Added Kulbir Singh Thind. + + * AUTHORS: Added Kulbir Singh Thind. + +2006-01-14 Primoz Peterlin + + * sfd/FreeSerif.sfd: Thomas Ridgeway's Tamil characters replaced + by the ones released by the Samyak font project. + + * CREDITS: Added Pravin Satpute, Bageshri Salvi, Rahul Bhalerao + and Sandeep Shedmake + + * AUTHORS: Added Pravin Satpute, Bageshri Salvi, Rahul Bhalerao + and Sandeep Shedmake + +2006-01-08 Primoz Peterlin + + * sfd/FreeSansBold.sfd, sfd/FreeMonoBoldOblique.sfd: minor changes. + +2006-01-05 Denis Jacquerye + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd: added cedi sign U+20B5, Ghanaian + currency + +2005-12-29 Primoz Peterlin + + * sfd/FreeSans.sfd: minor cleanup in the Gujarati part. + +2005-12-22 Primoz Peterlin + + * sfd/FreeSans.sfd: Devanagari and Gujarati parts cleared; once + again merged with Gargi 1.9 and Padmaa 0.6, this time correctly so + that the anchor points survived the merger. + +2005-12-16 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0577. + +2005-12-15 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0559, U+055F, U+2024. + + * sfd/FreeSansBold.sfd: added U+056E, U+0573. + +2005-12-14 Primoz Peterlin + + * sfd/FreeSans.sfd: Merged with Gargi 1.9 and Padmaa 0.6, + courtesy Monika Shah and Sonali Sonania from C-DAC, Mumbai. + + * CREDITS: Added Monika Shah and Sonali Sonania. + + * AUTHORS: Added Monika Shah and Sonali Sonania. + +2005-12-13 Primoz Peterlin + + * sfd/FreeSans.sfd - Removed Sinhala glyphs. + + * sfd/FreeSerif.sfd - Added Sinhala glyphs, formerly in FreeSans. + +2005-12-09 Primoz Peterlin + + * sfd/FreeSerif.sfd: added U+20AF, U+211E. Changed U+20AC (EURO + SIGN). + + * tools/freefont-ttf.spec: Added specification file for building + RPM package, courtesy Rok Papez. + + * sfd/FreeSerifBold.sfd: added more glyphs from Txfonts to the + Arrows and Mathematical Symbols ranges. + + * sfd/FreeSerifBoldItalic.sfd: added U+03F5 from Txfonts. + +2005-12-08 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0567, U+056A, U+056C, U+0582. + + * sfd/FreeSerifBold.sfd: copied Box Drawing range from FreeSans. + + * sfd/FreeSerifBold.sfd: added glyphs from Txfonts to the Arrows + and Mathematical Symbols ranges. + + * sfd/FreeSerif.sfd: added U+2259-225A, U+22BA, U+2308-230B, + U+2322-2323. Cyrillic composite characters replaced with + references. + +2005-12-07 Primoz Peterlin + + * sfd/FreeSerifBold.sfd: added U+025A, U+025D, U+026B, U+029B, + U+02AE, U+02AF, U+02DE. + + * sfd/FreeSerifBold.sfd: updated Hebrew part with Drugulin font + from the Culmus project. + + * sfd/FreeSerif.sfd: added U+207A-207C, U+208A-208C, U+2215-2216. + + * sfd/FreeSans.sfd: added U+2320 TOP HALF INTEGRAL, U+23AE + INTEGRAL EXTENSION, U+2321 BOTTOM HALF INTEGRAL (bug #13370). + +2005-12-07 Primoz Peterlin + + * sfd/FreeSerifBold.sfd: added U+0294-0296, U+02A1-02A2. Started + adding "below" anchors. Performed hinting on characters that were + not hinted "en masse". + +2005-12-06 Primoz Peterlin + + * sfd/FreeSans.sfd: fixed some more metrics problems in the + Extended Greek area; performed hinting on characters that were not + hinted "en masse". + + * Makefile: clean also signature files. + + * sfd/FreeMonoBoldOblique.sfd, sfd/FreeMonoBold.sfd: cosmetic + changes; cleaning background of referenced composed characters. + +2005-12-05 Panayotis Katsaloulis + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd: Some changes to the greek glyphs, + mostly having to do with "tonos" (accent) + +2005-12-05 Primoz Peterlin + + * sfd/FreeSans.sfd: minor cosmetic changes. + + * sfd/FreeSans.sfd: adjusted widths of characters in the Extended + Greek range; accents are not any more considerably overhanging on + the left side. Added U+1EDA-1EE3, U+1EE8-1EF1. + + * sfd/FreeSans.sfd: continued working on Extended Greek range; + metrics still not finished. + +2005-12-03 Primoz Peterlin + + * sfd/FreeSans.sfd: fixed combined Greek accents (bug + #12800). Width of characters still need to be adjusted as in + FreeSerif. + + * sfd/FreeSerif.sfd: fixed positions of Greek accents (bug #12798). + + * CREDITS: Added Panayotis Katsaloulis. + + * AUTHORS: Added Panayotis Katsaloulis. + + * Makefile: minor changes; now creating also a tarfile with sfds. + +2005-12-01 Primoz Peterlin + + * sfd/FreeSerifItalic.sfd: added U+0183, U+018C, U+01C0, U+01C1, + U+01C3, U+01E0, U+01E1, U+01F8, U+01F9. + + * Makefile: created a Makefile to assist building. + + * README: an update. + + * COPYING: added GNU General Public License, version 2. + + * tools/GenerateTrueType: wrote a FontForge script for conversion + to TrueType. + + * sfd/FreeSerif.sfd: merged with SolaimanLipi Bangla OpenType font + from www.ekushey.org, courtesy Solaiman Karim. + + * sfd/FreeSerifItalic.sfd: merged with SolaimanLipi Bangla + OpenType font from www.ekushey.org, slanted by 15.5 degrees. + + * sfd/FreeSans.sfd: merged with Rupali Bangla OpenType font from + www.ekushey.org + + * sfd/FreeSansOblique.sfd: merged with Rupali Bangla OpenType font from + www.ekushey.org, slanted by 12 degrees. + + * CREDITS: added Solaiman Karim + + * AUTHORS: added Solaiman Karim + +2005-11-30 Primoz Peterlin + + * sfd/FreeSerif.sfd: merged with the Rachana Normal. + + * AUTHORS: added K.H. Hussain and R. Chitrajan + + * CREDITS: added K.H. Hussain and R. Chitrajan + +2005-11-23 Primoz Peterlin + + * sfd/FreeSans.sfd - cleaned some background images. + + * sfd/FreeSans.sfd - added U+01A0-01A1, U+01AF-01B0, U+026E, + U+028F, U+0291, U+02A3-02A5, U+031B. Modified U+0198. + +2005-11-22 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+2504-250B. + + * sfd/FreeSans.sfd - added U+2591-25A1, U+25A3-25A5, U+25AA, U+25AC. + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd - added U+0263. + +2005-11-21 Primoz Peterlin + + * sfd/FreeMono.sfd - corrected positions of some Greek diacritics + on page 0x1F. + + * sfd/FreeMonoOblique.sfd - working on bringing it in sync with + FreeMono.sfd. + + * sfd/FreeSerifBoldItalic.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Added a couple of + glyphs in the IPA Extensions region. + + * sfd/FreeSansBold.sfd - added U+0574, U+0576. Removed overlaps. + +2005-11-20 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+02AA-02AC, U+02B0-02B2. + +2005-11-19 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+01B7-01B9, U+0196, U+019A, U+01C3, + U+0224-0225, U+025E, U+029A, U+2422. Changed U+0184-0185, U+0192, + U+01B4, U+0282, U+0284. + +2005-11-18 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+02EE, U+207F. + + * sfd/FreeSans.sfd - started Box Drawing area. + +2005-11-17 Primoz Peterlin + + * sfd/FreeSerifBold.sfd - added glyphs from the Omega project to + Latin Extended-B, IPA Extensions and Greek ranges. + + * sfd/FreeSerifBoldItalic.sfd - added glyphs from the Omega + project to Latin Extended-B, IPA Extensions and Greek ranges. + + * sfd/FreeSerifItalic.sfd - added glyphs from the Omega + project to Latin Extended-B, IPA Extensions and Greek ranges. + + * sfd/FreeSerifItalic.sfd - added U+018B, U+025C, U+0265, U+026F, + U+0279, U+0287, U+028C-028E, U+029E. + + * sfd/FreeSerifBoldItalic.sfd - added U+1EDA-1EE3, U+1EE8-1EF1, + U+2190-219B, U+219E-21A8, U+21B9-21BA, U+21C4-21CA, U+21E4-21E5, + U+2669-266F. MES-1 compliant. + + * sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - added U+FFFD. + + * sfd/FreeSerif.sfd - removed overlaps in Latin Extended-B and IPA + Extensions ranges. + +2005-11-16 Primoz Peterlin + + * sfd/FreeSerifItalic.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. + + * sfd/papers/eurotex2003/freefont.tex, + sfd/papers/eurotex2003/freefont.bib - Revised version, sent back + by Karl Berry on 20050110, that should match the one published in + TUGboat. + + * sfd/FreeSerifItalic.sfd - started added accent anchors. Added a + handful of Greek letters from Omega font collection. + + * sfd/FreeSerif.sfd - added a handful of letters in the Latin + Extended-B and IPA Extension ranges from the Omega font collection. + +2005-11-16 Denis Jacquerye + + * sfd/FreeSerif.sfd - moved U+0263 to U+0264; added U+0263 + + * sfd/FreeSerifItalic.sfd - fixe U+01EE; added U+01B7-U+01B9 + +2005-11-16 Primoz Peterlin + + * sfd/FreeSans.sfd - Made small Greek letters the same height as + Latin and Cyrillic ones and replaced them with references, where + applicable. + + * sfd/FreeSerif.sfd - replaced Greek letters with references, + where applicable. Added U+03D7, U+03F0-03F2. + + * sfd/FreeSerif.sfd - added U+0255, U+025A, U+025D, U+025F, + U+0262-0263, U+026B-026C, U+0274, U+0276-0277, U+028F, U+0291, + U+029D. + + * sfd/FreeMonoOblique.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Added U+F6BE. + + * sfd/FreeSansOblique.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. + + * sfd/FreeSans.sfd - changed U+01A5. + +2005-11-16 Primoz Peterlin + + * sfd/FreeSans.sfd - applied the sequence suggested by Werner + Lemberg for reducing redundant points. Replaced accented glyphs in + the Latin-1 and Latin Extended-A areas with references. Made + capital Greek letters the same height as Latin and Cyrillic ones + and replaced them with references, where applicable. + +2005-11-15 Denis Jacquerye + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSansOblique.sfd - fixed + U+026A, it was a dotlessi and therefore like U+0069 when + accented. + +2005-11-15 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - corrected Greek tonos (slanted instead of + a vertical line). + + * sfd/FreeMonoBoldOblique.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Replaced accented + glyphs in the Latin-1 and Latin Extended-A areas with references. + +2005-11-14 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Added 2005 in copyright info. + + * sfd/FreeSansBoldOblique.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Replaced accented + glyphs in the Latin-1 area with references. + + * sfd/FreeSansBoldOblique.sfd - added U+0180, U+0184, U+0185, + U+0195, U+01A0-01A2, U+01AF-01B0, U+025E, U+026E, U+0292, + U+0294-0296, U+029A, U+02A1, U+2126-2127, U+2190-219B, + U+219E-21A8, U+21C4-21CA, U+2669-266F. MES-1 compliant. + + * sfd/FreeMono.sfd - Replaced accented glyphs in the Greek and + Cyrillic areas with references. + + * sfd/FreeMonoBold.sfd - applied the sequence suggested by Werner + Lemberg for reducing redundant points. Replaced accented glyphs in + the Latin-1 and Latin Extended-A areas with references. + +2005-11-14 Primoz Peterlin + + * sfd/FreeSerif.sfd - applied the sequence suggested by Werner + Lemberg for reducing redundant points. + + * sfd/FreeSansBold.sfd - added U+219A, U+219B, U+2669-266F. + + * sfd/FreeSerifBold.sfd - added U+2669-266F. + +2005-11-12 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+0180, U+0181, U+0183, U+0187, + U+0188, U+018A, U+018C, U+018D, U+0193, U+019C, U+01A0, U+01A1, + U+01AC, U+01AF, U+01B0, U+025C, U+0260, U+026E, U+0277, U+0281, + U+0284. + +2005-11-11 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+195, U+1A6, U+025E, U+026E, + U+029A, U+0313, U+0314, U+0342, U+0344, U+0345. Started adding + accent anchors. + + * sfd/FreeMono.sfd - applied the sequence for reducing redundant + points, suggested by Werner Lemberg. + + * sfd/FreeMono.sfd - corrected Greek letters (using tonos instead + of a vertical line). Added U+026E, U+F6BE. Accented characters in + Latin 1, Latin Extended A and partly Latin Extended B replaced by + references. + + * sfd/FreeSerifBold.sfd - applied the sequence for reducing + redundant points, suggested by Werner Lemberg. Added U+01A5, + U+02A0, U+2190-219B, U+219E-21A8, U+21B8, U+21B9, U+21C4-21CA, + U+21E4, U+21E5. + +2005-11-10 Primoz Peterlin + + * sfd/FreeSansOblique - changed U+0192, U+01A5; added U+01C0-01C3. + + * sfd/FreeSansBold.sfd - replaced glyphs with references in the + Cyrillic area. Removed U+04A8, U+04A9. Added U+04C5, U+04C6, + U+04C9, U+04CA, U+04CD, U+04CE, U+0535, U+053F, U+0546, U+0565, + U+0584, U+0587, U+0589. + +2005-11-10 Denis Jacquerye + + * sfd/FreeSans.sfd - added U+028A-U+028B + + * sfd/FreeSansOblique - added U+028A-U+028B, U+0276, + U+0292, U+0294-U+0296, U+0298-U+0299 and U+029B; fixed some + other glyphs + +2005-11-10 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+01A6. Simplified outlines in the + ASCII range. + + * sfd/FreeSansBold.sfd - added U+00A0, U+00AD, U+0531, U+2126, + U+2190-2199, U+219E-21A8, U+21C4-21CA. + + * sfd/FreeSansBold.sfd - applied the sequence for reducing + redundant points, suggested by Werner Lemberg. Added automatically + constructed accented characters in page 0x1E. + +2005-11-09 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+0183, U+018C. + + * sfd/FreeSans.sfd - added U+1EA2, U+1EA3, U+1EA8, U+1EA9, U+1EB2, + U+1EB3, U+1EBA, U+1EBB, U+1EC2, U+1EC3, U+1EC8, U+1EC9, U+1ECE, + U+1ECF, U+1ED4, U+1ED5, U+1EE6, U+1EE7, U+1EF6, U+1EF7, U+220A, + U+220B, U+220D, U+2272, U+2273, U+2282, U+2283. + + * sfd/FreeSerifItalic.sfd - changed U+03D5. + + * sfd/FreeSerifBoldItalic.sfd - changed U+03C6; added U+2070, + U+2075-2079, U+207F, U+2080, U+2085-2089, U+2155-217F. + + * sfd/FreeSerif.sfd - added U+0184, U+0185, U+018D, U+0195, + U+0197, U+019A, U+019B, U+01A0, U+01A1, U+01AC, U+01B5, U+01B6, + U+01C0, U+01C1, U+01C3, U+01F6, U+0294-0296, U+1E9A, U+1EDA-1EE3, + U+1EE8-1EF1. + +2005-11-07 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+0562, U+056D. U+0575. + + * sfd/FreeMono.sfd - added U+0589. + +2005-11-06 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+0278, U+03D5, U+2248. Corrected + U+2071, U+222E, U+2242, U+2243 in response to bug reports + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276118 + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276120 + + * sfd/FreeMono.sfd - added U+2227, U+2228, U+2262. Corrected + U+2299-229D in response to bug report + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276121 + + * sfd/FreeMonoBold.sfd - added U+2010, U+2012 in response to bug + report http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=289032 + Swapped U+03C6 (Greek small letter phi) and U+03D5 (Greek phi + symbol) in order to conform to Unicode standard. Simplified glyph + shapes in ASCII range. Started adding "above" and "below" anchors. + +2005-11-05 Primoz Peterlin + + * sfd/FreeSerif.sfd - accented letters in Latin Extended-A + replaced by references wherever possible. + + * sfd/FreeSerif.sfd - added U+0180, U+0181, U+0187, U+0188, + U+018A, U+0193, U+019C, U+01A4, U+01A5, U+01A7, U+01A8, U+01AF, + U+01B0, U+026E, U+0270, U+0278, U+0280, U+0281, U+028B, U+0299, + U+029C, U+029F. + +2005-11-03 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+0180, U+0184, U+0185, U+0192, + U+019B, U+01A0-01A2, U+01AF, U+01B0, U+01EE, U+01EF, U+0292, + U+0294-0296, U+02A1, U+0532, U+054C, U+057C, U+222B. Changed + U+014B, U+01A5, U+01B4, U+03BB. + + * sfd/FreeSans.sfd - added U+04C5, U+04C6, U+04C9, U+04CA, U+04D, + U+04CE. + + * sfd/FreeSansBold.sfd - cleaner Arabic outlines. Added U+01E4, + U+01E5. + +2005-11-02 Primoz Peterlin + + * sfd/FreeSansBold.sfd - started Armenian; added U+0538, U+0542, + U+0544, U+0548, U+054D, U+054F, U+0550, U+0553, U+0555, U+0561, + U+0563, U+0564, U+0566, U+0568 U+056B, U+056F, U+0570, U+0572, + U+0578, U+057A, U+057D-057F, U+0580, U+0581, U+0583, U+0585. + + * sfd/FreeMono.sfd - swapped U+03C6 (Greek small letter phi) and + U+03D5 (Greek phi symbol) in order to conform to Unicode standard. + Added U+04C5, U+04C6, U+04C9, U+04CA, U+04D, U+04CE. + +2005-11-01 Primoz Peterlin + + * sfd/FreeSansBold.sfd - modified U+019C. + + * sfd/FreeSansBoldOblique.sfd - added U+00A0, U+00AD, U+019C, + U+01B7, U+01B8, U+0275, U+0278, U+0298, U+2012, U+2015, + U+2070-207F, U+2080-208E, U+2153-217F, U+2213, U+2215. + +2005-10-31 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+0199, U+01AB, U+0265, U+0282, + U+0288, U+028C-028E, U+0290, U+029E, U+02A0. + +2005-10-28 Primoz Peterlin + + * sfd/FreeSerifBold.sfd - added U+019E, U+01AB, U+01AD, U+01B1, + U+0256, U+025F, U+0265, U+0269, U+026F, U+0270, U+0279-027F, + U+0282, U+0287, U+0288, U+028C-028E, U+0290. + + * sfd/FreeSerifBold.sfd - added U+2070, U+2075-2079, U+2080, + U+2085-2089, U+2153-215E, U+2113-2115, U+2119. + + * sfd/FreeSerifBold.sfd - added U+0199, U+019B, U+01B8, U+01B9, + U+01BE, U+01C0, U+0262, U+0274, U+0278, U+0280, U+028F, U+0298, + U+0299, U+029C, U+029E, U+029F, U+2012, U+2015, U+2016, U+2129, + U+2217. + +2005-10-27 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+018D, U+0194, U+019B, U+019C, U+01B5, + U+01B6, U+0295, U+0296, U+029B, U+02A2, U+0472, U+0473, U+2114, + U+2119. + + * sfd/FreeSerifItalic.sfd - minor cleanup in the superscript range + (U+2070-2079). + + * sfd/FreeSansBold.sfd - added subscripts and superscripts + (U+2070-208F), completed fractions (U+2152-215F) and Roman + numerals (U+2160-217F). + + * sfd/FreeSerifBold.sfd - added U+018B, U+018E, U+018F, U+0191, + U+019D, U+01A7, U+01A8, U+01AE, U+0253, U+0266, U+0267, U+026A, + U+0271-0273, U+0283, U+0285. + +2005-10-26 Primoz Peterlin + + * sfd/FreeSans.sfd - added "above" anchors to selected Cyrillic + characters. Added U+0294, U+02A1. + + * sfd/FreeMono.sfd - added U+2011, U+2012, U+203B, U+204A, U+2071, + U+2129, U+2232, U+2233. Changed and/or corrected U+2106, U+211E, + U+2126, U+2127, U+2153-215F, U+2202. + + * sfd/FreeMono.sfd - a try to imitate Denis' work on adding + anchors by adding "above" anchor to a couple of basic Latin + characters. + + * sfd/FreeSansBold.sfd - added U+0278, U+0298. Cleaned up outlines + of most Greek letters. + + * sfd/FreeSansBold.sfd - Added U+2010-2012, U+2015, U+2032, + U+203C, U+2047-2049. + + * sfd/FreeSans.sfd - Added U+01C0-01C2, U+0276, U+0292, + U+0298. Changed U+0251, U+0294, U+02A1. + +2005-10-25 Primoz Peterlin + + * sfd/FreeSerifItalic.sfd - added U+00A0, U+00AD, U+2010-2012, + U+2015, U+2126, U+2127, U+2153-215E, U+2160-217F, U+2190-2193, + U+2669-266F. FreeSerifItalic is now MES-1 compliant. + + * sfd/FreeSerif.sfd - added U+0191, U+019D, U+01AE, U+027E, + U+027F, U+0283, U+0285. + + * sfd/FreeSerif.sfd - added U+019E, U+01AD, U+01B8, U+01B9, + U+0253, U+0256, U+0257, U+025C, U+0260, U+0266, U+0267, U+0269, + U+026D, U+0271-0273, U+0279-027D. + + * sfd/FreeSerifBoldItalic.sfd - added U+00A0, U+00AD, U+2010-2012, + U+2015, U+2032-2034, U+203C, U+2047-204A, U+2074, U+2081-2084, + U+2126, U+2153, U+2154, U+215F, U+2215. Corrected positions of + diacritics on U+0200-0217. + + * sfd/FreeSansOblique.sfd, sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeMonoBoldOblique.sfd, + sfd/FreeMonoBold.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd sfd/FreeSerifBoldItalic.sfd - brought in + sync with Valek Filipov's urw-fonts-1.0.7pre41. + + * sfd/FreeSansOblique.sfd - added U+00A0, U+2011-2012, U+2015, + U+2070, U+2071, U+2074-2079, U+2080-2089, U+2126, U+2153-215F, + U+2190-2195, U+2215, U+266A. FreeSansOblique is now MES-1 + compliant. + +2005-10-24 Denis Jacquerye + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd - added + ccmp for i and j to be substituted with dotless i or j when + followed by above diacritic + +2005-10-24 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+2011, U+2012, U+2015. FreeSans is now + MES-1 conformant. + +2005-10-23 Denis Jacquerye + + * sfd/FreeSans.sfd - added above, below, abovemk and belowmk + anchors for diacritics placement to many Basic Latin characters, + some Latin Extented A and B, and some IPA characters; fixed a + couple of precomposed characters to have diacritics at the same + height as similar characters. + +2005-10-21 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+02B9, U+02BA, U+02CD, U+2017, + U+2036, U+2037, U+203C, U+203E, U+2047-204A. + +2005-10-20 Primoz Peterlin + + * sfd/FreeSerifBold.sfd - added U+0182, U+0189, U+0192, U+019F, + U+01A9, U+01B7, U+01C4-01CC, U+01E0-1E2, U+01F0-01F3, U+F6BE. + Corrected position of diacritics on U+0200-0217. + + * sfd/FreeSerif.sfd - added U+00A0, U+00AD, U+0182, U+0189, + U+018B, U+018E, U+018F, U+0192, U+019F, U+01A9, U+01B1, U+01B7, + U+01DD, U+2010-2013, U+2015. FreeSerif is now MES-1 conformant. + +2005-10-19 Denis Jacquerye + + * sfd/FreeSerif.sfd - added U+0268, U+026A, U+0289, U+0292; and + anchor "above" to more base glyphs. + + * sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBoldItalic.sfd - added U+0250-0252, U+0258-0259, + U+0261, U+0268, U+026A, U+0279, U+0289 + + * sfd/FreeSerifBold.sfd - added anchor "above" to marks + U+0300-0314, and to base glyphs (vowels). + +2005-10-18 Denis Jacquerye + + * sfd/FreeSerif.sfd - added anchor "above" to marks U+0300-0314, + and bases vowel of the U+0041-007A range, U+00E6, U+0186, U+0190, + U+0254 and U+025B; fixed Latin-1 Supplement block accented glyphs + to use references. + +2005-10-17 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+01B7, U+01B8, U+0275. + +2005-10-16 Denis Jacquerye + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - added some Latin + Extended-B African letters: U+0181, U+018A, U+0197-0198, U+01A4, + U+01AC, U+01B1, U+01B3-01B4; + + * sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd - added Latin + Extended-B U+0187, 018E-018F, U+0191, U+0193, U+0197-0199, + U+019D-019F, U+01AB-01AE; correcting width of non-space + Combining Diacrtical Marks; added more glyphs to IPA Extensions + to match non Bold + + * sfd/FreeSansBoldOblique.sfd - added many accented glyphs to + Latin Extended-B + +2005-10-15 Denis Jacquerye + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - added IPA Extensions + U+0262,U+0274,U+0280-0281, U+0299, U+029F, and Spacing Modifier + Letters U+02C9-02CB; fixed U+0287,029E height to baseline; added + stroke to U+0268 + + * sfd/FreeSansOblique.sfd - fixed skew on U+027F + + * sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd - added to Latin + Extended-B U+01A7-01A8, IPA Extensions U+0251-0253, U+0256-0257, + U+0261, U+0265-026A, U+026F-0273, U+0289, U+028C-028E + + * sfd/FreeSansBoldOblique.sfd - added to Latin extended-B U+0189, + U+01A8, U+01B1, U+0283, U+02C9 and Spacing Modifiers U+02C9-02CB + +2005-10-14 Primoz Peterlin + + * sfd/FreeSansBold.sfd - Added a couple of composite glyphs, + mostly in the IPA and Latin Extended B ranges. + +2005-10-13 Denis Jacquerye + + * FreeSans.sfd - removed overlap and simplified U+0187, 0191, + 0193, 01A5, 01AE, 0260, 0271, 0272, 0273, 027B; fixed diacritics + placement on U+0200-0217; fixed glyph for U+0283 to correct esh + without stroke; added U+025F and fixed U+025F from it; fixed + height of glyph at U+0285; arranged U+027E,027F to make more + distinguishable from U+0072. + + * FreeSansOblique.sfd - added the corrected or new glyphs from + FreeSans; diacritics on U+200-0217 will need height readjustements. + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd - added U+0186, 0190, + 0250, 0254, 0258, 0259, 025B, 025C + +2005-10-13 Primoz Peterlin + + * sfd/FreeSerif.sfd - Minor changes: U+22A2, U+22A3, U+22A6, U+23AE. + Added U+0250, U+0251, U+0258, U+0259, U+0275. + + * sfd/FreeSerifItalic.sfd - Added glyphs U+222B-U+222F, U+2320, + U+2321. Fixed diacritics on U+0200-U+0217. + +2005-10-12 Denis Jacquerye + + * sfd/FreeSerif.sfd - Corrected diacritics position on + U+01D5-01D9,01DB,01EA-01ED,0200-0217 and U+022A. + + * sfd/FreeSerif.sfd, sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBoldItalic.sfd - added U+0186,0190,0254 and U+025B. + +2005-10-11 Primoz Peterlin + + * sfd/FreeSerif.sfd - Fixed bug #13399 (glyphs for U+0360 and + U+0361 were swapped). + + * sfd/FreeSerif.sfd - Attempt to correct bug #13370: INTEGRAL + EXTENSION does not align with TOP/BOTTOM HALF INTEGRAL; added + glyph U+23AE. + +2005-05-16 Primoz Peterlin + + * sfd/FreeMono.sfd - Corrected shapes for Cross of Lorraine and + Cross of Jerusalem. + +2005-04-07 Primoz Peterlin + + * sfd/FreeSansBold.sfd - Added some combining accents, just to + test the a version of FontForge. + +2003-12-05 Primoz Peterlin + + * sfd/FreeMono.sfd - Some composite Latin characters rebuilt, as + they had accents 600 points to the left due to changes on October + 2. Some other minor changes in the mathematics area. + +2003-10-08 Primoz Peterlin + + * sfd/FreeMonoOblique.sfd, sfd/FreeSerifBoldItalic.sfd, + FreeSerifItalic.sfd - applied Josef Segur's corrections from + Oct. 5. + +2003-10-02 Primoz Peterlin + + * sfd/FreeSerif.sfd - Abbas Izad's contributed Arabic/Farsi + characters added. + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Combining characters (U+0300 - + U+036F) moved left, so that they have negative horizontal values + and zero advance width. + +2003-09-15 Primoz Peterlin + + * sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd - Started working + on super- and subscripts. + +2003-09-12 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSerif.sfd - Added some missing + Hiragana and Katakana characters. + + * sfd/FreeSansBold.sfd - Cleared background characters in Latin + Extended-A. Added some automatically constructed characters in + Latin Extended-B. Started with superscripts and subscripts. + + * sfd/FreeSans.sfd - Subscript numerals (U+2080-U+2089) completed. + +2003-05-19 Primoz Peterlin + + * sfd/FreeSerif.sfd - Thai characters po pla and bo baimai + swapped; Thai character fongman corrected; all courtesy Theppitak + Karoonboonyanan. + +2003-05-17 Panayotis Katsaloulis + + * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - Full support + of all ancient greek glyphs + +2003-05-15 Primoz Peterlin + + * tools/KerningNumerals.pl - A Perl script for moving kerning + information from ASCII numerals (U+0030...) to characters in the + Adobe corporate use area (U+F6xx). + + * sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBoldOblique.sfd - Created kerned numerals in the Adobe + corporate use area (U+F6xx) and moved kerning information from + ASCII numerals to the kerned numerals. + +2003-05-14 Primoz Peterlin + + * sfd/FreeSans.sfd - First approximation of super- and subscript + numerals and vulgar fractions. + + * sfd/FreeSerif.sfd - Super- and subscript numerals complete, + vulgar fractions completed and redone as references rather than + outlines. + +2003-05-12 Primoz Peterlin + + * sfd/FreeSerif.sfd - Clean-up of the Cyrillic letters added on + March 27; super- and subscripts, vulgar fractions. + +2003-05-09 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - Added a couple of characters to + the Latin Extended-B area and the IPA extensions area. + +2003-05-08 Primoz Peterlin + + * sfd/FreeSerifBoldItalic.sfd - Added a couple of characters to + the Latin Extended-B area. + + * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - ASCII + numerals now monospaced; kerned numerals moved to Adobe corporate + use area + (U+F6xx). + +2003-05-07 Primoz Peterlin + + * sfd/FreeSerif.sfd - Roman numerals now more complete. + + * sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd - Accented + characters added in the Latin Extended-B area. + + * sfd/FreeSans.sfd - Greek accents added in the Greek Extended + area, characters added in the Latin Extended-B area, Roman + numerals added. + + * sfd/FreeMonoOblique.sfd - Kerning pairs removed (what were they + doing in a monospaced font, anyway?). + + * sfd/FreeMonoBoldOblique.sfd - Additions in Latin Extended-B and + Basic Greek. + + * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd, sfd/FreeMonoOblique.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBoldOblique.sfd - Major cleanup (fixed widths, open + paths, path directions (clockwise/counter-clockwise), points + rounded to integer values; outlines simplified etc.) + +2003-05-06 Primoz Peterlin + + * tools/OS2UnicodeRange - A simple script to display OS/2 Unicode + range table in TrueType fonts. + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd - ASCII numerals now + monospaced; kerned numerals moved to Adobe corporate use area + (U+F6xx). FreeSans is done, FreeSansBold half-way. + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Added 2003 in copyright info. + +2003-03-27 Primoz Peterlin + + * sfd/FreeSerif.sfd - Cyrillic and Cyrillic Supplement blocks + brought to conformance with Unicode 3.2, courtesy Daniel Shurovich + Chirkov. + +2003-03-19 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - somewhat wider + germandbls (U+00DF), due to complaints by Walter Schmidt. + +2003-03-18 Primoz Peterlin + + * sfd/FreeSans.sfd - Added Sinhala glyphs from the Tipitaka + project , recoded to Unicode by Noah Levitt. + +2003-02-19 Primoz Peterlin + + * sfd/FreeSans.sfd - Minor changes on mathematical operators. + +2003-02-18 Primoz Peterlin + + * sfd/FreeMono.sfd - minor cleanup of glyph backgrounds; changed + integral signs (U+222B - U+2230) + +2003-02-05 Primoz Peterlin + + * sfd/FreeSans.sfd - added a couple of glyphs in the IPA and + African Latin ranges. + +2003-01-30 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd - Corrected Maltese Hbar (U+0126) + and/or hbar (U+0127). + +2003-01-28 Primoz Peterlin + + * sfd/FreeSerifItalic.sfd - Corrected Maltese hbar (U+0127). + +2002-12-18 Primoz Peterlin + + * tools/ConvertFont - PfaEdit script for converting SFD files to + TrueType fonts. + + * sfd/FreeSans.sfd - Added Tamil and Kannada glyphs from the + Akruti Indic fonts. + +2002-12-17 Primoz Peterlin + + * sfd/FreeSans.sfd - Added Devanagari and Gujarati glyphs from the + Akruti Indic fonts. + + * www/index.html - Added information on Rogier van Dalen's tools. + + * AUTHORS - Added M.S. Sridhar. + + * CREDITS - Correct spelling of Culmus project. Added M.S. Sridhar. + +2002-12-06 Primoz Peterlin + + * sfd/FreeMono.sfd - Added Braille glyphs, courtesy Vyacheslav + Dikonov. + + * sfd/FreeSans.sfd - Added Unicode Syriac glyphs, courtesy + Vyacheslav Dikonov. + +2002-10-11 Primoz Peterlin + + * www/index.html - Added information on the availability of the + Debian GNU/Linux package. + + * sfd/FreeSerif.sfd, sfd/FreeSans.sfd - added some kern pairs + beyond Latin-1 area. + + * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - re-introduced + all the emtpy glyph slots (changes from Sep 23 made PfaEdit + crash). + +2002-09-23 Primoz Peterlin + + * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - imported + kerning information from the URW++ AFM files + +2002-09-11 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoOblique.sfd - updated Hebrew parts to comply with + Culmus v0.6. + + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansOblique.sfd - Added Danilo Segan's Serbian Cyrillic + glyphs; updated Hebrew parts to comply with Culmus v0.6. + +2002-09-09 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansOblique.sfd - Updated Cyrillic part to match + Filippov's 1.0.7pre14 + + * sfd/FreeSansOblique.sfd - added Sam Stepanyan's Armenian glyphs + from FreeSans (skewed for 12 degrees). + +2002-09-06 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd - Added Maxim + Iorsh's Hebrew characters. + +2002-08-29 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, + sfd/FreeMonoBold.sfd, sfd/FreeMonoOblique.sfd - Added Maxim + Iorsh's Hebrew characters. + + * AUTHORS, CREDITS - Added Maxim Iorsh as author. + +2002-08-28 Primoz Peterlin + + * www/index.html - Added information of Microsoft's withdrawal of + freely available Unicode TrueType fonts + + * www/resources.html - Added link to Maxim Iorsh's Culmus project. + +2002-07-26 Primoz Peterlin + + * sfd/FreeMono.sfd - Added a couple of characters (Arrows area). + +2002-06-11 Primoz Peterlin + + * sfd/FreeMono.sfd - Applied Michalis Kabrianis's patch concerning + perispomeni in Greek politoniko. + +2002-05-23 Primoz Peterlin + + * sfd/FreeMono.sfd - Applied Michalis Kabrianis's patch concerning + psili in Greek politoniko. Also added two working variants of + chars in the IPA range. + +2002-05-15 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifBold.sfd - Deleted explicit ".notdef" character with + no contours. + +2002-05-14 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - The new version of PfaEdit saves + correctly formed Panose and LineGap lines. + + * sfd/FreeSansBoldOblique.sfd - Filled-in the missing TTFWidth and + TTFWeight values. + +2002-05-09 Primoz Peterlin + + * sfd/FreeSans.sfd - Added diacritics to the Spacing Modifier + Letters and Combining Diacritical Marks areas. Added composed + glyphs to the Latin Extended-B area. + +2002-05-07 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Updated Panose information with data + provided by Josef W. Segur. Updated TTF headers with English and + Slovenian text. + +2002-04-30 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - Working on Greek small letters. Several + minor changes (lower carons etc.) + +2002-04-29 Primoz Peterlin + + * FreeMonoBoldOblique.sfd - Started adding Greek. + + * sfd/FreeMonoBold.sfd - Added glyphs in the Geometrical Shapes + and Miscellaneous Symbols area. Harmonizing Greek with Latin. Done + with capitals. + + * sfd/FreeMono.sfd - Deleted the explicit .notdef character. Added + one glyph to the Geometrical Shapes area, which is now completed; + added three glyphs to the Miscellaneous Symbols area. Harmonizing + Greek with Latin. Done with the capitals. + +2002-04-26 Primoz Peterlin + + * sfd/FreeSans.sfd - Adjusted accent positions on several glyphs + in the Latin Extended-A area. + +2002-04-25 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - Box Drawing area completed. Added a + couple of glyphs in the Geometrical Shapes area. + + * sfd/FreeMono.sfd - Small corrections in the Box Drawing area. + +2002-04-24 Primoz Peterlin + + * sfd/FreeMono.sfd - Box Drawing area completed. + +2002-04-23 Primoz Peterlin + + * tools/WGL4.lst - corrected. + + * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd - Working on Box Drawing + area. + +2002-04-22 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd - Working on Latin + Extended-B and Greek. + +2002-04-19 Primoz Peterlin + + * sfd/FreeSerif.sfd - Somewhat cleaner chess figures. + + * tools/MES-2.txt, tools/MES-2.lst - Corrected list (it is not + 203C-203E, it is 203C and 203E). + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Changed "Family Name" from Free to + FreeSerif, FreeSans and FreeMono, as appropriate. Changed Font + Modifiers from MonoBold etc. to Bold, Italic, Oblique, BoldOblique + and BoldItalic. + +2002-04-18 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd - Corrected metrics; now all character + widths are set to 600. + +2002-04-17 Primoz Peterlin + + * sfd/FreeSerif.sfd - Corrected glyphs in the Box Drawing area and + Block Elements area, which should extend through the ascender *and + descender* height. + + * sfd/FreeMonoBold.sfd - Continued working on harmonizing Greek + letters with Latin and Cyrillic. + + * sfd/FreeMonoBold.sfd - Added some box drawing characters. + +2002-04-16 Primoz Peterlin + + * www/design-notes.html - Updated notes on stroke width for + symbols in Free Mono Bold. + + * sfd/FreeMono.sfd - Added a handful of characters in the + Miscellaneous Symbols area. + + * sfd/FreeMonoBoldOblique.sfd - Added subscripts, superscripts and + vulgar fractions. + + * sfd/FreeMonoBold.sfd - Started harmonizing Greek letters with + Latin and Cyrillic. + + * sfd/FreeMonoBold.sfd - Added subscripts, superscripts and vulgar + fractions. + +2002-04-15 Primoz Peterlin + + * www/design-notes.html - Updated notes on super-/subscripts in + Free Mono Bold. Separate subsections for Free Mono regular and + Free Mono Bold. + +2002-04-12 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added Ethiopian glyphs, converted from the + Metafont sources from TGI, Universität Hamburg (authors Berhanu + Beyene, Prof. Dr. Manfred Kudlek, Olaf Kummer, and Jochen + Metzinger) using Szabo's TeXtrace and retouched using + PfaEdit. Ethiopian metafonts are released under GNU GPL, + . + + * sfd/FreeMonoBold.sfd - Added 40 characters, mostly in the Latin + Extended-B and IPA Extensions areas. + +2002-04-11 Primoz Peterlin + + * sfd/FreeMono.sfd - Added a handful of characters in the Latin + Extended-B, IPA Extensions, Currency Symbols and Miscellaneous + Symbols areas. + +2002-04-09 Primoz Peterlin + + * sfd/FreeMono.sfd - Correcting accent positioning in the Extended + Greek area; adding a couple of characters here and there. Still 20 + characters short of MES-2 conformance. + +2002-04-08 Primoz Peterlin + + * sfd/FreeMono.sfd - Added some characters in the Arrows area; + more or less completed Extended Greek area (accents still need to + be fine-tuned). + +2002-04-05 Primoz Peterlin + + * sfd/FreeMono.sfd - Modern non-Russian Cyrilic mostly completed. + + * sfd/FreeMonoOblique.sfd - Synchronized with FreeMono. + + * sfd/FreeSerif.sfd - Added Thomas Ridgeway's Tamil characters + (converted from Metafont and edited somehwat). + +2002-04-04 Primoz Peterlin + + * sfd/FreeMonoOblique.sfd - Armenian letters added. + + * sfd/FreeMonoBold.sfd - Serbian Cyrillic letters dje, tshe, lje + and nje corrected. + + * sfd/FreeMono.sfd - Serbian Cyrillic letters dje and tshe + corrected. Some other non-Russian Cyrillic letters modified and + "welded together". + +2002-04-03 Primoz Peterlin + + * sfd/FreeMono.sfd - Added more or less complete Armenian + area. The glyphs are a tidied-up version based on the Armenian + Courier on the . Now we have + 1673 characters. + +2002-03-28 Primoz Peterlin + + * sfd/FreeMono.sfd - Added some mathematical symbols. + +2002-03-26 Primoz Peterlin + + * sfd/FreeSans.sfd - took H.S. Pannu's Gurmukhi from FreeSerif. It + actually fits to FreeSans much better. It seems I'll have to look + for another Gurmukhi font with modulated stroke for FreeSerif. + + * sfd/FreeSerifItalic.sfd - replaced existing Hebrew glyphs by + those from FreeSerif (slanted for 15.5 degrees). + + * sfd/FreeSerif.sfd - Added dotted Hebrew letters. Changed barred H. + + * sfd/FreeMono.sfd - Completed vulgar fractions; minor changes in + Greek; added some mathematical operators. + + * sfd/FreeMonoBold.sfd - added 12 characters to Latin Extended-B + and IPA Extensions areas (total 984). + +2002-03-25 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - started adding Latin Extended-B and IPA + Extensions. + + * sfd/FreeMono.sfd - Minor cosmetic changes; cleaning up Greek + (removing redundant control points), added some non-European + Cyrillic glyphs as a test. + +2002-03-22 Primoz Peterlin + + * sfd/FreeMono.sfd - Some minor modifications; letters in Latin + Extended-B area "welded" together. + +2002-03-20 Primoz Peterlin + + * www/index.html - finally linked the resources and design notes + pages. + + * www/design-notes.html - added scaling information for super- and + subscript numerals in FreeMono. + +2002-03-19 Primoz Peterlin + + * sfd/FreeMono.sfd - the Latin Extended-B and IPA Extension area + characters moved from FreeMono and skewed for 12 degrees. + +2002-03-18 Primoz Peterlin + + * sfd/FreeMono.sfd - added a dozen or two of new characters, in + particular in the Latin Extended-B and IPA Extension area. + +2002-03-15 Primoz Peterlin + + * sfd/FreeMono.sfd - added a dozen of two of new characters, in + particular in the IPA Extension area. + + * www/design-notes.html - Corrected data for x-height in FreeMono; + information on constructing small caps. + +2002-03-14 Primoz Peterlin + + * sfd/FreeMono.sfd - added three smiley characters to the + Miscallaneous Symbols area. + +2002-03-10 Primoz Peterlin + + * sfd/FreeSerif.sfd - Anshuman Pandey has only converted Gurmukhi + from TrueType to Metafont; the original author of Gurkmukhi font + is Hardip Singh Pannu . + Got the permission from him to include the Gurmukhi glyph set. + +2002-03-08 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added some more glyphs in the Mathematical + Symbols area to a total number of 3374. + +2002-03-06 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added a basic Gurmukhi set. + + * www/design-notes.html - started a page on design notes + + * sfd/FreeMono.sfd - realized that glyphs in the Box Drawing area + and Block Elements area should extend through the ascender *and + descender* height, and corrected it. + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd - added some musical + glyphs, linking "no-break space" to space, "soft hyphen" to + hyphen-minus etc. + +2002-03-05 Primoz Peterlin + + * tools/WGL4.lst - Added Windows Glyph List 4.0 + + * tools/LigatureList.pl - Wrote a Perl script, which lists the + GSUB list (ligature list) of a OpenType font. + + * sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd, + sfd/FreeSerifItalic.sfd - auxilliary Hebrew glyphs added. They are + too light compared with Latin and will be substituted with better + ones. + +2002-03-04 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added some more glyphs to the Mathematical + Operators area (page 0x22). + + * sfd/FreeSerif.sfd - Incomplete and fragmentary support for + Devanagari, originating from Harsh Kumar's Shusha fonts was + replaced by Frans Velthuis' Devanagari metafont, now maintained by + Anshuman Pandey and available under + GPL. Until I figure out how to provide glyph substitution table in + OpenType, only the Unicode part is there. + +2002-02-28 Primoz Peterlin + + * ChangeLog file created + + * sfd/FreeSerif.sfd - Added some Telugu glyphs to page 0x0C, + courtesy Prasad A. Chodavarapu + + * sfd/FreeSerif.sfd - Added some glyphs to the Miscellaneous + Symbols page (0x26). + +2002-02-26 Primoz Peterlin + + * mailing lists freefont-announce and freefont-bugs created + +2002-02-25 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added a couple of glyphs in Mathematics + Operators area. + + * sfd/FreeMono.sfd + - Added some more glyphs, in particular in the Mathematical + Operators section. + - Changed FamilyName to Free, FontName to FreeMono, and Full name + to "Free Monospaced". + +2002-02-20 Primoz Peterlin + + * sfd/ directory added containing FreeSerif, FreeSans and FreeMono + families. + + * tools/ directory added containing lists with characters required + for MES (Multilinguag European Subset) compliance. + + * tools/mes-list-expand.pl created - a Perl script for expanding MES + ranges into simple one-char-per-line format + + * tools/CheckConformance.pl created - a Perl script for checking + conformance of a font file with a given coded character set + + * homepage created + +2002-02-19 Primoz Peterlin + + * freefont (Free UCS Scalable Fonts) project approved on + savannah.gnu.org: diff --git a/External/Fonts/FreeFont/FreeMono.ttf b/External/Fonts/FreeFont/FreeMono.ttf new file mode 100755 index 0000000..ba90adb Binary files /dev/null and b/External/Fonts/FreeFont/FreeMono.ttf differ diff --git a/External/Fonts/FreeFont/INSTALL b/External/Fonts/FreeFont/INSTALL new file mode 100755 index 0000000..fbbbe80 --- /dev/null +++ b/External/Fonts/FreeFont/INSTALL @@ -0,0 +1,86 @@ + Installing GNU FreeFont + ======================= + +GNU FreeFont can be used in any modern operating system. + +This document explains how to install FreeFont on some common systems. + +UNIX/GNU/Linux/BSD Systems +-------------------------- + +FreeFont works with any system using the free font rasterizer FreeType +. + +* Debian GNU/Linux + +Users of Debian GNU/Linux system will probably want to use the Debian package, +available from the Debian site, + + , + +or any of its mirrors. + +Install them by issuing the command + apt-get install ttf-freefont + + +* KDE local installation + +Users of KDE can install .ttf files on a per-user basis using the KDE +Control Center module "kcmfontinst", which may appear in the menu as + + Settings -> System Administration -> Font Installer + +This is especially helpful for developers and testers. + + +* Generic X-windows + + 1) Fetch the freefont-ttf.tar.gz package with Free UCS outline fonts + in the TrueType format. + + 2) Unpack TrueType fonts into a suitable directory, + e.g. /usr/local/share/fonts/default/TrueType/ + + 3) If you have chosen any other directory, make sure the directory you + used to install the fonts is listed in the path searched by the X + Font Server by editing the config file in /etc/X11/. + + In some systems, you list the directory in the item "catalogue=" + in the file /etc/X11/fs/config. + + 4) Run ttmkfdir in the directory where you unpacked the fonts. + + +Windows 95/98/NT/2000/XP; Vista +------------------------------- + +Note that in at least Vista, XP and 2000, the OpenType versions perform much +better than, and are recommended over, the TrueType ones. + +* Vista: + 1) From the Start menu, open Control Panels + 2) Drag-n-drop font files onto Fonts control panel + You may get a dialog saying + "Windows needs your permission to continue" + a) Click Continue + +* 95/98/NT: + The font installation is similar to Vista. + + In order to use OpenType, users of Windows 95, 98 and NT 4.0 can + install Adobe's 'Type Manager Light'. It is available for download + without cost from Adobe's web site. + + Otherwise, use the TrueType versions. + +Mac OS X +-------- + +Installing on Mac OS X consists of moving the .ttf files to either + /Library/Fonts/ or ~/Library/Fonts/ +depending on whether they should be available to all users on your system +or just to yourself. + +-------------------------------------------------------------------------- +$Id: INSTALL,v 1.7 2008/12/26 12:33:31 Stevan_White Exp $ diff --git a/External/Fonts/FreeFont/README b/External/Fonts/FreeFont/README new file mode 100755 index 0000000..60e67f2 --- /dev/null +++ b/External/Fonts/FreeFont/README @@ -0,0 +1,108 @@ +-*-text-*- + GNU FreeFont + +The GNU FreeFont project aims to provide a useful set of free scalable +(i.e., OpenType) fonts covering as much as possible of the ISO 10646/Unicode +UCS (Universal Character Set). + +Statement of Purpose +-------------------- + +The practical reason for putting glyphs together in a single font face is +to conveniently mix symbols and characters from different writing systems, +without having to switch fonts. + +Coverage +-------- + +FreeFont covers the following character sets + +* ISO 8859 parts 1-15 +* CEN MES-3 European Unicode Subset + http://www.evertype.com/standards/iso10646/pdf/cwa13873.pdf +* IBM/Microsoft code pages 437, 850, 852, 1250, 1252 and more +* Microsoft/Adobe Windows Glyph List 4 (WGL4) + http://www.microsoft.com/typography/otspec/WGL4.htm +* KOI8-R and KOI8-RU +* DEC VT100 graphics symbols +* International Phonetic Alphabet +* Arabic, Hebrew, Armenian, Georgian, Ethiopian and Thai alphabets, + including Arabic presentation forms A/B +* mathematical symbols, including the whole TeX repertoire of symbols +* APL symbols + etc. + +Editing +------- + +The free outline font editor, George Williams's FontForge + is used for editing the fonts. + +Design Issues +------------- + +Which font shapes should be made? Historical style terms like Renaissance +or Baroque letterforms cannot be applied beyond Latin/Cyrillic/Greek +scripts to any greater extent than Kufi or Nashki can be applied beyond +Arabic script; "italic" is really only meaningful for Latin letters. + +However, most modern writing systems have typographic formulations for +contrasting uniform and modulated character stroke widths, and have some +history with "oblique", faces. Since the advent of the typewriter, most +have developed a typographic style with uniform-width characters. + +Accordingly, the FreeFont family has one monospaced - FreeMono - and two +proportional faces (one with uniform stroke - FreeSans - and one with +modulated stroke - FreeSerif). + +To make text from different writing systems look good side-by-side, each +FreeFont face is meant to contain characters of similar style and weight. + +Licensing +--------- + +Free UCS scalable fonts is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License as published +by the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +The fonts are distributed in the hope that they will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +As a special exception, if you create a document which uses this font, and +embed this font or unaltered portions of this font into the document, this +font does not by itself cause the resulting document to be covered by the +GNU General Public License. This exception does not however invalidate any +other reasons why the document might be covered by the GNU General Public +License. If you modify this font, you may extend this exception to your +version of the font, but you are not obligated to do so. If you do not +wish to do so, delete this exception statement from your version. + + +Files and their suffixes +------------------------ + +The files with .sfd (Spline Font Database) are in FontForge's native format. +Please use these if you plan to modify the font files. + +TrueType fonts for immediate consumption are the files with the .ttf +(TrueType Font) suffix. These are ready to use in Xwindows based +systems using FreeType, on Mac OS, and on older Windows systems. + +OpenType fonts (with suffix .otf) are for use in Windows Vista. +Note that although they can be installed on Linux, but many applications +in Linux still don't support them. + + +-------------------------------------------------------------------------- +Primoz Peterlin, +Steve White + +Free UCS scalable fonts: http://savannah.gnu.org/projects/freefont/ +$Id: README,v 1.6 2008/12/25 12:51:41 Stevan_White Exp $ diff --git a/External/swiftmailer/lib/classes/Swift.php b/External/swiftmailer/lib/classes/Swift.php new file mode 100755 index 0000000..77abbbf --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift.php @@ -0,0 +1,57 @@ +createDependenciesFor('mime.attachment') + ); + + $this->setBody($data); + $this->setFilename($filename); + if ($contentType) + { + $this->setContentType($contentType); + } + } + + /** + * Create a new Attachment. + * @param string|Swift_OutputByteStream $data + * @param string $filename + * @param string $contentType + * @return Swift_Mime_Attachment + */ + public static function newInstance($data = null, $filename = null, + $contentType = null) + { + return new self($data, $filename, $contentType); + } + + /** + * Create a new Attachment from a filesystem path. + * @param string $path + * @param string $contentType optional + * @return Swift_Mime_Attachment + */ + public static function fromPath($path, $contentType = null) + { + return self::newInstance()->setFile( + new Swift_ByteStream_FileByteStream($path), + $contentType + ); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php b/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php new file mode 100755 index 0000000..71bc3f1 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php @@ -0,0 +1,178 @@ +_filters[$key] = $filter; + } + + /** + * Remove an already present StreamFilter based on its $key. + * @param string $key + */ + public function removeFilter($key) + { + unset($this->_filters[$key]); + } + + /** + * Writes $bytes to the end of the stream. + * @param string $bytes + * @throws Swift_IoException + */ + public function write($bytes) + { + $this->_writeBuffer .= $bytes; + foreach ($this->_filters as $filter) + { + if ($filter->shouldBuffer($this->_writeBuffer)) + { + return; + } + } + $this->_doWrite($this->_writeBuffer); + return ++$this->_sequence; + } + + /** + * For any bytes that are currently buffered inside the stream, force them + * off the buffer. + * + * @throws Swift_IoException + */ + public function commit() + { + $this->_doWrite($this->_writeBuffer); + } + + /** + * Attach $is to this stream. + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + * + * @param Swift_InputByteStream $is + */ + public function bind(Swift_InputByteStream $is) + { + $this->_mirrors[] = $is; + } + + /** + * Remove an already bound stream. + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + * + * @param Swift_InputByteStream $is + */ + public function unbind(Swift_InputByteStream $is) + { + foreach ($this->_mirrors as $k => $stream) + { + if ($is === $stream) + { + if ($this->_writeBuffer !== '') + { + $stream->write($this->_filter($this->_writeBuffer)); + } + unset($this->_mirrors[$k]); + } + } + } + + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + * @throws Swift_IoException + */ + public function flushBuffers() + { + if ($this->_writeBuffer !== '') + { + $this->_doWrite($this->_writeBuffer); + } + $this->_flush(); + + foreach ($this->_mirrors as $stream) + { + $stream->flushBuffers(); + } + } + + // -- Private methods + + /** Run $bytes through all filters */ + private function _filter($bytes) + { + foreach ($this->_filters as $filter) + { + $bytes = $filter->filter($bytes); + } + return $bytes; + } + + /** Just write the bytes to the stream */ + private function _doWrite($bytes) + { + $this->_commit($this->_filter($bytes)); + + foreach ($this->_mirrors as $stream) + { + $stream->write($bytes); + } + + $this->_writeBuffer = ''; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php b/External/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php new file mode 100755 index 0000000..f918889 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php @@ -0,0 +1,190 @@ +_array = $stack; + $this->_arraySize = count($stack); + } + elseif (is_string($stack)) + { + $this->write($stack); + } + else + { + $this->_array = array(); + } + } + + /** + * Reads $length bytes from the stream into a string and moves the pointer + * through the stream by $length. If less bytes exist than are requested the + * remaining bytes are given instead. If no bytes are remaining at all, boolean + * false is returned. + * @param int $length + * @return string + */ + public function read($length) + { + if ($this->_offset == $this->_arraySize) + { + return false; + } + + // Don't use array slice + $end = $length + $this->_offset; + $end = $this->_arraySize<$end + ?$this->_arraySize + :$end; + $ret = ''; + for (; $this->_offset < $end; ++$this->_offset) + { + $ret .= $this->_array[$this->_offset]; + } + return $ret; + } + + /** + * Writes $bytes to the end of the stream. + * @param string $bytes + */ + public function write($bytes) + { + $to_add = str_split($bytes); + foreach ($to_add as $value) + { + $this->_array[] = $value; + } + $this->_arraySize = count($this->_array); + + foreach ($this->_mirrors as $stream) + { + $stream->write($bytes); + } + } + + /** + * Not used. + */ + public function commit() + { + } + + /** + * Attach $is to this stream. + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + * + * @param Swift_InputByteStream $is + */ + public function bind(Swift_InputByteStream $is) + { + $this->_mirrors[] = $is; + } + + /** + * Remove an already bound stream. + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + * + * @param Swift_InputByteStream $is + */ + public function unbind(Swift_InputByteStream $is) + { + foreach ($this->_mirrors as $k => $stream) + { + if ($is === $stream) + { + unset($this->_mirrors[$k]); + } + } + } + + /** + * Move the internal read pointer to $byteOffset in the stream. + * @param int $byteOffset + * @return boolean + */ + public function setReadPointer($byteOffset) + { + if ($byteOffset > $this->_arraySize) + { + $byteOffset = $this->_arraySize; + } + elseif ($byteOffset < 0) + { + $byteOffset = 0; + } + + $this->_offset = $byteOffset; + } + + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + */ + public function flushBuffers() + { + $this->_offset = 0; + $this->_array = array(); + $this->_arraySize = 0; + + foreach ($this->_mirrors as $stream) + { + $stream->flushBuffers(); + } + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php b/External/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php new file mode 100755 index 0000000..14773c2 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php @@ -0,0 +1,177 @@ +_path = $path; + $this->_mode = $writable ? 'w+b' : 'rb'; + $this->_quotes = get_magic_quotes_runtime(); + } + + /** + * Get the complete path to the file. + * @return string + */ + public function getPath() + { + return $this->_path; + } + + /** + * Reads $length bytes from the stream into a string and moves the pointer + * through the stream by $length. If less bytes exist than are requested the + * remaining bytes are given instead. If no bytes are remaining at all, boolean + * false is returned. + * @param int $length + * @return string + * @throws Swift_IoException + */ + public function read($length) + { + $fp = $this->_getReadHandle(); + if (!feof($fp)) + { + if ($this->_quotes) + { + set_magic_quotes_runtime(0); + } + $bytes = fread($fp, $length); + if ($this->_quotes) + { + set_magic_quotes_runtime(1); + } + $this->_offset = ftell($fp); + return $bytes; + } + else + { + return false; + } + } + + /** + * Move the internal read pointer to $byteOffset in the stream. + * @param int $byteOffset + * @return boolean + */ + public function setReadPointer($byteOffset) + { + if (isset($this->_reader)) + { + fseek($this->_reader, $byteOffset, SEEK_SET); + } + $this->_offset = $byteOffset; + } + + // -- Private methods + + /** Just write the bytes to the file */ + protected function _commit($bytes) + { + fwrite($this->_getWriteHandle(), $bytes); + $this->_resetReadHandle(); + } + + /** Not used */ + protected function _flush() + { + } + + /** Get the resource for reading */ + private function _getReadHandle() + { + if (!isset($this->_reader)) + { + if (!$this->_reader = fopen($this->_path, 'rb')) + { + throw new Swift_IoException( + 'Unable to open file for reading [' . $this->_path . ']' + ); + } + fseek($this->_reader, $this->_offset, SEEK_SET); + } + return $this->_reader; + } + + /** Get the resource for writing */ + private function _getWriteHandle() + { + if (!isset($this->_writer)) + { + if (!$this->_writer = fopen($this->_path, $this->_mode)) + { + throw new Swift_IoException( + 'Unable to open file for writing [' . $this->_path . ']' + ); + } + } + return $this->_writer; + } + + /** Force a reload of the resource for writing */ + private function _resetWriteHandle() + { + if (isset($this->_writer)) + { + fclose($this->_writer); + $this->_writer = null; + } + } + + /** Force a reload of the resource for reading */ + private function _resetReadHandle() + { + if (isset($this->_reader)) + { + fclose($this->_reader); + $this->_reader = null; + } + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/CharacterReader.php b/External/swiftmailer/lib/classes/Swift/CharacterReader.php new file mode 100755 index 0000000..53d39ec --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/CharacterReader.php @@ -0,0 +1,60 @@ + + */ +interface Swift_CharacterReader +{ + const MAP_TYPE_INVALID = 0x01; + const MAP_TYPE_FIXED_LEN = 0x02; + const MAP_TYPE_POSITIONS = 0x03; + + /** + * Returns the complete charactermap + * + * @param string $string + * @param int $startOffset + * @param array $currentMap + * @param mixed $ignoredChars + * @return int + */ + public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars); + + /** + * Returns mapType + * @int mapType + */ + public function getMapType(); + + /** + * Returns an integer which specifies how many more bytes to read. + * A positive integer indicates the number of more bytes to fetch before invoking + * this method again. + * A value of zero means this is already a valid character. + * A value of -1 means this cannot possibly be a valid character. + * @param int[] $bytes + * @return int + */ + public function validateByteSequence($bytes, $size); + + /** + * Returns the number of bytes which should be read to start each character. + * For fixed width character sets this should be the number of + * octets-per-character. For multibyte character sets this will probably be 1. + * @return int + */ + public function getInitialByteSize(); + +} diff --git a/External/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php b/External/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php new file mode 100755 index 0000000..26b13ff --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php @@ -0,0 +1,96 @@ + + */ +class Swift_CharacterReader_GenericFixedWidthReader + implements Swift_CharacterReader +{ + + /** + * The number of bytes in a single character. + * @var int + * @access private + */ + private $_width; + + /** + * Creates a new GenericFixedWidthReader using $width bytes per character. + * @param int $width + */ + public function __construct($width) + { + $this->_width = $width; + } + + /** + * Returns the complete charactermap + * + * @param string $string + * @param int $startOffset + * @param array $currentMap + * @param mixed $ignoredChars + * @return $int + */ + public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) + { + $strlen = strlen($string); + // % and / are CPU intensive, so, maybe find a better way + $ignored = $strlen%$this->_width; + $ignoredChars = substr($string, - $ignored); + $currentMap = $this->_width; + return ($strlen - $ignored)/$this->_width; + + } + + /** + * Returns mapType + * @int mapType + */ + public function getMapType() + { + return self::MAP_TYPE_FIXED_LEN; + } + + /** + * Returns an integer which specifies how many more bytes to read. + * A positive integer indicates the number of more bytes to fetch before invoking + * this method again. + * A value of zero means this is already a valid character. + * A value of -1 means this cannot possibly be a valid character. + * @param string $bytes + * @return int + */ + public function validateByteSequence($bytes, $size) + { + $needed = $this->_width - $size; + return ($needed > -1) + ? $needed + : -1 + ; + } + + /** + * Returns the number of bytes which should be read to start each character. + * @return int + */ + public function getInitialByteSize() + { + return $this->_width; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php b/External/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php new file mode 100755 index 0000000..3e0228a --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php @@ -0,0 +1,83 @@ +"\x07F") + { // Invalid char + $currentMap[$i+$startOffset]=$string[$i]; + } + } + return $strlen; + } + + /** + * Returns mapType + * @int mapType + */ + public function getMapType() + { + return self::MAP_TYPE_INVALID; + } + + /** + * Returns an integer which specifies how many more bytes to read. + * A positive integer indicates the number of more bytes to fetch before invoking + * this method again. + * A value of zero means this is already a valid character. + * A value of -1 means this cannot possibly be a valid character. + * @param string $bytes + * @return int + */ + public function validateByteSequence($bytes, $size) + { + $byte = reset($bytes); + if (1 == count($bytes) && $byte >= 0x00 && $byte <= 0x7F) + { + return 0; + } + else + { + return -1; + } + } + + /** + * Returns the number of bytes which should be read to start each character. + * @return int + */ + public function getInitialByteSize() + { + return 1; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php b/External/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php new file mode 100755 index 0000000..54ea9a4 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php @@ -0,0 +1,183 @@ + + */ +class Swift_CharacterReader_Utf8Reader + implements Swift_CharacterReader +{ + + /** Pre-computed for optimization */ + private static $length_map=array( +//N=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, //0x0N + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, //0x1N + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, //0x2N + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, //0x3N + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, //0x4N + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, //0x5N + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, //0x6N + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, //0x7N + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x8N + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x9N + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0xAN + 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0xBN + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, //0xCN + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, //0xDN + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, //0xEN + 4,4,4,4,4,4,4,4,5,5,5,5,6,6,0,0 //0xFN + ); + private static $s_length_map=array( + "\x00"=>1, "\x01"=>1, "\x02"=>1, "\x03"=>1, "\x04"=>1, "\x05"=>1, "\x06"=>1, "\x07"=>1, + "\x08"=>1, "\x09"=>1, "\x0a"=>1, "\x0b"=>1, "\x0c"=>1, "\x0d"=>1, "\x0e"=>1, "\x0f"=>1, + "\x10"=>1, "\x11"=>1, "\x12"=>1, "\x13"=>1, "\x14"=>1, "\x15"=>1, "\x16"=>1, "\x17"=>1, + "\x18"=>1, "\x19"=>1, "\x1a"=>1, "\x1b"=>1, "\x1c"=>1, "\x1d"=>1, "\x1e"=>1, "\x1f"=>1, + "\x20"=>1, "\x21"=>1, "\x22"=>1, "\x23"=>1, "\x24"=>1, "\x25"=>1, "\x26"=>1, "\x27"=>1, + "\x28"=>1, "\x29"=>1, "\x2a"=>1, "\x2b"=>1, "\x2c"=>1, "\x2d"=>1, "\x2e"=>1, "\x2f"=>1, + "\x30"=>1, "\x31"=>1, "\x32"=>1, "\x33"=>1, "\x34"=>1, "\x35"=>1, "\x36"=>1, "\x37"=>1, + "\x38"=>1, "\x39"=>1, "\x3a"=>1, "\x3b"=>1, "\x3c"=>1, "\x3d"=>1, "\x3e"=>1, "\x3f"=>1, + "\x40"=>1, "\x41"=>1, "\x42"=>1, "\x43"=>1, "\x44"=>1, "\x45"=>1, "\x46"=>1, "\x47"=>1, + "\x48"=>1, "\x49"=>1, "\x4a"=>1, "\x4b"=>1, "\x4c"=>1, "\x4d"=>1, "\x4e"=>1, "\x4f"=>1, + "\x50"=>1, "\x51"=>1, "\x52"=>1, "\x53"=>1, "\x54"=>1, "\x55"=>1, "\x56"=>1, "\x57"=>1, + "\x58"=>1, "\x59"=>1, "\x5a"=>1, "\x5b"=>1, "\x5c"=>1, "\x5d"=>1, "\x5e"=>1, "\x5f"=>1, + "\x60"=>1, "\x61"=>1, "\x62"=>1, "\x63"=>1, "\x64"=>1, "\x65"=>1, "\x66"=>1, "\x67"=>1, + "\x68"=>1, "\x69"=>1, "\x6a"=>1, "\x6b"=>1, "\x6c"=>1, "\x6d"=>1, "\x6e"=>1, "\x6f"=>1, + "\x70"=>1, "\x71"=>1, "\x72"=>1, "\x73"=>1, "\x74"=>1, "\x75"=>1, "\x76"=>1, "\x77"=>1, + "\x78"=>1, "\x79"=>1, "\x7a"=>1, "\x7b"=>1, "\x7c"=>1, "\x7d"=>1, "\x7e"=>1, "\x7f"=>1, + "\x80"=>0, "\x81"=>0, "\x82"=>0, "\x83"=>0, "\x84"=>0, "\x85"=>0, "\x86"=>0, "\x87"=>0, + "\x88"=>0, "\x89"=>0, "\x8a"=>0, "\x8b"=>0, "\x8c"=>0, "\x8d"=>0, "\x8e"=>0, "\x8f"=>0, + "\x90"=>0, "\x91"=>0, "\x92"=>0, "\x93"=>0, "\x94"=>0, "\x95"=>0, "\x96"=>0, "\x97"=>0, + "\x98"=>0, "\x99"=>0, "\x9a"=>0, "\x9b"=>0, "\x9c"=>0, "\x9d"=>0, "\x9e"=>0, "\x9f"=>0, + "\xa0"=>0, "\xa1"=>0, "\xa2"=>0, "\xa3"=>0, "\xa4"=>0, "\xa5"=>0, "\xa6"=>0, "\xa7"=>0, + "\xa8"=>0, "\xa9"=>0, "\xaa"=>0, "\xab"=>0, "\xac"=>0, "\xad"=>0, "\xae"=>0, "\xaf"=>0, + "\xb0"=>0, "\xb1"=>0, "\xb2"=>0, "\xb3"=>0, "\xb4"=>0, "\xb5"=>0, "\xb6"=>0, "\xb7"=>0, + "\xb8"=>0, "\xb9"=>0, "\xba"=>0, "\xbb"=>0, "\xbc"=>0, "\xbd"=>0, "\xbe"=>0, "\xbf"=>0, + "\xc0"=>2, "\xc1"=>2, "\xc2"=>2, "\xc3"=>2, "\xc4"=>2, "\xc5"=>2, "\xc6"=>2, "\xc7"=>2, + "\xc8"=>2, "\xc9"=>2, "\xca"=>2, "\xcb"=>2, "\xcc"=>2, "\xcd"=>2, "\xce"=>2, "\xcf"=>2, + "\xd0"=>2, "\xd1"=>2, "\xd2"=>2, "\xd3"=>2, "\xd4"=>2, "\xd5"=>2, "\xd6"=>2, "\xd7"=>2, + "\xd8"=>2, "\xd9"=>2, "\xda"=>2, "\xdb"=>2, "\xdc"=>2, "\xdd"=>2, "\xde"=>2, "\xdf"=>2, + "\xe0"=>3, "\xe1"=>3, "\xe2"=>3, "\xe3"=>3, "\xe4"=>3, "\xe5"=>3, "\xe6"=>3, "\xe7"=>3, + "\xe8"=>3, "\xe9"=>3, "\xea"=>3, "\xeb"=>3, "\xec"=>3, "\xed"=>3, "\xee"=>3, "\xef"=>3, + "\xf0"=>4, "\xf1"=>4, "\xf2"=>4, "\xf3"=>4, "\xf4"=>4, "\xf5"=>4, "\xf6"=>4, "\xf7"=>4, + "\xf8"=>5, "\xf9"=>5, "\xfa"=>5, "\xfb"=>5, "\xfc"=>6, "\xfd"=>6, "\xfe"=>0, "\xff"=>0, + ); + + /** + * Returns the complete charactermap + * + * @param string $string + * @param int $startOffset + * @param array $currentMap + * @param mixed $ignoredChars + */ + public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) + { + if (!isset($currentMap['i']) || !isset($currentMap['p'])) + { + $currentMap['p'] = $currentMap['i'] = array(); + } + $strlen=strlen($string); + $charPos=count($currentMap['p']); + $foundChars=0; + $invalid=false; + for ($i=0; $i<$strlen; ++$i) + { + $char=$string[$i]; + $size=self::$s_length_map[$char]; + if ($size==0) + { + /* char is invalid, we must wait for a resync */ + $invalid=true; + continue; + } + else + { + if ($invalid==true) + { + /* We mark the chars as invalid and start a new char */ + $currentMap['p'][$charPos+$foundChars]=$startOffset+$i; + $currentMap['i'][$charPos+$foundChars]=true; + ++$foundChars; + $invalid=false; + } + if (($i+$size) > $strlen){ + $ignoredChars=substr($string, $i); + break; + } + for ($j=1; $j<$size; ++$j) + { + $char=$string[$i+$j]; + if ($char>"\x7F" && $char<"\xC0") + { + // Valid - continue parsing + } + else + { + /* char is invalid, we must wait for a resync */ + $invalid=true; + continue 2; + } + } + /* Ok we got a complete char here */ + $lastChar=$currentMap['p'][$charPos+$foundChars]=$startOffset+$i+$size; + $i+=$j-1; + ++$foundChars; + } + } + return $foundChars; + } + + /** + * Returns mapType + * @int mapType + */ + public function getMapType() + { + return self::MAP_TYPE_POSITIONS; + } + + /** + * Returns an integer which specifies how many more bytes to read. + * A positive integer indicates the number of more bytes to fetch before invoking + * this method again. + * A value of zero means this is already a valid character. + * A value of -1 means this cannot possibly be a valid character. + * @param string $bytes + * @return int + */ + public function validateByteSequence($bytes, $size) + { + if ($size<1){ + return -1; + } + $needed = self::$length_map[$bytes[0]] - $size; + return ($needed > -1) + ? $needed + : -1 + ; + } + + /** + * Returns the number of bytes which should be read to start each character. + * @return int + */ + public function getInitialByteSize() + { + return 1; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php b/External/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php new file mode 100755 index 0000000..9e01de1 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php @@ -0,0 +1,29 @@ + $prefix . 'GenericFixedWidthReader', + 'constructor' => array(1) + ); + + $doubleByte = array( + 'class' => $prefix . 'GenericFixedWidthReader', + 'constructor' => array(2) + ); + + $fourBytes = array( + 'class' => $prefix . 'GenericFixedWidthReader', + 'constructor' => array(4) + ); + + //Utf-8 + $this->_map['utf-?8'] = array( + 'class' => $prefix . 'Utf8Reader', + 'constructor' => array() + ); + + //7-8 bit charsets + $this->_map['(us-)?ascii'] = $singleByte; + $this->_map['(iso|iec)-?8859-?[0-9]+'] = $singleByte; + $this->_map['windows-?125[0-9]'] = $singleByte; + $this->_map['cp-?[0-9]+'] = $singleByte; + $this->_map['ansi'] = $singleByte; + $this->_map['macintosh'] = $singleByte; + $this->_map['koi-?7'] = $singleByte; + $this->_map['koi-?8-?.+'] = $singleByte; + $this->_map['mik'] = $singleByte; + $this->_map['(cork|t1)'] = $singleByte; + $this->_map['v?iscii'] = $singleByte; + + //16 bits + $this->_map['(ucs-?2|utf-?16)'] = $doubleByte; + + //32 bits + $this->_map['(ucs-?4|utf-?32)'] = $fourBytes; + + //Fallback + $this->_map['.*'] = $singleByte; + } + + /** + * Returns a CharacterReader suitable for the charset applied. + * @param string $charset + * @return Swift_CharacterReader + */ + public function getReaderFor($charset) + { + $charset = trim(strtolower($charset)); + foreach ($this->_map as $pattern => $spec) + { + $re = '/^' . $pattern . '$/D'; + if (preg_match($re, $charset)) + { + if (!array_key_exists($pattern, $this->_loaded)) + { + $reflector = new ReflectionClass($spec['class']); + if ($reflector->getConstructor()) + { + $reader = $reflector->newInstanceArgs($spec['constructor']); + } + else + { + $reader = $reflector->newInstance(); + } + $this->_loaded[$pattern] = $reader; + } + return $this->_loaded[$pattern]; + } + } + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/CharacterStream.php b/External/swiftmailer/lib/classes/Swift/CharacterStream.php new file mode 100755 index 0000000..bf91528 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/CharacterStream.php @@ -0,0 +1,86 @@ +setCharacterReaderFactory($factory); + $this->setCharacterSet($charset); + } + + /** + * Set the character set used in this CharacterStream. + * @param string $charset + */ + public function setCharacterSet($charset) + { + $this->_charset = $charset; + $this->_charReader = null; + } + + /** + * Set the CharacterReaderFactory for multi charset support. + * @param Swift_CharacterReaderFactory $factory + */ + public function setCharacterReaderFactory( + Swift_CharacterReaderFactory $factory) + { + $this->_charReaderFactory = $factory; + } + + /** + * Overwrite this character stream using the byte sequence in the byte stream. + * @param Swift_OutputByteStream $os output stream to read from + */ + public function importByteStream(Swift_OutputByteStream $os) + { + if (!isset($this->_charReader)) + { + $this->_charReader = $this->_charReaderFactory + ->getReaderFor($this->_charset); + } + + $startLength = $this->_charReader->getInitialByteSize(); + while (false !== $bytes = $os->read($startLength)) + { + $c = array(); + for ($i = 0, $len = strlen($bytes); $i < $len; ++$i) + { + $c[] = self::$_byteMap[$bytes[$i]]; + } + $size = count($c); + $need = $this->_charReader + ->validateByteSequence($c, $size); + if ($need > 0 && + false !== $bytes = $os->read($need)) + { + for ($i = 0, $len = strlen($bytes); $i < $len; ++$i) + { + $c[] = self::$_byteMap[$bytes[$i]]; + } + } + $this->_array[] = $c; + ++$this->_array_size; + } + } + + /** + * Import a string a bytes into this CharacterStream, overwriting any existing + * data in the stream. + * @param string $string + */ + public function importString($string) + { + $this->flushContents(); + $this->write($string); + } + + /** + * Read $length characters from the stream and move the internal pointer + * $length further into the stream. + * @param int $length + * @return string + */ + public function read($length) + { + if ($this->_offset == $this->_array_size) + { + return false; + } + + // Don't use array slice + $arrays = array(); + $end = $length + $this->_offset; + for ($i = $this->_offset; $i < $end; ++$i) + { + if (!isset($this->_array[$i])) + { + break; + } + $arrays[] = $this->_array[$i]; + } + $this->_offset += $i - $this->_offset; // Limit function calls + $chars = false; + foreach ($arrays as $array) + { + $chars .= implode('', array_map('chr', $array)); + } + return $chars; + } + + /** + * Read $length characters from the stream and return a 1-dimensional array + * containing there octet values. + * @param int $length + * @return int[] + */ + public function readBytes($length) + { + if ($this->_offset == $this->_array_size) + { + return false; + } + $arrays = array(); + $end = $length + $this->_offset; + for ($i = $this->_offset; $i < $end; ++$i) + { + if (!isset($this->_array[$i])) + { + break; + } + $arrays[] = $this->_array[$i]; + } + $this->_offset += ($i - $this->_offset); // Limit function calls + return call_user_func_array('array_merge', $arrays); + } + + /** + * Write $chars to the end of the stream. + * @param string $chars + */ + public function write($chars) + { + if (!isset($this->_charReader)) + { + $this->_charReader = $this->_charReaderFactory->getReaderFor( + $this->_charset); + } + + $startLength = $this->_charReader->getInitialByteSize(); + + $fp = fopen('php://memory', 'w+b'); + fwrite($fp, $chars); + unset($chars); + fseek($fp, 0, SEEK_SET); + + $buffer = array(0); + $buf_pos = 1; + $buf_len = 1; + $has_datas = true; + do + { + $bytes = array(); + // Buffer Filing + if ($buf_len - $buf_pos < $startLength) + { + $buf = array_splice($buffer, $buf_pos); + $new = $this->_reloadBuffer($fp, 100); + if ($new) + { + $buffer = array_merge($buf, $new); + $buf_len = count($buffer); + $buf_pos = 0; + } + else + { + $has_datas = false; + } + } + if ($buf_len - $buf_pos > 0) + { + $size = 0; + for ($i = 0; $i < $startLength && isset($buffer[$buf_pos]); ++$i) + { + ++$size; + $bytes[] = $buffer[$buf_pos++]; + } + $need = $this->_charReader->validateByteSequence( + $bytes, $size); + if ($need > 0) + { + if ($buf_len - $buf_pos < $need) + { + $new = $this->_reloadBuffer($fp, $need); + + if ($new) + { + $buffer = array_merge($buffer, $new); + $buf_len = count($buffer); + } + } + for ($i = 0; $i < $need && isset($buffer[$buf_pos]); ++$i) + { + $bytes[] = $buffer[$buf_pos++]; + } + } + $this->_array[] = $bytes; + ++$this->_array_size; + } + } + while ($has_datas); + + fclose($fp); + } + + /** + * Move the internal pointer to $charOffset in the stream. + * @param int $charOffset + */ + public function setPointer($charOffset) + { + if ($charOffset > $this->_array_size) + { + $charOffset = $this->_array_size; + } + elseif ($charOffset < 0) + { + $charOffset = 0; + } + $this->_offset = $charOffset; + } + + /** + * Empty the stream and reset the internal pointer. + */ + public function flushContents() + { + $this->_offset = 0; + $this->_array = array(); + $this->_array_size = 0; + } + + private function _reloadBuffer($fp, $len) + { + if (!feof($fp) && ($bytes = fread($fp, $len)) !== false) + { + $buf = array(); + for ($i = 0, $len = strlen($bytes); $i < $len; ++$i) + { + $buf[] = self::$_byteMap[$bytes[$i]]; + } + return $buf; + } + return false; + } + + private static function _initializeMaps() + { + if (!isset(self::$_charMap)) + { + self::$_charMap = array(); + for ($byte = 0; $byte < 256; ++$byte) + { + self::$_charMap[$byte] = chr($byte); + } + self::$_byteMap = array_flip(self::$_charMap); + } + } +} diff --git a/External/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php b/External/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php new file mode 100755 index 0000000..f090aa7 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php @@ -0,0 +1,300 @@ +. + + */ + +//@require 'Swift/CharacterStream.php'; +//@require 'Swift/OutputByteStream.php'; + + +/** + * A CharacterStream implementation which stores characters in an internal array. + * @package Swift + * @subpackage CharacterStream + * @author Xavier De Cock + */ + +Class Swift_CharacterStream_NgCharacterStream + implements Swift_CharacterStream +{ + + /** + * The char reader (lazy-loaded) for the current charset. + * @var Swift_CharacterReader + * @access private + */ + private $_charReader; + + /** + * A factory for creatiing CharacterReader instances. + * @var Swift_CharacterReaderFactory + * @access private + */ + private $_charReaderFactory; + + /** + * The character set this stream is using. + * @var string + * @access private + */ + private $_charset; + + /** + * The datas stored as is + * + * @var string + */ + private $_datas = ""; + + /** + * Number of bytes in the stream + * + * @var int + */ + private $_datasSize = 0; + + /** + * Map + * + * @var mixed + */ + private $_map; + + /** + * Map Type + * + * @var int + */ + private $_mapType = 0; + + /** + * Number of characters in the stream + * + * @var int + */ + private $_charCount = 0; + + /** + * Position in the stream + * + * @var unknown_type + */ + private $_currentPos = 0; + + /** + * The constructor + * + * @param Swift_CharacterReaderFactory $factory + * @param unknown_type $charset + */ + public function __construct(Swift_CharacterReaderFactory $factory, + $charset) + { + $this->setCharacterReaderFactory($factory); + $this->setCharacterSet($charset); + } + + /* -- Changing parameters of the stream -- */ + + /** + * Set the character set used in this CharacterStream. + * @param string $charset + */ + public function setCharacterSet($charset) + { + $this->_charset = $charset; + $this->_charReader = null; + $this->_mapType = 0; + } + + /** + * Set the CharacterReaderFactory for multi charset support. + * @param Swift_CharacterReaderFactory $factory + */ + public function setCharacterReaderFactory( + Swift_CharacterReaderFactory $factory) + { + $this->_charReaderFactory = $factory; + } + + /** + * @see Swift_CharacterStream::flushContents() + * + */ + public function flushContents() + { + $this->_datas = null; + $this->_map = null; + $this->_charCount = 0; + $this->_currentPos = 0; + $this->_datasSize = 0; + } + + /** + * @see Swift_CharacterStream::importByteStream() + * + * @param Swift_OutputByteStream $os + */ + public function importByteStream(Swift_OutputByteStream $os) + { + $this->flushContents(); + $blocks=512; + $os->setReadPointer(0); + while(false!==($read = $os->read($blocks))) + $this->write($read); + } + + /** + * @see Swift_CharacterStream::importString() + * + * @param string $string + */ + public function importString($string) + { + $this->flushContents(); + $this->write($string); + } + + /** + * @see Swift_CharacterStream::read() + * + * @param int $length + * @return string + */ + public function read($length) + { + if ($this->_currentPos>=$this->_charCount) + { + return false; + } + $ret=false; + $length = ($this->_currentPos+$length > $this->_charCount) + ? $this->_charCount - $this->_currentPos + : $length; + switch ($this->_mapType) + { + case Swift_CharacterReader::MAP_TYPE_FIXED_LEN: + $len = $length*$this->_map; + $ret = substr($this->_datas, + $this->_currentPos * $this->_map, + $len); + $this->_currentPos += $length; + break; + + case Swift_CharacterReader::MAP_TYPE_INVALID: + $end = $this->_currentPos + $length; + $end = $end > $this->_charCount + ?$this->_charCount + :$end; + $ret = ''; + for (; $this->_currentPos < $length; ++$this->_currentPos) + { + if (isset ($this->_map[$this->_currentPos])) + { + $ret .= '?'; + } + else + { + $ret .= $this->_datas[$this->_currentPos]; + } + } + break; + + case Swift_CharacterReader::MAP_TYPE_POSITIONS: + $end = $this->_currentPos + $length; + $end = $end > $this->_charCount + ?$this->_charCount + :$end; + $ret = ''; + $start = 0; + if ($this->_currentPos>0) + { + $start = $this->_map['p'][$this->_currentPos-1]; + } + $to = $start; + for (; $this->_currentPos < $end; ++$this->_currentPos) + { + if (isset($this->_map['i'][$this->_currentPos])) { + $ret .= substr($this->_datas, $start, $to - $start).'?'; + $start = $this->_map['p'][$this->_currentPos]; + } else { + $to = $this->_map['p'][$this->_currentPos]; + } + } + $ret .= substr($this->_datas, $start, $to - $start); + break; + } + return $ret; + } + + /** + * @see Swift_CharacterStream::readBytes() + * + * @param int $length + * @return int[] + */ + public function readBytes($length) + { + $read=$this->read($length); + if ($read!==false) + { + $ret = array_map('ord', str_split($read, 1)); + return $ret; + } + return false; + } + + /** + * @see Swift_CharacterStream::setPointer() + * + * @param int $charOffset + */ + public function setPointer($charOffset) + { + if ($this->_charCount<$charOffset){ + $charOffset=$this->_charCount; + } + $this->_currentPos = $charOffset; + } + + /** + * @see Swift_CharacterStream::write() + * + * @param string $chars + */ + public function write($chars) + { + if (!isset($this->_charReader)) + { + $this->_charReader = $this->_charReaderFactory->getReaderFor( + $this->_charset); + $this->_map = array(); + $this->_mapType = $this->_charReader->getMapType(); + } + $ignored=''; + $this->_datas .= $chars; + $this->_charCount += $this->_charReader->getCharPositions(substr($this->_datas, $this->_datasSize), $this->_datasSize, $this->_map, $ignored); + if ($ignored!==false) { + $this->_datasSize=strlen($this->_datas)-strlen($ignored); + } + else + { + $this->_datasSize=strlen($this->_datas); + } + } +} \ No newline at end of file diff --git a/External/swiftmailer/lib/classes/Swift/DependencyContainer.php b/External/swiftmailer/lib/classes/Swift/DependencyContainer.php new file mode 100755 index 0000000..b6ba554 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/DependencyContainer.php @@ -0,0 +1,349 @@ +_store); + } + + /** + * Test if an item is registered in this container with the given name. + * @param string $itemName + * @return boolean + * @see register() + */ + public function has($itemName) + { + return array_key_exists($itemName, $this->_store) + && isset($this->_store[$itemName]['lookupType']); + } + + /** + * Lookup the item with the given $itemName. + * @param string $itemName + * @return mixed + * @throws Swift_DependencyException If the dependency is not found + * @see register() + */ + public function lookup($itemName) + { + if (!$this->has($itemName)) + { + throw new Swift_DependencyException( + 'Cannot lookup dependency "' . $itemName . '" since it is not registered.' + ); + } + + switch ($this->_store[$itemName]['lookupType']) + { + case self::TYPE_ALIAS: + return $this->_createAlias($itemName); + case self::TYPE_VALUE: + return $this->_getValue($itemName); + case self::TYPE_INSTANCE: + return $this->_createNewInstance($itemName); + case self::TYPE_SHARED: + return $this->_createSharedInstance($itemName); + } + } + + /** + * Create an array of arguments passed to the constructor of $itemName. + * @param string $itemName + * @return array + */ + public function createDependenciesFor($itemName) + { + $args = array(); + if (isset($this->_store[$itemName]['args'])) + { + $args = $this->_resolveArgs($this->_store[$itemName]['args']); + } + return $args; + } + + /** + * Register a new dependency with $itemName. + * This method returns the current DependencyContainer instance because it + * requires the use of the fluid interface to set the specific details for the + * dependency. + * + * @param string $itemName + * @return Swift_DependencyContainer + * @see asNewInstanceOf(), asSharedInstanceOf(), asValue() + */ + public function register($itemName) + { + $this->_store[$itemName] = array(); + $this->_endPoint =& $this->_store[$itemName]; + return $this; + } + + /** + * Specify the previously registered item as a literal value. + * {@link register()} must be called before this will work. + * + * @param mixed $value + * @return Swift_DependencyContainer + */ + public function asValue($value) + { + $endPoint =& $this->_getEndPoint(); + $endPoint['lookupType'] = self::TYPE_VALUE; + $endPoint['value'] = $value; + return $this; + } + + /** + * Specify the previously registered item as an alias of another item. + * @param string $lookup + * @return Swift_DependencyContainer + */ + public function asAliasOf($lookup) + { + $endPoint =& $this->_getEndPoint(); + $endPoint['lookupType'] = self::TYPE_ALIAS; + $endPoint['ref'] = $lookup; + return $this; + } + + /** + * Specify the previously registered item as a new instance of $className. + * {@link register()} must be called before this will work. + * Any arguments can be set with {@link withDependencies()}, + * {@link addConstructorValue()} or {@link addConstructorLookup()}. + * + * @param string $className + * @return Swift_DependencyContainer + * @see withDependencies(), addConstructorValue(), addConstructorLookup() + */ + public function asNewInstanceOf($className) + { + $endPoint =& $this->_getEndPoint(); + $endPoint['lookupType'] = self::TYPE_INSTANCE; + $endPoint['className'] = $className; + return $this; + } + + /** + * Specify the previously registered item as a shared instance of $className. + * {@link register()} must be called before this will work. + * @param string $className + * @return Swift_DependencyContainer + */ + public function asSharedInstanceOf($className) + { + $endPoint =& $this->_getEndPoint(); + $endPoint['lookupType'] = self::TYPE_SHARED; + $endPoint['className'] = $className; + return $this; + } + + /** + * Specify a list of injected dependencies for the previously registered item. + * This method takes an array of lookup names. + * + * @param array $lookups + * @return Swift_DependencyContainer + * @see addConstructorValue(), addConstructorLookup() + */ + public function withDependencies(array $lookups) + { + $endPoint =& $this->_getEndPoint(); + $endPoint['args'] = array(); + foreach ($lookups as $lookup) + { + $this->addConstructorLookup($lookup); + } + return $this; + } + + /** + * Specify a literal (non looked up) value for the constructor of the + * previously registered item. + * + * @param mixed $value + * @return Swift_DependencyContainer + * @see withDependencies(), addConstructorLookup() + */ + public function addConstructorValue($value) + { + $endPoint =& $this->_getEndPoint(); + if (!isset($endPoint['args'])) + { + $endPoint['args'] = array(); + } + $endPoint['args'][] = array('type' => 'value', 'item' => $value); + return $this; + } + + /** + * Specify a dependency lookup for the constructor of the previously + * registered item. + * + * @param string $lookup + * @return Swift_DependencyContainer + * @see withDependencies(), addConstructorValue() + */ + public function addConstructorLookup($lookup) + { + $endPoint =& $this->_getEndPoint(); + if (!isset($this->_endPoint['args'])) + { + $endPoint['args'] = array(); + } + $endPoint['args'][] = array('type' => 'lookup', 'item' => $lookup); + return $this; + } + + // -- Private methods + + /** Get the literal value with $itemName */ + private function _getValue($itemName) + { + return $this->_store[$itemName]['value']; + } + + /** Resolve an alias to another item */ + private function _createAlias($itemName) + { + return $this->lookup($this->_store[$itemName]['ref']); + } + + /** Create a fresh instance of $itemName */ + private function _createNewInstance($itemName) + { + $reflector = new ReflectionClass($this->_store[$itemName]['className']); + if ($reflector->getConstructor()) + { + return $reflector->newInstanceArgs( + $this->createDependenciesFor($itemName) + ); + } + else + { + return $reflector->newInstance(); + } + } + + /** Create and register a shared instance of $itemName */ + private function _createSharedInstance($itemName) + { + if (!isset($this->_store[$itemName]['instance'])) + { + $this->_store[$itemName]['instance'] = $this->_createNewInstance($itemName); + } + return $this->_store[$itemName]['instance']; + } + + /** Get the current endpoint in the store */ + private function &_getEndPoint() + { + if (!isset($this->_endPoint)) + { + throw new BadMethodCallException( + 'Component must first be registered by calling register()' + ); + } + return $this->_endPoint; + } + + /** Get an argument list with dependencies resolved */ + private function _resolveArgs(array $args) + { + $resolved = array(); + foreach ($args as $argDefinition) + { + switch ($argDefinition['type']) + { + case 'lookup': + $resolved[] = $this->_lookupRecursive($argDefinition['item']); + break; + case 'value': + $resolved[] = $argDefinition['item']; + break; + } + } + return $resolved; + } + + /** Resolve a single dependency with an collections */ + private function _lookupRecursive($item) + { + if (is_array($item)) + { + $collection = array(); + foreach ($item as $k => $v) + { + $collection[$k] = $this->_lookupRecursive($v); + } + return $collection; + } + else + { + return $this->lookup($item); + } + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/DependencyException.php b/External/swiftmailer/lib/classes/Swift/DependencyException.php new file mode 100755 index 0000000..bb1681c --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/DependencyException.php @@ -0,0 +1,30 @@ +createDependenciesFor('mime.embeddedfile') + ); + + $this->setBody($data); + $this->setFilename($filename); + if ($contentType) + { + $this->setContentType($contentType); + } + } + + /** + * Create a new EmbeddedFile. + * @param string|Swift_OutputByteStream $data + * @param string $filename + * @param string $contentType + * @return Swift_Mime_EmbeddedFile + */ + public static function newInstance($data = null, $filename = null, + $contentType = null) + { + return new self($data, $filename, $contentType); + } + + /** + * Create a new EmbeddedFile from a filesystem path. + * @param string $path + * @return Swift_Mime_EmbeddedFile + */ + public static function fromPath($path) + { + return self::newInstance()->setFile( + new Swift_ByteStream_FileByteStream($path) + ); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Encoder.php b/External/swiftmailer/lib/classes/Swift/Encoder.php new file mode 100755 index 0000000..32aa96a --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Encoder.php @@ -0,0 +1,32 @@ += $maxLineLength || 76 < $maxLineLength) + { + $maxLineLength = 76; + } + + $encodedString = base64_encode($string); + $firstLine = ''; + + if (0 != $firstLineOffset) + { + $firstLine = substr( + $encodedString, 0, $maxLineLength - $firstLineOffset + ) . "\r\n"; + $encodedString = substr( + $encodedString, $maxLineLength - $firstLineOffset + ); + } + + return $firstLine . trim(chunk_split($encodedString, $maxLineLength, "\r\n")); + } + + /** + * Does nothing. + */ + public function charsetChanged($charset) + { + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php b/External/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php new file mode 100755 index 0000000..6914f6c --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php @@ -0,0 +1,263 @@ + '=00', 1 => '=01', 2 => '=02', 3 => '=03', 4 => '=04', + 5 => '=05', 6 => '=06', 7 => '=07', 8 => '=08', 9 => '=09', + 10 => '=0A', 11 => '=0B', 12 => '=0C', 13 => '=0D', 14 => '=0E', + 15 => '=0F', 16 => '=10', 17 => '=11', 18 => '=12', 19 => '=13', + 20 => '=14', 21 => '=15', 22 => '=16', 23 => '=17', 24 => '=18', + 25 => '=19', 26 => '=1A', 27 => '=1B', 28 => '=1C', 29 => '=1D', + 30 => '=1E', 31 => '=1F', 32 => '=20', 33 => '=21', 34 => '=22', + 35 => '=23', 36 => '=24', 37 => '=25', 38 => '=26', 39 => '=27', + 40 => '=28', 41 => '=29', 42 => '=2A', 43 => '=2B', 44 => '=2C', + 45 => '=2D', 46 => '=2E', 47 => '=2F', 48 => '=30', 49 => '=31', + 50 => '=32', 51 => '=33', 52 => '=34', 53 => '=35', 54 => '=36', + 55 => '=37', 56 => '=38', 57 => '=39', 58 => '=3A', 59 => '=3B', + 60 => '=3C', 61 => '=3D', 62 => '=3E', 63 => '=3F', 64 => '=40', + 65 => '=41', 66 => '=42', 67 => '=43', 68 => '=44', 69 => '=45', + 70 => '=46', 71 => '=47', 72 => '=48', 73 => '=49', 74 => '=4A', + 75 => '=4B', 76 => '=4C', 77 => '=4D', 78 => '=4E', 79 => '=4F', + 80 => '=50', 81 => '=51', 82 => '=52', 83 => '=53', 84 => '=54', + 85 => '=55', 86 => '=56', 87 => '=57', 88 => '=58', 89 => '=59', + 90 => '=5A', 91 => '=5B', 92 => '=5C', 93 => '=5D', 94 => '=5E', + 95 => '=5F', 96 => '=60', 97 => '=61', 98 => '=62', 99 => '=63', + 100 => '=64', 101 => '=65', 102 => '=66', 103 => '=67', 104 => '=68', + 105 => '=69', 106 => '=6A', 107 => '=6B', 108 => '=6C', 109 => '=6D', + 110 => '=6E', 111 => '=6F', 112 => '=70', 113 => '=71', 114 => '=72', + 115 => '=73', 116 => '=74', 117 => '=75', 118 => '=76', 119 => '=77', + 120 => '=78', 121 => '=79', 122 => '=7A', 123 => '=7B', 124 => '=7C', + 125 => '=7D', 126 => '=7E', 127 => '=7F', 128 => '=80', 129 => '=81', + 130 => '=82', 131 => '=83', 132 => '=84', 133 => '=85', 134 => '=86', + 135 => '=87', 136 => '=88', 137 => '=89', 138 => '=8A', 139 => '=8B', + 140 => '=8C', 141 => '=8D', 142 => '=8E', 143 => '=8F', 144 => '=90', + 145 => '=91', 146 => '=92', 147 => '=93', 148 => '=94', 149 => '=95', + 150 => '=96', 151 => '=97', 152 => '=98', 153 => '=99', 154 => '=9A', + 155 => '=9B', 156 => '=9C', 157 => '=9D', 158 => '=9E', 159 => '=9F', + 160 => '=A0', 161 => '=A1', 162 => '=A2', 163 => '=A3', 164 => '=A4', + 165 => '=A5', 166 => '=A6', 167 => '=A7', 168 => '=A8', 169 => '=A9', + 170 => '=AA', 171 => '=AB', 172 => '=AC', 173 => '=AD', 174 => '=AE', + 175 => '=AF', 176 => '=B0', 177 => '=B1', 178 => '=B2', 179 => '=B3', + 180 => '=B4', 181 => '=B5', 182 => '=B6', 183 => '=B7', 184 => '=B8', + 185 => '=B9', 186 => '=BA', 187 => '=BB', 188 => '=BC', 189 => '=BD', + 190 => '=BE', 191 => '=BF', 192 => '=C0', 193 => '=C1', 194 => '=C2', + 195 => '=C3', 196 => '=C4', 197 => '=C5', 198 => '=C6', 199 => '=C7', + 200 => '=C8', 201 => '=C9', 202 => '=CA', 203 => '=CB', 204 => '=CC', + 205 => '=CD', 206 => '=CE', 207 => '=CF', 208 => '=D0', 209 => '=D1', + 210 => '=D2', 211 => '=D3', 212 => '=D4', 213 => '=D5', 214 => '=D6', + 215 => '=D7', 216 => '=D8', 217 => '=D9', 218 => '=DA', 219 => '=DB', + 220 => '=DC', 221 => '=DD', 222 => '=DE', 223 => '=DF', 224 => '=E0', + 225 => '=E1', 226 => '=E2', 227 => '=E3', 228 => '=E4', 229 => '=E5', + 230 => '=E6', 231 => '=E7', 232 => '=E8', 233 => '=E9', 234 => '=EA', + 235 => '=EB', 236 => '=EC', 237 => '=ED', 238 => '=EE', 239 => '=EF', + 240 => '=F0', 241 => '=F1', 242 => '=F2', 243 => '=F3', 244 => '=F4', + 245 => '=F5', 246 => '=F6', 247 => '=F7', 248 => '=F8', 249 => '=F9', + 250 => '=FA', 251 => '=FB', 252 => '=FC', 253 => '=FD', 254 => '=FE', + 255 => '=FF' + ); + + /** + * A map of non-encoded ascii characters. + * @var string[] + * @access protected + */ + protected static $_safeMap = array(); + + /** + * Creates a new QpEncoder for the given CharacterStream. + * @param Swift_CharacterStream $charStream to use for reading characters + * @param Swift_StreamFilter $filter if input should be canonicalized + */ + public function __construct(Swift_CharacterStream $charStream, + Swift_StreamFilter $filter = null) + { + $this->_charStream = $charStream; + if (empty(self::$_safeMap)) + { + foreach (array_merge( + array(0x09, 0x20), range(0x21, 0x3C), range(0x3E, 0x7E)) as $byte) + { + self::$_safeMap[$byte] = chr($byte); + } + } + $this->_filter = $filter; + } + + /** + * Takes an unencoded string and produces a QP encoded string from it. + * QP encoded strings have a maximum line length of 76 characters. + * If the first line needs to be shorter, indicate the difference with + * $firstLineOffset. + * @param string $string to encode + * @param int $firstLineOffset, optional + * @param int $maxLineLength, optional, 0 indicates the default of 76 chars + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, + $maxLineLength = 0) + { + if ($maxLineLength > 76 || $maxLineLength <= 0) + { + $maxLineLength = 76; + } + + $thisLineLength = $maxLineLength - $firstLineOffset; + + $lines = array(); + $lNo = 0; + $lines[$lNo] = ''; + $currentLine =& $lines[$lNo++]; + $size=$lineLen=0; + + $this->_charStream->flushContents(); + $this->_charStream->importString($string); + + //Fetching more than 4 chars at one is slower, as is fetching fewer bytes + // Conveniently 4 chars is the UTF-8 safe number since UTF-8 has up to 6 + // bytes per char and (6 * 4 * 3 = 72 chars per line) * =NN is 3 bytes + while (false !== $bytes = $this->_nextSequence()) + { + //If we're filtering the input + if (isset($this->_filter)) + { + //If we can't filter because we need more bytes + while ($this->_filter->shouldBuffer($bytes)) + { + //Then collect bytes into the buffer + if (false === $moreBytes = $this->_nextSequence(1)) + { + break; + } + + foreach ($moreBytes as $b) + { + $bytes[] = $b; + } + } + //And filter them + $bytes = $this->_filter->filter($bytes); + } + + $enc = $this->_encodeByteSequence($bytes, $size); + if ($currentLine && $lineLen+$size >= $thisLineLength) + { + $lines[$lNo] = ''; + $currentLine =& $lines[$lNo++]; + $thisLineLength = $maxLineLength; + $lineLen=0; + } + $lineLen+=$size; + $currentLine .= $enc; + } + + return $this->_standardize(implode("=\r\n", $lines)); + } + + /** + * Updates the charset used. + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->_charStream->setCharacterSet($charset); + } + + // -- Protected methods + + /** + * Encode the given byte array into a verbatim QP form. + * @param int[] $bytes + * @return string + * @access protected + */ + protected function _encodeByteSequence(array $bytes, &$size) + { + $ret = ''; + $size=0; + foreach ($bytes as $b) + { + if (isset(self::$_safeMap[$b])) + { + $ret .= self::$_safeMap[$b]; + ++$size; + } + else + { + $ret .= self::$_qpMap[$b]; + $size+=3; + } + } + return $ret; + } + + /** + * Get the next sequence of bytes to read from the char stream. + * @param int $size number of bytes to read + * @return int[] + * @access protected + */ + protected function _nextSequence($size = 4) + { + return $this->_charStream->readBytes($size); + } + + /** + * Make sure CRLF is correct and HT/SPACE are in valid places. + * @param string $string + * @return string + * @access protected + */ + protected function _standardize($string) + { + $string = str_replace(array("\t=0D=0A", " =0D=0A", "=0D=0A"), + array("=09\r\n", "=20\r\n", "\r\n"), $string + ); + switch ($end = ord(substr($string, -1))) + { + case 0x09: + case 0x20: + $string = substr_replace($string, self::$_qpMap[$end], -1); + } + return $string; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php b/External/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php new file mode 100755 index 0000000..febc6ba --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php @@ -0,0 +1,89 @@ +_charStream = $charStream; + } + + /** + * Takes an unencoded string and produces a string encoded according to + * RFC 2231 from it. + * @param string $string to encode + * @param int $firstLineOffset + * @param int $maxLineLength, optional, 0 indicates the default of 75 bytes + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, + $maxLineLength = 0) + { + $lines = array(); $lineCount = 0; + $lines[] = ''; + $currentLine =& $lines[$lineCount++]; + + if (0 >= $maxLineLength) + { + $maxLineLength = 75; + } + + $this->_charStream->flushContents(); + $this->_charStream->importString($string); + + $thisLineLength = $maxLineLength - $firstLineOffset; + + while (false !== $char = $this->_charStream->read(4)) + { + $encodedChar = rawurlencode($char); + if (0 != strlen($currentLine) + && strlen($currentLine . $encodedChar) > $thisLineLength) + { + $lines[] = ''; + $currentLine =& $lines[$lineCount++]; + $thisLineLength = $maxLineLength; + } + $currentLine .= $encodedChar; + } + + return implode("\r\n", $lines); + } + + /** + * Updates the charset used. + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->_charStream->setCharacterSet($charset); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Encoding.php b/External/swiftmailer/lib/classes/Swift/Encoding.php new file mode 100755 index 0000000..1849a82 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Encoding.php @@ -0,0 +1,70 @@ +lookup($key); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Events/CommandEvent.php b/External/swiftmailer/lib/classes/Swift/Events/CommandEvent.php new file mode 100755 index 0000000..73eb585 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Events/CommandEvent.php @@ -0,0 +1,67 @@ +_command = $command; + $this->_successCodes = $successCodes; + } + + /** + * Get the command which was sent to the server. + * @return string + */ + public function getCommand() + { + return $this->_command; + } + + /** + * Get the numeric response codes which indicate success for this command. + * @return int[] + */ + public function getSuccessCodes() + { + return $this->_successCodes; + } + +} \ No newline at end of file diff --git a/External/swiftmailer/lib/classes/Swift/Events/CommandListener.php b/External/swiftmailer/lib/classes/Swift/Events/CommandListener.php new file mode 100755 index 0000000..2fd7117 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Events/CommandListener.php @@ -0,0 +1,29 @@ +_source = $source; + } + + /** + * Get the source object of this event. + * @return object + */ + public function getSource() + { + return $this->_source; + } + + /** + * Prevent this Event from bubbling any further up the stack. + * @param boolean $cancel, optional + */ + public function cancelBubble($cancel = true) + { + $this->_bubbleCancelled = $cancel; + } + + /** + * Returns true if this Event will not bubble any further up the stack. + * @return boolean + */ + public function bubbleCancelled() + { + return $this->_bubbleCancelled; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php b/External/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php new file mode 100755 index 0000000..addf9e7 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php @@ -0,0 +1,65 @@ +_response = $response; + $this->_valid = $valid; + } + + /** + * Get the response which was received from the server. + * @return string + */ + public function getResponse() + { + return $this->_response; + } + + /** + * Get the success status of this Event. + * @return boolean + */ + public function isValid() + { + return $this->_valid; + } + +} \ No newline at end of file diff --git a/External/swiftmailer/lib/classes/Swift/Events/ResponseListener.php b/External/swiftmailer/lib/classes/Swift/Events/ResponseListener.php new file mode 100755 index 0000000..092385b --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Events/ResponseListener.php @@ -0,0 +1,29 @@ +_message = $message; + $this->_result = self::RESULT_PENDING; + } + + /** + * Get the Transport used to send the Message. + * @return Swift_Transport + */ + public function getTransport() + { + return $this->getSource(); + } + + /** + * Get the Message being sent. + * @return Swift_Mime_Message + */ + public function getMessage() + { + return $this->_message; + } + + /** + * Set the array of addresses that failed in sending. + * @param array $recipients + */ + public function setFailedRecipients($recipients) + { + $this->_failedRecipients = $recipients; + } + + /** + * Get an recipient addresses which were not accepted for delivery. + * @return string[] + */ + public function getFailedRecipients() + { + return $this->_failedRecipients; + } + + /** + * Set the result of sending. + * @return int + */ + public function setResult($result) + { + $this->_result = $result; + } + + /** + * Get the result of this Event. + * The return value is a bitmask from + * {@link RESULT_PENDING, RESULT_SUCCESS, RESULT_TENTATIVE, RESULT_FAILED} + * @return int + */ + public function getResult() + { + return $this->_result; + } + +} \ No newline at end of file diff --git a/External/swiftmailer/lib/classes/Swift/Events/SendListener.php b/External/swiftmailer/lib/classes/Swift/Events/SendListener.php new file mode 100755 index 0000000..a8f0cc3 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Events/SendListener.php @@ -0,0 +1,35 @@ +_eventMap = array( + 'Swift_Events_CommandEvent' => 'Swift_Events_CommandListener', + 'Swift_Events_ResponseEvent' => 'Swift_Events_ResponseListener', + 'Swift_Events_SendEvent' => 'Swift_Events_SendListener', + 'Swift_Events_TransportChangeEvent' => 'Swift_Events_TransportChangeListener', + 'Swift_Events_TransportExceptionEvent' => 'Swift_Events_TransportExceptionListener' + ); + } + + /** + * Create a new SendEvent for $source and $message. + * + * @param Swift_Transport $source + * @param Swift_Mime_Message + * @return Swift_Events_SendEvent + */ + public function createSendEvent(Swift_Transport $source, + Swift_Mime_Message $message) + { + return new Swift_Events_SendEvent($source, $message); + } + + /** + * Create a new CommandEvent for $source and $command. + * + * @param Swift_Transport $source + * @param string $command That will be executed + * @param array $successCodes That are needed + * @return Swift_Events_CommandEvent + */ + public function createCommandEvent(Swift_Transport $source, + $command, $successCodes = array()) + { + return new Swift_Events_CommandEvent($source, $command, $successCodes); + } + + /** + * Create a new ResponseEvent for $source and $response. + * + * @param Swift_Transport $source + * @param string $response + * @param boolean $valid If the response is valid + * @return Swift_Events_ResponseEvent + */ + public function createResponseEvent(Swift_Transport $source, + $response, $valid) + { + return new Swift_Events_ResponseEvent($source, $response, $valid); + } + + /** + * Create a new TransportChangeEvent for $source. + * + * @param Swift_Transport $source + * @return Swift_Events_TransportChangeEvent + */ + public function createTransportChangeEvent(Swift_Transport $source) + { + return new Swift_Events_TransportChangeEvent($source); + } + + /** + * Create a new TransportExceptionEvent for $source. + * + * @param Swift_Transport $source + * @param Swift_TransportException $ex + * @return Swift_Events_TransportExceptionEvent + */ + public function createTransportExceptionEvent(Swift_Transport $source, + Swift_TransportException $ex) + { + return new Swift_Events_TransportExceptionEvent($source, $ex); + } + + /** + * Bind an event listener to this dispatcher. + * + * @param Swift_Events_EventListener $listener + */ + public function bindEventListener(Swift_Events_EventListener $listener) + { + foreach ($this->_listeners as $l) + { + //Already loaded + if ($l === $listener) + { + return; + } + } + $this->_listeners[] = $listener; + } + + /** + * Dispatch the given Event to all suitable listeners. + * + * @param Swift_Events_EventObject $evt + * @param string $target method + */ + public function dispatchEvent(Swift_Events_EventObject $evt, $target) + { + $this->_prepareBubbleQueue($evt); + $this->_bubble($evt, $target); + } + + // -- Private methods + + /** Queue listeners on a stack ready for $evt to be bubbled up it */ + private function _prepareBubbleQueue(Swift_Events_EventObject $evt) + { + $this->_bubbleQueue = array(); + $evtClass = get_class($evt); + foreach ($this->_listeners as $listener) + { + if (array_key_exists($evtClass, $this->_eventMap) + && ($listener instanceof $this->_eventMap[$evtClass])) + { + $this->_bubbleQueue[] = $listener; + } + } + } + + /** Bubble $evt up the stack calling $target() on each listener */ + private function _bubble(Swift_Events_EventObject $evt, $target) + { + if (!$evt->bubbleCancelled() && $listener = array_shift($this->_bubbleQueue)) + { + $listener->$target($evt); + $this->_bubble($evt, $target); + } + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php b/External/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php new file mode 100755 index 0000000..f069a4c --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php @@ -0,0 +1,31 @@ +getSource(); + } + +} \ No newline at end of file diff --git a/External/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php b/External/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php new file mode 100755 index 0000000..ba729d0 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php @@ -0,0 +1,53 @@ +_exception = $ex; + } + + /** + * Get the TransportException thrown. + * @return Swift_TransportException + */ + public function getException() + { + return $this->_exception; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php b/External/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php new file mode 100755 index 0000000..d6dce94 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php @@ -0,0 +1,30 @@ +createDependenciesFor('transport.failover') + ); + + $this->setTransports($transports); + } + + /** + * Create a new FailoverTransport instance. + * @param string $transports + * @return Swift_FailoverTransport + */ + public static function newInstance($transports = array()) + { + return new self($transports); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/FileStream.php b/External/swiftmailer/lib/classes/Swift/FileStream.php new file mode 100755 index 0000000..a7f894d --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/FileStream.php @@ -0,0 +1,28 @@ +setFile( + new Swift_ByteStream_FileByteStream($path) + ); + return $image; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/InputByteStream.php b/External/swiftmailer/lib/classes/Swift/InputByteStream.php new file mode 100755 index 0000000..e8f45f4 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/InputByteStream.php @@ -0,0 +1,72 @@ +_stream = $stream; + } + + /** + * Set a string into the cache under $itemKey for the namespace $nsKey. + * @param string $nsKey + * @param string $itemKey + * @param string $string + * @param int $mode + * @see MODE_WRITE, MODE_APPEND + */ + public function setString($nsKey, $itemKey, $string, $mode) + { + $this->_prepareCache($nsKey); + switch ($mode) + { + case self::MODE_WRITE: + $this->_contents[$nsKey][$itemKey] = $string; + break; + case self::MODE_APPEND: + if (!$this->hasKey($nsKey, $itemKey)) + { + $this->_contents[$nsKey][$itemKey] = ''; + } + $this->_contents[$nsKey][$itemKey] .= $string; + break; + default: + throw new Swift_SwiftException( + 'Invalid mode [' . $mode . '] used to set nsKey='. + $nsKey . ', itemKey=' . $itemKey + ); + } + } + + /** + * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. + * @param string $nsKey + * @param string $itemKey + * @param Swift_OutputByteStream $os + * @param int $mode + * @see MODE_WRITE, MODE_APPEND + */ + public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, + $mode) + { + $this->_prepareCache($nsKey); + switch ($mode) + { + case self::MODE_WRITE: + $this->clearKey($nsKey, $itemKey); + case self::MODE_APPEND: + if (!$this->hasKey($nsKey, $itemKey)) + { + $this->_contents[$nsKey][$itemKey] = ''; + } + while (false !== $bytes = $os->read(8192)) + { + $this->_contents[$nsKey][$itemKey] .= $bytes; + } + break; + default: + throw new Swift_SwiftException( + 'Invalid mode [' . $mode . '] used to set nsKey='. + $nsKey . ', itemKey=' . $itemKey + ); + } + } + + /** + * Provides a ByteStream which when written to, writes data to $itemKey. + * NOTE: The stream will always write in append mode. + * @param string $nsKey + * @param string $itemKey + * @return Swift_InputByteStream + */ + public function getInputByteStream($nsKey, $itemKey, + Swift_InputByteStream $writeThrough = null) + { + $is = clone $this->_stream; + $is->setKeyCache($this); + $is->setNsKey($nsKey); + $is->setItemKey($itemKey); + if (isset($writeThrough)) + { + $is->setWriteThroughStream($writeThrough); + } + return $is; + } + + /** + * Get data back out of the cache as a string. + * @param string $nsKey + * @param string $itemKey + * @return string + */ + public function getString($nsKey, $itemKey) + { + $this->_prepareCache($nsKey); + if ($this->hasKey($nsKey, $itemKey)) + { + return $this->_contents[$nsKey][$itemKey]; + } + } + + /** + * Get data back out of the cache as a ByteStream. + * @param string $nsKey + * @param string $itemKey + * @param Swift_InputByteStream $is to write the data to + */ + public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) + { + $this->_prepareCache($nsKey); + $is->write($this->getString($nsKey, $itemKey)); + } + + /** + * Check if the given $itemKey exists in the namespace $nsKey. + * @param string $nsKey + * @param string $itemKey + * @return boolean + */ + public function hasKey($nsKey, $itemKey) + { + $this->_prepareCache($nsKey); + return array_key_exists($itemKey, $this->_contents[$nsKey]); + } + + /** + * Clear data for $itemKey in the namespace $nsKey if it exists. + * @param string $nsKey + * @param string $itemKey + */ + public function clearKey($nsKey, $itemKey) + { + unset($this->_contents[$nsKey][$itemKey]); + } + + /** + * Clear all data in the namespace $nsKey if it exists. + * @param string $nsKey + */ + public function clearAll($nsKey) + { + unset($this->_contents[$nsKey]); + } + + // -- Private methods + + /** + * Initialize the namespace of $nsKey if needed. + * @param string $nsKey + * @access private + */ + private function _prepareCache($nsKey) + { + if (!array_key_exists($nsKey, $this->_contents)) + { + $this->_contents[$nsKey] = array(); + } + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php b/External/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php new file mode 100755 index 0000000..599fd6c --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php @@ -0,0 +1,316 @@ +_stream = $stream; + $this->_path = $path; + $this->_quotes = get_magic_quotes_runtime(); + } + + /** + * Set a string into the cache under $itemKey for the namespace $nsKey. + * @param string $nsKey + * @param string $itemKey + * @param string $string + * @param int $mode + * @throws Swift_IoException + * @see MODE_WRITE, MODE_APPEND + */ + public function setString($nsKey, $itemKey, $string, $mode) + { + $this->_prepareCache($nsKey); + switch ($mode) + { + case self::MODE_WRITE: + $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START); + break; + case self::MODE_APPEND: + $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_END); + break; + default: + throw new Swift_SwiftException( + 'Invalid mode [' . $mode . '] used to set nsKey='. + $nsKey . ', itemKey=' . $itemKey + ); + break; + } + fwrite($fp, $string); + } + + /** + * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. + * @param string $nsKey + * @param string $itemKey + * @param Swift_OutputByteStream $os + * @param int $mode + * @see MODE_WRITE, MODE_APPEND + * @throws Swift_IoException + */ + public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, + $mode) + { + $this->_prepareCache($nsKey); + switch ($mode) + { + case self::MODE_WRITE: + $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START); + break; + case self::MODE_APPEND: + $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_END); + break; + default: + throw new Swift_SwiftException( + 'Invalid mode [' . $mode . '] used to set nsKey='. + $nsKey . ', itemKey=' . $itemKey + ); + break; + } + while (false !== $bytes = $os->read(8192)) + { + fwrite($fp, $bytes); + } + } + + /** + * Provides a ByteStream which when written to, writes data to $itemKey. + * NOTE: The stream will always write in append mode. + * @param string $nsKey + * @param string $itemKey + * @return Swift_InputByteStream + */ + public function getInputByteStream($nsKey, $itemKey, + Swift_InputByteStream $writeThrough = null) + { + $is = clone $this->_stream; + $is->setKeyCache($this); + $is->setNsKey($nsKey); + $is->setItemKey($itemKey); + if (isset($writeThrough)) + { + $is->setWriteThroughStream($writeThrough); + } + return $is; + } + + /** + * Get data back out of the cache as a string. + * @param string $nsKey + * @param string $itemKey + * @return string + * @throws Swift_IoException + */ + public function getString($nsKey, $itemKey) + { + $this->_prepareCache($nsKey); + if ($this->hasKey($nsKey, $itemKey)) + { + $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START); + if ($this->_quotes) + { + set_magic_quotes_runtime(0); + } + $str = ''; + while (!feof($fp) && false !== $bytes = fread($fp, 8192)) + { + $str .= $bytes; + } + if ($this->_quotes) + { + set_magic_quotes_runtime(1); + } + return $str; + } + } + + /** + * Get data back out of the cache as a ByteStream. + * @param string $nsKey + * @param string $itemKey + * @param Swift_InputByteStream $is to write the data to + */ + public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) + { + if ($this->hasKey($nsKey, $itemKey)) + { + $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START); + if ($this->_quotes) + { + set_magic_quotes_runtime(0); + } + while (!feof($fp) && false !== $bytes = fread($fp, 8192)) + { + $is->write($bytes); + } + if ($this->_quotes) + { + set_magic_quotes_runtime(1); + } + } + } + + /** + * Check if the given $itemKey exists in the namespace $nsKey. + * @param string $nsKey + * @param string $itemKey + * @return boolean + */ + public function hasKey($nsKey, $itemKey) + { + return is_file($this->_path . '/' . $nsKey . '/' . $itemKey); + } + + /** + * Clear data for $itemKey in the namespace $nsKey if it exists. + * @param string $nsKey + * @param string $itemKey + */ + public function clearKey($nsKey, $itemKey) + { + if ($this->hasKey($nsKey, $itemKey)) + { + $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_END); + fclose($fp); + unlink($this->_path . '/' . $nsKey . '/' . $itemKey); + } + unset($this->_keys[$nsKey][$itemKey]); + } + + /** + * Clear all data in the namespace $nsKey if it exists. + * @param string $nsKey + */ + public function clearAll($nsKey) + { + if (array_key_exists($nsKey, $this->_keys)) + { + foreach ($this->_keys[$nsKey] as $itemKey=>$null) + { + $this->clearKey($nsKey, $itemKey); + } + rmdir($this->_path . '/' . $nsKey); + unset($this->_keys[$nsKey]); + } + } + + // -- Private methods + + /** + * Initialize the namespace of $nsKey if needed. + * @param string $nsKey + * @access private + */ + private function _prepareCache($nsKey) + { + $cacheDir = $this->_path . '/' . $nsKey; + if (!is_dir($cacheDir)) + { + if (!mkdir($cacheDir)) + { + throw new Swift_IoException('Failed to create cache directory ' . $cacheDir); + } + $this->_keys[$nsKey] = array(); + } + } + + /** + * Get a file handle on the cache item. + * @param string $nsKey + * @param string $itemKey + * @param int $position + * @return resource + * @access private + */ + private function _getHandle($nsKey, $itemKey, $position) + { + if (!isset($this->_keys[$nsKey]) || !array_key_exists($itemKey, $this->_keys[$nsKey])) + { + $fp = fopen($this->_path . '/' . $nsKey . '/' . $itemKey, 'w+b'); + $this->_keys[$nsKey][$itemKey] = $fp; + } + if (self::POSITION_START == $position) + { + fseek($this->_keys[$nsKey][$itemKey], 0, SEEK_SET); + } + else + { + fseek($this->_keys[$nsKey][$itemKey], 0, SEEK_END); + } + return $this->_keys[$nsKey][$itemKey]; + } + + /** + * Destructor. + */ + public function __destruct() + { + foreach ($this->_keys as $nsKey=>$null) + { + $this->clearAll($nsKey); + } + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php b/External/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php new file mode 100755 index 0000000..a1f4440 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php @@ -0,0 +1,53 @@ +_keyCache = $keyCache; + } + + /** + * Specify a stream to write through for each write(). + * @param Swift_InputByteStream $is + */ + public function setWriteThroughStream(Swift_InputByteStream $is) + { + $this->_writeThrough = $is; + } + + /** + * Writes $bytes to the end of the stream. + * @param string $bytes + * @param Swift_InputByteStream $is, optional + */ + public function write($bytes, Swift_InputByteStream $is = null) + { + $this->_keyCache->setString( + $this->_nsKey, $this->_itemKey, $bytes, Swift_KeyCache::MODE_APPEND + ); + if (isset($is)) + { + $is->write($bytes); + } + if (isset($this->_writeThrough)) + { + $this->_writeThrough->write($bytes); + } + } + + /** + * Not used. + */ + public function commit() + { + } + + /** + * Not used. + */ + public function bind(Swift_InputByteStream $is) + { + } + + /** + * Not used. + */ + public function unbind(Swift_InputByteStream $is) + { + } + + /** + * Flush the contents of the stream (empty it) and set the internal pointer + * to the beginning. + */ + public function flushBuffers() + { + $this->_keyCache->clearKey($this->_nsKey, $this->_itemKey); + } + + /** + * Set the nsKey which will be written to. + * @param string $nsKey + */ + public function setNsKey($nsKey) + { + $this->_nsKey = $nsKey; + } + + /** + * Set the itemKey which will be written to. + * @param string $itemKey + */ + public function setItemKey($itemKey) + { + $this->_itemKey = $itemKey; + } + + /** + * Any implementation should be cloneable, allowing the clone to access a + * separate $nsKey and $itemKey. + */ + public function __clone() + { + $this->_writeThrough = null; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php b/External/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php new file mode 100755 index 0000000..14ae292 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php @@ -0,0 +1,48 @@ +createDependenciesFor('transport.loadbalanced') + ); + + $this->setTransports($transports); + } + + /** + * Create a new LoadBalancedTransport instance. + * @param string $transports + * @return Swift_LoadBalancedTransport + */ + public static function newInstance($transports = array()) + { + return new self($transports); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/MailTransport.php b/External/swiftmailer/lib/classes/Swift/MailTransport.php new file mode 100755 index 0000000..afe29c6 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/MailTransport.php @@ -0,0 +1,48 @@ +createDependenciesFor('transport.mail') + ); + + $this->setExtraParams($extraParams); + } + + /** + * Create a new MailTransport instance. + * @param string $extraParams To be passed to mail() + * @return Swift_MailTransport + */ + public static function newInstance($extraParams = '-f%s') + { + return new self($extraParams); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mailer.php b/External/swiftmailer/lib/classes/Swift/Mailer.php new file mode 100755 index 0000000..c92feb4 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mailer.php @@ -0,0 +1,173 @@ +_transport = $transport; + } + + /** + * Create a new Mailer instance. + * + * @param Swift_Transport $transport + * @return Swift_Mailer + */ + public static function newInstance(Swift_Transport $transport) + { + return new self($transport); + } + + /** + * Send the given Message like it would be sent in a mail client. + * + * All recipients (with the exception of Bcc) will be able to see the other + * recipients this message was sent to. + * + * If you need to send to each recipient without disclosing details about the + * other recipients see {@link batchSend()}. + * + * Recipient/sender data will be retreived from the Message object. + * + * The return value is the number of recipients who were accepted for + * delivery. + * + * @param Swift_Mime_Message $message + * @param array &$failedRecipients, optional + * @return int + * @see batchSend() + */ + public function send(Swift_Mime_Message $message, &$failedRecipients = null) + { + $failedRecipients = (array) $failedRecipients; + + if (!$this->_transport->isStarted()) + { + $this->_transport->start(); + } + + return $this->_transport->send($message, $failedRecipients); + } + + /** + * Send the given Message to all recipients individually. + * + * This differs from {@link send()} in the way headers are presented to the + * recipient. The only recipient in the "To:" field will be the individual + * recipient it was sent to. + * + * If an iterator is provided, recipients will be read from the iterator + * one-by-one, otherwise recipient data will be retreived from the Message + * object. + * + * Sender information is always read from the Message object. + * + * The return value is the number of recipients who were accepted for + * delivery. + * + * @param Swift_Mime_Message $message + * @param array &$failedRecipients, optional + * @param Swift_Mailer_RecipientIterator $it, optional + * @return int + * @see send() + */ + public function batchSend(Swift_Mime_Message $message, + &$failedRecipients = null, + Swift_Mailer_RecipientIterator $it = null) + { + $failedRecipients = (array) $failedRecipients; + + $sent = 0; + $to = $message->getTo(); + $cc = $message->getCc(); + $bcc = $message->getBcc(); + + if (!empty($cc)) + { + $message->setCc(array()); + } + if (!empty($bcc)) + { + $message->setBcc(array()); + } + + //Use an iterator if set + if (isset($it)) + { + while ($it->hasNext()) + { + $message->setTo($it->nextRecipient()); + $sent += $this->send($message, $failedRecipients); + } + } + else + { + foreach ($to as $address => $name) + { + $message->setTo(array($address => $name)); + $sent += $this->send($message, $failedRecipients); + } + } + + $message->setTo($to); + + if (!empty($cc)) + { + $message->setCc($cc); + } + if (!empty($bcc)) + { + $message->setBcc($bcc); + } + + return $sent; + } + + /** + * Register a plugin using a known unique key (e.g. myPlugin). + * + * @param Swift_Events_EventListener $plugin + * @param string $key + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + $this->_transport->registerPlugin($plugin); + } + + /** + * The Transport used to send messages. + * @return Swift_Transport + */ + public function getTransport() + { + return $this->_transport; + } +} diff --git a/External/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php b/External/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php new file mode 100755 index 0000000..65d60c1 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php @@ -0,0 +1,59 @@ +_recipients = $recipients; + } + + /** + * Returns true only if there are more recipients to send to. + * @return boolean + */ + public function hasNext() + { + return !empty($this->_recipients); + } + + /** + * Returns an array where the keys are the addresses of recipients and the + * values are the names. + * e.g. ('foo@bar' => 'Foo') or ('foo@bar' => NULL) + * @return array + */ + public function nextRecipient() + { + return array_splice($this->_recipients, 0, 1); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php b/External/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php new file mode 100755 index 0000000..2713841 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php @@ -0,0 +1,34 @@ + 'Foo') or ('foo@bar' => NULL) + * @return array + */ + public function nextRecipient(); + +} diff --git a/External/swiftmailer/lib/classes/Swift/Message.php b/External/swiftmailer/lib/classes/Swift/Message.php new file mode 100755 index 0000000..e8183ea --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Message.php @@ -0,0 +1,82 @@ +createDependenciesFor('mime.message') + ); + + if (!isset($charset)) + { + $charset = Swift_DependencyContainer::getInstance() + ->lookup('properties.charset'); + } + $this->setSubject($subject); + $this->setBody($body); + $this->setCharset($charset); + if ($contentType) + { + $this->setContentType($contentType); + } + } + + /** + * Create a new Message. + * @param string $subject + * @param string $body + * @param string $contentType + * @param string $charset + * @return Swift_Mime_Message + */ + public static function newInstance($subject = null, $body = null, + $contentType = null, $charset = null) + { + return new self($subject, $body, $contentType, $charset); + } + + /** + * Add a MimePart to this Message. + * @param string|Swift_OutputByteStream $body + * @param string $contentType + * @param string $charset + */ + public function addPart($body, $contentType = null, $charset = null) + { + return $this->attach(Swift_MimePart::newInstance( + $body, $contentType, $charset + )); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mime/Attachment.php b/External/swiftmailer/lib/classes/Swift/Mime/Attachment.php new file mode 100755 index 0000000..25ef68b --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/Attachment.php @@ -0,0 +1,143 @@ +setDisposition('attachment'); + $this->setContentType('application/octet-stream'); + $this->_mimeTypes = $mimeTypes; + } + + /** + * Get the nesting level used for this attachment. + * Always returns {@link LEVEL_MIXED}. + * @return int + */ + public function getNestingLevel() + { + return self::LEVEL_MIXED; + } + + /** + * Get the Content-Disposition of this attachment. + * By default attachments have a disposition of "attachment". + * @return string + */ + public function getDisposition() + { + return $this->_getHeaderFieldModel('Content-Disposition'); + } + + /** + * Set the Content-Disposition of this attachment. + * @param string $disposition + */ + public function setDisposition($disposition) + { + if (!$this->_setHeaderFieldModel('Content-Disposition', $disposition)) + { + $this->getHeaders()->addParameterizedHeader( + 'Content-Disposition', $disposition + ); + } + return $this; + } + + /** + * Get the filename of this attachment when downloaded. + * @return string + */ + public function getFilename() + { + return $this->_getHeaderParameter('Content-Disposition', 'filename'); + } + + /** + * Set the filename of this attachment. + * @param string $filename + */ + public function setFilename($filename) + { + $this->_setHeaderParameter('Content-Disposition', 'filename', $filename); + $this->_setHeaderParameter('Content-Type', 'name', $filename); + return $this; + } + + /** + * Get the file size of this attachment. + * @return int + */ + public function getSize() + { + return $this->_getHeaderParameter('Content-Disposition', 'size'); + } + + /** + * Set the file size of this attachment. + * @param int $size + */ + public function setSize($size) + { + $this->_setHeaderParameter('Content-Disposition', 'size', $size); + return $this; + } + + /** + * Set the file that this attachment is for. + * @param Swift_FileStream $file + * @param string $contentType optional + */ + public function setFile(Swift_FileStream $file, $contentType = null) + { + $this->setFilename(basename($file->getPath())); + $this->setBody($file, $contentType); + if (!isset($contentType)) + { + $extension = strtolower(substr( + $file->getPath(), strrpos($file->getPath(), '.') + 1 + )); + + if (array_key_exists($extension, $this->_mimeTypes)) + { + $this->setContentType($this->_mimeTypes[$extension]); + } + } + return $this; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php b/External/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php new file mode 100755 index 0000000..c26009f --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php @@ -0,0 +1,26 @@ += $maxLineLength || 76 < $maxLineLength) + { + $maxLineLength = 76; + } + + $remainder = 0; + + while (false !== $bytes = $os->read(8190)) + { + $encoded = base64_encode($bytes); + $encodedTransformed = ''; + $thisMaxLineLength = $maxLineLength - $remainder - $firstLineOffset; + + while ($thisMaxLineLength < strlen($encoded)) + { + $encodedTransformed .= substr($encoded, 0, $thisMaxLineLength) . "\r\n"; + $firstLineOffset = 0; + $encoded = substr($encoded, $thisMaxLineLength); + $thisMaxLineLength = $maxLineLength; + $remainder = 0; + } + + if (0 < $remainingLength = strlen($encoded)) + { + $remainder += $remainingLength; + $encodedTransformed .= $encoded; + $encoded = null; + } + + $is->write($encodedTransformed); + } + } + + /** + * Get the name of this encoding scheme. + * Returns the string 'base64'. + * @return string + */ + public function getName() + { + return 'base64'; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php b/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php new file mode 100755 index 0000000..4a725d8 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php @@ -0,0 +1,175 @@ +_name = $name; + $this->_canonical = $canonical; + } + + /** + * Encode a given string to produce an encoded string. + * @param string $string + * @param int $firstLineOffset, ignored + * @param int $maxLineLength - 0 means no wrapping will occur + * @return string + */ + public function encodeString($string, $firstLineOffset = 0, + $maxLineLength = 0) + { + if ($this->_canonical) + { + $string = $this->_canonicalize($string); + } + return $this->_safeWordWrap($string, $maxLineLength, "\r\n"); + } + + /** + * Encode stream $in to stream $out. + * @param Swift_OutputByteStream $in + * @param Swift_InputByteStream $out + * @param int $firstLineOffset, ignored + * @param int $maxLineLength, optional, 0 means no wrapping will occur + */ + public function encodeByteStream( + Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, + $maxLineLength = 0) + { + $leftOver = ''; + while (false !== $bytes = $os->read(8192)) + { + $toencode = $leftOver . $bytes; + if ($this->_canonical) + { + $toencode = $this->_canonicalize($toencode); + } + $wrapped = $this->_safeWordWrap($toencode, $maxLineLength, "\r\n"); + $lastLinePos = strrpos($wrapped, "\r\n"); + $leftOver = substr($wrapped, $lastLinePos); + $wrapped = substr($wrapped, 0, $lastLinePos); + + $is->write($wrapped); + } + if (strlen($leftOver)) + { + $is->write($leftOver); + } + } + + /** + * Get the name of this encoding scheme. + * @return string + */ + public function getName() + { + return $this->_name; + } + + /** + * Not used. + */ + public function charsetChanged($charset) + { + } + + // -- Private methods + + /** + * A safer (but weaker) wordwrap for unicode. + * @param string $string + * @param int $length + * @param string $le + * @return string + * @access private + */ + private function _safeWordwrap($string, $length = 75, $le = "\r\n") + { + if (0 >= $length) + { + return $string; + } + + $originalLines = explode($le, $string); + + $lines = array(); + $lineCount = 0; + + foreach ($originalLines as $originalLine) + { + $lines[] = ''; + $currentLine =& $lines[$lineCount++]; + + //$chunks = preg_split('/(?<=[\ \t,\.!\?\-&\+\/])/', $originalLine); + $chunks = preg_split('/(?<=\s)/', $originalLine); + + foreach ($chunks as $chunk) + { + if (0 != strlen($currentLine) + && strlen($currentLine . $chunk) > $length) + { + $lines[] = ''; + $currentLine =& $lines[$lineCount++]; + } + $currentLine .= $chunk; + } + } + + return implode("\r\n", $lines); + } + + /** + * Canonicalize string input (fix CRLF). + * @param string $string + * @return string + * @access private + */ + private function _canonicalize($string) + { + return str_replace( + array("\r\n", "\r", "\n"), + array("\n", "\n", "\r\n"), + $string + ); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php b/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php new file mode 100755 index 0000000..3beeb63 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php @@ -0,0 +1,117 @@ + 76 || $maxLineLength <= 0) + { + $maxLineLength = 76; + } + + $thisLineLength = $maxLineLength - $firstLineOffset; + + $this->_charStream->flushContents(); + $this->_charStream->importByteStream($os); + + $currentLine = ''; + $prepend = ''; + $size=$lineLen=0; + + while (false !== $bytes = $this->_nextSequence()) + { + //If we're filtering the input + if (isset($this->_filter)) + { + //If we can't filter because we need more bytes + while ($this->_filter->shouldBuffer($bytes)) + { + //Then collect bytes into the buffer + if (false === $moreBytes = $this->_nextSequence(1)) + { + break; + } + + foreach ($moreBytes as $b) + { + $bytes[] = $b; + } + } + //And filter them + $bytes = $this->_filter->filter($bytes); + } + + $enc = $this->_encodeByteSequence($bytes, $size); + if ($currentLine && $lineLen+$size >= $thisLineLength) + { + $is->write($prepend . $this->_standardize($currentLine)); + $currentLine = ''; + $prepend = "=\r\n"; + $thisLineLength = $maxLineLength; + $lineLen=0; + } + $lineLen+=$size; + $currentLine .= $enc; + } + if (strlen($currentLine)) + { + $is->write($prepend . $this->_standardize($currentLine)); + } + } + + /** + * Get the name of this encoding scheme. + * Returns the string 'quoted-printable'. + * @return string + */ + public function getName() + { + return 'quoted-printable'; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php b/External/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php new file mode 100755 index 0000000..983b78d --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php @@ -0,0 +1,51 @@ +setDisposition('inline'); + $this->setId($this->getId()); + } + + /** + * Get the nesting level of this EmbeddedFile. + * Returns {@link LEVEL_RELATED}. + * @return int + */ + public function getNestingLevel() + { + return self::LEVEL_RELATED; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php b/External/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php new file mode 100755 index 0000000..50472db --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php @@ -0,0 +1,28 @@ +clearCachedValueIf($charset != $this->_charset); + $this->_charset = $charset; + if (isset($this->_encoder)) + { + $this->_encoder->charsetChanged($charset); + } + } + + /** + * Get the character set used in this Header. + * @return string + */ + public function getCharset() + { + return $this->_charset; + } + + /** + * Set the language used in this Header. + * For example, for US English, 'en-us'. + * This can be unspecified. + * @param string $lang + */ + public function setLanguage($lang) + { + $this->clearCachedValueIf($this->_lang != $lang); + $this->_lang = $lang; + } + + /** + * Get the language used in this Header. + * @return string + */ + public function getLanguage() + { + return $this->_lang; + } + + /** + * Set the encoder used for encoding the header. + * @param Swift_Mime_HeaderEncoder $encoder + */ + public function setEncoder(Swift_Mime_HeaderEncoder $encoder) + { + $this->_encoder = $encoder; + $this->setCachedValue(null); + } + + /** + * Get the encoder used for encoding this Header. + * @return Swift_Mime_HeaderEncoder + */ + public function getEncoder() + { + return $this->_encoder; + } + + /** + * Get the name of this header (e.g. charset). + * @return string + */ + public function getFieldName() + { + return $this->_name; + } + + /** + * Set the maximum length of lines in the header (excluding EOL). + * @param int $lineLength + */ + public function setMaxLineLength($lineLength) + { + $this->clearCachedValueIf($this->_lineLength != $lineLength); + $this->_lineLength = $lineLength; + } + + /** + * Get the maximum permitted length of lines in this Header. + * @return int + */ + public function getMaxLineLength() + { + return $this->_lineLength; + } + + /** + * Get this Header rendered as a RFC 2822 compliant string. + * @return string + * @throws Swift_RfcComplianceException + */ + public function toString() + { + return $this->_tokensToString($this->toTokens()); + } + + /** + * Returns a string representation of this object. + * + * @return string + * + * @see toString() + */ + public function __toString() + { + return $this->toString(); + } + + // -- Points of extension + + /** + * Set the name of this Header field. + * @param string $name + * @access protected + */ + protected function setFieldName($name) + { + $this->_name = $name; + } + + /** + * Initialize some RFC 2822 (and friends) ABNF grammar definitions. + * @access protected + */ + protected function initializeGrammar() + { + $this->_specials = array( + '(', ')', '<', '>', '[', ']', + ':', ';', '@', ',', '.', '"' + ); + + /*** Refer to RFC 2822 for ABNF grammar ***/ + + //All basic building blocks + $this->_grammar['NO-WS-CTL'] = '[\x01-\x08\x0B\x0C\x0E-\x19\x7F]'; + $this->_grammar['WSP'] = '[ \t]'; + $this->_grammar['CRLF'] = '(?:\r\n)'; + $this->_grammar['FWS'] = '(?:(?:' . $this->_grammar['WSP'] . '*' . + $this->_grammar['CRLF'] . ')?' . $this->_grammar['WSP'] . ')'; + $this->_grammar['text'] = '[\x00-\x08\x0B\x0C\x0E-\x7F]'; + $this->_grammar['quoted-pair'] = '(?:\\\\' . $this->_grammar['text'] . ')'; + $this->_grammar['ctext'] = '(?:' . $this->_grammar['NO-WS-CTL'] . + '|[\x21-\x27\x2A-\x5B\x5D-\x7E])'; + //Uses recursive PCRE (?1) -- could be a weak point?? + $this->_grammar['ccontent'] = '(?:' . $this->_grammar['ctext'] . '|' . + $this->_grammar['quoted-pair'] . '|(?1))'; + $this->_grammar['comment'] = '(\((?:' . $this->_grammar['FWS'] . '|' . + $this->_grammar['ccontent']. ')*' . $this->_grammar['FWS'] . '?\))'; + $this->_grammar['CFWS'] = '(?:(?:' . $this->_grammar['FWS'] . '?' . + $this->_grammar['comment'] . ')*(?:(?:' . $this->_grammar['FWS'] . '?' . + $this->_grammar['comment'] . ')|' . $this->_grammar['FWS'] . '))'; + $this->_grammar['qtext'] = '(?:' . $this->_grammar['NO-WS-CTL'] . + '|[\x21\x23-\x5B\x5D-\x7E])'; + $this->_grammar['qcontent'] = '(?:' . $this->_grammar['qtext'] . '|' . + $this->_grammar['quoted-pair'] . ')'; + $this->_grammar['quoted-string'] = '(?:' . $this->_grammar['CFWS'] . '?"' . + '(' . $this->_grammar['FWS'] . '?' . $this->_grammar['qcontent'] . ')*' . + $this->_grammar['FWS'] . '?"' . $this->_grammar['CFWS'] . '?)'; + $this->_grammar['atext'] = '[a-zA-Z0-9!#\$%&\'\*\+\-\/=\?\^_`\{\}\|~]'; + $this->_grammar['atom'] = '(?:' . $this->_grammar['CFWS'] . '?' . + $this->_grammar['atext'] . '+' . $this->_grammar['CFWS'] . '?)'; + $this->_grammar['dot-atom-text'] = '(?:' . $this->_grammar['atext'] . '+' . + '(\.' . $this->_grammar['atext'] . '+)*)'; + $this->_grammar['dot-atom'] = '(?:' . $this->_grammar['CFWS'] . '?' . + $this->_grammar['dot-atom-text'] . '+' . $this->_grammar['CFWS'] . '?)'; + $this->_grammar['word'] = '(?:' . $this->_grammar['atom'] . '|' . + $this->_grammar['quoted-string'] . ')'; + $this->_grammar['phrase'] = '(?:' . $this->_grammar['word'] . '+?)'; + $this->_grammar['no-fold-quote'] = '(?:"(?:' . $this->_grammar['qtext'] . + '|' . $this->_grammar['quoted-pair'] . ')*")'; + $this->_grammar['dtext'] = '(?:' . $this->_grammar['NO-WS-CTL'] . + '|[\x21-\x5A\x5E-\x7E])'; + $this->_grammar['no-fold-literal'] = '(?:\[(?:' . $this->_grammar['dtext'] . + '|' . $this->_grammar['quoted-pair'] . ')*\])'; + + //Message IDs + $this->_grammar['id-left'] = '(?:' . $this->_grammar['dot-atom-text'] . '|' . + $this->_grammar['no-fold-quote'] . ')'; + $this->_grammar['id-right'] = '(?:' . $this->_grammar['dot-atom-text'] . '|' . + $this->_grammar['no-fold-literal'] . ')'; + + //Addresses, mailboxes and paths + $this->_grammar['local-part'] = '(?:' . $this->_grammar['dot-atom'] . '|' . + $this->_grammar['quoted-string'] . ')'; + $this->_grammar['dcontent'] = '(?:' . $this->_grammar['dtext'] . '|' . + $this->_grammar['quoted-pair'] . ')'; + $this->_grammar['domain-literal'] = '(?:' . $this->_grammar['CFWS'] . '?\[(' . + $this->_grammar['FWS'] . '?' . $this->_grammar['dcontent'] . ')*?' . + $this->_grammar['FWS'] . '?\]' . $this->_grammar['CFWS'] . '?)'; + $this->_grammar['domain'] = '(?:' . $this->_grammar['dot-atom'] . '|' . + $this->_grammar['domain-literal'] . ')'; + $this->_grammar['addr-spec'] = '(?:' . $this->_grammar['local-part'] . '@' . + $this->_grammar['domain'] . ')'; + } + + /** + * Get the grammar defined for $name token. + * @param string $name execatly as written in the RFC + * @return string + */ + protected function getGrammar($name) + { + if (array_key_exists($name, $this->_grammar)) + { + return $this->_grammar[$name]; + } + else + { + throw new Swift_RfcComplianceException( + "No such grammar '" . $name . "' defined." + ); + } + } + + /** + * Escape special characters in a string (convert to quoted-pairs). + * @param string $token + * @param string[] $include additonal chars to escape + * @param string[] $exclude chars from escaping + * @return string + */ + protected function escapeSpecials($token, $include = array(), + $exclude = array()) + { + foreach ( + array_merge(array('\\'), array_diff($this->_specials, $exclude), $include) as $char) + { + $token = str_replace($char, '\\' . $char, $token); + } + return $token; + } + + /** + * Produces a compliant, formatted RFC 2822 'phrase' based on the string given. + * @param Swift_Mime_Header $header + * @param string $string as displayed + * @param string $charset of the text + * @param Swift_Mime_HeaderEncoder $encoder + * @param boolean $shorten the first line to make remove for header name + * @return string + */ + protected function createPhrase(Swift_Mime_Header $header, $string, $charset, + Swift_Mime_HeaderEncoder $encoder = null, $shorten = false) + { + //Treat token as exactly what was given + $phraseStr = $string; + //If it's not valid + if (!preg_match('/^' . $this->_grammar['phrase'] . '$/D', $phraseStr)) + { + // .. but it is just ascii text, try escaping some characters + // and make it a quoted-string + if (preg_match('/^' . $this->_grammar['text'] . '*$/D', $phraseStr)) + { + $phraseStr = $this->escapeSpecials( + $phraseStr, array('"'), $this->_specials + ); + $phraseStr = '"' . $phraseStr . '"'; + } + else // ... otherwise it needs encoding + { + //Determine space remaining on line if first line + if ($shorten) + { + $usedLength = strlen($header->getFieldName() . ': '); + } + else + { + $usedLength = 0; + } + $phraseStr = $this->encodeWords($header, $string, $usedLength); + } + } + + return $phraseStr; + } + + /** + * Encode needed word tokens within a string of input. + * @param string $input + * @param string $usedLength, optional + * @return string + */ + protected function encodeWords(Swift_Mime_Header $header, $input, + $usedLength = -1) + { + $value = ''; + + $tokens = $this->getEncodableWordTokens($input); + + foreach ($tokens as $token) + { + //See RFC 2822, Sect 2.2 (really 2.2 ??) + if ($this->tokenNeedsEncoding($token)) + { + //Don't encode starting WSP + $firstChar = substr($token, 0, 1); + switch($firstChar) + { + case ' ': + case "\t": + $value .= $firstChar; + $token = substr($token, 1); + } + + if (-1 == $usedLength) + { + $usedLength = strlen($header->getFieldName() . ': ') + strlen($value); + } + $value .= $this->getTokenAsEncodedWord($token, $usedLength); + + $header->setMaxLineLength(76); //Forefully override + } + else + { + $value .= $token; + } + } + + return $value; + } + + /** + * Test if a token needs to be encoded or not. + * @param string $token + * @return boolean + */ + protected function tokenNeedsEncoding($token) + { + return preg_match('~[\x00-\x08\x10-\x19\x7F-\xFF\r\n]~', $token); + } + + /** + * Splits a string into tokens in blocks of words which can be encoded quickly. + * @param string $string + * @return string[] + */ + protected function getEncodableWordTokens($string) + { + $tokens = array(); + + $encodedToken = ''; + //Split at all whitespace boundaries + foreach (preg_split('~(?=[\t ])~', $string) as $token) + { + if ($this->tokenNeedsEncoding($token)) + { + $encodedToken .= $token; + } + else + { + if (strlen($encodedToken) > 0) + { + $tokens[] = $encodedToken; + $encodedToken = ''; + } + $tokens[] = $token; + } + } + if (strlen($encodedToken)) + { + $tokens[] = $encodedToken; + } + + return $tokens; + } + + /** + * Get a token as an encoded word for safe insertion into headers. + * @param string $token to encode + * @param int $firstLineOffset, optional + * @return string + */ + protected function getTokenAsEncodedWord($token, $firstLineOffset = 0) + { + //Adjust $firstLineOffset to account for space needed for syntax + $charsetDecl = $this->_charset; + if (isset($this->_lang)) + { + $charsetDecl .= '*' . $this->_lang; + } + $encodingWrapperLength = strlen( + '=?' . $charsetDecl . '?' . $this->_encoder->getName() . '??=' + ); + + if ($firstLineOffset >= 75) //Does this logic need to be here? + { + $firstLineOffset = 0; + } + + $encodedTextLines = explode("\r\n", + $this->_encoder->encodeString( + $token, $firstLineOffset, 75 - $encodingWrapperLength + ) + ); + + foreach ($encodedTextLines as $lineNum => $line) + { + $encodedTextLines[$lineNum] = '=?' . $charsetDecl . + '?' . $this->_encoder->getName() . + '?' . $line . '?='; + } + + return implode("\r\n ", $encodedTextLines); + } + + /** + * Generates tokens from the given string which include CRLF as individual tokens. + * @param string $token + * @return string[] + * @access protected + */ + protected function generateTokenLines($token) + { + return preg_split('~(\r\n)~', $token, -1, PREG_SPLIT_DELIM_CAPTURE); + } + + /** + * Set a value into the cache. + * @param string $value + * @access protected + */ + protected function setCachedValue($value) + { + $this->_cachedValue = $value; + } + + /** + * Get the value in the cache. + * @return string + * @access protected + */ + protected function getCachedValue() + { + return $this->_cachedValue; + } + + /** + * Clear the cached value if $condition is met. + * @param boolean $condition + * @access protected + */ + protected function clearCachedValueIf($condition) + { + if ($condition) + { + $this->setCachedValue(null); + } + } + + // -- Private methods + + /** + * Generate a list of all tokens in the final header. + * @param string $string input, optional + * @return string[] + * @access private + */ + protected function toTokens($string = null) + { + if (is_null($string)) + { + $string = $this->getFieldBody(); + } + + $tokens = array(); + + //Generate atoms; split at all invisible boundaries followed by WSP + foreach (preg_split('~(?=[ \t])~', $string) as $token) + { + $tokens = array_merge($tokens, $this->generateTokenLines($token)); + } + + return $tokens; + } + + /** + * Takes an array of tokens which appear in the header and turns them into + * an RFC 2822 compliant string, adding FWSP where needed. + * @param string[] $tokens + * @return string + * @access private + */ + private function _tokensToString(array $tokens) + { + $lineCount = 0; + $headerLines = array(); + $headerLines[] = $this->_name . ': '; + $currentLine =& $headerLines[$lineCount++]; + + //Build all tokens back into compliant header + foreach ($tokens as $i => $token) + { + //Line longer than specified maximum or token was just a new line + if (("\r\n" == $token) || + ($i > 0 && strlen($currentLine . $token) > $this->_lineLength) + && 0 < strlen($currentLine)) + { + $headerLines[] = ''; + $currentLine =& $headerLines[$lineCount++]; + } + + //Append token to the line + if ("\r\n" != $token) + { + $currentLine .= $token; + } + } + + //Implode with FWS (RFC 2822, 2.2.3) + return implode("\r\n", $headerLines) . "\r\n"; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php b/External/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php new file mode 100755 index 0000000..598c0c5 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php @@ -0,0 +1,118 @@ + + * + * + * @param string $name of Header + */ + public function __construct($name) + { + $this->setFieldName($name); + } + + /** + * Get the type of Header that this instance represents. + * @return int + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + */ + public function getFieldType() + { + return self::TYPE_DATE; + } + + /** + * Set the model for the field body. + * This method takes a UNIX timestamp. + * @param int $model + */ + public function setFieldBodyModel($model) + { + $this->setTimestamp($model); + } + + /** + * Get the model for the field body. + * This method returns a UNIX timestamp. + * @return mixed + */ + public function getFieldBodyModel() + { + return $this->getTimestamp(); + } + + /** + * Get the UNIX timestamp of the Date in this Header. + * @return int + */ + public function getTimestamp() + { + return $this->_timestamp; + } + + /** + * Set the UNIX timestamp of the Date in this Header. + * @param int $timestamp + */ + public function setTimestamp($timestamp) + { + if (!is_null($timestamp)) + { + $timestamp = (int) $timestamp; + } + $this->clearCachedValueIf($this->_timestamp != $timestamp); + $this->_timestamp = $timestamp; + } + + /** + * Get the string value of the body in this Header. + * This is not necessarily RFC 2822 compliant since folding white space will + * not be added at this stage (see {@link toString()} for that). + * @return string + * @see toString() + */ + public function getFieldBody() + { + if (!$this->getCachedValue()) + { + if (isset($this->_timestamp)) + { + $this->setCachedValue(date('r', $this->_timestamp)); + } + } + return $this->getCachedValue(); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php b/External/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php new file mode 100755 index 0000000..55ff737 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php @@ -0,0 +1,161 @@ +setFieldName($name); + $this->initializeGrammar(); + } + + /** + * Get the type of Header that this instance represents. + * @return int + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + */ + public function getFieldType() + { + return self::TYPE_ID; + } + + /** + * Set the model for the field body. + * This method takes a string ID, or an array of IDs + * @param mixed $model + * @throws Swift_RfcComplianceException + */ + public function setFieldBodyModel($model) + { + $this->setId($model); + } + + /** + * Get the model for the field body. + * This method returns an array of IDs + * @return array + */ + public function getFieldBodyModel() + { + return $this->getIds(); + } + + /** + * Set the ID used in the value of this header. + * @param string $id + * @throws Swift_RfcComplianceException + */ + public function setId($id) + { + return $this->setIds(array($id)); + } + + /** + * Get the ID used in the value of this Header. + * If multiple IDs are set only the first is returned. + * @return string + */ + public function getId() + { + if (count($this->_ids) > 0) + { + return $this->_ids[0]; + } + } + + /** + * Set a collection of IDs to use in the value of this Header. + * @param string[] $ids + * @throws Swift_RfcComplianceException + */ + public function setIds(array $ids) + { + $actualIds = array(); + + foreach ($ids as $k => $id) + { + if (preg_match( + '/^' . $this->getGrammar('id-left') . '@' . + $this->getGrammar('id-right') . '$/D', + $id + )) + { + $actualIds[] = $id; + } + else + { + throw new Swift_RfcComplianceException( + 'Invalid ID given <' . $id . '>' + ); + } + } + + $this->clearCachedValueIf($this->_ids != $actualIds); + $this->_ids = $actualIds; + } + + /** + * Get the list of IDs used in this Header. + * @return string[] + */ + public function getIds() + { + return $this->_ids; + } + + /** + * Get the string value of the body in this Header. + * This is not necessarily RFC 2822 compliant since folding white space will + * not be added at this stage (see {@link toString()} for that). + * @return string + * @see toString() + * @throws Swift_RfcComplianceException + */ + public function getFieldBody() + { + if (!$this->getCachedValue()) + { + $angleAddrs = array(); + + foreach ($this->_ids as $id) + { + $angleAddrs[] = '<' . $id . '>'; + } + + $this->setCachedValue(implode(' ', $angleAddrs)); + } + return $this->getCachedValue(); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php b/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php new file mode 100755 index 0000000..77d3bba --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php @@ -0,0 +1,316 @@ +setFieldName($name); + $this->setEncoder($encoder); + $this->initializeGrammar(); + } + + /** + * Get the type of Header that this instance represents. + * @return int + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + */ + public function getFieldType() + { + return self::TYPE_MAILBOX; + } + + /** + * Set the model for the field body. + * This method takes a string, or an array of addresses. + * @param mixed $model + * @throws Swift_RfcComplianceException + */ + public function setFieldBodyModel($model) + { + $this->setNameAddresses($model); + } + + /** + * Get the model for the field body. + * This method returns an associative array like {@link getNameAddresses()} + * @return array + * @throws Swift_RfcComplianceException + */ + public function getFieldBodyModel() + { + return $this->getNameAddresses(); + } + + /** + * Set a list of mailboxes to be shown in this Header. + * The mailboxes can be a simple array of addresses, or an array of + * key=>value pairs where (email => personalName). + * Example: + * + * setNameAddresses(array( + * 'chris@swiftmailer.org' => 'Chris Corbyn', + * 'mark@swiftmailer.org' //No associated personal name + * )); + * ?> + * + * @param string|string[] $mailboxes + * @throws Swift_RfcComplianceException + * @see __construct() + * @see setAddresses() + * @see setValue() + */ + public function setNameAddresses($mailboxes) + { + $this->_mailboxes = $this->normalizeMailboxes((array) $mailboxes); + $this->setCachedValue(null); //Clear any cached value + } + + /** + * Get the full mailbox list of this Header as an array of valid RFC 2822 strings. + * Example: + * + * 'Chris Corbyn', + * 'mark@swiftmailer.org' => 'Mark Corbyn') + * ); + * print_r($header->getNameAddressStrings()); + * // array ( + * // 0 => Chris Corbyn , + * // 1 => Mark Corbyn + * // ) + * ?> + * + * @return string[] + * @throws Swift_RfcComplianceException + * @see getNameAddresses() + * @see toString() + */ + public function getNameAddressStrings() + { + return $this->_createNameAddressStrings($this->getNameAddresses()); + } + + /** + * Get all mailboxes in this Header as key=>value pairs. + * The key is the address and the value is the name (or null if none set). + * Example: + * + * 'Chris Corbyn', + * 'mark@swiftmailer.org' => 'Mark Corbyn') + * ); + * print_r($header->getNameAddresses()); + * // array ( + * // chris@swiftmailer.org => Chris Corbyn, + * // mark@swiftmailer.org => Mark Corbyn + * // ) + * ?> + * + * @return string[] + * @see getAddresses() + * @see getNameAddressStrings() + */ + public function getNameAddresses() + { + return $this->_mailboxes; + } + + /** + * Makes this Header represent a list of plain email addresses with no names. + * Example: + * + * setAddresses( + * array('one@domain.tld', 'two@domain.tld', 'three@domain.tld') + * ); + * ?> + * + * @param string[] $addresses + * @throws Swift_RfcComplianceException + * @see setNameAddresses() + * @see setValue() + */ + public function setAddresses($addresses) + { + return $this->setNameAddresses(array_values((array) $addresses)); + } + + /** + * Get all email addresses in this Header. + * @return string[] + * @see getNameAddresses() + */ + public function getAddresses() + { + return array_keys($this->_mailboxes); + } + + /** + * Remove one or more addresses from this Header. + * @param string|string[] $addresses + */ + public function removeAddresses($addresses) + { + $this->setCachedValue(null); + foreach ((array) $addresses as $address) + { + unset($this->_mailboxes[$address]); + } + } + + /** + * Get the string value of the body in this Header. + * This is not necessarily RFC 2822 compliant since folding white space will + * not be added at this stage (see {@link toString()} for that). + * @return string + * @throws Swift_RfcComplianceException + * @see toString() + */ + public function getFieldBody() + { + //Compute the string value of the header only if needed + if (is_null($this->getCachedValue())) + { + $this->setCachedValue($this->createMailboxListString($this->_mailboxes)); + } + return $this->getCachedValue(); + } + + // -- Points of extension + + /** + * Normalizes a user-input list of mailboxes into consistent key=>value pairs. + * @param string[] $mailboxes + * @return string[] + * @access protected + */ + protected function normalizeMailboxes(array $mailboxes) + { + $actualMailboxes = array(); + + foreach ($mailboxes as $key => $value) + { + if (is_string($key)) //key is email addr + { + $address = $key; + $name = $value; + } + else + { + $address = $value; + $name = null; + } + $this->_assertValidAddress($address); + $actualMailboxes[$address] = $name; + } + + return $actualMailboxes; + } + + /** + * Produces a compliant, formatted display-name based on the string given. + * @param string $displayName as displayed + * @param boolean $shorten the first line to make remove for header name + * @return string + * @access protected + */ + protected function createDisplayNameString($displayName, $shorten = false) + { + return $this->createPhrase($this, $displayName, + $this->getCharset(), $this->getEncoder(), $shorten + ); + } + + /** + * Creates a string form of all the mailboxes in the passed array. + * @param string[] $mailboxes + * @return string + * @throws Swift_RfcComplianceException + * @access protected + */ + protected function createMailboxListString(array $mailboxes) + { + return implode(', ', $this->_createNameAddressStrings($mailboxes)); + } + + // -- Private methods + + /** + * Return an array of strings conforming the the name-addr spec of RFC 2822. + * @param string[] $mailboxes + * @return string[] + * @access private + */ + private function _createNameAddressStrings(array $mailboxes) + { + $strings = array(); + + foreach ($mailboxes as $email => $name) + { + $mailboxStr = $email; + if (!is_null($name)) + { + $nameStr = $this->createDisplayNameString($name, empty($strings)); + $mailboxStr = $nameStr . ' <' . $mailboxStr . '>'; + } + $strings[] = $mailboxStr; + } + + return $strings; + } + + /** + * Throws an Exception if the address passed does not comply with RFC 2822. + * @param string $address + * @throws Exception If invalid. + * @access protected + */ + private function _assertValidAddress($address) + { + if (!preg_match('/^' . $this->getGrammar('addr-spec') . '$/D', + $address)) + { + throw new Swift_RfcComplianceException( + 'Address in mailbox given [' . $address . + '] does not comply with RFC 2822, 3.6.2.' + ); + } + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php b/External/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php new file mode 100755 index 0000000..974b44e --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php @@ -0,0 +1,274 @@ +setFieldName($name); + $this->setEncoder($encoder); + $this->_paramEncoder = $paramEncoder; + $this->initializeGrammar(); + $this->_tokenRe = '(?:[\x21\x23-\x27\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E]+)'; + } + + /** + * Get the type of Header that this instance represents. + * @return int + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + */ + public function getFieldType() + { + return self::TYPE_PARAMETERIZED; + } + + /** + * Set the character set used in this Header. + * @param string $charset + */ + public function setCharset($charset) + { + parent::setCharset($charset); + if (isset($this->_paramEncoder)) + { + $this->_paramEncoder->charsetChanged($charset); + } + } + + /** + * Set the value of $parameter. + * @param string $parameter + * @param string $value + */ + public function setParameter($parameter, $value) + { + $this->setParameters(array_merge($this->getParameters(), array($parameter => $value))); + } + + /** + * Get the value of $parameter. + * @return string + */ + public function getParameter($parameter) + { + $params = $this->getParameters(); + return array_key_exists($parameter, $params) + ? $params[$parameter] + : null; + } + + /** + * Set an associative array of parameter names mapped to values. + * @param string[] + */ + public function setParameters(array $parameters) + { + $this->clearCachedValueIf($this->_params != $parameters); + $this->_params = $parameters; + } + + /** + * Returns an associative array of parameter names mapped to values. + * @return string[] + */ + public function getParameters() + { + return $this->_params; + } + + /** + * Get the value of this header prepared for rendering. + * @return string + */ + public function getFieldBody() //TODO: Check caching here + { + $body = parent::getFieldBody(); + foreach ($this->_params as $name => $value) + { + if (!is_null($value)) + { + //Add the parameter + $body .= '; ' . $this->_createParameter($name, $value); + } + } + return $body; + } + + // -- Protected methods + + /** + * Generate a list of all tokens in the final header. + * This doesn't need to be overridden in theory, but it is for implementation + * reasons to prevent potential breakage of attributes. + * @return string[] + * @access protected + */ + protected function toTokens($string = null) + { + $tokens = parent::toTokens(parent::getFieldBody()); + + //Try creating any parameters + foreach ($this->_params as $name => $value) + { + if (!is_null($value)) + { + //Add the semi-colon separator + $tokens[count($tokens)-1] .= ';'; + $tokens = array_merge($tokens, $this->generateTokenLines( + ' ' . $this->_createParameter($name, $value) + )); + } + } + + return $tokens; + } + + // -- Private methods + + /** + * Render a RFC 2047 compliant header parameter from the $name and $value. + * @param string $name + * @param string $value + * @return string + * @access private + */ + private function _createParameter($name, $value) + { + $origValue = $value; + + $encoded = false; + //Allow room for parameter name, indices, "=" and DQUOTEs + $maxValueLength = $this->getMaxLineLength() - strlen($name . '=*N"";') - 1; + $firstLineOffset = 0; + + //If it's not already a valid parameter value... + if (!preg_match('/^' . $this->_tokenRe . '$/D', $value)) + { + //TODO: text, or something else?? + //... and it's not ascii + if (!preg_match('/^' . $this->getGrammar('text') . '*$/D', $value)) + { + $encoded = true; + //Allow space for the indices, charset and language + $maxValueLength = $this->getMaxLineLength() - strlen($name . '*N*="";') - 1; + $firstLineOffset = strlen( + $this->getCharset() . "'" . $this->getLanguage() . "'" + ); + } + } + + //Encode if we need to + if ($encoded || strlen($value) > $maxValueLength) + { + if (isset($this->_paramEncoder)) + { + $value = $this->_paramEncoder->encodeString( + $origValue, $firstLineOffset, $maxValueLength + ); + } + else //We have to go against RFC 2183/2231 in some areas for interoperability + { + $value = $this->getTokenAsEncodedWord($origValue); + $encoded = false; + } + } + + $valueLines = isset($this->_paramEncoder) ? explode("\r\n", $value) : array($value); + + //Need to add indices + if (count($valueLines) > 1) + { + $paramLines = array(); + foreach ($valueLines as $i => $line) + { + $paramLines[] = $name . '*' . $i . + $this->_getEndOfParameterValue($line, $encoded, $i == 0); + } + return implode(";\r\n ", $paramLines); + } + else + { + return $name . $this->_getEndOfParameterValue( + $valueLines[0], $encoded, true + ); + } + } + + /** + * Returns the parameter value from the "=" and beyond. + * @param string $value to append + * @param boolean $encoded + * @param boolean $firstLine + * @return string + * @access private + */ + private function _getEndOfParameterValue($value, $encoded = false, $firstLine = false) + { + if (!preg_match('/^' . $this->_tokenRe . '$/D', $value)) + { + $value = '"' . $value . '"'; + } + $prepend = '='; + if ($encoded) + { + $prepend = '*='; + if ($firstLine) + { + $prepend = '*=' . $this->getCharset() . "'" . $this->getLanguage() . + "'"; + } + } + return $prepend . $value; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php b/External/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php new file mode 100755 index 0000000..0a8a100 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php @@ -0,0 +1,126 @@ +setFieldName($name); + $this->initializeGrammar(); + } + + /** + * Get the type of Header that this instance represents. + * @return int + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + */ + public function getFieldType() + { + return self::TYPE_PATH; + } + + /** + * Set the model for the field body. + * This method takes a string for an address. + * @param string $model + * @throws Swift_RfcComplianceException + */ + public function setFieldBodyModel($model) + { + $this->setAddress($model); + } + + /** + * Get the model for the field body. + * This method returns a string email address. + * @return mixed + */ + public function getFieldBodyModel() + { + return $this->getAddress(); + } + + /** + * Set the Address which should appear in this Header. + * @param string $address + * @throws Swift_RfcComplianceException + */ + public function setAddress($address) + { + if (is_null($address)) + { + $this->_address = null; + } + elseif ('' == $address + || preg_match('/^' . $this->getGrammar('addr-spec') . '$/D', $address)) + { + $this->_address = $address; + } + else + { + throw new Swift_RfcComplianceException( + 'Address set in PathHeader does not comply with addr-spec of RFC 2822.' + ); + } + $this->setCachedValue(null); + } + + /** + * Get the address which is used in this Header (if any). + * Null is returned if no address is set. + * @return string + */ + public function getAddress() + { + return $this->_address; + } + + /** + * Get the string value of the body in this Header. + * This is not necessarily RFC 2822 compliant since folding white space will + * not be added at this stage (see {@link toString()} for that). + * @return string + * @see toString() + */ + public function getFieldBody() + { + if (!$this->getCachedValue()) + { + if (isset($this->_address)) + { + $this->setCachedValue('<' . $this->_address . '>'); + } + } + return $this->getCachedValue(); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php b/External/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php new file mode 100755 index 0000000..fdcc21e --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php @@ -0,0 +1,108 @@ +setFieldName($name); + $this->setEncoder($encoder); + } + /** + * Get the type of Header that this instance represents. + * @return int + * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX + * @see TYPE_DATE, TYPE_ID, TYPE_PATH + */ + public function getFieldType() + { + return self::TYPE_TEXT; + } + + /** + * Set the model for the field body. + * This method takes a string for the field value. + * @param string $model + */ + public function setFieldBodyModel($model) + { + $this->setValue($model); + } + + /** + * Get the model for the field body. + * This method returns a string. + * @return string + */ + public function getFieldBodyModel() + { + return $this->getValue(); + } + + /** + * Get the (unencoded) value of this header. + * @return string + */ + public function getValue() + { + return $this->_value; + } + + /** + * Set the (unencoded) value of this header. + * @param string $value + */ + public function setValue($value) + { + $this->clearCachedValueIf($this->_value != $value); + $this->_value = $value; + } + + /** + * Get the value of this header prepared for rendering. + * @return string + */ + public function getFieldBody() + { + if (!$this->getCachedValue()) + { + $this->setCachedValue( + str_replace('\\', '\\\\', $this->encodeWords( + $this, $this->_value, -1, $this->getCharset(), $this->getEncoder() + )) + ); + } + return $this->getCachedValue(); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mime/Message.php b/External/swiftmailer/lib/classes/Swift/Mime/Message.php new file mode 100755 index 0000000..0496c08 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/Message.php @@ -0,0 +1,230 @@ + 'Real Name'). + * + * If the second parameter is provided and the first is a string, then $name + * is associated with the address. + * + * @param mixed $address + * @param string $name optional + */ + public function setSender($address, $name = null); + + /** + * Get the sender address for this message. + * + * This has a higher significance than the From address. + * + * @return string + */ + public function getSender(); + + /** + * Set the From address of this message. + * + * It is permissible for multiple From addresses to be set using an array. + * + * If multiple From addresses are used, you SHOULD set the Sender address and + * according to RFC 2822, MUST set the sender address. + * + * An array can be used if display names are to be provided: i.e. + * array('email@address.com' => 'Real Name'). + * + * If the second parameter is provided and the first is a string, then $name + * is associated with the address. + * + * @param mixed $addresses + * @param string $name optional + */ + public function setFrom($addresses, $name = null); + + /** + * Get the From address(es) of this message. + * + * This method always returns an associative array where the keys are the + * addresses. + * + * @return string[] + */ + public function getFrom(); + + /** + * Set the Reply-To address(es). + * + * Any replies from the receiver will be sent to this address. + * + * It is permissible for multiple reply-to addresses to be set using an array. + * + * This method has the same synopsis as {@link setFrom()} and {@link setTo()}. + * + * If the second parameter is provided and the first is a string, then $name + * is associated with the address. + * + * @param mixed $addresses + * @param string $name optional + */ + public function setReplyTo($addresses, $name = null); + + /** + * Get the Reply-To addresses for this message. + * + * This method always returns an associative array where the keys provide the + * email addresses. + * + * @return string[] + */ + public function getReplyTo(); + + /** + * Set the To address(es). + * + * Recipients set in this field will receive a copy of this message. + * + * This method has the same synopsis as {@link setFrom()} and {@link setCc()}. + * + * If the second parameter is provided and the first is a string, then $name + * is associated with the address. + * + * @param mixed $addresses + * @param string $name optional + */ + public function setTo($addresses, $name = null); + + /** + * Get the To addresses for this message. + * + * This method always returns an associative array, whereby the keys provide + * the actual email addresses. + * + * @return string[] + */ + public function getTo(); + + /** + * Set the Cc address(es). + * + * Recipients set in this field will receive a 'carbon-copy' of this message. + * + * This method has the same synopsis as {@link setFrom()} and {@link setTo()}. + * + * @param mixed $addresses + * @param string $name optional + */ + public function setCc($addresses, $name = null); + + /** + * Get the Cc addresses for this message. + * + * This method always returns an associative array, whereby the keys provide + * the actual email addresses. + * + * @return string[] + */ + public function getCc(); + + /** + * Set the Bcc address(es). + * + * Recipients set in this field will receive a 'blind-carbon-copy' of this + * message. + * + * In other words, they will get the message, but any other recipients of the + * message will have no such knowledge of their receipt of it. + * + * This method has the same synopsis as {@link setFrom()} and {@link setTo()}. + * + * @param mixed $addresses + * @param string $name optional + */ + public function setBcc($addresses, $name = null); + + /** + * Get the Bcc addresses for this message. + * + * This method always returns an associative array, whereby the keys provide + * the actual email addresses. + * + * @return string[] + */ + public function getBcc(); + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php b/External/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php new file mode 100755 index 0000000..2b08009 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php @@ -0,0 +1,108 @@ +setContentType('text/plain'); + if (!is_null($charset)) + { + $this->setCharset($charset); + } + } + + /** + * Set the body of this entity, either as a string, or as an instance of + * {@link Swift_OutputByteStream}. + * + * @param mixed $body + * @param string $contentType optional + * @param string $charset optional + */ + public function setBody($body, $contentType = null, $charset = null) + { + parent::setBody($body, $contentType); + if (isset($charset)) + { + $this->setCharset($charset); + } + return $this; + } + + /** + * Get the character set of this entity. + * + * @return string + */ + public function getCharset() + { + return $this->_getHeaderParameter('Content-Type', 'charset'); + } + + /** + * Set the character set of this entity. + * + * @param string $charset + */ + public function setCharset($charset) + { + $this->_setHeaderParameter('Content-Type', 'charset', $charset); + if ($charset !== $this->_userCharset) + { + $this->_clearCache(); + } + $this->_userCharset = $charset; + parent::charsetChanged($charset); + return $this; + } + + /** + * Get the format of this entity (i.e. flowed or fixed). + * + * @return string + */ + public function getFormat() + { + return $this->_getHeaderParameter('Content-Type', 'format'); + } + + /** + * Set the format of this entity (flowed or fixed). + * + * @param string $format + */ + public function setFormat($format) + { + $this->_setHeaderParameter('Content-Type', 'format', $format); + $this->_userFormat = $format; + return $this; + } + + /** + * Test if delsp is being used for this entity. + * + * @return boolean + */ + public function getDelSp() + { + return ($this->_getHeaderParameter('Content-Type', 'delsp') == 'yes') + ? true + : false; + } + + /** + * Turn delsp on or off for this entity. + * + * @param boolean $delsp + */ + public function setDelSp($delsp = true) + { + $this->_setHeaderParameter('Content-Type', 'delsp', $delsp ? 'yes' : null); + $this->_userDelSp = $delsp; + return $this; + } + + /** + * Get the nesting level of this entity. + * + * @return int + * @see LEVEL_TOP, LEVEL_ALTERNATIVE, LEVEL_MIXED, LEVEL_RELATED + */ + public function getNestingLevel() + { + return $this->_nestingLevel; + } + + /** + * Receive notification that the charset has changed on this document, or a + * parent document. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->setCharset($charset); + } + + // -- Protected methods + + /** Fix the content-type and encoding of this entity */ + protected function _fixHeaders() + { + parent::_fixHeaders(); + if (count($this->getChildren())) + { + $this->_setHeaderParameter('Content-Type', 'charset', null); + $this->_setHeaderParameter('Content-Type', 'format', null); + $this->_setHeaderParameter('Content-Type', 'delsp', null); + } + else + { + $this->setCharset($this->_userCharset); + $this->setFormat($this->_userFormat); + $this->setDelSp($this->_userDelSp); + } + } + + /** Set the nesting level of this entity */ + protected function _setNestingLevel($level) + { + $this->_nestingLevel = $level; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php b/External/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php new file mode 100755 index 0000000..da65ca9 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php @@ -0,0 +1,35 @@ +_encoder = $encoder; + $this->_paramEncoder = $paramEncoder; + $this->_charset = $charset; + } + + /** + * Create a new Mailbox Header with a list of $addresses. + * @param string $name + * @param array|string $addresses + * @return Swift_Mime_Header + */ + public function createMailboxHeader($name, $addresses = null) + { + $header = new Swift_Mime_Headers_MailboxHeader($name, $this->_encoder); + if (isset($addresses)) + { + $header->setFieldBodyModel($addresses); + } + $this->_setHeaderCharset($header); + return $header; + } + + /** + * Create a new Date header using $timestamp (UNIX time). + * @param string $name + * @param int $timestamp + * @return Swift_Mime_Header + */ + public function createDateHeader($name, $timestamp = null) + { + $header = new Swift_Mime_Headers_DateHeader($name); + if (isset($timestamp)) + { + $header->setFieldBodyModel($timestamp); + } + $this->_setHeaderCharset($header); + return $header; + } + + /** + * Create a new basic text header with $name and $value. + * @param string $name + * @param string $value + * @return Swift_Mime_Header + */ + public function createTextHeader($name, $value = null) + { + $header = new Swift_Mime_Headers_UnstructuredHeader($name, $this->_encoder); + if (isset($value)) + { + $header->setFieldBodyModel($value); + } + $this->_setHeaderCharset($header); + return $header; + } + + /** + * Create a new ParameterizedHeader with $name, $value and $params. + * @param string $name + * @param string $value + * @param array $params + * @return Swift_Mime_ParameterizedHeader + */ + public function createParameterizedHeader($name, $value = null, + $params = array()) + { + $header = new Swift_Mime_Headers_ParameterizedHeader($name, + $this->_encoder, (strtolower($name) == 'content-disposition') + ? $this->_paramEncoder + : null + ); + if (isset($value)) + { + $header->setFieldBodyModel($value); + } + foreach ($params as $k => $v) + { + $header->setParameter($k, $v); + } + $this->_setHeaderCharset($header); + return $header; + } + + /** + * Create a new ID header for Message-ID or Content-ID. + * @param string $name + * @param string|array $ids + * @return Swift_Mime_Header + */ + public function createIdHeader($name, $ids = null) + { + $header = new Swift_Mime_Headers_IdentificationHeader($name); + if (isset($ids)) + { + $header->setFieldBodyModel($ids); + } + $this->_setHeaderCharset($header); + return $header; + } + + /** + * Create a new Path header with an address (path) in it. + * @param string $name + * @param string $path + * @return Swift_Mime_Header + */ + public function createPathHeader($name, $path = null) + { + $header = new Swift_Mime_Headers_PathHeader($name); + if (isset($path)) + { + $header->setFieldBodyModel($path); + } + $this->_setHeaderCharset($header); + return $header; + } + + /** + * Notify this observer that the entity's charset has changed. + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->_charset = $charset; + $this->_encoder->charsetChanged($charset); + $this->_paramEncoder->charsetChanged($charset); + } + + // -- Private methods + + /** Apply the charset to the Header */ + private function _setHeaderCharset(Swift_Mime_Header $header) + { + if (isset($this->_charset)) + { + $header->setCharset($this->_charset); + } + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php b/External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php new file mode 100755 index 0000000..eeb0221 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php @@ -0,0 +1,396 @@ +_factory = $factory; + if (isset($charset)) + { + $this->setCharset($charset); + } + } + + /** + * Set the charset used by these headers. + * + * @param string $charset + */ + public function setCharset($charset) + { + $this->_charset = $charset; + $this->_factory->charsetChanged($charset); + $this->_notifyHeadersOfCharset($charset); + } + + /** + * Add a new Mailbox Header with a list of $addresses. + * + * @param string $name + * @param array|string $addresses + */ + public function addMailboxHeader($name, $addresses = null) + { + $this->_storeHeader($name, + $this->_factory->createMailboxHeader($name, $addresses)); + } + + /** + * Add a new Date header using $timestamp (UNIX time). + * + * @param string $name + * @param int $timestamp + */ + public function addDateHeader($name, $timestamp = null) + { + $this->_storeHeader($name, + $this->_factory->createDateHeader($name, $timestamp)); + } + + /** + * Add a new basic text header with $name and $value. + * + * @param string $name + * @param string $value + */ + public function addTextHeader($name, $value = null) + { + $this->_storeHeader($name, + $this->_factory->createTextHeader($name, $value)); + } + + /** + * Add a new ParameterizedHeader with $name, $value and $params. + * + * @param string $name + * @param string $value + * @param array $params + */ + public function addParameterizedHeader($name, $value = null, + $params = array()) + { + $this->_storeHeader($name, + $this->_factory->createParameterizedHeader($name, $value, + $params)); + } + + /** + * Add a new ID header for Message-ID or Content-ID. + * + * @param string $name + * @param string|array $ids + */ + public function addIdHeader($name, $ids = null) + { + $this->_storeHeader($name, $this->_factory->createIdHeader($name, $ids)); + } + + /** + * Add a new Path header with an address (path) in it. + * + * @param string $name + * @param string $path + */ + public function addPathHeader($name, $path = null) + { + $this->_storeHeader($name, $this->_factory->createPathHeader($name, $path)); + } + + /** + * Returns true if at least one header with the given $name exists. + * + * If multiple headers match, the actual one may be specified by $index. + * + * @param string $name + * @param int $index + * + * @return boolean + */ + public function has($name, $index = 0) + { + $lowerName = strtolower($name); + return array_key_exists($lowerName, $this->_headers) + && array_key_exists($index, $this->_headers[$lowerName]); + } + + /** + * Set a header in the HeaderSet. + * + * The header may be a previously fetched header via {@link get()} or it may + * be one that has been created separately. + * + * If $index is specified, the header will be inserted into the set at this + * offset. + * + * @param Swift_Mime_Header $header + * @param int $index + */ + public function set(Swift_Mime_Header $header, $index = 0) + { + $this->_storeHeader($header->getFieldName(), $header, $index); + } + + /** + * Get the header with the given $name. + * + * If multiple headers match, the actual one may be specified by $index. + * Returns NULL if none present. + * + * @param string $name + * @param int $index + * + * @return Swift_Mime_Header + */ + public function get($name, $index = 0) + { + if ($this->has($name, $index)) + { + $lowerName = strtolower($name); + return $this->_headers[$lowerName][$index]; + } + } + + /** + * Get all headers with the given $name. + * + * @param string $name + * + * @return array + */ + public function getAll($name = null) + { + if (!isset($name)) + { + $headers = array(); + foreach ($this->_headers as $collection) + { + $headers = array_merge($headers, $collection); + } + return $headers; + } + + $lowerName = strtolower($name); + if (!array_key_exists($lowerName, $this->_headers)) + { + return array(); + } + return $this->_headers[$lowerName]; + } + + /** + * Remove the header with the given $name if it's set. + * + * If multiple headers match, the actual one may be specified by $index. + * + * @param string $name + * @param int $index + */ + public function remove($name, $index = 0) + { + $lowerName = strtolower($name); + unset($this->_headers[$lowerName][$index]); + } + + /** + * Remove all headers with the given $name. + * + * @param string $name + */ + public function removeAll($name) + { + $lowerName = strtolower($name); + unset($this->_headers[$lowerName]); + } + + /** + * Create a new instance of this HeaderSet. + * + * @return Swift_Mime_HeaderSet + */ + public function newInstance() + { + return new self($this->_factory); + } + + /** + * Define a list of Header names as an array in the correct order. + * + * These Headers will be output in the given order where present. + * + * @param array $sequence + */ + public function defineOrdering(array $sequence) + { + $this->_order = array_flip(array_map('strtolower', $sequence)); + } + + /** + * Set a list of header names which must always be displayed when set. + * + * Usually headers without a field value won't be output unless set here. + * + * @param array $names + */ + public function setAlwaysDisplayed(array $names) + { + $this->_required = array_flip(array_map('strtolower', $names)); + } + + /** + * Notify this observer that the entity's charset has changed. + * + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->setCharset($charset); + } + + /** + * Returns a string with a representation of all headers. + * + * @return string + */ + public function toString() + { + $string = ''; + $headers = $this->_headers; + if ($this->_canSort()) + { + uksort($headers, array($this, '_sortHeaders')); + } + foreach ($headers as $collection) + { + foreach ($collection as $header) + { + if ($this->_isDisplayed($header) || $header->getFieldBody() != '') + { + $string .= $header->toString(); + } + } + } + return $string; + } + + /** + * Returns a string representation of this object. + * + * @return string + * + * @see toString() + */ + public function __toString() + { + return $this->toString(); + } + + // -- Private methods + + /** Save a Header to the internal collection */ + private function _storeHeader($name, Swift_Mime_Header $header, $offset = null) + { + if (!isset($this->_headers[strtolower($name)])) + { + $this->_headers[strtolower($name)] = array(); + } + if (!isset($offset)) + { + $this->_headers[strtolower($name)][] = $header; + } + else + { + $this->_headers[strtolower($name)][$offset] = $header; + } + } + + /** Test if the headers can be sorted */ + private function _canSort() + { + return count($this->_order) > 0; + } + + /** uksort() algorithm for Header ordering */ + private function _sortHeaders($a, $b) + { + $lowerA = strtolower($a); + $lowerB = strtolower($b); + $aPos = array_key_exists($lowerA, $this->_order) + ? $this->_order[$lowerA] + : -1; + $bPos = array_key_exists($lowerB, $this->_order) + ? $this->_order[$lowerB] + : -1; + + if ($aPos == -1) + { + return 1; + } + elseif ($bPos == -1) + { + return -1; + } + + return ($aPos < $bPos) ? -1 : 1; + } + + /** Test if the given Header is always displayed */ + private function _isDisplayed(Swift_Mime_Header $header) + { + return array_key_exists(strtolower($header->getFieldName()), $this->_required); + } + + /** Notify all Headers of the new charset */ + private function _notifyHeadersOfCharset($charset) + { + foreach ($this->_headers as $headerGroup) + { + foreach ($headerGroup as $header) + { + $header->setCharset($charset); + } + } + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php b/External/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php new file mode 100755 index 0000000..bbe1e8f --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php @@ -0,0 +1,609 @@ +getHeaders()->defineOrdering(array( + 'Return-Path', + 'Sender', + 'Message-ID', + 'Date', + 'Subject', + 'From', + 'Reply-To', + 'To', + 'Cc', + 'Bcc', + 'MIME-Version', + 'Content-Type', + 'Content-Transfer-Encoding' + )); + $this->getHeaders()->setAlwaysDisplayed( + array('Date', 'Message-ID', 'From') + ); + $this->getHeaders()->addTextHeader('MIME-Version', '1.0'); + $this->setDate(time()); + $this->setId($this->getId()); + $this->getHeaders()->addMailboxHeader('From'); + } + + /** + * Always returns {@link LEVEL_TOP} for a message instance. + * @return int + */ + public function getNestingLevel() + { + return self::LEVEL_TOP; + } + + /** + * Set the subject of this message. + * @param string $subject + */ + public function setSubject($subject) + { + if (!$this->_setHeaderFieldModel('Subject', $subject)) + { + $this->getHeaders()->addTextHeader('Subject', $subject); + } + return $this; + } + + /** + * Get the subject of this message. + * @return string + */ + public function getSubject() + { + return $this->_getHeaderFieldModel('Subject'); + } + + /** + * Set the date at which this message was created. + * @param int $date + */ + public function setDate($date) + { + if (!$this->_setHeaderFieldModel('Date', $date)) + { + $this->getHeaders()->addDateHeader('Date', $date); + } + return $this; + } + + /** + * Get the date at which this message was created. + * @return int + */ + public function getDate() + { + return $this->_getHeaderFieldModel('Date'); + } + + /** + * Set the return-path (the bounce address) of this message. + * @param string $address + */ + public function setReturnPath($address) + { + if (!$this->_setHeaderFieldModel('Return-Path', $address)) + { + $this->getHeaders()->addPathHeader('Return-Path', $address); + } + return $this; + } + + /** + * Get the return-path (bounce address) of this message. + * @return string + */ + public function getReturnPath() + { + return $this->_getHeaderFieldModel('Return-Path'); + } + + /** + * Set the sender of this message. + * This does not override the From field, but it has a higher significance. + * @param string $sender + * @param string $name optional + */ + public function setSender($address, $name = null) + { + if (!is_array($address) && isset($name)) + { + $address = array($address => $name); + } + + if (!$this->_setHeaderFieldModel('Sender', (array) $address)) + { + $this->getHeaders()->addMailboxHeader('Sender', (array) $address); + } + return $this; + } + + /** + * Get the sender of this message. + * @return string + */ + public function getSender() + { + return $this->_getHeaderFieldModel('Sender'); + } + + /** + * Add a From: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + */ + public function addFrom($address, $name = null) + { + $current = $this->getFrom(); + $current[$address] = $name; + return $this->setFrom($current); + } + + /** + * Set the from address of this message. + * + * You may pass an array of addresses if this message is from multiple people. + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param string $addresses + * @param string $name optional + */ + public function setFrom($addresses, $name = null) + { + if (!is_array($addresses) && isset($name)) + { + $addresses = array($addresses => $name); + } + + if (!$this->_setHeaderFieldModel('From', (array) $addresses)) + { + $this->getHeaders()->addMailboxHeader('From', (array) $addresses); + } + return $this; + } + + /** + * Get the from address of this message. + * + * @return string + */ + public function getFrom() + { + return $this->_getHeaderFieldModel('From'); + } + + /** + * Add a Reply-To: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + */ + public function addReplyTo($address, $name = null) + { + $current = $this->getReplyTo(); + $current[$address] = $name; + return $this->setReplyTo($current); + } + + /** + * Set the reply-to address of this message. + * + * You may pass an array of addresses if replies will go to multiple people. + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param string $addresses + * @param string $name optional + */ + public function setReplyTo($addresses, $name = null) + { + if (!is_array($addresses) && isset($name)) + { + $addresses = array($addresses => $name); + } + + if (!$this->_setHeaderFieldModel('Reply-To', (array) $addresses)) + { + $this->getHeaders()->addMailboxHeader('Reply-To', (array) $addresses); + } + return $this; + } + + /** + * Get the reply-to address of this message. + * + * @return string + */ + public function getReplyTo() + { + return $this->_getHeaderFieldModel('Reply-To'); + } + + /** + * Add a To: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + */ + public function addTo($address, $name = null) + { + $current = $this->getTo(); + $current[$address] = $name; + return $this->setTo($current); + } + + /** + * Set the to addresses of this message. + * + * If multiple recipients will receive the message and array should be used. + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param array $addresses + * @param string $name optional + */ + public function setTo($addresses, $name = null) + { + if (!is_array($addresses) && isset($name)) + { + $addresses = array($addresses => $name); + } + + if (!$this->_setHeaderFieldModel('To', (array) $addresses)) + { + $this->getHeaders()->addMailboxHeader('To', (array) $addresses); + } + return $this; + } + + /** + * Get the To addresses of this message. + * + * @return array + */ + public function getTo() + { + return $this->_getHeaderFieldModel('To'); + } + + /** + * Add a Cc: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + */ + public function addCc($address, $name = null) + { + $current = $this->getCc(); + $current[$address] = $name; + return $this->setCc($current); + } + + /** + * Set the Cc addresses of this message. + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param array $addresses + * @param string $name optional + */ + public function setCc($addresses, $name = null) + { + if (!is_array($addresses) && isset($name)) + { + $addresses = array($addresses => $name); + } + + if (!$this->_setHeaderFieldModel('Cc', (array) $addresses)) + { + $this->getHeaders()->addMailboxHeader('Cc', (array) $addresses); + } + return $this; + } + + /** + * Get the Cc address of this message. + * + * @return array + */ + public function getCc() + { + return $this->_getHeaderFieldModel('Cc'); + } + + /** + * Add a Bcc: address to this message. + * + * If $name is passed this name will be associated with the address. + * + * @param string $address + * @param string $name optional + */ + public function addBcc($address, $name = null) + { + $current = $this->getBcc(); + $current[$address] = $name; + return $this->setBcc($current); + } + + /** + * Set the Bcc addresses of this message. + * + * If $name is passed and the first parameter is a string, this name will be + * associated with the address. + * + * @param array $addresses + * @param string $name optional + */ + public function setBcc($addresses, $name = null) + { + if (!is_array($addresses) && isset($name)) + { + $addresses = array($addresses => $name); + } + + if (!$this->_setHeaderFieldModel('Bcc', (array) $addresses)) + { + $this->getHeaders()->addMailboxHeader('Bcc', (array) $addresses); + } + return $this; + } + + /** + * Get the Bcc addresses of this message. + * + * @return array + */ + public function getBcc() + { + return $this->_getHeaderFieldModel('Bcc'); + } + + /** + * Set the priority of this message. + * The value is an integer where 1 is the highest priority and 5 is the lowest. + * @param int $priority + */ + public function setPriority($priority) + { + $priorityMap = array( + 1 => 'Highest', + 2 => 'High', + 3 => 'Normal', + 4 => 'Low', + 5 => 'Lowest' + ); + $pMapKeys = array_keys($priorityMap); + if ($priority > max($pMapKeys)) + { + $priority = max($pMapKeys); + } + elseif ($priority < min($pMapKeys)) + { + $priority = min($pMapKeys); + } + if (!$this->_setHeaderFieldModel('X-Priority', + sprintf('%d (%s)', $priority, $priorityMap[$priority]))) + { + $this->getHeaders()->addTextHeader('X-Priority', + sprintf('%d (%s)', $priority, $priorityMap[$priority])); + } + return $this; + } + + /** + * Get the priority of this message. + * The returned value is an integer where 1 is the highest priority and 5 + * is the lowest. + * @return int + */ + public function getPriority() + { + list($priority) = sscanf($this->_getHeaderFieldModel('X-Priority'), + '%[1-5]' + ); + return isset($priority) ? $priority : 3; + } + + /** + * Ask for a delivery receipt from the recipient to be sent to $addresses + * @param array $addresses + */ + public function setReadReceiptTo($addresses) + { + if (!$this->_setHeaderFieldModel('Disposition-Notification-To', $addresses)) + { + $this->getHeaders() + ->addMailboxHeader('Disposition-Notification-To', $addresses); + } + return $this; + } + + /** + * Get the addresses to which a read-receipt will be sent. + * @return string + */ + public function getReadReceiptTo() + { + return $this->_getHeaderFieldModel('Disposition-Notification-To'); + } + + /** + * Attach a {@link Swift_Mime_MimeEntity} such as an Attachment or MimePart. + * @param Swift_Mime_MimeEntity $entity + */ + public function attach(Swift_Mime_MimeEntity $entity) + { + $this->setChildren(array_merge($this->getChildren(), array($entity))); + return $this; + } + + /** + * Remove an already attached entity. + * @param Swift_Mime_MimeEntity $entity + */ + public function detach(Swift_Mime_MimeEntity $entity) + { + $newChildren = array(); + foreach ($this->getChildren() as $child) + { + if ($entity !== $child) + { + $newChildren[] = $child; + } + } + $this->setChildren($newChildren); + return $this; + } + + /** + * Attach a {@link Swift_Mime_MimeEntity} and return it's CID source. + * This method should be used when embedding images or other data in a message. + * @param Swift_Mime_MimeEntity $entity + * @return string + */ + public function embed(Swift_Mime_MimeEntity $entity) + { + $this->attach($entity); + return 'cid:' . $entity->getId(); + } + + /** + * Get this message as a complete string. + * @return string + */ + public function toString() + { + if (count($children = $this->getChildren()) > 0 && $this->getBody() != '') + { + $this->setChildren(array_merge(array($this->_becomeMimePart()), $children)); + $string = parent::toString(); + $this->setChildren($children); + } + else + { + $string = parent::toString(); + } + return $string; + } + + /** + * Returns a string representation of this object. + * + * @return string + * + * @see toString() + */ + public function __toString() + { + return $this->toString(); + } + + /** + * Write this message to a {@link Swift_InputByteStream}. + * @param Swift_InputByteStream $is + */ + public function toByteStream(Swift_InputByteStream $is) + { + if (count($children = $this->getChildren()) > 0 && $this->getBody() != '') + { + $this->setChildren(array_merge(array($this->_becomeMimePart()), $children)); + parent::toByteStream($is); + $this->setChildren($children); + } + else + { + parent::toByteStream($is); + } + } + + // -- Protected methods + + /** @see Swift_Mime_SimpleMimeEntity::_getIdField() */ + protected function _getIdField() + { + return 'Message-ID'; + } + + // -- Private methods + + /** Turn the body of this message into a child of itself if needed */ + private function _becomeMimePart() + { + $part = new parent($this->getHeaders()->newInstance(), $this->getEncoder(), + $this->_getCache(), $this->_userCharset + ); + $part->setContentType($this->_userContentType); + $part->setBody($this->getBody()); + $part->setFormat($this->_userFormat); + $part->setDelSp($this->_userDelSp); + $part->_setNestingLevel($this->_getTopNestingLevel()); + return $part; + } + + /** Get the highest nesting level nested inside this message */ + private function _getTopNestingLevel() + { + $highestLevel = $this->getNestingLevel(); + foreach ($this->getChildren() as $child) + { + $childLevel = $child->getNestingLevel(); + if ($highestLevel < $childLevel) + { + $highestLevel = $childLevel; + } + } + return $highestLevel; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php b/External/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php new file mode 100755 index 0000000..1615822 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php @@ -0,0 +1,803 @@ + array(self::LEVEL_TOP, self::LEVEL_MIXED), + 'multipart/alternative' => array(self::LEVEL_MIXED, self::LEVEL_ALTERNATIVE), + 'multipart/related' => array(self::LEVEL_ALTERNATIVE, self::LEVEL_RELATED) + ); + + /** A set of filter rules to define what level an entity should be nested at */ + private $_compoundLevelFilters = array(); + + /** The nesting level of this entity */ + private $_nestingLevel = self::LEVEL_ALTERNATIVE; + + /** A KeyCache instance used during encoding and streaming */ + private $_cache; + + /** Direct descendants of this entity */ + private $_immediateChildren = array(); + + /** All descendants of this entity */ + private $_children = array(); + + /** The maximum line length of the body of this entity */ + private $_maxLineLength = 78; + + /** The order in which alternative mime types should appear */ + private $_alternativePartOrder = array( + 'text/plain' => 1, + 'text/html' => 2, + 'multipart/related' => 3 + ); + + /** The CID of this entity */ + private $_id; + + /** The key used for accessing the cache */ + private $_cacheKey; + + protected $_userContentType; + + /** + * Create a new SimpleMimeEntity with $headers, $encoder and $cache. + * @param Swift_Mime_HeaderSet $headers + * @param Swift_Mime_ContentEncoder $encoder + * @param Swift_KeyCache $cache + */ + public function __construct(Swift_Mime_HeaderSet $headers, + Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache) + { + $this->_cacheKey = uniqid(); + $this->_cache = $cache; + $this->_headers = $headers; + $this->setEncoder($encoder); + $this->_headers->defineOrdering( + array('Content-Type', 'Content-Transfer-Encoding') + ); + + // This array specifies that, when the entire MIME document contains + // $compoundLevel, then for each child within $level, if its Content-Type + // is $contentType then it should be treated as if it's level is + // $neededLevel instead. I tried to write that unambiguously! :-\ + // Data Structure: + // array ( + // $compoundLevel => array( + // $level => array( + // $contentType => $neededLevel + // ) + // ) + // ) + + $this->_compoundLevelFilters = array( + (self::LEVEL_ALTERNATIVE + self::LEVEL_RELATED) => array( + self::LEVEL_ALTERNATIVE => array( + 'text/plain' => self::LEVEL_ALTERNATIVE, + 'text/html' => self::LEVEL_RELATED + ) + ) + ); + + $this->_id = $this->getRandomId(); + } + + /** + * Generate a new Content-ID or Message-ID for this MIME entity. + * @return string + */ + public function generateId() + { + $this->setId($this->getRandomId()); + return $this->_id; + } + + /** + * Get the {@link Swift_Mime_HeaderSet} for this entity. + * @return Swift_Mime_HeaderSet + */ + public function getHeaders() + { + return $this->_headers; + } + + /** + * Get the nesting level of this entity. + * @return int + * @see LEVEL_TOP, LEVEL_MIXED, LEVEL_RELATED, LEVEL_ALTERNATIVE + */ + public function getNestingLevel() + { + return $this->_nestingLevel; + } + + /** + * Get the Content-type of this entity. + * @return string + */ + public function getContentType() + { + return $this->_getHeaderFieldModel('Content-Type'); + } + + /** + * Set the Content-type of this entity. + * @param string $type + */ + public function setContentType($type) + { + $this->_setContentTypeInHeaders($type); + // Keep track of the value so that if the content-type changes automatically + // due to added child entities, it can be restored if they are later removed + $this->_userContentType = $type; + return $this; + } + + /** + * Get the CID of this entity. + * The CID will only be present in headers if a Content-ID header is present. + * @return string + */ + public function getId() + { + return $this->_headers->has($this->_getIdField()) + ? current((array) $this->_getHeaderFieldModel($this->_getIdField())) + : $this->_id; + } + + /** + * Set the CID of this entity. + * @param string $id + */ + public function setId($id) + { + if (!$this->_setHeaderFieldModel($this->_getIdField(), $id)) + { + $this->_headers->addIdHeader($this->_getIdField(), $id); + } + $this->_id = $id; + return $this; + } + + /** + * Get the description of this entity. + * This value comes from the Content-Description header if set. + * @return string + */ + public function getDescription() + { + return $this->_getHeaderFieldModel('Content-Description'); + } + + /** + * Set the description of this entity. + * This method sets a value in the Content-ID header. + * @param string $description + */ + public function setDescription($description) + { + if (!$this->_setHeaderFieldModel('Content-Description', $description)) + { + $this->_headers->addTextHeader('Content-Description', $description); + } + return $this; + } + + /** + * Get the maximum line length of the body of this entity. + * @return int + */ + public function getMaxLineLength() + { + return $this->_maxLineLength; + } + + /** + * Set the maximum line length of lines in this body. + * Though not enforced by the library, lines should not exceed 1000 chars. + * @param int $length + */ + public function setMaxLineLength($length) + { + $this->_maxLineLength = $length; + return $this; + } + + /** + * Get all children added to this entity. + * @return array of Swift_Mime_Entity + */ + public function getChildren() + { + return $this->_children; + } + + /** + * Set all children of this entity. + * @param array $children Swiift_Mime_Entity instances + * @param int $compoundLevel For internal use only + */ + public function setChildren(array $children, $compoundLevel = null) + { + //TODO: Try to refactor this logic + + $compoundLevel = isset($compoundLevel) + ? $compoundLevel + : $this->_getCompoundLevel($children) + ; + + $immediateChildren = array(); + $grandchildren = array(); + $newContentType = $this->_userContentType; + + foreach ($children as $child) + { + $level = $this->_getNeededChildLevel($child, $compoundLevel); + if (empty($immediateChildren)) //first iteration + { + $immediateChildren = array($child); + } + else + { + $nextLevel = $this->_getNeededChildLevel($immediateChildren[0], $compoundLevel); + if ($nextLevel == $level) + { + $immediateChildren[] = $child; + } + elseif ($level < $nextLevel) + { + //Re-assign immediateChildren to grandchilden + $grandchildren = array_merge($grandchildren, $immediateChildren); + //Set new children + $immediateChildren = array($child); + } + else + { + $grandchildren[] = $child; + } + } + } + + if (!empty($immediateChildren)) + { + $lowestLevel = $this->_getNeededChildLevel($immediateChildren[0], $compoundLevel); + + //Determine which composite media type is needed to accomodate the + // immediate children + foreach ($this->_compositeRanges as $mediaType => $range) + { + if ($lowestLevel > $range[0] + && $lowestLevel <= $range[1]) + { + $newContentType = $mediaType; + break; + } + } + + //Put any grandchildren in a subpart + if (!empty($grandchildren)) + { + $subentity = $this->_createChild(); + $subentity->_setNestingLevel($lowestLevel); + $subentity->setChildren($grandchildren, $compoundLevel); + array_unshift($immediateChildren, $subentity); + } + } + + $this->_immediateChildren = $immediateChildren; + $this->_children = $children; + $this->_setContentTypeInHeaders($newContentType); + $this->_fixHeaders(); + $this->_sortChildren(); + + return $this; + } + + /** + * Get the body of this entity as a string. + * @return string + */ + public function getBody() + { + return ($this->_body instanceof Swift_OutputByteStream) + ? $this->_readStream($this->_body) + : $this->_body; + } + + /** + * Set the body of this entity, either as a string, or as an instance of + * {@link Swift_OutputByteStream}. + * @param mixed $body + * @param string $contentType optional + */ + public function setBody($body, $contentType = null) + { + if ($body !== $this->_body) + { + $this->_clearCache(); + } + + $this->_body = $body; + if (isset($contentType)) + { + $this->setContentType($contentType); + } + return $this; + } + + /** + * Get the encoder used for the body of this entity. + * @return Swift_Mime_ContentEncoder + */ + public function getEncoder() + { + return $this->_encoder; + } + + /** + * Set the encoder used for the body of this entity. + * @param Swift_Mime_ContentEncoder $encoder + */ + public function setEncoder(Swift_Mime_ContentEncoder $encoder) + { + if ($encoder !== $this->_encoder) + { + $this->_clearCache(); + } + + $this->_encoder = $encoder; + $this->_setEncoding($encoder->getName()); + $this->_notifyEncoderChanged($encoder); + return $this; + } + + /** + * Get the boundary used to separate children in this entity. + * @return string + */ + public function getBoundary() + { + if (!isset($this->_boundary)) + { + $this->_boundary = '_=_swift_v4_' . time() . uniqid() . '_=_'; + } + return $this->_boundary; + } + + /** + * Set the boundary used to separate children in this entity. + * @param string $boundary + * @throws Swift_RfcComplianceException + */ + public function setBoundary($boundary) + { + $this->_assertValidBoundary($boundary); + $this->_boundary = $boundary; + return $this; + } + + /** + * Receive notification that the charset of this entity, or a parent entity + * has changed. + * @param string $charset + */ + public function charsetChanged($charset) + { + $this->_notifyCharsetChanged($charset); + } + + /** + * Receive notification that the encoder of this entity or a parent entity + * has changed. + * @param Swift_Mime_ContentEncoder $encoder + */ + public function encoderChanged(Swift_Mime_ContentEncoder $encoder) + { + $this->_notifyEncoderChanged($encoder); + } + + /** + * Get this entire entity as a string. + * @return string + */ + public function toString() + { + $string = $this->_headers->toString(); + if (isset($this->_body) && empty($this->_immediateChildren)) + { + if ($this->_cache->hasKey($this->_cacheKey, 'body')) + { + $body = $this->_cache->getString($this->_cacheKey, 'body'); + } + else + { + $body = "\r\n" . $this->_encoder->encodeString($this->getBody(), 0, + $this->getMaxLineLength() + ); + $this->_cache->setString($this->_cacheKey, 'body', $body, + Swift_KeyCache::MODE_WRITE + ); + } + $string .= $body; + } + + if (!empty($this->_immediateChildren)) + { + foreach ($this->_immediateChildren as $child) + { + $string .= "\r\n\r\n--" . $this->getBoundary() . "\r\n"; + $string .= $child->toString(); + } + $string .= "\r\n\r\n--" . $this->getBoundary() . "--\r\n"; + } + + return $string; + } + + /** + * Returns a string representation of this object. + * + * @return string + * + * @see toString() + */ + public function __toString() + { + return $this->toString(); + } + + /** + * Write this entire entity to a {@link Swift_InputByteStream}. + * @param Swift_InputByteStream + */ + public function toByteStream(Swift_InputByteStream $is) + { + $is->write($this->_headers->toString()); + $is->commit(); + + if (empty($this->_immediateChildren)) + { + if (isset($this->_body)) + { + if ($this->_cache->hasKey($this->_cacheKey, 'body')) + { + $this->_cache->exportToByteStream($this->_cacheKey, 'body', $is); + } + else + { + $cacheIs = $this->_cache->getInputByteStream($this->_cacheKey, 'body'); + if ($cacheIs) + { + $is->bind($cacheIs); + } + + $is->write("\r\n"); + + if ($this->_body instanceof Swift_OutputByteStream) + { + $this->_body->setReadPointer(0); + + $this->_encoder->encodeByteStream($this->_body, $is, 0, + $this->getMaxLineLength() + ); + } + else + { + $is->write($this->_encoder->encodeString( + $this->getBody(), 0, $this->getMaxLineLength() + )); + } + + if ($cacheIs) + { + $is->unbind($cacheIs); + } + } + } + } + + if (!empty($this->_immediateChildren)) + { + foreach ($this->_immediateChildren as $child) + { + $is->write("\r\n\r\n--" . $this->getBoundary() . "\r\n"); + $child->toByteStream($is); + } + $is->write("\r\n\r\n--" . $this->getBoundary() . "--\r\n"); + } + } + + // -- Protected methods + + /** + * Get the name of the header that provides the ID of this entity */ + protected function _getIdField() + { + return 'Content-ID'; + } + + /** + * Get the model data (usually an array or a string) for $field. + */ + protected function _getHeaderFieldModel($field) + { + if ($this->_headers->has($field)) + { + return $this->_headers->get($field)->getFieldBodyModel(); + } + } + + /** + * Set the model data for $field. + */ + protected function _setHeaderFieldModel($field, $model) + { + if ($this->_headers->has($field)) + { + $this->_headers->get($field)->setFieldBodyModel($model); + return true; + } + else + { + return false; + } + } + + /** + * Get the parameter value of $parameter on $field header. + */ + protected function _getHeaderParameter($field, $parameter) + { + if ($this->_headers->has($field)) + { + return $this->_headers->get($field)->getParameter($parameter); + } + } + + /** + * Set the parameter value of $parameter on $field header. + */ + protected function _setHeaderParameter($field, $parameter, $value) + { + if ($this->_headers->has($field)) + { + $this->_headers->get($field)->setParameter($parameter, $value); + return true; + } + else + { + return false; + } + } + + /** + * Re-evaluate what content type and encoding should be used on this entity. + */ + protected function _fixHeaders() + { + if (count($this->_immediateChildren)) + { + $this->_setHeaderParameter('Content-Type', 'boundary', + $this->getBoundary() + ); + $this->_headers->remove('Content-Transfer-Encoding'); + } + else + { + $this->_setHeaderParameter('Content-Type', 'boundary', null); + $this->_setEncoding($this->_encoder->getName()); + } + } + + /** + * Get the KeyCache used in this entity. + */ + protected function _getCache() + { + return $this->_cache; + } + + /** + * Empty the KeyCache for this entity. + */ + protected function _clearCache() + { + $this->_cache->clearKey($this->_cacheKey, 'body'); + } + + /** + * Returns a random Content-ID or Message-ID. + * @return string + */ + protected function getRandomId() + { + $idLeft = time() . '.' . uniqid(); + $idRight = !empty($_SERVER['SERVER_NAME']) + ? $_SERVER['SERVER_NAME'] + : 'swift.generated'; + return $idLeft . '@' . $idRight; + } + + // -- Private methods + + private function _readStream(Swift_OutputByteStream $os) + { + $string = ''; + while (false !== $bytes = $os->read(8192)) + { + $string .= $bytes; + } + return $string; + } + + private function _setEncoding($encoding) + { + if (!$this->_setHeaderFieldModel('Content-Transfer-Encoding', $encoding)) + { + $this->_headers->addTextHeader('Content-Transfer-Encoding', $encoding); + } + } + + private function _assertValidBoundary($boundary) + { + if (!preg_match( + '/^[a-z0-9\'\(\)\+_\-,\.\/:=\?\ ]{0,69}[a-z0-9\'\(\)\+_\-,\.\/:=\?]$/Di', + $boundary)) + { + throw new Swift_RfcComplianceException('Mime boundary set is not RFC 2046 compliant.'); + } + } + + private function _setContentTypeInHeaders($type) + { + if (!$this->_setHeaderFieldModel('Content-Type', $type)) + { + $this->_headers->addParameterizedHeader('Content-Type', $type); + } + } + + private function _setNestingLevel($level) + { + $this->_nestingLevel = $level; + } + + private function _getCompoundLevel($children) + { + $level = 0; + foreach ($children as $child) + { + $level |= $child->getNestingLevel(); + } + return $level; + } + + private function _getNeededChildLevel($child, $compoundLevel) + { + $filter = array(); + foreach ($this->_compoundLevelFilters as $bitmask => $rules) + { + if (($compoundLevel & $bitmask) === $bitmask) + { + $filter = $rules + $filter; + } + } + + $realLevel = $child->getNestingLevel(); + $lowercaseType = strtolower($child->getContentType()); + + if (isset($filter[$realLevel]) + && isset($filter[$realLevel][$lowercaseType])) + { + return $filter[$realLevel][$lowercaseType]; + } + else + { + return $realLevel; + } + } + + private function _createChild() + { + return new self($this->_headers->newInstance(), + $this->_encoder, $this->_cache); + } + + private function _notifyEncoderChanged(Swift_Mime_ContentEncoder $encoder) + { + foreach ($this->_immediateChildren as $child) + { + $child->encoderChanged($encoder); + } + } + + private function _notifyCharsetChanged($charset) + { + $this->_encoder->charsetChanged($charset); + $this->_headers->charsetChanged($charset); + foreach ($this->_immediateChildren as $child) + { + $child->charsetChanged($charset); + } + } + + private function _sortChildren() + { + $shouldSort = false; + foreach ($this->_immediateChildren as $child) + { + //NOTE: This include alternative parts moved into a related part + if ($child->getNestingLevel() == self::LEVEL_ALTERNATIVE) + { + $shouldSort = true; + break; + } + } + + //Sort in order of preference, if there is one + if ($shouldSort) + { + usort($this->_immediateChildren, array($this, '_childSortAlgorithm')); + } + } + + private function _childSortAlgorithm($a, $b) + { + $typePrefs = array(); + $types = array( + strtolower($a->getContentType()), + strtolower($b->getContentType()) + ); + foreach ($types as $type) + { + $typePrefs[] = (array_key_exists($type, $this->_alternativePartOrder)) + ? $this->_alternativePartOrder[$type] + : (max($this->_alternativePartOrder) + 1); + } + return ($typePrefs[0] >= $typePrefs[1]) ? 1 : -1; + } + + // -- Destructor + + /** + * Empties it's own contents from the cache. + */ + public function __destruct() + { + $this->_cache->clearAll($this->_cacheKey); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/MimePart.php b/External/swiftmailer/lib/classes/Swift/MimePart.php new file mode 100755 index 0000000..60b6d56 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/MimePart.php @@ -0,0 +1,65 @@ +createDependenciesFor('mime.part') + ); + + if (!isset($charset)) + { + $charset = Swift_DependencyContainer::getInstance() + ->lookup('properties.charset'); + } + $this->setBody($body); + $this->setCharset($charset); + if ($contentType) + { + $this->setContentType($contentType); + } + } + + /** + * Create a new MimePart. + * @param string $body + * @param string $contentType + * @param string $charset + * @return Swift_Mime_MimePart + */ + public static function newInstance($body = null, $contentType = null, + $charset = null) + { + return new self($body, $contentType, $charset); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/OutputByteStream.php b/External/swiftmailer/lib/classes/Swift/OutputByteStream.php new file mode 100755 index 0000000..951b838 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/OutputByteStream.php @@ -0,0 +1,41 @@ +setThreshold($threshold); + $this->setSleepTime($sleep); + $this->_sleeper = $sleeper; + } + + /** + * Set the number of emails to send before restarting. + * @param int $threshold + */ + public function setThreshold($threshold) + { + $this->_threshold = $threshold; + } + + /** + * Get the number of emails to send before restarting. + * @return int + */ + public function getThreshold() + { + return $this->_threshold; + } + + /** + * Set the number of seconds to sleep for during a restart. + * @param int $sleep time + */ + public function setSleepTime($sleep) + { + $this->_sleep = $sleep; + } + + /** + * Get the number of seconds to sleep for during a restart. + * @return int + */ + public function getSleepTime() + { + return $this->_sleep; + } + + /** + * Invoked immediately before the Message is sent. + * @param Swift_Events_SendEvent $evt + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + } + + /** + * Invoked immediately after the Message is sent. + * @param Swift_Events_SendEvent $evt + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + ++$this->_counter; + if ($this->_counter >= $this->_threshold) + { + $transport = $evt->getTransport(); + $transport->stop(); + if ($this->_sleep) + { + $this->sleep($this->_sleep); + } + $transport->start(); + $this->_counter = 0; + } + } + + /** + * Sleep for $seconds. + * @param int $seconds + */ + public function sleep($seconds) + { + if (isset($this->_sleeper)) + { + $this->_sleeper->sleep($seconds); + } + else + { + sleep($seconds); + } + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php b/External/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php new file mode 100755 index 0000000..501cd80 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php @@ -0,0 +1,173 @@ +getMessage(); + $message->toByteStream($this); + } + + /** + * Invoked immediately following a command being sent. + * @param Swift_Events_ResponseEvent $evt + */ + public function commandSent(Swift_Events_CommandEvent $evt) + { + $command = $evt->getCommand(); + $this->_out += strlen($command); + } + + /** + * Invoked immediately following a response coming back. + * @param Swift_Events_ResponseEvent $evt + */ + public function responseReceived(Swift_Events_ResponseEvent $evt) + { + $response = $evt->getResponse(); + $this->_in += strlen($response); + } + + /** + * Called when a message is sent so that the outgoing counter can be increased. + * @param string $bytes + */ + public function write($bytes) + { + $this->_out += strlen($bytes); + foreach ($this->_mirrors as $stream) + { + $stream->write($bytes); + } + } + + /** + * Not used. + */ + public function commit() + { + } + + /** + * Attach $is to this stream. + * The stream acts as an observer, receiving all data that is written. + * All {@link write()} and {@link flushBuffers()} operations will be mirrored. + * + * @param Swift_InputByteStream $is + */ + public function bind(Swift_InputByteStream $is) + { + $this->_mirrors[] = $is; + } + + /** + * Remove an already bound stream. + * If $is is not bound, no errors will be raised. + * If the stream currently has any buffered data it will be written to $is + * before unbinding occurs. + * + * @param Swift_InputByteStream $is + */ + public function unbind(Swift_InputByteStream $is) + { + foreach ($this->_mirrors as $k => $stream) + { + if ($is === $stream) + { + unset($this->_mirrors[$k]); + } + } + } + + /** + * Not used. + */ + public function flushBuffers() + { + foreach ($this->_mirrors as $stream) + { + $stream->flushBuffers(); + } + } + + /** + * Get the total number of bytes sent to the server. + * @return int + */ + public function getBytesOut() + { + return $this->_out; + } + + /** + * Get the total number of bytes received from the server. + * @return int + */ + public function getBytesIn() + { + return $this->_in; + } + + /** + * Reset the internal counters to zero. + */ + public function reset() + { + $this->_out = 0; + $this->_in = 0; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php b/External/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php new file mode 100755 index 0000000..9735d0a --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php @@ -0,0 +1,36 @@ + + * $replacements = array( + * "address1@domain.tld" => array("{a}" => "b", "{c}" => "d"), + * "address2@domain.tld" => array("{a}" => "x", "{c}" => "y") + * ) + * + * + * When using an instance of {@link Swift_Plugins_Decorator_Replacements}, + * the object should return just the array of replacements for the address + * given to {@link Swift_Plugins_Decorator_Replacements::getReplacementsFor()}. + * + * @param mixed $replacements + */ + public function __construct($replacements) + { + if (!($replacements instanceof Swift_Plugins_Decorator_Replacements)) + { + $this->_replacements = (array) $replacements; + } + else + { + $this->_replacements = $replacements; + } + } + + /** + * Invoked immediately before the Message is sent. + * + * @param Swift_Events_SendEvent $evt + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); + $this->_restoreMessage($message); + $to = array_keys($message->getTo()); + $address = array_shift($to); + if ($replacements = $this->getReplacementsFor($address)) + { + $body = $message->getBody(); + $search = array_keys($replacements); + $replace = array_values($replacements); + $bodyReplaced = str_replace( + $search, $replace, $body + ); + if ($body != $bodyReplaced) + { + $this->_originalBody = $body; + $message->setBody($bodyReplaced); + } + $subject = $message->getSubject(); + $subjectReplaced = str_replace( + $search, $replace, $subject + ); + if ($subject != $subjectReplaced) + { + $this->_originalSubject = $subject; + $message->setSubject($subjectReplaced); + } + $children = (array) $message->getChildren(); + foreach ($children as $child) + { + list($type, ) = sscanf($child->getContentType(), '%[^/]/%s'); + if ('text' == $type) + { + $body = $child->getBody(); + $bodyReplaced = str_replace( + $search, $replace, $body + ); + if ($body != $bodyReplaced) + { + $child->setBody($bodyReplaced); + $this->_originalChildBodies[$child->getId()] = $body; + } + } + } + $this->_lastMessage = $message; + } + } + + /** + * Find a map of replacements for the address. + * + * If this plugin was provided with a delegate instance of + * {@link Swift_Plugins_Decorator_Replacements} then the call will be + * delegated to it. Otherwise, it will attempt to find the replacements + * from the array provided in the constructor. + * + * If no replacements can be found, an empty value (NULL) is returned. + * + * @param string $address + * + * @return array + */ + public function getReplacementsFor($address) + { + if ($this->_replacements instanceof Swift_Plugins_Decorator_Replacements) + { + return $this->_replacements->getReplacementsFor($address); + } + else + { + return isset($this->_replacements[$address]) + ? $this->_replacements[$address] + : null + ; + } + } + + /** + * Invoked immediately after the Message is sent. + * + * @param Swift_Events_SendEvent $evt + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + $this->_restoreMessage($evt->getMessage()); + } + + // -- Private methods + + /** Restore a changed message back to its original state */ + private function _restoreMessage(Swift_Mime_Message $message) + { + if ($this->_lastMessage === $message) + { + if (isset($this->_originalBody)) + { + $message->setBody($this->_originalBody); + $this->_originalBody = null; + } + if (isset($this->_originalSubject)) + { + $message->setSubject($this->_originalSubject); + $this->_originalSubject = null; + } + if (!empty($this->_originalChildBodies)) + { + $children = (array) $message->getChildren(); + foreach ($children as $child) + { + $id = $child->getId(); + if (array_key_exists($id, $this->_originalChildBodies)) + { + $child->setBody($this->_originalChildBodies[$id]); + } + } + $this->_originalChildBodies = array(); + } + $this->_lastMessage = null; + } + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Plugins/Logger.php b/External/swiftmailer/lib/classes/Swift/Plugins/Logger.php new file mode 100755 index 0000000..9864da0 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Plugins/Logger.php @@ -0,0 +1,37 @@ +_logger = $logger; + } + + /** + * Add a log entry. + * + * @param string $entry + */ + public function add($entry) + { + $this->_logger->add($entry); + } + + /** + * Clear the log contents. + */ + public function clear() + { + $this->_logger->clear(); + } + + /** + * Get this log as a string. + * + * @return string + */ + public function dump() + { + return $this->_logger->dump(); + } + + /** + * Invoked immediately following a command being sent. + * + * @param Swift_Events_ResponseEvent $evt + */ + public function commandSent(Swift_Events_CommandEvent $evt) + { + $command = $evt->getCommand(); + $this->_logger->add(sprintf(">> %s", $command)); + } + + /** + * Invoked immediately following a response coming back. + * + * @param Swift_Events_ResponseEvent $evt + */ + public function responseReceived(Swift_Events_ResponseEvent $evt) + { + $response = $evt->getResponse(); + $this->_logger->add(sprintf("<< %s", $response)); + } + + /** + * Invoked just before a Transport is started. + * + * @param Swift_Events_TransportChangeEvent $evt + */ + public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt) + { + $transportName = get_class($evt->getSource()); + $this->_logger->add(sprintf("++ Starting %s", $transportName)); + } + + /** + * Invoked immediately after the Transport is started. + * + * @param Swift_Events_TransportChangeEvent $evt + */ + public function transportStarted(Swift_Events_TransportChangeEvent $evt) + { + $transportName = get_class($evt->getSource()); + $this->_logger->add(sprintf("++ %s started", $transportName)); + } + + /** + * Invoked just before a Transport is stopped. + * + * @param Swift_Events_TransportChangeEvent $evt + */ + public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt) + { + $transportName = get_class($evt->getSource()); + $this->_logger->add(sprintf("++ Stopping %s", $transportName)); + } + + /** + * Invoked immediately after the Transport is stopped. + * + * @param Swift_Events_TransportChangeEvent $evt + */ + public function transportStopped(Swift_Events_TransportChangeEvent $evt) + { + $transportName = get_class($evt->getSource()); + $this->_logger->add(sprintf("++ %s stopped", $transportName)); + } + + /** + * Invoked as a TransportException is thrown in the Transport system. + * + * @param Swift_Events_TransportExceptionEvent $evt + */ + public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt) + { + $e = $evt->getException(); + $message = $e->getMessage(); + $this->_logger->add(sprintf("!! %s", $message)); + $message .= PHP_EOL; + $message .= 'Log data:' . PHP_EOL; + $message .= $this->_logger->dump(); + $evt->cancelBubble(); + throw new Swift_TransportException($message); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php b/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php new file mode 100755 index 0000000..930eca2 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php @@ -0,0 +1,73 @@ +_size = $size; + } + + /** + * Add a log entry. + * @param string $entry + */ + public function add($entry) + { + $this->_log[] = $entry; + while (count($this->_log) > $this->_size) + { + array_shift($this->_log); + } + } + + /** + * Clear the log contents. + */ + public function clear() + { + $this->_log = array(); + } + + /** + * Get this log as a string. + * @return string + */ + public function dump() + { + return implode(PHP_EOL, $this->_log); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php b/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php new file mode 100755 index 0000000..83dd54b --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php @@ -0,0 +1,64 @@ +_isHtml = $isHtml; + } + + /** + * Add a log entry. + * @param string $entry + */ + public function add($entry) + { + if ($this->_isHtml) + { + printf('%s%s%s', htmlspecialchars($entry, ENT_QUOTES), '
        ', PHP_EOL); + } + else + { + printf('%s%s', $entry, PHP_EOL); + } + } + + /** + * Not implemented. + */ + public function clear() + { + } + + /** + * Not implemented. + */ + public function dump() + { + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php b/External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php new file mode 100755 index 0000000..1c96dcf --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php @@ -0,0 +1,36 @@ +_host = $host; + $this->_port = $port; + $this->_crypto = $crypto; + } + + /** + * Create a new PopBeforeSmtpPlugin for $host and $port. + * + * @param string $host + * @param int $port + * @param string $cypto as "tls" or "ssl" + * + * @return Swift_Plugins_PopBeforeSmtpPlugin + */ + public static function newInstance($host, $port = 110, $crypto = null) + { + return new self($host, $port, $crypto); + } + + /** + * Set a Pop3Connection to delegate to instead of connecting directly. + * + * @param Swift_Plugins_Pop_Pop3Connection $connection + */ + public function setConnection(Swift_Plugins_Pop_Pop3Connection $connection) + { + $this->_connection = $connection; + return $this; + } + + /** + * Bind this plugin to a specific SMTP transport instance. + * + * @param Swift_Transport + */ + public function bindSmtp(Swift_Transport $smtp) + { + $this->_transport = $smtp; + } + + /** + * Set the connection timeout in seconds (default 10). + * + * @param int $timeout + */ + public function setTimeout($timeout) + { + $this->_timeout = (int) $timeout; + return $this; + } + + /** + * Set the username to use when connecting (if needed). + * + * @param string $username + */ + public function setUsername($username) + { + $this->_username = $username; + return $this; + } + + /** + * Set the password to use when connecting (if needed). + * + * @param string $password + */ + public function setPassword($password) + { + $this->_password = $password; + return $this; + } + + /** + * Connect to the POP3 host and authenticate. + * + * @throws Swift_Plugins_Pop_Pop3Exception if connection fails + */ + public function connect() + { + if (isset($this->_connection)) + { + $this->_connection->connect(); + } + else + { + if (!isset($this->_socket)) + { + if (!$socket = fsockopen( + $this->_getHostString(), $this->_port, $errno, $errstr, $this->_timeout)) + { + throw new Swift_Plugins_Pop_Pop3Exception( + sprintf('Failed to connect to POP3 host [%s]: %s', $this->_host, $errstr) + ); + } + $this->_socket = $socket; + + if (false === $greeting = fgets($this->_socket)) + { + throw new Swift_Plugins_Pop_Pop3Exception( + sprintf('Failed to connect to POP3 host [%s]', trim($greeting)) + ); + } + + $this->_assertOk($greeting); + + if ($this->_username) + { + $this->_command(sprintf("USER %s\r\n", $this->_username)); + $this->_command(sprintf("PASS %s\r\n", $this->_password)); + } + } + } + } + + /** + * Disconnect from the POP3 host. + */ + public function disconnect() + { + if (isset($this->_connection)) + { + $this->_connection->disconnect(); + } + else + { + $this->_command("QUIT\r\n"); + if (!fclose($this->_socket)) + { + throw new Swift_Plugins_Pop_Pop3Exception( + sprintf('POP3 host [%s] connection could not be stopped', $this->_host) + ); + } + $this->_socket = null; + } + } + + /** + * Invoked just before a Transport is started. + * + * @param Swift_Events_TransportChangeEvent $evt + */ + public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt) + { + if (isset($this->_transport)) + { + if ($this->_transport !== $evt->getTransport()) + { + return; + } + } + + $this->connect(); + $this->disconnect(); + } + + /** + * Not used. + */ + public function transportStarted(Swift_Events_TransportChangeEvent $evt) + { + } + + /** + * Not used. + */ + public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt) + { + } + + /** + * Not used. + */ + public function transportStopped(Swift_Events_TransportChangeEvent $evt) + { + } + + // -- Private Methods + + private function _command($command) + { + if (!fwrite($this->_socket, $command)) + { + throw new Swift_Plugins_Pop_Pop3Exception( + sprintf('Failed to write command [%s] to POP3 host', trim($command)) + ); + } + + if (false === $response = fgets($this->_socket)) + { + throw new Swift_Plugins_Pop_Pop3Exception( + sprintf('Failed to read from POP3 host after command [%s]', trim($command)) + ); + } + + $this->_assertOk($response); + + return $response; + } + + private function _assertOk($response) + { + if (substr($response, 0, 3) != '+OK') + { + throw new Swift_Plugins_Pop_Pop3Exception( + sprintf('POP3 command failed [%s]', trim($response)) + ); + } + } + + private function _getHostString() + { + $host = $this->_host; + switch (strtolower($this->_crypto)) + { + case 'ssl': + $host = 'ssl://' . $host; + break; + + case 'tls': + $host = 'tls://' . $host; + break; + } + return $host; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Plugins/Reporter.php b/External/swiftmailer/lib/classes/Swift/Plugins/Reporter.php new file mode 100755 index 0000000..00d5765 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Plugins/Reporter.php @@ -0,0 +1,36 @@ +_reporter = $reporter; + } + + /** + * Not used. + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + } + + /** + * Invoked immediately after the Message is sent. + * @param Swift_Events_SendEvent $evt + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + $message = $evt->getMessage(); + $failures = array_flip($evt->getFailedRecipients()); + foreach ((array) $message->getTo() as $address => $null) + { + $this->_reporter->notify( + $message, $address, (array_key_exists($address, $failures) + ? Swift_Plugins_Reporter::RESULT_FAIL + : Swift_Plugins_Reporter::RESULT_PASS) + ); + } + foreach ((array) $message->getCc() as $address => $null) + { + $this->_reporter->notify( + $message, $address, (array_key_exists($address, $failures) + ? Swift_Plugins_Reporter::RESULT_FAIL + : Swift_Plugins_Reporter::RESULT_PASS) + ); + } + foreach ((array) $message->getBcc() as $address => $null) + { + $this->_reporter->notify( + $message, $address, (array_key_exists($address, $failures) + ? Swift_Plugins_Reporter::RESULT_FAIL + : Swift_Plugins_Reporter::RESULT_PASS) + ); + } + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php b/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php new file mode 100755 index 0000000..0022f5e --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php @@ -0,0 +1,63 @@ +_failures_cache[$address])) + { + $this->_failures[] = $address; + $this->_failures_cache[$address] = true; + } + } + + /** + * Get an array of addresses for which delivery failed. + * @return array + */ + public function getFailedRecipients() + { + return $this->_failures; + } + + /** + * Clear the buffer (empty the list). + */ + public function clear() + { + $this->_failures = $this->_failures_cache = array(); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php b/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php new file mode 100755 index 0000000..7370078 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php @@ -0,0 +1,47 @@ +" . PHP_EOL; + echo "PASS " . $address . PHP_EOL; + echo "
        " . PHP_EOL; + flush(); + } + else + { + echo "
        " . PHP_EOL; + echo "FAIL " . $address . PHP_EOL; + echo "
        " . PHP_EOL; + flush(); + } + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php b/External/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php new file mode 100755 index 0000000..148cbd3 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php @@ -0,0 +1,26 @@ +_rate = $rate; + $this->_mode = $mode; + $this->_sleeper = $sleeper; + $this->_timer = $timer; + } + + /** + * Invoked immediately before the Message is sent. + * @param Swift_Events_SendEvent $evt + */ + public function beforeSendPerformed(Swift_Events_SendEvent $evt) + { + $time = $this->getTimestamp(); + if (!isset($this->_start)) + { + $this->_start = $time; + } + $duration = $time - $this->_start; + + if (self::BYTES_PER_MINUTE == $this->_mode) + { + $sleep = $this->_throttleBytesPerMinute($duration); + } + else + { + $sleep = $this->_throttleMessagesPerMinute($duration); + } + + if ($sleep > 0) + { + $this->sleep($sleep); + } + } + + /** + * Invoked when a Message is sent. + * @param Swift_Events_SendEvent $evt + */ + public function sendPerformed(Swift_Events_SendEvent $evt) + { + parent::sendPerformed($evt); + ++$this->_messages; + } + + /** + * Sleep for $seconds. + * @param int $seconds + */ + public function sleep($seconds) + { + if (isset($this->_sleeper)) + { + $this->_sleeper->sleep($seconds); + } + else + { + sleep($seconds); + } + } + + /** + * Get the current UNIX timestamp + * @return int + */ + public function getTimestamp() + { + if (isset($this->_timer)) + { + return $this->_timer->getTimestamp(); + } + else + { + return time(); + } + } + + // -- Private methods + + /** + * Get a number of seconds to sleep for. + * @param int $timePassed + * @return int + * @access private + */ + private function _throttleBytesPerMinute($timePassed) + { + $expectedDuration = $this->getBytesOut() / ($this->_rate / 60); + return (int) ceil($expectedDuration - $timePassed); + } + + /** + * Get a number of seconds to sleep for. + * @param int $timePassed + * @return int + * @access private + */ + private function _throttleMessagesPerMinute($timePassed) + { + $expectedDuration = $this->_messages / ($this->_rate / 60); + return (int) ceil($expectedDuration - $timePassed); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Plugins/Timer.php b/External/swiftmailer/lib/classes/Swift/Plugins/Timer.php new file mode 100755 index 0000000..92207bf --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Plugins/Timer.php @@ -0,0 +1,26 @@ +register('properties.charset')->asValue($charset); + return $this; + } + + /** + * Set the directory where temporary files can be saved. + * @param string $dir + * @return Swift_Preferences + */ + public function setTempDir($dir) + { + Swift_DependencyContainer::getInstance() + ->register('tempdir')->asValue($dir); + return $this; + } + + /** + * Set the type of cache to use (i.e. "disk" or "array"). + * @param string $type + * @return Swift_Preferences + */ + public function setCacheType($type) + { + Swift_DependencyContainer::getInstance() + ->register('cache')->asAliasOf(sprintf('cache.%s', $type)); + return $this; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php b/External/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php new file mode 100755 index 0000000..db29e6d --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php @@ -0,0 +1,27 @@ +createDependenciesFor('transport.sendmail') + ); + + $this->setCommand($command); + } + + /** + * Create a new SendmailTransport instance. + * @param string $command + * @return Swift_SendmailTransport + */ + public static function newInstance($command = '/usr/sbin/sendmail -bs') + { + return new self($command); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/SmtpTransport.php b/External/swiftmailer/lib/classes/Swift/SmtpTransport.php new file mode 100755 index 0000000..65180d5 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/SmtpTransport.php @@ -0,0 +1,56 @@ +createDependenciesFor('transport.smtp') + ); + + $this->setHost($host); + $this->setPort($port); + $this->setEncryption($security); + } + + /** + * Create a new SmtpTransport instance. + * @param string $host + * @param int $port + * @param int $security + * @return Swift_SmtpTransport + */ + public static function newInstance($host = 'localhost', $port = 25, + $security = null) + { + return new self($host, $port, $security); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/StreamFilter.php b/External/swiftmailer/lib/classes/Swift/StreamFilter.php new file mode 100755 index 0000000..6c262ce --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/StreamFilter.php @@ -0,0 +1,33 @@ +_search = $search; + $this->_index = array(); + $this->_tree = array(); + $this->_replace = array(); + $this->_repSize = array(); + + $tree = null; + $i = null; + $last_size = $size = 0; + foreach ($search as $i => $search_element) + { + if ($tree !== null) + { + $tree[-1] = min (count($replace) - 1, $i - 1); + $tree[-2] = $last_size; + } + $tree = &$this->_tree; + if (is_array ($search_element)) + { + foreach ($search_element as $k => $char) + { + $this->_index[$char] = true; + if (!isset($tree[$char])) + { + $tree[$char] = array(); + } + $tree = &$tree[$char]; + } + $last_size = $k+1; + $size = max($size, $last_size); + } + else + { + $last_size = 1; + if (!isset($tree[$search_element])) + { + $tree[$search_element] = array(); + } + $tree = &$tree[$search_element]; + $size = max($last_size, $size); + $this->_index[$search_element] = true; + } + } + if ($i !== null) + { + $tree[-1] = min (count ($replace) - 1, $i); + $tree[-2] = $last_size; + $this->_treeMaxLen = $size; + } + foreach ($replace as $rep) + { + if (!is_array($rep)) + { + $rep = array ($rep); + } + $this->_replace[] = $rep; + } + for ($i = count($this->_replace) - 1; $i >= 0; --$i) + { + $this->_replace[$i] = $rep = $this->filter($this->_replace[$i], $i); + $this->_repSize[$i] = count($rep); + } + } + + /** + * Returns true if based on the buffer passed more bytes should be buffered. + * @param array $buffer + * @return boolean + */ + public function shouldBuffer($buffer) + { + $endOfBuffer = end($buffer); + return isset ($this->_index[$endOfBuffer]); + } + + /** + * Perform the actual replacements on $buffer and return the result. + * @param array $buffer + * @return array + */ + public function filter($buffer, $_minReplaces = -1) + { + if ($this->_treeMaxLen == 0) + { + return $buffer; + } + + $newBuffer = array(); + $buf_size = count($buffer); + for ($i = 0; $i < $buf_size; ++$i) + { + $search_pos = $this->_tree; + $last_found = PHP_INT_MAX; + // We try to find if the next byte is part of a search pattern + for ($j = 0; $j <= $this->_treeMaxLen; ++$j) + { + // We have a new byte for a search pattern + if (isset ($buffer [$p = $i + $j]) && isset($search_pos[$buffer[$p]])) + { + $search_pos = $search_pos[$buffer[$p]]; + // We have a complete pattern, save, in case we don't find a better match later + if (isset($search_pos[- 1]) && $search_pos[-1] < $last_found + && $search_pos[-1] > $_minReplaces) + { + $last_found = $search_pos[-1]; + $last_size = $search_pos[-2]; + } + } + // We got a complete pattern + elseif ($last_found !== PHP_INT_MAX) + { + // Adding replacement datas to output buffer + $rep_size = $this->_repSize[$last_found]; + for ($j = 0; $j < $rep_size; ++$j) + { + $newBuffer[] = $this->_replace[$last_found][$j]; + } + // We Move cursor forward + $i += $last_size - 1; + // Edge Case, last position in buffer + if ($i >= $buf_size) + { + $newBuffer[] = $buffer[$i]; + } + + // We start the next loop + continue 2; + } + else + { + // this byte is not in a pattern and we haven't found another pattern + break; + } + } + // Normal byte, move it to output buffer + $newBuffer[] = $buffer[$i]; + } + + return $newBuffer; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php b/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php new file mode 100755 index 0000000..9ab6c30 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php @@ -0,0 +1,66 @@ +_search = $search; + $this->_replace = $replace; + } + + /** + * Returns true if based on the buffer passed more bytes should be buffered. + * @param string $buffer + * @return boolean + */ + public function shouldBuffer($buffer) + { + $endOfBuffer = substr($buffer, -1); + foreach ((array) $this->_search as $needle) + { + if (false !== strpos($needle, $endOfBuffer)) + { + return true; + } + } + return false; + } + + /** + * Perform the actual replacements on $buffer and return the result. + * @param string $buffer + * @return string + */ + public function filter($buffer) + { + return str_replace($this->_search, $this->_replace, $buffer); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php b/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php new file mode 100755 index 0000000..fcd4b83 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php @@ -0,0 +1,53 @@ +_filters[$search][$replace])) + { + if (!isset($this->_filters[$search])) + { + $this->_filters[$search] = array(); + } + + if (!isset($this->_filters[$search][$replace])) + { + $this->_filters[$search][$replace] = array(); + } + + $this->_filters[$search][$replace] + = new Swift_StreamFilters_StringReplacementFilter($search, $replace); + } + + return $this->_filters[$search][$replace]; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/SwiftException.php b/External/swiftmailer/lib/classes/Swift/SwiftException.php new file mode 100755 index 0000000..bd3b656 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/SwiftException.php @@ -0,0 +1,28 @@ +_eventDispatcher = $dispatcher; + $this->_buffer = $buf; + $this->_lookupHostname(); + } + + /** + * Set the name of the local domain which Swift will identify itself as. + * This should be a fully-qualified domain name and should be truly the domain + * you're using. If your server doesn't have a domain name, use the IP in square + * brackets (i.e. [127.0.0.1]). + * + * @param string $domain + */ + public function setLocalDomain($domain) + { + $this->_domain = $domain; + return $this; + } + + /** + * Get the name of the domain Swift will identify as. + * + * @return string + */ + public function getLocalDomain() + { + return $this->_domain; + } + + /** + * Start the SMTP connection. + */ + public function start() + { + if (!$this->_started) + { + if ($evt = $this->_eventDispatcher->createTransportChangeEvent($this)) + { + $this->_eventDispatcher->dispatchEvent($evt, 'beforeTransportStarted'); + if ($evt->bubbleCancelled()) + { + return; + } + } + + try + { + $this->_buffer->initialize($this->_getBufferParams()); + } + catch (Swift_TransportException $e) + { + $this->_throwException($e); + } + $this->_readGreeting(); + $this->_doHeloCommand(); + + if ($evt) + { + $this->_eventDispatcher->dispatchEvent($evt, 'transportStarted'); + } + + $this->_started = true; + } + } + + /** + * Test if an SMTP connection has been established. + * + * @return boolean + */ + public function isStarted() + { + return $this->_started; + } + + /** + * Send the given Message. + * + * Recipient/sender data will be retreived from the Message API. + * The return value is the number of recipients who were accepted for delivery. + * + * @param Swift_Mime_Message $message + * @param string[] &$failedRecipients to collect failures by-reference + * @return int + */ + public function send(Swift_Mime_Message $message, &$failedRecipients = null) + { + $sent = 0; + $failedRecipients = (array) $failedRecipients; + + if (!$reversePath = $this->_getReversePath($message)) + { + throw new Swift_TransportException( + 'Cannot send message without a sender address' + ); + } + + if ($evt = $this->_eventDispatcher->createSendEvent($this, $message)) + { + $this->_eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt->bubbleCancelled()) + { + return 0; + } + } + + $to = (array) $message->getTo(); + $cc = (array) $message->getCc(); + $bcc = (array) $message->getBcc(); + + $message->setBcc(array()); + + try + { + $sent += $this->_sendTo($message, $reversePath, $to, $failedRecipients); + $sent += $this->_sendCc($message, $reversePath, $cc, $failedRecipients); + $sent += $this->_sendBcc($message, $reversePath, $bcc, $failedRecipients); + } + catch (Exception $e) + { + $message->setBcc($bcc); + throw $e; + } + + $message->setBcc($bcc); + + if ($evt) + { + if ($sent == count($to) + count($cc) + count($bcc)) + { + $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); + } + elseif ($sent > 0) + { + $evt->setResult(Swift_Events_SendEvent::RESULT_TENTATIVE); + } + else + { + $evt->setResult(Swift_Events_SendEvent::RESULT_FAILED); + } + $evt->setFailedRecipients($failedRecipients); + $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + } + + $message->generateId(); //Make sure a new Message ID is used + + return $sent; + } + + /** + * Stop the SMTP connection. + */ + public function stop() + { + if ($this->_started) + { + if ($evt = $this->_eventDispatcher->createTransportChangeEvent($this)) + { + $this->_eventDispatcher->dispatchEvent($evt, 'beforeTransportStopped'); + if ($evt->bubbleCancelled()) + { + return; + } + } + + try + { + $this->executeCommand("QUIT\r\n", array(221)); + } + catch (Swift_TransportException $e) {} + + try + { + $this->_buffer->terminate(); + + if ($evt) + { + $this->_eventDispatcher->dispatchEvent($evt, 'transportStopped'); + } + } + catch (Swift_TransportException $e) + { + $this->_throwException($e); + } + } + $this->_started = false; + } + + /** + * Register a plugin. + * + * @param Swift_Events_EventListener $plugin + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + $this->_eventDispatcher->bindEventListener($plugin); + } + + /** + * Reset the current mail transaction. + */ + public function reset() + { + $this->executeCommand("RSET\r\n", array(250)); + } + + /** + * Get the IoBuffer where read/writes are occurring. + * + * @return Swift_Transport_IoBuffer + */ + public function getBuffer() + { + return $this->_buffer; + } + + /** + * Run a command against the buffer, expecting the given response codes. + * + * If no response codes are given, the response will not be validated. + * If codes are given, an exception will be thrown on an invalid response. + * + * @param string $command + * @param int[] $codes + * @param string[] &$failures + * @return string + */ + public function executeCommand($command, $codes = array(), &$failures = null) + { + $failures = (array) $failures; + $seq = $this->_buffer->write($command); + $response = $this->_getFullResponse($seq); + if ($evt = $this->_eventDispatcher->createCommandEvent($this, $command, $codes)) + { + $this->_eventDispatcher->dispatchEvent($evt, 'commandSent'); + } + $this->_assertResponseCode($response, $codes); + return $response; + } + + // -- Protected methods + + /** Read the opening SMTP greeting */ + protected function _readGreeting() + { + $this->_assertResponseCode($this->_getFullResponse(0), array(220)); + } + + /** Send the HELO welcome */ + protected function _doHeloCommand() + { + $this->executeCommand( + sprintf("HELO %s\r\n", $this->_domain), array(250) + ); + } + + /** Send the MAIL FROM command */ + protected function _doMailFromCommand($address) + { + $this->executeCommand( + sprintf("MAIL FROM: <%s>\r\n", $address), array(250) + ); + } + + /** Send the RCPT TO command */ + protected function _doRcptToCommand($address) + { + $this->executeCommand( + sprintf("RCPT TO: <%s>\r\n", $address), array(250, 251, 252) + ); + } + + /** Send the DATA command */ + protected function _doDataCommand() + { + $this->executeCommand("DATA\r\n", array(354)); + } + + /** Stream the contents of the message over the buffer */ + protected function _streamMessage(Swift_Mime_Message $message) + { + $this->_buffer->setWriteTranslations(array("\r\n." => "\r\n..")); + try + { + $message->toByteStream($this->_buffer); + $this->_buffer->flushBuffers(); + } + catch (Swift_TransportException $e) + { + $this->_throwException($e); + } + $this->_buffer->setWriteTranslations(array()); + $this->executeCommand("\r\n.\r\n", array(250)); + } + + /** Determine the best-use reverse path for this message */ + protected function _getReversePath(Swift_Mime_Message $message) + { + $return = $message->getReturnPath(); + $sender = $message->getSender(); + $from = $message->getFrom(); + $path = null; + if (!empty($return)) + { + $path = $return; + } + elseif (!empty($sender)) + { + // Don't use array_keys + reset($sender); // Reset Pointer to first pos + $path = key($sender); // Get key + } + elseif (!empty($from)) + { + reset($from); // Reset Pointer to first pos + $path = key($from); // Get key + } + return $path; + } + + /** Throw a TransportException, first sending it to any listeners */ + protected function _throwException(Swift_TransportException $e) + { + if ($evt = $this->_eventDispatcher->createTransportExceptionEvent($this, $e)) + { + $this->_eventDispatcher->dispatchEvent($evt, 'exceptionThrown'); + if (!$evt->bubbleCancelled()) + { + throw $e; + } + } + else + { + throw $e; + } + } + + /** Throws an Exception if a response code is incorrect */ + protected function _assertResponseCode($response, $wanted) + { + list($code, $separator, $text) = sscanf($response, '%3d%[ -]%s'); + $valid = (empty($wanted) || in_array($code, $wanted)); + + if ($evt = $this->_eventDispatcher->createResponseEvent($this, $response, + $valid)) + { + $this->_eventDispatcher->dispatchEvent($evt, 'responseReceived'); + } + + if (!$valid) + { + $this->_throwException( + new Swift_TransportException( + 'Expected response code ' . implode('/', $wanted) . ' but got code ' . + '"' . $code . '", with message "' . $response . '"' + ) + ); + } + } + + /** Get an entire multi-line response using its sequence number */ + protected function _getFullResponse($seq) + { + $response = ''; + try + { + do + { + $line = $this->_buffer->readLine($seq); + $response .= $line; + } + while (null !== $line && false !== $line && ' ' != $line{3}); + } + catch (Swift_TransportException $e) + { + $this->_throwException($e); + } + return $response; + } + + // -- Private methods + + /** Send an email to the given recipients from the given reverse path */ + private function _doMailTransaction($message, $reversePath, + array $recipients, array &$failedRecipients) + { + $sent = 0; + $this->_doMailFromCommand($reversePath); + foreach ($recipients as $forwardPath) + { + try + { + $this->_doRcptToCommand($forwardPath); + $sent++; + } + catch (Swift_TransportException $e) + { + $failedRecipients[] = $forwardPath; + } + } + + if ($sent != 0) + { + $this->_doDataCommand(); + $this->_streamMessage($message); + } + else + { + $this->reset(); + } + + return $sent; + } + + /** Send a message to the given To: recipients */ + private function _sendTo(Swift_Mime_Message $message, $reversePath, + array $to, array &$failedRecipients) + { + if (empty($to)) + { + return 0; + } + return $this->_doMailTransaction($message, $reversePath, array_keys($to), + $failedRecipients); + } + + /** Send a message to the given Cc: recipients */ + private function _sendCc(Swift_Mime_Message $message, $reversePath, + array $cc, array &$failedRecipients) + { + if (empty($cc)) + { + return 0; + } + return $this->_doMailTransaction($message, $reversePath, array_keys($cc), + $failedRecipients); + } + + /** Send a message to all Bcc: recipients */ + private function _sendBcc(Swift_Mime_Message $message, $reversePath, + array $bcc, array &$failedRecipients) + { + $sent = 0; + foreach ($bcc as $forwardPath => $name) + { + $message->setBcc(array($forwardPath => $name)); + $sent += $this->_doMailTransaction( + $message, $reversePath, array($forwardPath), $failedRecipients + ); + } + return $sent; + } + + /** Try to determine the hostname of the server this is run on */ + private function _lookupHostname() + { + if (!empty($_SERVER['SERVER_NAME']) + && $this->_isFqdn($_SERVER['SERVER_NAME'])) + { + $this->_domain = $_SERVER['SERVER_NAME']; + } + elseif (!empty($_SERVER['SERVER_ADDR'])) + { + $this->_domain = sprintf('[%s]', $_SERVER['SERVER_ADDR']); + } + } + + /** Determine is the $hostname is a fully-qualified name */ + private function _isFqdn($hostname) + { + //We could do a really thorough check, but there's really no point + if (false !== $dotPos = strpos($hostname, '.')) + { + return ($dotPos > 0) && ($dotPos != strlen($hostname) - 1); + } + else + { + return false; + } + } + + /** + * Destructor. + */ + public function __destruct() + { + $this->stop(); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php b/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php new file mode 100755 index 0000000..4c7e0f2 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php @@ -0,0 +1,88 @@ +executeCommand("AUTH CRAM-MD5\r\n", array(334)); + $challenge = base64_decode(substr($challenge, 4)); + $message = base64_encode( + $username . ' ' . $this->_getResponse($password, $challenge) + ); + $agent->executeCommand(sprintf("%s\r\n", $message), array(235)); + return true; + } + catch (Swift_TransportException $e) + { + $agent->executeCommand("RSET\r\n", array(250)); + return false; + } + } + + /** + * Generate a CRAM-MD5 response from a server challenge. + * @param string $secret + * @param string $challenge + * @return string + */ + private function _getResponse($secret, $challenge) + { + if (strlen($secret) > 64) + { + $secret = pack('H32', md5($secret)); + } + + if (strlen($secret) < 64) + { + $secret = str_pad($secret, 64, chr(0)); + } + + $k_ipad = substr($secret, 0, 64) ^ str_repeat(chr(0x36), 64); + $k_opad = substr($secret, 0, 64) ^ str_repeat(chr(0x5C), 64); + + $inner = pack('H32', md5($k_ipad . $challenge)); + $digest = md5($k_opad . $inner); + + return $digest; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php b/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php new file mode 100755 index 0000000..bd22617 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php @@ -0,0 +1,58 @@ +executeCommand("AUTH LOGIN\r\n", array(334)); + $agent->executeCommand(sprintf("%s\r\n", base64_encode($username)), array(334)); + $agent->executeCommand(sprintf("%s\r\n", base64_encode($password)), array(235)); + return true; + } + catch (Swift_TransportException $e) + { + $agent->executeCommand("RSET\r\n", array(250)); + return false; + } + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php b/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php new file mode 100755 index 0000000..ddd8094 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php @@ -0,0 +1,57 @@ +executeCommand(sprintf("AUTH PLAIN %s\r\n", $message), array(235)); + return true; + } + catch (Swift_TransportException $e) + { + $agent->executeCommand("RSET\r\n", array(250)); + return false; + } + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php b/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php new file mode 100755 index 0000000..a223169 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php @@ -0,0 +1,262 @@ +setAuthenticators($authenticators); + } + + /** + * Set the Authenticators which can process a login request. + * @param Swift_Transport_Esmtp_Authenticator[] $authenticators + */ + public function setAuthenticators(array $authenticators) + { + $this->_authenticators = $authenticators; + } + + /** + * Get the Authenticators which can process a login request. + * @return Swift_Transport_Esmtp_Authenticator[] + */ + public function getAuthenticators() + { + return $this->_authenticators; + } + + /** + * Set the username to authenticate with. + * @param string $username + */ + public function setUsername($username) + { + $this->_username = $username; + } + + /** + * Get the username to authenticate with. + * @return string + */ + public function getUsername() + { + return $this->_username; + } + + /** + * Set the password to authenticate with. + * @param string $password + */ + public function setPassword($password) + { + $this->_password = $password; + } + + /** + * Get the password to authenticate with. + * @return string + */ + public function getPassword() + { + return $this->_password; + } + + /** + * Set the auth mode to use to authenticate. + * @param string $mode + */ + public function setAuthMode($mode) + { + $this->_auth_mode = $mode; + } + + /** + * Get the auth mode to use to authenticate. + * @return string + */ + public function getAuthMode() + { + return $this->_auth_mode; + } + + /** + * Get the name of the ESMTP extension this handles. + * @return boolean + */ + public function getHandledKeyword() + { + return 'AUTH'; + } + + /** + * Set the parameters which the EHLO greeting indicated. + * @param string[] $parameters + */ + public function setKeywordParams(array $parameters) + { + $this->_esmtpParams = $parameters; + } + + /** + * Runs immediately after a EHLO has been issued. + * @param Swift_Transport_SmtpAgent $agent to read/write + */ + public function afterEhlo(Swift_Transport_SmtpAgent $agent) + { + if ($this->_username) + { + $count = 0; + foreach ($this->_getAuthenticatorsForAgent() as $authenticator) + { + if (in_array(strtolower($authenticator->getAuthKeyword()), + array_map('strtolower', $this->_esmtpParams))) + { + $count++; + if ($authenticator->authenticate($agent, $this->_username, $this->_password)) + { + return; + } + } + } + throw new Swift_TransportException( + 'Failed to authenticate on SMTP server with username "' . + $this->_username . '" using ' . $count . ' possible authenticators' + ); + } + } + + /** + * Not used. + */ + public function getMailParams() + { + return array(); + } + + /** + * Not used. + */ + public function getRcptParams() + { + return array(); + } + + /** + * Not used. + */ + public function onCommand(Swift_Transport_SmtpAgent $agent, + $command, $codes = array(), &$failedRecipients = null, &$stop = false) + { + } + + /** + * Returns +1, -1 or 0 according to the rules for usort(). + * This method is called to ensure extensions can be execute in an appropriate order. + * @param string $esmtpKeyword to compare with + * @return int + */ + public function getPriorityOver($esmtpKeyword) + { + return 0; + } + + /** + * Returns an array of method names which are exposed to the Esmtp class. + * @return string[] + */ + public function exposeMixinMethods() + { + return array('setUsername', 'getUsername', 'setPassword', 'getPassword', 'setAuthMode', 'getAuthMode'); + } + + /** + * Not used. + */ + public function resetState() + { + } + + // -- Protected methods + + /** + * Returns the authenticator list for the given agent. + * @param Swift_Transport_SmtpAgent $agent + * @return array + * @access protected + */ + protected function _getAuthenticatorsForAgent() + { + if (!$mode = strtolower($this->_auth_mode)) + { + return $this->_authenticators; + } + + foreach ($this->_authenticators as $authenticator) + { + if (strtolower($authenticator->getAuthKeyword()) == $mode) + { + return array($authenticator); + } + } + + throw new Swift_TransportException('Auth mode '.$mode.' is invalid'); + } +} diff --git a/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php b/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php new file mode 100755 index 0000000..bf166d3 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php @@ -0,0 +1,38 @@ +. + * @return string[] + */ + public function getMailParams(); + + /** + * Get params which are appended to RCPT TO:<>. + * @return string[] + */ + public function getRcptParams(); + + /** + * Runs when a command is due to be sent. + * @param Swift_Transport_SmtpAgent $agent to read/write + * @param string $command to send + * @param int[] $codes expected in response + * @param string[] &$failedRecipients + * @param boolean &$stop to be set true if the command is now sent + */ + public function onCommand(Swift_Transport_SmtpAgent $agent, + $command, $codes = array(), &$failedRecipients = null, &$stop = false); + + /** + * Returns +1, -1 or 0 according to the rules for usort(). + * This method is called to ensure extensions can be execute in an appropriate order. + * @param string $esmtpKeyword to compare with + * @return int + */ + public function getPriorityOver($esmtpKeyword); + + /** + * Returns an array of method names which are exposed to the Esmtp class. + * @return string[] + */ + public function exposeMixinMethods(); + + /** + * Tells this handler to clear any buffers and reset its state. + */ + public function resetState(); + +} diff --git a/External/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php b/External/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php new file mode 100755 index 0000000..c7833c3 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php @@ -0,0 +1,340 @@ + 'tcp', + 'host' => 'localhost', + 'port' => 25, + 'timeout' => 30, + 'blocking' => 1, + 'type' => Swift_Transport_IoBuffer::TYPE_SOCKET + ); + + /** + * Creates a new EsmtpTransport using the given I/O buffer. + * @param Swift_Transport_IoBuffer $buf + * @param Swift_Transport_EsmtpHandler[] $extensionHandlers + * @param Swift_Events_EventDispatcher $dispatcher + */ + public function __construct(Swift_Transport_IoBuffer $buf, + array $extensionHandlers, Swift_Events_EventDispatcher $dispatcher) + { + parent::__construct($buf, $dispatcher); + $this->setExtensionHandlers($extensionHandlers); + } + + /** + * Set the host to connect to. + * @param string $host + */ + public function setHost($host) + { + $this->_params['host'] = $host; + return $this; + } + + /** + * Get the host to connect to. + * @return string + */ + public function getHost() + { + return $this->_params['host']; + } + + /** + * Set the port to connect to. + * @param int $port + */ + public function setPort($port) + { + $this->_params['port'] = (int) $port; + return $this; + } + + /** + * Get the port to connect to. + * @return int + */ + public function getPort() + { + return $this->_params['port']; + } + + /** + * Set the connection timeout. + * @param int $timeout seconds + */ + public function setTimeout($timeout) + { + $this->_params['timeout'] = (int) $timeout; + return $this; + } + + /** + * Get the connection timeout. + * @return int + */ + public function getTimeout() + { + return $this->_params['timeout']; + } + + /** + * Set the encryption type (tls or ssl) + * @param string $encryption + */ + public function setEncryption($enc) + { + $this->_params['protocol'] = $enc; + return $this; + } + + /** + * Get the encryption type. + * @return string + */ + public function getEncryption() + { + return $this->_params['protocol']; + } + + /** + * Set ESMTP extension handlers. + * @param Swift_Transport_EsmtpHandler[] $handlers + */ + public function setExtensionHandlers(array $handlers) + { + $assoc = array(); + foreach ($handlers as $handler) + { + $assoc[$handler->getHandledKeyword()] = $handler; + } + uasort($assoc, array($this, '_sortHandlers')); + $this->_handlers = $assoc; + $this->_setHandlerParams(); + return $this; + } + + /** + * Get ESMTP extension handlers. + * @return Swift_Transport_EsmtpHandler[] + */ + public function getExtensionHandlers() + { + return array_values($this->_handlers); + } + + /** + * Run a command against the buffer, expecting the given response codes. + * If no response codes are given, the response will not be validated. + * If codes are given, an exception will be thrown on an invalid response. + * @param string $command + * @param int[] $codes + * @param string[] &$failures + * @return string + */ + public function executeCommand($command, $codes = array(), &$failures = null) + { + $failures = (array) $failures; + $stopSignal = false; + $response = null; + foreach ($this->_getActiveHandlers() as $handler) + { + $response = $handler->onCommand( + $this, $command, $codes, $failures, $stopSignal + ); + if ($stopSignal) + { + return $response; + } + } + return parent::executeCommand($command, $codes, $failures); + } + + // -- Mixin invocation code + + /** Mixin handling method for ESMTP handlers */ + public function __call($method, $args) + { + foreach ($this->_handlers as $handler) + { + if (in_array(strtolower($method), + array_map('strtolower', (array) $handler->exposeMixinMethods()) + )) + { + $return = call_user_func_array(array($handler, $method), $args); + //Allow fluid method calls + if (is_null($return) && substr($method, 0, 3) == 'set') + { + return $this; + } + else + { + return $return; + } + } + } + trigger_error('Call to undefined method ' . $method, E_USER_ERROR); + } + + // -- Protected methods + + /** Get the params to initialize the buffer */ + protected function _getBufferParams() + { + return $this->_params; + } + + /** Overridden to perform EHLO instead */ + protected function _doHeloCommand() + { + try + { + $response = $this->executeCommand( + sprintf("EHLO %s\r\n", $this->_domain), array(250) + ); + } + catch (Swift_TransportException $e) + { + return parent::_doHeloCommand(); + } + + $this->_capabilities = $this->_getCapabilities($response); + $this->_setHandlerParams(); + foreach ($this->_getActiveHandlers() as $handler) + { + $handler->afterEhlo($this); + } + } + + /** Overridden to add Extension support */ + protected function _doMailFromCommand($address) + { + $handlers = $this->_getActiveHandlers(); + $params = array(); + foreach ($handlers as $handler) + { + $params = array_merge($params, (array) $handler->getMailParams()); + } + $paramStr = !empty($params) ? ' ' . implode(' ', $params) : ''; + $this->executeCommand( + sprintf("MAIL FROM: <%s>%s\r\n", $address, $paramStr), array(250) + ); + } + + /** Overridden to add Extension support */ + protected function _doRcptToCommand($address) + { + $handlers = $this->_getActiveHandlers(); + $params = array(); + foreach ($handlers as $handler) + { + $params = array_merge($params, (array) $handler->getRcptParams()); + } + $paramStr = !empty($params) ? ' ' . implode(' ', $params) : ''; + $this->executeCommand( + sprintf("RCPT TO: <%s>%s\r\n", $address, $paramStr), array(250, 251, 252) + ); + } + + // -- Private methods + + /** Determine ESMTP capabilities by function group */ + private function _getCapabilities($ehloResponse) + { + $capabilities = array(); + $ehloResponse = trim($ehloResponse); + $lines = explode("\r\n", $ehloResponse); + array_shift($lines); + foreach ($lines as $line) + { + if (preg_match('/^[0-9]{3}[ -]([A-Z0-9-]+)((?:[ =].*)?)$/Di', $line, $matches)) + { + $keyword = strtoupper($matches[1]); + $paramStr = strtoupper(ltrim($matches[2], ' =')); + $params = !empty($paramStr) ? explode(' ', $paramStr) : array(); + $capabilities[$keyword] = $params; + } + } + return $capabilities; + } + + /** Set parameters which are used by each extension handler */ + private function _setHandlerParams() + { + foreach ($this->_handlers as $keyword => $handler) + { + if (array_key_exists($keyword, $this->_capabilities)) + { + $handler->setKeywordParams($this->_capabilities[$keyword]); + } + } + } + + /** Get ESMTP handlers which are currently ok to use */ + private function _getActiveHandlers() + { + $handlers = array(); + foreach ($this->_handlers as $keyword => $handler) + { + if (array_key_exists($keyword, $this->_capabilities)) + { + $handlers[] = $handler; + } + } + return $handlers; + } + + /** Custom sort for extension handler ordering */ + private function _sortHandlers($a, $b) + { + return $a->getPriorityOver($b->getHandledKeyword()); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php b/External/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php new file mode 100755 index 0000000..e62491c --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php @@ -0,0 +1,97 @@ +_transports); + $sent = 0; + + for ($i = 0; $i < $maxTransports + && $transport = $this->_getNextTransport(); ++$i) + { + try + { + if (!$transport->isStarted()) + { + $transport->start(); + } + + return $transport->send($message, $failedRecipients); + } + catch (Swift_TransportException $e) + { + $this->_killCurrentTransport(); + } + } + + if (count($this->_transports) == 0) + { + throw new Swift_TransportException( + 'All Transports in FailoverTransport failed, or no Transports available' + ); + } + + return $sent; + } + + // -- Protected methods + + protected function _getNextTransport() + { + if (!isset($this->_currentTransport)) + { + $this->_currentTransport = parent::_getNextTransport(); + } + return $this->_currentTransport; + } + + protected function _killCurrentTransport() + { + $this->_currentTransport = null; + parent::_killCurrentTransport(); + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php b/External/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php new file mode 100755 index 0000000..ac66ef0 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php @@ -0,0 +1,65 @@ +_transports = $transports; + $this->_deadTransports = array(); + } + + /** + * Get $transports to delegate to. + * + * @return array Swift_Transport + */ + public function getTransports(array $transports) + { + return array_merge($this->_transports, $this->_deadTransports); + } + + /** + * Test if this Transport mechanism has started. + * + * @return boolean + */ + public function isStarted() + { + return count($this->_transports) > 0; + } + + /** + * Start this Transport mechanism. + */ + public function start() + { + $this->_transports = array_merge($this->_transports, $this->_deadTransports); + } + + /** + * Stop this Transport mechanism. + */ + public function stop() + { + foreach ($this->_transports as $transport) + { + $transport->stop(); + } + } + + /** + * Send the given Message. + * + * Recipient/sender data will be retreived from the Message API. + * The return value is the number of recipients who were accepted for delivery. + * + * @param Swift_Mime_Message $message + * @param string[] &$failedRecipients to collect failures by-reference + * @return int + */ + public function send(Swift_Mime_Message $message, &$failedRecipients = null) + { + $maxTransports = count($this->_transports); + $sent = 0; + + for ($i = 0; $i < $maxTransports + && $transport = $this->_getNextTransport(); ++$i) + { + try + { + if (!$transport->isStarted()) + { + $transport->start(); + } + if ($sent = $transport->send($message, $failedRecipients)) + { + break; + } + } + catch (Swift_TransportException $e) + { + $this->_killCurrentTransport(); + } + } + + if (count($this->_transports) == 0) + { + throw new Swift_TransportException( + 'All Transports in LoadBalancedTransport failed, or no Transports available' + ); + } + + return $sent; + } + + /** + * Register a plugin. + * + * @param Swift_Events_EventListener $plugin + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + foreach ($this->_transports as $transport) + { + $transport->registerPlugin($plugin); + } + } + + // -- Protected methods + + /** + * Rotates the transport list around and returns the first instance. + * + * @return Swift_Transport + * @access protected + */ + protected function _getNextTransport() + { + if ($next = array_shift($this->_transports)) + { + $this->_transports[] = $next; + } + return $next; + } + + /** + * Tag the currently used (top of stack) transport as dead/useless. + * + * @access protected + */ + protected function _killCurrentTransport() + { + if ($transport = array_pop($this->_transports)) + { + try + { + $transport->stop(); + } + catch (Exception $e) + { + } + $this->_deadTransports[] = $transport; + } + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php b/External/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php new file mode 100755 index 0000000..dda882f --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php @@ -0,0 +1,36 @@ +_invoker = $invoker; + $this->_eventDispatcher = $eventDispatcher; + } + + /** + * Not used. + */ + public function isStarted() + { + return false; + } + + /** + * Not used. + */ + public function start() + { + } + + /** + * Not used. + */ + public function stop() + { + } + + /** + * Set the additional parameters used on the mail() function. + * + * This string is formatted for sprintf() where %s is the sender address. + * + * @param string $params + */ + public function setExtraParams($params) + { + $this->_extraParams = $params; + return $this; + } + + /** + * Get the additional parameters used on the mail() function. + * + * This string is formatted for sprintf() where %s is the sender address. + * + * @return string + */ + public function getExtraParams() + { + return $this->_extraParams; + } + + /** + * Send the given Message. + * + * Recipient/sender data will be retreived from the Message API. + * The return value is the number of recipients who were accepted for delivery. + * + * @param Swift_Mime_Message $message + * @param string[] &$failedRecipients to collect failures by-reference + * @return int + */ + public function send(Swift_Mime_Message $message, &$failedRecipients = null) + { + $failedRecipients = (array) $failedRecipients; + + if ($evt = $this->_eventDispatcher->createSendEvent($this, $message)) + { + $this->_eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt->bubbleCancelled()) + { + return 0; + } + } + + $count = ( + count((array) $message->getTo()) + + count((array) $message->getCc()) + + count((array) $message->getBcc()) + ); + + $toHeader = $message->getHeaders()->get('To'); + $subjectHeader = $message->getHeaders()->get('Subject'); + + $to = $toHeader->getFieldBody(); + $subject = $subjectHeader->getFieldBody(); + + $reversePath = $this->_getReversePath($message); + + //Remove headers that would otherwise be duplicated + $message->getHeaders()->remove('To'); + $message->getHeaders()->remove('Subject'); + + $messageStr = $message->toString(); + + $message->getHeaders()->set($toHeader); + $message->getHeaders()->set($subjectHeader); + + //Separate headers from body + if (false !== $endHeaders = strpos($messageStr, "\r\n\r\n")) + { + $headers = substr($messageStr, 0, $endHeaders) . "\r\n"; //Keep last EOL + $body = substr($messageStr, $endHeaders + 4); + } + else + { + $headers = $messageStr . "\r\n"; + $body = ''; + } + + unset($messageStr); + + if ("\r\n" != PHP_EOL) //Non-windows (not using SMTP) + { + $headers = str_replace("\r\n", PHP_EOL, $headers); + $body = str_replace("\r\n", PHP_EOL, $body); + } + else //Windows, using SMTP + { + $headers = str_replace("\r\n.", "\r\n..", $headers); + $body = str_replace("\r\n.", "\r\n..", $body); + } + + if ($this->_invoker->mail($to, $subject, $body, $headers, + sprintf($this->_extraParams, $reversePath))) + { + if ($evt) + { + $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); + $evt->setFailedRecipients($failedRecipients); + $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + } + } + else + { + $failedRecipients = array_merge( + $failedRecipients, + array_keys((array) $message->getTo()), + array_keys((array) $message->getCc()), + array_keys((array) $message->getBcc()) + ); + + if ($evt) + { + $evt->setResult(Swift_Events_SendEvent::RESULT_FAILED); + $evt->setFailedRecipients($failedRecipients); + $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + } + + $message->generateId(); + + $count = 0; + } + + return $count; + } + + /** + * Register a plugin. + * + * @param Swift_Events_EventListener $plugin + */ + public function registerPlugin(Swift_Events_EventListener $plugin) + { + $this->_eventDispatcher->bindEventListener($plugin); + } + + // -- Private methods + + /** Determine the best-use reverse path for this message */ + private function _getReversePath(Swift_Mime_Message $message) + { + $return = $message->getReturnPath(); + $sender = $message->getSender(); + $from = $message->getFrom(); + $path = null; + if (!empty($return)) + { + $path = $return; + } + elseif (!empty($sender)) + { + $keys = array_keys($sender); + $path = array_shift($keys); + } + elseif (!empty($from)) + { + $keys = array_keys($from); + $path = array_shift($keys); + } + return $path; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php b/External/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php new file mode 100755 index 0000000..aae8bde --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php @@ -0,0 +1,173 @@ + 30, + 'blocking' => 1, + 'command' => '/usr/sbin/sendmail -bs', + 'type' => Swift_Transport_IoBuffer::TYPE_PROCESS + ); + + /** + * Create a new SendmailTransport with $buf for I/O. + * @param Swift_Transport_IoBuffer $buf + * @param Swift_Events_EventDispatcher $dispatcher + */ + public function __construct(Swift_Transport_IoBuffer $buf, + Swift_Events_EventDispatcher $dispatcher) + { + parent::__construct($buf, $dispatcher); + } + + /** + * Start the standalone SMTP session if running in -bs mode. + */ + public function start() + { + if (false !== strpos($this->getCommand(), ' -bs')) + { + parent::start(); + } + } + + /** + * Set the command to invoke. + * If using -t mode you are strongly advised to include -oi or -i in the + * flags. For example: /usr/sbin/sendmail -oi -t + * Swift will append a -f flag if one is not present. + * The recommended mode is "-bs" since it is interactive and failure notifications + * are hence possible. + * @param string $command + */ + public function setCommand($command) + { + $this->_params['command'] = $command; + return $this; + } + + /** + * Get the sendmail command which will be invoked. + * @return string + */ + public function getCommand() + { + return $this->_params['command']; + } + + /** + * Send the given Message. + * Recipient/sender data will be retreived from the Message API. + * The return value is the number of recipients who were accepted for delivery. + * NOTE: If using 'sendmail -t' you will not be aware of any failures until + * they bounce (i.e. send() will always return 100% success). + * @param Swift_Mime_Message $message + * @param string[] &$failedRecipients to collect failures by-reference + * @return int + */ + public function send(Swift_Mime_Message $message, &$failedRecipients = null) + { + $failedRecipients = (array) $failedRecipients; + $command = $this->getCommand(); + $buffer = $this->getBuffer(); + + if (false !== strpos($command, ' -t')) + { + if ($evt = $this->_eventDispatcher->createSendEvent($this, $message)) + { + $this->_eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); + if ($evt->bubbleCancelled()) + { + return 0; + } + } + + if (false === strpos($command, ' -f')) + { + $command .= ' -f' . $this->_getReversePath($message); + } + + $buffer->initialize(array_merge($this->_params, array('command' => $command))); + + if (false === strpos($command, ' -i') && false === strpos($command, ' -oi')) + { + $buffer->setWriteTranslations(array("\r\n" => "\n", "\n." => "\n..")); + } + else + { + $buffer->setWriteTranslations(array("\r\n"=>"\n")); + } + + $count = count((array) $message->getTo()) + + count((array) $message->getCc()) + + count((array) $message->getBcc()) + ; + $message->toByteStream($buffer); + $buffer->flushBuffers(); + $buffer->setWriteTranslations(array()); + $buffer->terminate(); + + if ($evt) + { + $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); + $evt->setFailedRecipients($failedRecipients); + $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); + } + + $message->generateId(); + } + elseif (false !== strpos($command, ' -bs')) + { + $count = parent::send($message, $failedRecipients); + } + else + { + $this->_throwException(new Swift_TransportException( + 'Unsupported sendmail command flags [' . $command . ']. ' . + 'Must be one of "-bs" or "-t" but can include additional flags.' + )); + } + + return $count; + } + + // -- Protected methods + + /** Get the params to initialize the buffer */ + protected function _getBufferParams() + { + return $this->_params; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php b/External/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php new file mode 100755 index 0000000..271ba84 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php @@ -0,0 +1,58 @@ +. + + */ + +//@require 'Swift/Transport/MailInvoker.php'; + +/** + * This is the implementation class for {@link Swift_Transport_MailInvoker}. + * + * @package Swift + * @subpackage Transport + * @author Chris Corbyn + */ +class Swift_Transport_SimpleMailInvoker implements Swift_Transport_MailInvoker +{ + + /** + * Send mail via the mail() function. + * + * This method takes the same arguments as PHP mail(). + * + * @param string $to + * @param string $subject + * @param string $body + * @param string $headers + * @param string $extraParams + * + * @return boolean + */ + public function mail($to, $subject, $body, $headers = null, $extraParams = null) + { + if (!ini_get('safe_mode')) + { + return mail($to, $subject, $body, $headers, $extraParams); + } + else + { + return mail($to, $subject, $body, $headers); + } + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php b/External/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php new file mode 100755 index 0000000..ee9b8ed --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php @@ -0,0 +1,36 @@ +_replacementFactory = $replacementFactory; + } + + /** + * Perform any initialization needed, using the given $params. + * Parameters will vary depending upon the type of IoBuffer used. + * @param array $params + */ + public function initialize(array $params) + { + $this->_params = $params; + switch ($params['type']) + { + case self::TYPE_PROCESS: + $this->_establishProcessConnection(); + break; + case self::TYPE_SOCKET: + default: + $this->_establishSocketConnection(); + break; + } + } + + /** + * Set an individual param on the buffer (e.g. switching to SSL). + * @param string $param + * @param mixed $value + */ + public function setParam($param, $value) + { + if (isset($this->_stream)) + { + switch ($param) + { + case 'protocol': + if (!array_key_exists('protocol', $this->_params) + || $value != $this->_params['protocol']) + { + if ('tls' == $value) + { + stream_socket_enable_crypto( + $this->_stream, true, STREAM_CRYPTO_METHOD_TLS_CLIENT + ); + } + } + break; + } + } + $this->_params[$param] = $value; + } + + /** + * Perform any shutdown logic needed. + */ + public function terminate() + { + if (isset($this->_stream)) + { + switch ($this->_params['type']) + { + case self::TYPE_PROCESS: + fclose($this->_in); + fclose($this->_out); + proc_close($this->_stream); + break; + case self::TYPE_SOCKET: + default: + fclose($this->_stream); + break; + } + } + $this->_stream = null; + $this->_out = null; + $this->_in = null; + } + + /** + * Set an array of string replacements which should be made on data written + * to the buffer. This could replace LF with CRLF for example. + * @param string[] $replacements + */ + public function setWriteTranslations(array $replacements) + { + foreach ($this->_translations as $search => $replace) + { + if (!isset($replacements[$search])) + { + $this->removeFilter($search); + unset($this->_translations[$search]); + } + } + + foreach ($replacements as $search => $replace) + { + if (!isset($this->_translations[$search])) + { + $this->addFilter( + $this->_replacementFactory->createFilter($search, $replace), $search + ); + $this->_translations[$search] = true; + } + } + } + + /** + * Get a line of output (including any CRLF). + * The $sequence number comes from any writes and may or may not be used + * depending upon the implementation. + * @param int $sequence of last write to scan from + * @return string + */ + public function readLine($sequence) + { + if (isset($this->_out) && !feof($this->_out)) + { + $line = fgets($this->_out); + return $line; + } + } + + /** + * Reads $length bytes from the stream into a string and moves the pointer + * through the stream by $length. If less bytes exist than are requested the + * remaining bytes are given instead. If no bytes are remaining at all, boolean + * false is returned. + * @param int $length + * @return string + */ + public function read($length) + { + if (isset($this->_out) && !feof($this->_out)) + { + $ret = fread($this->_out, $length); + return $ret; + } + } + + /** Not implemented */ + public function setReadPointer($byteOffset) + { + } + + // -- Protected methods + + /** Flush the stream contents */ + protected function _flush() + { + if (isset($this->_in)) + { + fflush($this->_in); + } + } + + /** Write this bytes to the stream */ + protected function _commit($bytes) + { + if (isset($this->_in) + && fwrite($this->_in, $bytes)) + { + return ++$this->_sequence; + } + } + + // -- Private methods + + /** + * Establishes a connection to a remote server. + * @access private + */ + private function _establishSocketConnection() + { + $host = $this->_params['host']; + if (!empty($this->_params['protocol'])) + { + $host = $this->_params['protocol'] . '://' . $host; + } + $timeout = 15; + if (!empty($this->_params['timeout'])) + { + $timeout = $this->_params['timeout']; + } + if (!$this->_stream = fsockopen($host, $this->_params['port'], $errno, $errstr, $timeout)) + { + throw new Swift_TransportException( + 'Connection could not be established with host ' . $this->_params['host'] . + ' [' . $errstr . ' #' . $errno . ']' + ); + } + if (!empty($this->_params['blocking'])) + { + stream_set_blocking($this->_stream, 1); + } + else + { + stream_set_blocking($this->_stream, 0); + } + $this->_in =& $this->_stream; + $this->_out =& $this->_stream; + } + + /** + * Opens a process for input/output. + * @access private + */ + private function _establishProcessConnection() + { + $command = $this->_params['command']; + $descriptorSpec = array( + 0 => array('pipe', 'r'), + 1 => array('pipe', 'w'), + 2 => array('pipe', 'w') + ); + $this->_stream = proc_open($command, $descriptorSpec, $pipes); + stream_set_blocking($pipes[2], 0); + if ($err = stream_get_contents($pipes[2])) + { + throw new Swift_TransportException( + 'Process could not be started [' . $err . ']' + ); + } + $this->_in =& $pipes[0]; + $this->_out =& $pipes[1]; + } + +} diff --git a/External/swiftmailer/lib/classes/Swift/TransportException.php b/External/swiftmailer/lib/classes/Swift/TransportException.php new file mode 100755 index 0000000..b7cd658 --- /dev/null +++ b/External/swiftmailer/lib/classes/Swift/TransportException.php @@ -0,0 +1,31 @@ + register('cache') + -> asAliasOf('cache.array') + + -> register('tempdir') + -> asValue('/tmp') + + -> register('cache.null') + -> asSharedInstanceOf('Swift_KeyCache_NullKeyCache') + + -> register('cache.array') + -> asSharedInstanceOf('Swift_KeyCache_ArrayKeyCache') + -> withDependencies(array('cache.inputstream')) + + -> register('cache.disk') + -> asSharedInstanceOf('Swift_KeyCache_DiskKeyCache') + -> withDependencies(array('cache.inputstream', 'tempdir')) + + -> register('cache.inputstream') + -> asNewInstanceOf('Swift_KeyCache_SimpleKeyCacheInputStream') + + ; diff --git a/External/swiftmailer/lib/dependency_maps/mime_deps.php b/External/swiftmailer/lib/dependency_maps/mime_deps.php new file mode 100755 index 0000000..e03927a --- /dev/null +++ b/External/swiftmailer/lib/dependency_maps/mime_deps.php @@ -0,0 +1,97 @@ + register('properties.charset') + -> asValue('utf-8') + + -> register('mime.message') + -> asNewInstanceOf('Swift_Mime_SimpleMessage') + -> withDependencies(array( + 'mime.headerset', + 'mime.qpcontentencoder', + 'cache', + 'properties.charset' + )) + + -> register('mime.part') + -> asNewInstanceOf('Swift_Mime_MimePart') + -> withDependencies(array( + 'mime.headerset', + 'mime.qpcontentencoder', + 'cache', + 'properties.charset' + )) + + -> register('mime.attachment') + -> asNewInstanceOf('Swift_Mime_Attachment') + -> withDependencies(array( + 'mime.headerset', + 'mime.base64contentencoder', + 'cache' + )) + -> addConstructorValue($swift_mime_types) + + -> register('mime.embeddedfile') + -> asNewInstanceOf('Swift_Mime_EmbeddedFile') + -> withDependencies(array( + 'mime.headerset', + 'mime.base64contentencoder', + 'cache' + )) + -> addConstructorValue($swift_mime_types) + + -> register('mime.headerfactory') + -> asNewInstanceOf('Swift_Mime_SimpleHeaderFactory') + -> withDependencies(array( + 'mime.qpheaderencoder', + 'mime.rfc2231encoder', + 'properties.charset' + )) + + -> register('mime.headerset') + -> asNewInstanceOf('Swift_Mime_SimpleHeaderSet') + -> withDependencies(array('mime.headerfactory', 'properties.charset')) + + -> register('mime.qpheaderencoder') + -> asNewInstanceOf('Swift_Mime_HeaderEncoder_QpHeaderEncoder') + -> withDependencies(array('mime.charstream')) + + -> register('mime.charstream') + -> asNewInstanceOf('Swift_CharacterStream_NgCharacterStream') + -> withDependencies(array('mime.characterreaderfactory', 'properties.charset')) + + -> register('mime.bytecanonicalizer') + -> asSharedInstanceOf('Swift_StreamFilters_ByteArrayReplacementFilter') + -> addConstructorValue(array(array(0x0D, 0x0A), array(0x0D), array(0x0A))) + -> addConstructorValue(array(array(0x0A), array(0x0A), array(0x0D, 0x0A))) + + -> register('mime.characterreaderfactory') + -> asSharedInstanceOf('Swift_CharacterReaderFactory_SimpleCharacterReaderFactory') + + -> register('mime.qpcontentencoder') + -> asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoder') + -> withDependencies(array('mime.charstream', 'mime.bytecanonicalizer')) + + -> register('mime.7bitcontentencoder') + -> asNewInstanceOf('Swift_Mime_ContentEncoder_PlainContentEncoder') + -> addConstructorValue('7bit') + -> addConstructorValue(true) + + -> register('mime.8bitcontentencoder') + -> asNewInstanceOf('Swift_Mime_ContentEncoder_PlainContentEncoder') + -> addConstructorValue('8bit') + -> addConstructorValue(true) + + -> register('mime.base64contentencoder') + -> asSharedInstanceOf('Swift_Mime_ContentEncoder_Base64ContentEncoder') + + -> register('mime.rfc2231encoder') + -> asNewInstanceOf('Swift_Encoder_Rfc2231Encoder') + -> withDependencies(array('mime.charstream')) + + ; + +unset($swift_mime_types); diff --git a/External/swiftmailer/lib/dependency_maps/transport_deps.php b/External/swiftmailer/lib/dependency_maps/transport_deps.php new file mode 100755 index 0000000..32881d6 --- /dev/null +++ b/External/swiftmailer/lib/dependency_maps/transport_deps.php @@ -0,0 +1,62 @@ + register('transport.smtp') + -> asNewInstanceOf('Swift_Transport_EsmtpTransport') + -> withDependencies(array( + 'transport.buffer', + array('transport.authhandler'), + 'transport.eventdispatcher' + )) + + -> register('transport.sendmail') + -> asNewInstanceOf('Swift_Transport_SendmailTransport') + -> withDependencies(array( + 'transport.buffer', + 'transport.eventdispatcher' + )) + + -> register('transport.mail') + -> asNewInstanceOf('Swift_Transport_MailTransport') + -> withDependencies(array('transport.mailinvoker', 'transport.eventdispatcher')) + + -> register('transport.loadbalanced') + -> asNewInstanceOf('Swift_Transport_LoadBalancedTransport') + + -> register('transport.failover') + -> asNewInstanceOf('Swift_Transport_FailoverTransport') + + -> register('transport.mailinvoker') + -> asSharedInstanceOf('Swift_Transport_SimpleMailInvoker') + + -> register('transport.buffer') + -> asNewInstanceOf('Swift_Transport_StreamBuffer') + -> withDependencies(array('transport.replacementfactory')) + + -> register('transport.authhandler') + -> asNewInstanceOf('Swift_Transport_Esmtp_AuthHandler') + -> withDependencies(array( + array( + 'transport.crammd5auth', + 'transport.loginauth', + 'transport.plainauth' + ) + )) + + -> register('transport.crammd5auth') + -> asNewInstanceOf('Swift_Transport_Esmtp_Auth_CramMd5Authenticator') + + -> register('transport.loginauth') + -> asNewInstanceOf('Swift_Transport_Esmtp_Auth_LoginAuthenticator') + + -> register('transport.plainauth') + -> asNewInstanceOf('Swift_Transport_Esmtp_Auth_PlainAuthenticator') + + -> register('transport.eventdispatcher') + -> asNewInstanceOf('Swift_Events_SimpleEventDispatcher') + + -> register('transport.replacementfactory') + -> asSharedInstanceOf('Swift_StreamFilters_StringReplacementFilterFactory') + + ; diff --git a/External/swiftmailer/lib/mime_types.php b/External/swiftmailer/lib/mime_types.php new file mode 100755 index 0000000..65c9aa0 --- /dev/null +++ b/External/swiftmailer/lib/mime_types.php @@ -0,0 +1,76 @@ + 'audio/x-aiff', + 'aiff' => 'audio/x-aiff', + 'avi' => 'video/avi', + 'bmp' => 'image/bmp', + 'bz2' => 'application/x-bz2', + 'csv' => 'text/csv', + 'dmg' => 'application/x-apple-diskimage', + 'doc' => 'application/msword', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'eml' => 'message/rfc822', + 'aps' => 'application/postscript', + 'exe' => 'application/x-ms-dos-executable', + 'flv' => 'video/x-flv', + 'gif' => 'image/gif', + 'gz' => 'application/x-gzip', + 'hqx' => 'application/stuffit', + 'htm' => 'text/html', + 'html' => 'text/html', + 'jar' => 'application/x-java-archive', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'm3u' => 'audio/x-mpegurl', + 'm4a' => 'audio/mp4', + 'mdb' => 'application/x-msaccess', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mov' => 'video/quicktime', + 'mp3' => 'audio/mpeg', + 'mp4' => 'video/mp4', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'odg' => 'vnd.oasis.opendocument.graphics', + 'odp' => 'vnd.oasis.opendocument.presentation', + 'odt' => 'vnd.oasis.opendocument.text', + 'ods' => 'vnd.oasis.opendocument.spreadsheet', + 'ogg' => 'audio/ogg', + 'pdf' => 'application/pdf', + 'png' => 'image/png', + 'ppt' => 'application/vnd.ms-powerpoint', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'ps' => 'application/postscript', + 'rar' => 'application/x-rar-compressed', + 'rtf' => 'application/rtf', + 'tar' => 'application/x-tar', + 'sit' => 'application/x-stuffit', + 'svg' => 'image/svg+xml', + 'tif' => 'image/tiff', + 'tiff' => 'image/tiff', + 'ttf' => 'application/x-font-truetype', + 'txt' => 'text/plain', + 'vcf' => 'text/x-vcard', + 'wav' => 'audio/wav', + 'wma' => 'audio/x-ms-wma', + 'wmv' => 'audio/x-ms-wmv', + 'xls' => 'application/excel', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xml' => 'application/xml', + 'zip' => 'application/zip' +); diff --git a/External/swiftmailer/lib/preferences.php b/External/swiftmailer/lib/preferences.php new file mode 100755 index 0000000..0b9e4b1 --- /dev/null +++ b/External/swiftmailer/lib/preferences.php @@ -0,0 +1,20 @@ +setCharset('utf-8'); + +// Without these lines the default caching mechanism is "array" but this uses +// a lot of memory. +// If possible, use a disk cache to enable attaching large attachments etc +if (function_exists('sys_get_temp_dir') && is_writable(sys_get_temp_dir())) +{ + Swift_Preferences::getInstance() + -> setTempDir(sys_get_temp_dir()) + -> setCacheType('disk'); +} diff --git a/External/swiftmailer/lib/swift_init.php b/External/swiftmailer/lib/swift_init.php new file mode 100755 index 0000000..fe624a9 --- /dev/null +++ b/External/swiftmailer/lib/swift_init.php @@ -0,0 +1,21 @@ + + +GNOME icons, Humanity icons, and elementary icons are all licensed under the GPL. + +This package is licensed under GNU General Public License version 2. + +Icons based on GNOME and other GNOME projects are licensed GPL. + You can visit the GNOME website here: + http://www.gnome.org/ + +Icons based on Tango sources or taken from the Tango project are public domain. + You can visit the Tango project website here: + http://tango.freedesktop.org/Tango_Desktop_Project + +Icons based on Humanity sources or taken from the elementary project are licensed GPL. + You can visit the Humanity website here: + http://launchpad.net/humanity + +#################### +Special Thanks: # +#################### + +The awesome Humanity team for their hard work! diff --git a/Img/Icons/elementary_2_5/CONTRIBUTORS b/Img/Icons/elementary_2_5/CONTRIBUTORS new file mode 100755 index 0000000..801c4cc --- /dev/null +++ b/Img/Icons/elementary_2_5/CONTRIBUTORS @@ -0,0 +1,3 @@ +Sebastian Porta +Oliver Scholtz +Dennis Fisher, for his amazing work with emblems to make them look beautiful. diff --git a/Img/Icons/elementary_2_5/COPYING b/Img/Icons/elementary_2_5/COPYING new file mode 100755 index 0000000..d60c31a --- /dev/null +++ b/Img/Icons/elementary_2_5/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/Img/Icons/elementary_2_5/ChangeLog b/Img/Icons/elementary_2_5/ChangeLog new file mode 100755 index 0000000..2ba7169 --- /dev/null +++ b/Img/Icons/elementary_2_5/ChangeLog @@ -0,0 +1,6 @@ +Elementary icons 2.5 kde port - by jetpack, changelog: + +0.1 +=== +* Initial Version. +* Elementary icons by Dan Rabbit v2.5 \ No newline at end of file diff --git a/Img/Icons/elementary_2_5/add.png b/Img/Icons/elementary_2_5/add.png new file mode 100755 index 0000000..e6c9c9c Binary files /dev/null and b/Img/Icons/elementary_2_5/add.png differ diff --git a/Img/Icons/elementary_2_5/clear_filter.png b/Img/Icons/elementary_2_5/clear_filter.png new file mode 100755 index 0000000..c4b47db Binary files /dev/null and b/Img/Icons/elementary_2_5/clear_filter.png differ diff --git a/Img/Icons/elementary_2_5/delete.png b/Img/Icons/elementary_2_5/delete.png new file mode 100755 index 0000000..c4b47db Binary files /dev/null and b/Img/Icons/elementary_2_5/delete.png differ diff --git a/Img/Icons/elementary_2_5/down.png b/Img/Icons/elementary_2_5/down.png new file mode 100755 index 0000000..21c6d58 Binary files /dev/null and b/Img/Icons/elementary_2_5/down.png differ diff --git a/Img/Icons/elementary_2_5/edit.png b/Img/Icons/elementary_2_5/edit.png new file mode 100755 index 0000000..ed0d0ef Binary files /dev/null and b/Img/Icons/elementary_2_5/edit.png differ diff --git a/Img/Icons/elementary_2_5/find.png b/Img/Icons/elementary_2_5/find.png new file mode 100755 index 0000000..382cc98 Binary files /dev/null and b/Img/Icons/elementary_2_5/find.png differ diff --git a/Img/Icons/elementary_2_5/left.png b/Img/Icons/elementary_2_5/left.png new file mode 100755 index 0000000..316d4c1 Binary files /dev/null and b/Img/Icons/elementary_2_5/left.png differ diff --git a/Img/Icons/elementary_2_5/link.png b/Img/Icons/elementary_2_5/link.png new file mode 100755 index 0000000..625a1fb Binary files /dev/null and b/Img/Icons/elementary_2_5/link.png differ diff --git a/Img/Icons/elementary_2_5/panel.png b/Img/Icons/elementary_2_5/panel.png new file mode 100755 index 0000000..464149f Binary files /dev/null and b/Img/Icons/elementary_2_5/panel.png differ diff --git a/Img/Icons/elementary_2_5/up.png b/Img/Icons/elementary_2_5/up.png new file mode 100755 index 0000000..14d3603 Binary files /dev/null and b/Img/Icons/elementary_2_5/up.png differ diff --git a/Img/Icons/file.png b/Img/Icons/file.png new file mode 100644 index 0000000..443765f Binary files /dev/null and b/Img/Icons/file.png differ diff --git a/Img/Icons/folder.png b/Img/Icons/folder.png new file mode 100644 index 0000000..89fb6d5 Binary files /dev/null and b/Img/Icons/folder.png differ diff --git a/Img/Icons/image.png b/Img/Icons/image.png new file mode 100644 index 0000000..bbc8c82 Binary files /dev/null and b/Img/Icons/image.png differ diff --git a/Img/Icons/index.html b/Img/Icons/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Img/Icons/index.html @@ -0,0 +1 @@ + diff --git a/Img/back-60.png b/Img/back-60.png new file mode 100644 index 0000000..225df8e Binary files /dev/null and b/Img/back-60.png differ diff --git a/Img/back_last.png b/Img/back_last.png new file mode 100644 index 0000000..6411e49 Binary files /dev/null and b/Img/back_last.png differ diff --git a/Img/back_wiki.png b/Img/back_wiki.png new file mode 100644 index 0000000..b34a9b9 Binary files /dev/null and b/Img/back_wiki.png differ diff --git a/Img/discover.png b/Img/discover.png new file mode 100644 index 0000000..28c799a Binary files /dev/null and b/Img/discover.png differ diff --git a/Img/download.png b/Img/download.png new file mode 100644 index 0000000..d2f81dc Binary files /dev/null and b/Img/download.png differ diff --git a/Img/download_code.png b/Img/download_code.png new file mode 100755 index 0000000..f40fc74 Binary files /dev/null and b/Img/download_code.png differ diff --git a/Img/download_code_gpl3.png b/Img/download_code_gpl3.png new file mode 100644 index 0000000..7349d11 Binary files /dev/null and b/Img/download_code_gpl3.png differ diff --git a/Img/edit-60.png b/Img/edit-60.png new file mode 100644 index 0000000..254ce23 Binary files /dev/null and b/Img/edit-60.png differ diff --git a/Img/fingerprint_icon-22.png b/Img/fingerprint_icon-22.png new file mode 100644 index 0000000..5593419 Binary files /dev/null and b/Img/fingerprint_icon-22.png differ diff --git a/Img/fingerprint_icon.png b/Img/fingerprint_icon.png new file mode 100644 index 0000000..989ba28 Binary files /dev/null and b/Img/fingerprint_icon.png differ diff --git a/Img/fsf_logo.png b/Img/fsf_logo.png new file mode 100755 index 0000000..90ac03d Binary files /dev/null and b/Img/fsf_logo.png differ diff --git a/Img/history-60.png b/Img/history-60.png new file mode 100644 index 0000000..c726964 Binary files /dev/null and b/Img/history-60.png differ diff --git a/Img/link.png b/Img/link.png new file mode 100644 index 0000000..12f9bce Binary files /dev/null and b/Img/link.png differ diff --git a/Img/mobile.png b/Img/mobile.png new file mode 100644 index 0000000..4fbf1de Binary files /dev/null and b/Img/mobile.png differ diff --git a/Img/new-60.png b/Img/new-60.png new file mode 100644 index 0000000..d484867 Binary files /dev/null and b/Img/new-60.png differ diff --git a/Img/popup_back.png b/Img/popup_back.png new file mode 100644 index 0000000..4cb7139 Binary files /dev/null and b/Img/popup_back.png differ diff --git a/Img/rss.png b/Img/rss.png new file mode 100644 index 0000000..f744669 Binary files /dev/null and b/Img/rss.png differ diff --git a/Img/search_back.png b/Img/search_back.png new file mode 100644 index 0000000..6fd3b01 Binary files /dev/null and b/Img/search_back.png differ diff --git a/Img/tab_icon_2.ico b/Img/tab_icon_2.ico new file mode 100644 index 0000000..1adece3 Binary files /dev/null and b/Img/tab_icon_2.ico differ diff --git a/Img/talk-60.png b/Img/talk-60.png new file mode 100644 index 0000000..d892a8d Binary files /dev/null and b/Img/talk-60.png differ diff --git a/Img/talk_messages.png b/Img/talk_messages.png new file mode 100644 index 0000000..6a753d5 Binary files /dev/null and b/Img/talk_messages.png differ diff --git a/Img/title.png b/Img/title.png new file mode 100644 index 0000000..fb0b38d Binary files /dev/null and b/Img/title.png differ diff --git a/Js/DisplayTag.js b/Js/DisplayTag.js new file mode 100755 index 0000000..1ba1fb7 --- /dev/null +++ b/Js/DisplayTag.js @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/Js/TinyMCE.js b/Js/TinyMCE.js new file mode 100755 index 0000000..b0f994e --- /dev/null +++ b/Js/TinyMCE.js @@ -0,0 +1,34 @@ +tinyMCE.init({ + // General options + mode : "textareas", + theme : "advanced", + editor_selector : "contentArea", +// editor_deselector : "mceNoEditor", + plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template", + + // Theme options + theme_advanced_buttons1 : "justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect", + theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,code", + theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media", + theme_advanced_buttons4 : "styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,template,|,forecolor,backcolor,bold,italic,underline,strikethrough,|,insertdate,inserttime,preview", + theme_advanced_toolbar_location : "top", + theme_advanced_toolbar_align : "left", + theme_advanced_statusbar_location : "bottom", + theme_advanced_resizing : true, + + // Example content CSS (should be your site CSS) + content_css : "../stili_editor.css", + + // Drop lists for link/image/media/template dialogs + template_external_list_url : "lists/template_list.js", + external_link_list_url : "lists/link_list.js", + external_image_list_url : "lists/image_list.js", + media_external_list_url : "lists/media_list.js", + + // Replace values for the template plugin + template_replace_values : { + username : "Some User", + staffid : "991234" + } + }); + diff --git a/Js/functions.js b/Js/functions.js new file mode 100644 index 0000000..5b426d2 --- /dev/null +++ b/Js/functions.js @@ -0,0 +1,189 @@ + \ No newline at end of file diff --git a/Js/index.html b/Js/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Js/index.html @@ -0,0 +1 @@ + diff --git a/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png b/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png new file mode 100755 index 0000000..82524ab Binary files /dev/null and b/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png differ diff --git a/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png b/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png new file mode 100755 index 0000000..6aed97a Binary files /dev/null and b/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png differ diff --git a/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png b/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png new file mode 100755 index 0000000..f11ca67 Binary files /dev/null and b/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png differ diff --git a/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png b/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png new file mode 100755 index 0000000..68306d1 Binary files /dev/null and b/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png differ diff --git a/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png b/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png new file mode 100755 index 0000000..f567c28 Binary files /dev/null and b/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png differ diff --git a/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png b/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png new file mode 100755 index 0000000..29e9965 Binary files /dev/null and b/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png differ diff --git a/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png b/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png new file mode 100755 index 0000000..9a46d19 Binary files /dev/null and b/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png differ diff --git a/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png b/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png new file mode 100755 index 0000000..f811f30 Binary files /dev/null and b/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png differ diff --git a/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png b/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png new file mode 100755 index 0000000..755fe99 Binary files /dev/null and b/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png differ diff --git a/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png b/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png new file mode 100755 index 0000000..98705f9 Binary files /dev/null and b/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png differ diff --git a/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png b/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png new file mode 100755 index 0000000..2179078 Binary files /dev/null and b/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png differ diff --git a/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png b/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png new file mode 100755 index 0000000..de76ce2 Binary files /dev/null and b/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png differ diff --git a/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png b/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png new file mode 100755 index 0000000..42f8f99 Binary files /dev/null and b/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png differ diff --git a/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css b/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css new file mode 100755 index 0000000..c4ed3ea --- /dev/null +++ b/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css @@ -0,0 +1,315 @@ +/* + * jQuery UI CSS Framework @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/* + * jQuery UI CSS Framework @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=segoe%20ui,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=3px&bgColorHeader=f9f9f9&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=100&borderColorHeader=cccccc&fcHeader=e69700&iconColorHeader=5fa5e3&bgColorContent=eeeeee&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=0a82eb&bgColorDefault=1484e6&bgTextureDefault=08_diagonals_thick.png&bgImgOpacityDefault=22&borderColorDefault=ffffff&fcDefault=ffffff&iconColorDefault=fcdd4a&bgColorHover=2293f7&bgTextureHover=08_diagonals_thick.png&bgImgOpacityHover=26&borderColorHover=2293f7&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=e69700&bgTextureActive=08_diagonals_thick.png&bgImgOpacityActive=20&borderColorActive=e69700&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=c5ddfc&bgTextureHighlight=07_diagonals_small.png&bgImgOpacityHighlight=25&borderColorHighlight=ffffff&fcHighlight=333333&iconColorHighlight=0b54d5&bgColorError=e69700&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=20&borderColorError=e69700&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=e6b900&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=e69700&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=20&thicknessShadow=0px&offsetTopShadow=6px&offsetLeftShadow=6px&cornerRadiusShadow=3px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: segoe ui, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: segoe ui, Arial, sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #aaaaaa; background: #eeeeee url(images/ui-bg_inset-hard_100_eeeeee_1x100.png) 50% bottom repeat-x; color: #222222; } +.ui-widget-content a { color: #222222; } +.ui-widget-header { border: 1px solid #cccccc; background: #f9f9f9 url(images/ui-bg_highlight-soft_100_f9f9f9_1x100.png) 50% 50% repeat-x; color: #e69700; font-weight: bold; } +.ui-widget-header a { color: #e69700; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #ffffff; background: #1484e6 url(images/ui-bg_diagonals-thick_22_1484e6_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #ffffff; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #2293f7; background: #2293f7 url(images/ui-bg_diagonals-thick_26_2293f7_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } +.ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #e69700; background: #e69700 url(images/ui-bg_diagonals-thick_20_e69700_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #ffffff; background: #c5ddfc url(images/ui-bg_diagonals-small_25_c5ddfc_40x40.png) 50% 50% repeat; color: #333333; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #333333; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #e69700; background: #e69700 url(images/ui-bg_diagonals-thick_20_e69700_40x40.png) 50% 50% repeat; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_0a82eb_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_0a82eb_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_5fa5e3_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_fcdd4a_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_0b54d5_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; } +.ui-corner-tr { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; } +.ui-corner-bl { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; } +.ui-corner-br { -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } +.ui-corner-top { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } +.ui-corner-right { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } +.ui-corner-left { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; } +.ui-corner-all { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } + +/* Overlays */ +.ui-widget-overlay { background: #e6b900 url(images/ui-bg_flat_0_e6b900_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } +.ui-widget-shadow { margin: 6px 0 0 6px; padding: 0px; background: #e69700 url(images/ui-bg_flat_0_e69700_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; }/* + * jQuery UI Dialog @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } diff --git a/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js b/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js new file mode 100755 index 0000000..7469ef3 --- /dev/null +++ b/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js @@ -0,0 +1,87 @@ +/*! + * jQuery UI 1.8.4 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.4",plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=0)&&c(a).is(":focusable")}})}})(jQuery); +;/*! + * jQuery UI Widget 1.8.4 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,j){var k=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return k.call(b(this),a,c)})};b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options); +b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}): +this.each(function(){var g=b.data(this,a);if(g){d&&g.option(d);g._init()}else b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}); +this._create();this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}b.each(d,function(f, +h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a= +b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery); +;/* + * jQuery UI Position 1.8.4 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Position + */ +(function(c){c.ui=c.ui||{};var m=/left|center|right/,n=/top|center|bottom/,p=c.fn.position,q=c.fn.offset;c.fn.position=function(a){if(!a||!a.of)return p.apply(this,arguments);a=c.extend({},a);var b=c(a.of),d=(a.collision||"flip").split(" "),e=a.offset?a.offset.split(" "):[0,0],g,h,i;if(a.of.nodeType===9){g=b.width();h=b.height();i={top:0,left:0}}else if(a.of.scrollTo&&a.of.document){g=b.width();h=b.height();i={top:b.scrollTop(),left:b.scrollLeft()}}else if(a.of.preventDefault){a.at="left top";g=h= +0;i={top:a.of.pageY,left:a.of.pageX}}else{g=b.outerWidth();h=b.outerHeight();i=b.offset()}c.each(["my","at"],function(){var f=(a[this]||"").split(" ");if(f.length===1)f=m.test(f[0])?f.concat(["center"]):n.test(f[0])?["center"].concat(f):["center","center"];f[0]=m.test(f[0])?f[0]:"center";f[1]=n.test(f[1])?f[1]:"center";a[this]=f});if(d.length===1)d[1]=d[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(a.at[0]==="right")i.left+=g;else if(a.at[0]==="center")i.left+= +g/2;if(a.at[1]==="bottom")i.top+=h;else if(a.at[1]==="center")i.top+=h/2;i.left+=e[0];i.top+=e[1];return this.each(function(){var f=c(this),k=f.outerWidth(),l=f.outerHeight(),j=c.extend({},i);if(a.my[0]==="right")j.left-=k;else if(a.my[0]==="center")j.left-=k/2;if(a.my[1]==="bottom")j.top-=l;else if(a.my[1]==="center")j.top-=l/2;j.left=parseInt(j.left);j.top=parseInt(j.top);c.each(["left","top"],function(o,r){c.ui.position[d[o]]&&c.ui.position[d[o]][r](j,{targetWidth:g,targetHeight:h,elemWidth:k, +elemHeight:l,offset:e,my:a.my,at:a.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(j,{using:a.using}))})};c.ui.position={fit:{left:function(a,b){var d=c(window);b=a.left+b.elemWidth-d.width()-d.scrollLeft();a.left=b>0?a.left-b:Math.max(0,a.left)},top:function(a,b){var d=c(window);b=a.top+b.elemHeight-d.height()-d.scrollTop();a.top=b>0?a.top-b:Math.max(0,a.top)}},flip:{left:function(a,b){if(b.at[0]!=="center"){var d=c(window);d=a.left+b.elemWidth-d.width()-d.scrollLeft();var e=b.my[0]==="left"? +-b.elemWidth:b.my[0]==="right"?b.elemWidth:0,g=-2*b.offset[0];a.left+=a.left<0?e+b.targetWidth+g:d>0?e-b.targetWidth+g:0}},top:function(a,b){if(b.at[1]!=="center"){var d=c(window);d=a.top+b.elemHeight-d.height()-d.scrollTop();var e=b.my[1]==="top"?-b.elemHeight:b.my[1]==="bottom"?b.elemHeight:0,g=b.at[1]==="top"?b.targetHeight:-b.targetHeight,h=-2*b.offset[1];a.top+=a.top<0?e+b.targetHeight+h:d>0?e+g+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(a,b){if(/static/.test(c.curCSS(a,"position")))a.style.position= +"relative";var d=c(a),e=d.offset(),g=parseInt(c.curCSS(a,"top",true),10)||0,h=parseInt(c.curCSS(a,"left",true),10)||0;e={top:b.top-e.top+g,left:b.left-e.left+h};"using"in b?b.using.call(a,e):d.css(e)};c.fn.offset=function(a){var b=this[0];if(!b||!b.ownerDocument)return null;if(a)return this.each(function(){c.offset.setOffset(this,a)});return q.call(this)}}})(jQuery); +;/* + * jQuery UI Dialog 1.8.4 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.button.js + * jquery.ui.draggable.js + * jquery.ui.mouse.js + * jquery.ui.position.js + * jquery.ui.resizable.js + */ +(function(c,j){c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",of:window,collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title"); +if(typeof this.originalTitle!=="string")this.originalTitle="";var a=this,b=a.options,d=b.title||a.originalTitle||" ",f=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
        ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(i){a.moveToTop(false, +i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var e=(a.uiDialogTitlebar=c("
        ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i); +return false}).appendTo(e);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id",f).html(d).prependTo(e);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;e.find("*").add(e).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&& +g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog"); +b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,f=d.options;if(f.modal&&!a||!f.stack&&!f.modal)return d._trigger("focus",b);if(f.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ= +f.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show); +a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(f){if(f.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),e=g.filter(":first");g=g.filter(":last");if(f.target===g[0]&&!f.shiftKey){e.focus(1);return false}else if(f.target===e[0]&&f.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._trigger("open");a._isOpen=true;return a}},_createButtons:function(a){var b=this,d=false, +f=c("
        ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("
        ").addClass("ui-dialog-buttonset").appendTo(f);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(e,h){e=c('').text(e).click(function(){h.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&e.button()});f.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(e){return{position:e.position, +offset:e.offset}}var b=this,d=b.options,f=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(e,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",e,a(h))},drag:function(e,h){b._trigger("drag",e,a(h))},stop:function(e,h){d.position=[h.position.left-f.scrollLeft(),h.position.top-f.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g); +b._trigger("dragStop",e,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}a=a===j?this.options.resizable:a;var d=this,f=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:d._minHeight(), +handles:a,start:function(e,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",e,b(h))},resize:function(e,h){d._trigger("resize",e,b(h))},stop:function(e,h){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();d._trigger("resizeStop",e,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight, +a.height)},_position:function(a){var b=[],d=[0,0],f;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,e){if(+b[g]===b[g]){d[g]=b[g];b[g]=e}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a); +f||this.uiDialog.hide()},_setOption:function(a,b){var d=this,f=d.uiDialog,g=f.is(":data(resizable)"),e=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);e=true;break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":f.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case "draggable":b? +d._makeDraggable():f.draggable("destroy");break;case "height":e=true;break;case "maxHeight":g&&f.resizable("option","maxHeight",b);e=true;break;case "maxWidth":g&&f.resizable("option","maxWidth",b);e=true;break;case "minHeight":g&&f.resizable("option","minHeight",b);e=true;break;case "minWidth":g&&f.resizable("option","minWidth",b);e=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&f.resizable("destroy");g&&typeof b==="string"&&f.resizable("option","handles",b);!g&&b!==false&& +d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break;case "width":e=true;break}c.Widget.prototype._setOption.apply(d,arguments);e&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:"auto"}:{minHeight:0,height:Math.max(a.height- +b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.4",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "), +create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){return c(d.target).zIndex()>=c.ui.dialog.overlay.maxZ})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("
        ").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(), +height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight); +b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
        a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
        "+""+"
        ",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
        t
        ",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
        ",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

        ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
        ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
        ","
        "],thead:[1,"","
        "],tr:[2,"","
        "],td:[3,"","
        "],col:[2,"","
        "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
        ","
        "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
        ").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/Js/jquery/jquery.mobile-1.1.0.css b/Js/jquery/jquery.mobile-1.1.0.css new file mode 100644 index 0000000..06dbf8f --- /dev/null +++ b/Js/jquery/jquery.mobile-1.1.0.css @@ -0,0 +1,2053 @@ +/* +* jQuery Mobile Framework 1.1.0 db342b1f315c282692791aa870455901fdb46a55 +* http://jquerymobile.com +* +* Copyright 2011 (c) jQuery Project +* Dual licensed under the MIT or GPL Version 2 licenses. +* http://jquery.org/license +* +*/ +/* Swatches */ +/* A +-----------------------------------------------------------------------------------------------------------*/ +.ui-bar-a { + border: 1px solid #333 /*{a-bar-border}*/; + background: #111111 /*{a-bar-background-color}*/; + color: #ffffff /*{a-bar-color}*/; + font-weight: bold; + text-shadow: 0 /*{a-bar-shadow-x}*/ -1px /*{a-bar-shadow-y}*/ 1px /*{a-bar-shadow-radius}*/ #000000 /*{a-bar-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #3c3c3c /*{a-bar-background-start}*/), to( #111 /*{a-bar-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); +} +.ui-bar-a, +.ui-bar-a input, +.ui-bar-a select, +.ui-bar-a textarea, +.ui-bar-a button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-bar-a .ui-link-inherit { + color: #fff /*{a-bar-color}*/; +} +.ui-bar-a .ui-link { + color: #7cc4e7 /*{a-bar-link-color}*/; + font-weight: bold; +} +.ui-bar-a .ui-link:hover { + color: #2489CE /*{a-bar-link-hover}*/; +} +.ui-bar-a .ui-link:active { + color: #2489CE /*{a-bar-link-active}*/; +} +.ui-bar-a .ui-link:visited { + color: #2489CE /*{a-bar-link-visited}*/; +} +.ui-body-a, +.ui-overlay-a { + border: 1px solid #444 /*{a-body-border}*/; + background: #222 /*{a-body-background-color}*/; + color: #fff /*{a-body-color}*/; + text-shadow: 0 /*{a-body-shadow-x}*/ 1px /*{a-body-shadow-y}*/ 1px /*{a-body-shadow-radius}*/ #111 /*{a-body-shadow-color}*/; + font-weight: normal; + background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-body-background-start}*/), to( #222 /*{a-body-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); +} +.ui-overlay-a { + background-image: none; + border-width: 0; +} +.ui-body-a, +.ui-body-a input, +.ui-body-a select, +.ui-body-a textarea, +.ui-body-a button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-body-a .ui-link-inherit { + color: #fff /*{a-body-color}*/; +} +.ui-body-a .ui-link { + color: #2489CE /*{a-body-link-color}*/; + font-weight: bold; +} +.ui-body-a .ui-link:hover { + color: #2489CE /*{a-body-link-hover}*/; +} +.ui-body-a .ui-link:active { + color: #2489CE /*{a-body-link-active}*/; +} +.ui-body-a .ui-link:visited { + color: #2489CE /*{a-body-link-visited}*/; +} +.ui-btn-up-a { + border: 1px solid #111 /*{a-bup-border}*/; + background: #333 /*{a-bup-background-color}*/; + font-weight: bold; + color: #fff /*{a-bup-color}*/; + text-shadow: 0 /*{a-bup-shadow-x}*/ 1px /*{a-bup-shadow-y}*/ 1px /*{a-bup-shadow-radius}*/ #111 /*{a-bup-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #444444 /*{a-bup-background-start}*/), to( #2d2d2d /*{a-bup-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); +} +.ui-btn-up-a a.ui-link-inherit { + color: #fff /*{a-bup-color}*/; +} +.ui-btn-hover-a { + border: 1px solid #000 /*{a-bhover-border}*/; + background: #444444 /*{a-bhover-background-color}*/; + font-weight: bold; + color: #fff /*{a-bhover-color}*/; + text-shadow: 0 /*{a-bhover-shadow-x}*/ 1px /*{a-bhover-shadow-y}*/ 1px /*{a-bhover-shadow-radius}*/ #111 /*{a-bhover-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #555555 /*{a-bhover-background-start}*/), to( #383838 /*{a-bhover-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); +} +.ui-btn-hover-a a.ui-link-inherit { + color: #fff /*{a-bhover-color}*/; +} +.ui-btn-down-a { + border: 1px solid #000 /*{a-bdown-border}*/; + background: #222 /*{a-bdown-background-color}*/; + font-weight: bold; + color: #fff /*{a-bdown-color}*/; + text-shadow: 0 /*{a-bdown-shadow-x}*/ 1px /*{a-bdown-shadow-y}*/ 1px /*{a-bdown-shadow-radius}*/ #111 /*{a-bdown-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #202020 /*{a-bdown-background-start}*/), to( #2c2c2c /*{a-bdown-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); +} +.ui-btn-down-a a.ui-link-inherit { + color: #fff /*{a-bdown-color}*/; +} +.ui-btn-up-a, +.ui-btn-hover-a, +.ui-btn-down-a { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; + text-decoration: none; +} +/* B +-----------------------------------------------------------------------------------------------------------*/ +.ui-bar-b { + border: 1px solid #456f9a /*{b-bar-border}*/; + background: #5e87b0 /*{b-bar-background-color}*/; + color: #fff /*{b-bar-color}*/; + font-weight: bold; + text-shadow: 0 /*{b-bar-shadow-x}*/ 1px /*{b-bar-shadow-y}*/ 1px /*{b-bar-shadow-radius}*/ #3e6790 /*{b-bar-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bar-background-start}*/), to( #497bae /*{b-bar-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); +} +.ui-bar-b, +.ui-bar-b input, +.ui-bar-b select, +.ui-bar-b textarea, +.ui-bar-b button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-bar-b .ui-link-inherit { + color: #fff /*{b-bar-color}*/; +} +.ui-bar-b .ui-link { + color: #ddf0f8 /*{b-bar-link-color}*/; + font-weight: bold; +} +.ui-bar-b .ui-link:hover { + color: #ddf0f8 /*{b-bar-link-hover}*/; +} +.ui-bar-b .ui-link:active { + color: #ddf0f8 /*{b-bar-link-active}*/; +} +.ui-bar-b .ui-link:visited { + color: #ddf0f8 /*{b-bar-link-visited}*/; +} +.ui-body-b, +.ui-overlay-b { + border: 1px solid #999 /*{b-body-border}*/; + background: #f3f3f3 /*{b-body-background-color}*/; + color: #222222 /*{b-body-color}*/; + text-shadow: 0 /*{b-body-shadow-x}*/ 1px /*{b-body-shadow-y}*/ 0 /*{b-body-shadow-radius}*/ #fff /*{b-body-shadow-color}*/; + font-weight: normal; + background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{b-body-background-start}*/), to( #ccc /*{b-body-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); +} +.ui-overlay-b { + background-image: none; + border-width: 0; +} +.ui-body-b, +.ui-body-b input, +.ui-body-b select, +.ui-body-b textarea, +.ui-body-b button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-body-b .ui-link-inherit { + color: #333333 /*{b-body-color}*/; +} +.ui-body-b .ui-link { + color: #2489CE /*{b-body-link-color}*/; + font-weight: bold; +} +.ui-body-b .ui-link:hover { + color: #2489CE /*{b-body-link-hover}*/; +} +.ui-body-b .ui-link:active { + color: #2489CE /*{b-body-link-active}*/; +} +.ui-body-b .ui-link:visited { + color: #2489CE /*{b-body-link-visited}*/; +} +.ui-btn-up-b { + border: 1px solid #044062 /*{b-bup-border}*/; + background: #396b9e /*{b-bup-background-color}*/; + font-weight: bold; + color: #fff /*{b-bup-color}*/; + text-shadow: 0 /*{b-bup-shadow-x}*/ 1px /*{b-bup-shadow-y}*/ 1px /*{b-bup-shadow-radius}*/ #194b7e /*{b-bup-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #5f9cc5 /*{b-bup-background-start}*/), to( #396b9e /*{b-bup-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); +} +.ui-btn-up-b a.ui-link-inherit { + color: #fff /*{b-bup-color}*/; +} +.ui-btn-hover-b { + border: 1px solid #00415e /*{b-bhover-border}*/; + background: #4b88b6 /*{b-bhover-background-color}*/; + font-weight: bold; + color: #fff /*{b-bhover-color}*/; + text-shadow: 0 /*{b-bhover-shadow-x}*/ 1px /*{b-bhover-shadow-y}*/ 1px /*{b-bhover-shadow-radius}*/ #194b7e /*{b-bhover-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bhover-background-start}*/), to( #4272a4 /*{b-bhover-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); +} +.ui-btn-hover-b a.ui-link-inherit { + color: #fff /*{b-bhover-color}*/; +} +.ui-btn-down-b { + border: 1px solid #225377 /*{b-bdown-border}*/; + background: #4e89c5 /*{b-bdown-background-color}*/; + font-weight: bold; + color: #fff /*{b-bdown-color}*/; + text-shadow: 0 /*{b-bdown-shadow-x}*/ 1px /*{b-bdown-shadow-y}*/ 1px /*{b-bdown-shadow-radius}*/ #194b7e /*{b-bdown-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #295b8e /*{b-bdown-background-start}*/), to( #3e79b5 /*{b-bdown-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); +} +.ui-btn-down-b a.ui-link-inherit { + color: #fff /*{b-bdown-color}*/; +} +.ui-btn-up-b, +.ui-btn-hover-b, +.ui-btn-down-b { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; + text-decoration: none; +} +/* C +-----------------------------------------------------------------------------------------------------------*/ +.ui-bar-c { + border: 1px solid #B3B3B3 /*{c-bar-border}*/; + background: #eeeeee /*{c-bar-background-color}*/; + color: #3E3E3E /*{c-bar-color}*/; + font-weight: bold; + text-shadow: 0 /*{c-bar-shadow-x}*/ 1px /*{c-bar-shadow-y}*/ 1px /*{c-bar-shadow-radius}*/ #fff /*{c-bar-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #f0f0f0 /*{c-bar-background-start}*/), to( #ddd /*{c-bar-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); +} +.ui-bar-c .ui-link-inherit { + color: #3E3E3E /*{c-bar-color}*/; +} +.ui-bar-c .ui-link { + color: #7cc4e7 /*{c-bar-link-color}*/; + font-weight: bold; +} +.ui-bar-c .ui-link:hover { + color: #2489CE /*{c-bar-link-hover}*/; +} +.ui-bar-c .ui-link:active { + color: #2489CE /*{c-bar-link-active}*/; +} +.ui-bar-c .ui-link:visited { + color: #2489CE /*{c-bar-link-visited}*/; +} +.ui-bar-c, +.ui-bar-c input, +.ui-bar-c select, +.ui-bar-c textarea, +.ui-bar-c button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-body-c, +.ui-overlay-c { + border: 1px solid #aaa /*{c-body-border}*/; + color: #333333 /*{c-body-color}*/; + text-shadow: 0 /*{c-body-shadow-x}*/ 1px /*{c-body-shadow-y}*/ 0 /*{c-body-shadow-radius}*/ #fff /*{c-body-shadow-color}*/; + background: #f9f9f9 /*{c-body-background-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #f9f9f9 /*{c-body-background-start}*/), to( #eeeeee /*{c-body-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); +} +.ui-overlay-c { + background-image: none; + border-width: 0; +} +.ui-body-c, +.ui-body-c input, +.ui-body-c select, +.ui-body-c textarea, +.ui-body-c button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-body-c .ui-link-inherit { + color: #333333 /*{c-body-color}*/; +} +.ui-body-c .ui-link { + color: #2489CE /*{c-body-link-color}*/; + font-weight: bold; +} +.ui-body-c .ui-link:hover { + color: #2489CE /*{c-body-link-hover}*/; +} +.ui-body-c .ui-link:active { + color: #2489CE /*{c-body-link-active}*/; +} +.ui-body-c .ui-link:visited { + color: #2489CE /*{c-body-link-visited}*/; +} +.ui-btn-up-c { + border: 1px solid #ccc /*{c-bup-border}*/; + background: #eee /*{c-bup-background-color}*/; + font-weight: bold; + color: #222 /*{c-bup-color}*/; + text-shadow: 0 /*{c-bup-shadow-x}*/ 1px /*{c-bup-shadow-y}*/ 0 /*{c-bup-shadow-radius}*/ #ffffff /*{c-bup-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #ffffff /*{c-bup-background-start}*/), to( #f1f1f1 /*{c-bup-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); +} +.ui-btn-up-c a.ui-link-inherit { + color: #2F3E46 /*{c-bup-color}*/; +} +.ui-btn-hover-c { + border: 1px solid #bbb /*{c-bhover-border}*/; + background: #dfdfdf /*{c-bhover-background-color}*/; + font-weight: bold; + color: #222 /*{c-bhover-color}*/; + text-shadow: 0 /*{c-bhover-shadow-x}*/ 1px /*{c-bhover-shadow-y}*/ 0 /*{c-bhover-shadow-radius}*/ #ffffff /*{c-bhover-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #f6f6f6 /*{c-bhover-background-start}*/), to( #e0e0e0 /*{c-bhover-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #f9f9f9 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); +} +.ui-btn-hover-c a.ui-link-inherit { + color: #2F3E46 /*{c-bhover-color}*/; +} +.ui-btn-down-c { + border: 1px solid #bbb /*{c-bdown-border}*/; + background: #d6d6d6 /*{c-bdown-background-color}*/; + font-weight: bold; + color: #222 /*{c-bdown-color}*/; + text-shadow: 0 /*{c-bdown-shadow-x}*/ 1px /*{c-bdown-shadow-y}*/ 0 /*{c-bdown-shadow-radius}*/ #ffffff /*{c-bdown-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #d0d0d0 /*{c-bdown-background-start}*/), to( #dfdfdf /*{c-bdown-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); +} +.ui-btn-down-c a.ui-link-inherit { + color: #2F3E46 /*{c-bdown-color}*/; +} +.ui-btn-up-c, +.ui-btn-hover-c, +.ui-btn-down-c { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; + text-decoration: none; +} +/* D +-----------------------------------------------------------------------------------------------------------*/ +.ui-bar-d { + border: 1px solid #bbb /*{d-bar-border}*/; + background: #bbb /*{d-bar-background-color}*/; + color: #333 /*{d-bar-color}*/; + text-shadow: 0 /*{d-bar-shadow-x}*/ 1px /*{d-bar-shadow-y}*/ 0 /*{d-bar-shadow-radius}*/ #eee /*{d-bar-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{d-bar-background-start}*/), to( #bbb /*{d-bar-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); +} +.ui-bar-d, +.ui-bar-d input, +.ui-bar-d select, +.ui-bar-d textarea, +.ui-bar-d button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-bar-d .ui-link-inherit { + color: #333333 /*{d-bar-color}*/; +} +.ui-bar-d .ui-link { + color: #2489CE /*{d-bar-link-color}*/; + font-weight: bold; +} +.ui-bar-d .ui-link:hover { + color: #2489CE /*{d-bar-link-hover}*/; +} +.ui-bar-d .ui-link:active { + color: #2489CE /*{d-bar-link-active}*/; +} +.ui-bar-d .ui-link:visited { + color: #2489CE /*{d-bar-link-visited}*/; +} +.ui-body-d, +.ui-overlay-d { + border: 1px solid #bbb /*{d-body-border}*/; + color: #333333 /*{d-body-color}*/; + text-shadow: 0 /*{d-body-shadow-x}*/ 1px /*{d-body-shadow-y}*/ 0 /*{d-body-shadow-radius}*/ #fff /*{d-body-shadow-color}*/; + background: #ffffff /*{d-body-background-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #fff), to( #fff /*{d-body-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); +} +.ui-overlay-d { + background-image: none; + border-width: 0; +} +.ui-body-d, +.ui-body-d input, +.ui-body-d select, +.ui-body-d textarea, +.ui-body-d button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-body-d .ui-link-inherit { + color: #333333 /*{d-body-color}*/; +} +.ui-body-d .ui-link { + color: #2489CE /*{d-body-link-color}*/; + font-weight: bold; +} +.ui-body-d .ui-link:hover { + color: #2489CE /*{d-body-link-hover}*/; +} +.ui-body-d .ui-link:active { + color: #2489CE /*{d-body-link-active}*/; +} +.ui-body-d .ui-link:visited { + color: #2489CE /*{d-body-link-visited}*/; +} +.ui-btn-up-d { + border: 1px solid #bbb /*{d-bup-border}*/; + background: #fff /*{d-bup-background-color}*/; + font-weight: bold; + color: #333 /*{d-bup-color}*/; + text-shadow: 0 /*{d-bup-shadow-x}*/ 1px /*{d-bup-shadow-y}*/ 0 /*{d-bup-shadow-radius}*/ #fff /*{d-bup-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #fafafa), to( #f6f6f6 /*{d-bup-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); +} +.ui-btn-up-d a.ui-link-inherit { + color: #333 /*{d-bup-color}*/; +} +.ui-btn-hover-d { + border: 1px solid #aaa /*{d-bhover-border}*/; + background: #eeeeee /*{d-bhover-background-color}*/; + font-weight: bold; + color: #333 /*{d-bhover-color}*/; + cursor: pointer; + text-shadow: 0 /*{d-bhover-shadow-x}*/ 1px /*{d-bhover-shadow-y}*/ 0 /*{d-bhover-shadow-radius}*/ #fff /*{d-bhover-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #eee), to( #fff /*{d-bhover-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); +} +.ui-btn-hover-d a.ui-link-inherit { + color: #333 /*{d-bhover-color}*/; +} +.ui-btn-down-d { + border: 1px solid #aaa /*{d-bdown-border}*/; + background: #eee /*{d-bdown-background-color}*/; + font-weight: bold; + color: #333 /*{d-bdown-color}*/; + text-shadow: 0 /*{d-bdown-shadow-x}*/ 1px /*{d-bdown-shadow-y}*/ 0 /*{d-bdown-shadow-radius}*/ #ffffff /*{d-bdown-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #e5e5e5 /*{d-bdown-background-start}*/), to( #f2f2f2 /*{d-bdown-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); +} +.ui-btn-down-d a.ui-link-inherit { + color: #333 /*{d-bdown-color}*/; +} +.ui-btn-up-d, +.ui-btn-hover-d, +.ui-btn-down-d { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; + text-decoration: none; +} +/* E +-----------------------------------------------------------------------------------------------------------*/ +.ui-bar-e { + border: 1px solid #F7C942 /*{e-bar-border}*/; + background: #fadb4e /*{e-bar-background-color}*/; + color: #333 /*{e-bar-color}*/; + text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/ #fff /*{e-bar-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); +} +.ui-bar-e, +.ui-bar-e input, +.ui-bar-e select, +.ui-bar-e textarea, +.ui-bar-e button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-bar-e .ui-link-inherit { + color: #333333 /*{e-bar-color}*/; +} +.ui-bar-e .ui-link { + color: #2489CE /*{e-bar-link-color}*/; + font-weight: bold; +} +.ui-bar-e .ui-link:hover { + color: #2489CE /*{e-bar-link-hover}*/; +} +.ui-bar-e .ui-link:active { + color: #2489CE /*{e-bar-link-active}*/; +} +.ui-bar-e .ui-link:visited { + color: #2489CE /*{e-bar-link-visited}*/; +} +.ui-body-e, +.ui-overlay-e { + border: 1px solid #F7C942 /*{e-body-border}*/; + color: #222222 /*{e-body-color}*/; + text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/ #fff /*{e-body-shadow-color}*/; + background: #fff9df /*{e-body-background-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); +} +.ui-overlay-e { + background-image: none; + border-width: 0; +} +.ui-body-e, +.ui-body-e input, +.ui-body-e select, +.ui-body-e textarea, +.ui-body-e button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-body-e .ui-link-inherit { + color: #333333 /*{e-body-color}*/; +} +.ui-body-e .ui-link { + color: #2489CE /*{e-body-link-color}*/; + font-weight: bold; +} +.ui-body-e .ui-link:hover { + color: #2489CE /*{e-body-link-hover}*/; +} +.ui-body-e .ui-link:active { + color: #2489CE /*{e-body-link-active}*/; +} +.ui-body-e .ui-link:visited { + color: #2489CE /*{e-body-link-visited}*/; +} +.ui-btn-up-e { + border: 1px solid #F4C63f /*{e-bup-border}*/; + background: #fadb4e /*{e-bup-background-color}*/; + font-weight: bold; + color: #222 /*{e-bup-color}*/; + text-shadow: 0 /*{e-bup-shadow-x}*/ 1px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/ #fff /*{e-bup-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #ffefaa /*{e-bup-background-start}*/), to( #ffe155 /*{e-bup-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); +} +.ui-btn-up-e a.ui-link-inherit { + color: #222 /*{e-bup-color}*/; +} +.ui-btn-hover-e { + border: 1px solid #F2C43d /*{e-bhover-border}*/; + background: #fbe26f /*{e-bhover-background-color}*/; + font-weight: bold; + color: #111 /*{e-bhover-color}*/; + text-shadow: 0 /*{e-bhover-shadow-x}*/ 1px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/ #fff /*{e-bhover-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #fff5ba /*{e-bhover-background-start}*/), to( #fbdd52 /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); +} +.ui-btn-hover-e a.ui-link-inherit { + color: #333 /*{e-bhover-color}*/; +} +.ui-btn-down-e { + border: 1px solid #F2C43d /*{e-bdown-border}*/; + background: #fceda7 /*{e-bdown-background-color}*/; + font-weight: bold; + color: #111 /*{e-bdown-color}*/; + text-shadow: 0 /*{e-bdown-shadow-x}*/ 1px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/ #ffffff /*{e-bdown-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #f8d94c /*{e-bdown-background-start}*/), to( #fadb4e /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); +} +.ui-btn-down-e a.ui-link-inherit { + color: #333 /*{e-bdown-color}*/; +} +.ui-btn-up-e, +.ui-btn-hover-e, +.ui-btn-down-e { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; + text-decoration: none; +} +/* Structure */ +/* links within "buttons" +-----------------------------------------------------------------------------------------------------------*/ +a.ui-link-inherit { + text-decoration: none !important; +} +/* Active class used as the "on" state across all themes +-----------------------------------------------------------------------------------------------------------*/ +.ui-btn-active { + border: 1px solid #2373a5 /*{global-active-border}*/; + background: #5393c5 /*{global-active-background-color}*/; + font-weight: bold; + color: #fff /*{global-active-color}*/; + cursor: pointer; + text-shadow: 0 /*{global-active-shadow-x}*/ 1px /*{global-active-shadow-y}*/ 1px /*{global-active-shadow-radius}*/ #3373a5 /*{global-active-shadow-color}*/; + text-decoration: none; + background-image: -webkit-gradient(linear, left top, left bottom, from( #5393c5 /*{global-active-background-start}*/), to( #6facd5 /*{global-active-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-btn-active a.ui-link-inherit { + color: #fff /*{global-active-color}*/; +} +/* button inner top highlight +-----------------------------------------------------------------------------------------------------------*/ +.ui-btn-inner { + border-top: 1px solid #fff; + border-color: rgba(255,255,255,.3); +} +/* corner rounding classes +-----------------------------------------------------------------------------------------------------------*/ +.ui-corner-tl { + -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; + -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; + border-top-left-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-tr { + -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; + -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; + border-top-right-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-bl { + -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; + -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; + border-bottom-left-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-br { + -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; + -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; + border-bottom-right-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-top { + -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; + -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; + border-top-left-radius: .6em /*{global-radii-blocks}*/; + -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; + -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; + border-top-right-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-bottom { + -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; + -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; + border-bottom-left-radius: .6em /*{global-radii-blocks}*/; + -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; + -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; + border-bottom-right-radius: .6em /*{global-radii-blocks}*/; + } +.ui-corner-right { + -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; + -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; + border-top-right-radius: .6em /*{global-radii-blocks}*/; + -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; + -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; + border-bottom-right-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-left { + -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; + -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; + border-top-left-radius: .6em /*{global-radii-blocks}*/; + -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; + -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; + border-bottom-left-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-all { + -moz-border-radius: .6em /*{global-radii-blocks}*/; + -webkit-border-radius: .6em /*{global-radii-blocks}*/; + border-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-none { + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; +} +/* Form field separator +-----------------------------------------------------------------------------------------------------------*/ +.ui-br { + border-bottom: rgb(130,130,130); + border-bottom: rgba(130,130,130,.3); + border-bottom-width: 1px; + border-bottom-style: solid; +} +/* Interaction cues +-----------------------------------------------------------------------------------------------------------*/ +.ui-disabled { + opacity: .3; +} +.ui-disabled, +.ui-disabled a { + cursor: default !important; + pointer-events: none; +} +.ui-disabled .ui-btn-text { + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=30)"; + filter: alpha(opacity=30); + zoom: 1; +} +/* Icons +-----------------------------------------------------------------------------------------------------------*/ +.ui-icon, +.ui-icon-searchfield:after { + background: #666 /*{global-icon-color}*/; + background: rgba(0,0,0,.4) /*{global-icon-disc}*/; + background-image: url(images/icons-18-white.png) /*{global-icon-set}*/; + background-repeat: no-repeat; + -moz-border-radius: 9px; + -webkit-border-radius: 9px; + border-radius: 9px; +} +/* Alt icon color +-----------------------------------------------------------------------------------------------------------*/ +.ui-icon-alt { + background: #fff; + background: rgba(255,255,255,.3); + background-image: url(images/icons-18-black.png); + background-repeat: no-repeat; +} +/* HD/"retina" sprite +-----------------------------------------------------------------------------------------------------------*/ +@media only screen and (-webkit-min-device-pixel-ratio: 1.5), + only screen and (min--moz-device-pixel-ratio: 1.5), + only screen and (min-resolution: 240dpi) { + + .ui-icon-plus, .ui-icon-minus, .ui-icon-delete, .ui-icon-arrow-r, + .ui-icon-arrow-l, .ui-icon-arrow-u, .ui-icon-arrow-d, .ui-icon-check, + .ui-icon-gear, .ui-icon-refresh, .ui-icon-forward, .ui-icon-back, + .ui-icon-grid, .ui-icon-star, .ui-icon-alert, .ui-icon-info, .ui-icon-home, .ui-icon-search, .ui-icon-searchfield:after, + .ui-icon-checkbox-off, .ui-icon-checkbox-on, .ui-icon-radio-off, .ui-icon-radio-on { + background-image: url(images/icons-36-white.png); + -moz-background-size: 776px 18px; + -o-background-size: 776px 18px; + -webkit-background-size: 776px 18px; + background-size: 776px 18px; + } + .ui-icon-alt { + background-image: url(images/icons-36-black.png); + } +} +/* plus minus */ +.ui-icon-plus { + background-position: -0 50%; +} +.ui-icon-minus { + background-position: -36px 50%; +} +/* delete/close */ +.ui-icon-delete { + background-position: -72px 50%; +} +/* arrows */ +.ui-icon-arrow-r { + background-position: -108px 50%; +} +.ui-icon-arrow-l { + background-position: -144px 50%; +} +.ui-icon-arrow-u { + background-position: -180px 50%; +} +.ui-icon-arrow-d { + background-position: -216px 50%; +} +/* misc */ +.ui-icon-check { + background-position: -252px 50%; +} +.ui-icon-gear { + background-position: -288px 50%; +} +.ui-icon-refresh { + background-position: -324px 50%; +} +.ui-icon-forward { + background-position: -360px 50%; +} +.ui-icon-back { + background-position: -396px 50%; +} +.ui-icon-grid { + background-position: -432px 50%; +} +.ui-icon-star { + background-position: -468px 50%; +} +.ui-icon-alert { + background-position: -504px 50%; +} +.ui-icon-info { + background-position: -540px 50%; +} +.ui-icon-home { + background-position: -576px 50%; +} +.ui-icon-search, +.ui-icon-searchfield:after { + background-position: -612px 50%; +} +.ui-icon-checkbox-off { + background-position: -684px 50%; +} +.ui-icon-checkbox-on { + background-position: -648px 50%; +} +.ui-icon-radio-off { + background-position: -756px 50%; +} +.ui-icon-radio-on { + background-position: -720px 50%; +} +/* checks,radios */ +.ui-checkbox .ui-icon { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +.ui-icon-checkbox-off, +.ui-icon-radio-off { + background-color: transparent; +} +.ui-checkbox-on .ui-icon, +.ui-radio-on .ui-icon { + background-color: #4596ce /*{global-active-background-color}*/; /* NOTE: this hex should match the active state color. It's repeated here for cascade */ +} +/* loading icon */ +.ui-icon-loading { + background: url(images/ajax-loader.gif); + background-size: 46px 46px; +} +/* Button corner classes +-----------------------------------------------------------------------------------------------------------*/ +.ui-btn-corner-tl { + -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; + -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; + border-top-left-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-tr { + -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; + -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; + border-top-right-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-bl { + -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; + -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; + border-bottom-left-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-br { + -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; + -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; + border-bottom-right-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-top { + -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; + -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; + border-top-left-radius: 1em /*{global-radii-buttons}*/; + -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; + -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; + border-top-right-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-bottom { + -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; + -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; + border-bottom-left-radius: 1em /*{global-radii-buttons}*/; + -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; + -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; + border-bottom-right-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-right { + -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; + -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; + border-top-right-radius: 1em /*{global-radii-buttons}*/; + -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; + -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; + border-bottom-right-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-left { + -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; + -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; + border-top-left-radius: 1em /*{global-radii-buttons}*/; + -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; + -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; + border-bottom-left-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-all { + -moz-border-radius: 1em /*{global-radii-buttons}*/; + -webkit-border-radius: 1em /*{global-radii-buttons}*/; + border-radius: 1em /*{global-radii-buttons}*/; +} +/* radius clip workaround for cleaning up corner trapping */ +.ui-corner-tl, +.ui-corner-tr, +.ui-corner-bl, +.ui-corner-br, +.ui-corner-top, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-left, +.ui-corner-all, +.ui-btn-corner-tl, +.ui-btn-corner-tr, +.ui-btn-corner-bl, +.ui-btn-corner-br, +.ui-btn-corner-top, +.ui-btn-corner-bottom, +.ui-btn-corner-right, +.ui-btn-corner-left, +.ui-btn-corner-all { + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} +/* Overlay / modal +-----------------------------------------------------------------------------------------------------------*/ +.ui-overlay { + background: #666; + opacity: .5; + filter: Alpha(Opacity=50); + position: absolute; + width: 100%; + height: 100%; +} +.ui-overlay-shadow { + -moz-box-shadow: 0px 0px 12px rgba(0,0,0,.6); + -webkit-box-shadow: 0px 0px 12px rgba(0,0,0,.6); + box-shadow: 0px 0px 12px rgba(0,0,0,.6); +} +.ui-shadow { + -moz-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; + -webkit-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; + box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; +} +.ui-bar-a .ui-shadow, +.ui-bar-b .ui-shadow , +.ui-bar-c .ui-shadow { + -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.3); + -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.3); + box-shadow: 0px 1px 0 rgba(255,255,255,.3); +} +.ui-shadow-inset { + -moz-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); + -webkit-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); + box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); +} +.ui-icon-shadow { + -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; + -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; + box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; +} +/* Focus state - set here for specificity (note: these classes are added by JavaScript) +-----------------------------------------------------------------------------------------------------------*/ +.ui-btn:focus { + outline: 0; +} +.ui-focus, +.ui-btn:focus { + -moz-box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; + -webkit-box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; + box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; +} +/* unset box shadow in browsers that don't do it right +-----------------------------------------------------------------------------------------------------------*/ +.ui-mobile-nosupport-boxshadow * { + -moz-box-shadow: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; +} +/* ...and bring back focus */ +.ui-mobile-nosupport-boxshadow .ui-focus, +.ui-mobile-nosupport-boxshadow .ui-btn:focus { + outline-width: 1px; + outline-style: dotted; +} +/* some unsets - more probably needed */ +.ui-mobile, .ui-mobile body { height: 99.9%; } +.ui-mobile fieldset, .ui-page { padding: 0; margin: 0; } +.ui-mobile a img, .ui-mobile fieldset { border-width: 0; } +/* responsive page widths */ +.ui-mobile-viewport { margin: 0; overflow-x: visible; -webkit-text-size-adjust: none; -ms-text-size-adjust:none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } +/* Issue #2066 */ +body.ui-mobile-viewport, +div.ui-mobile-viewport { overflow-x: hidden; } +/* "page" containers - full-screen views, one should always be in view post-pageload */ +.ui-mobile [data-role=page], .ui-mobile [data-role=dialog], .ui-page { top: 0; left: 0; width: 100%; min-height: 100%; position: absolute; display: none; border: 0; } +.ui-mobile .ui-page-active { display: block; overflow: visible; } +/* on ios4, setting focus on the page element causes flashing during transitions when there is an outline, so we turn off outlines */ +.ui-page { outline: none; } +/*orientations from js are available */ +@media screen and (orientation: portrait){ +.ui-mobile, .ui-mobile .ui-page { min-height: 420px; } +} +@media screen and (orientation: landscape){ +.ui-mobile, .ui-mobile .ui-page { min-height: 300px; } +} +/* loading screen */ +.ui-loading .ui-loader { display: block; } +.ui-loader { display: none; z-index: 9999999; position: fixed; top: 50%; box-shadow: 0 1px 1px -1px #fff; left: 50%; border:0; } +.ui-loader-default { background: none; opacity: .18; width: 46px; height: 46px; margin-left: -23px; margin-top: -23px; } +.ui-loader-verbose { width: 200px; opacity: .88; height: auto; margin-left: -110px; margin-top: -43px; padding: 10px; } +.ui-loader-default h1 { font-size: 0; width: 0; height: 0; overflow: hidden; } +.ui-loader-verbose h1 { font-size: 16px; margin: 0; text-align: center; } +.ui-loader .ui-icon { background-color: #000; display: block; margin: 0; width: 44px; height: 44px; padding: 1px; -webkit-border-radius: 36px; -moz-border-radius: 36px; border-radius: 36px; } +.ui-loader-verbose .ui-icon { margin: 0 auto 10px; opacity: .75; } +.ui-loader-textonly { padding: 15px; margin-left: -115px; } +.ui-loader-textonly .ui-icon { display: none; } +.ui-loader-fakefix { position: absolute; } +/*fouc*/ +.ui-mobile-rendering > * { visibility: hidden; } +/*headers, content panels*/ +.ui-bar, .ui-body { position: relative; padding: .4em 15px; overflow: hidden; display: block; clear:both; } +.ui-bar { font-size: 16px; margin: 0; } +.ui-bar h1, .ui-bar h2, .ui-bar h3, .ui-bar h4, .ui-bar h5, .ui-bar h6 { margin: 0; padding: 0; font-size: 16px; display: inline-block; } +.ui-header, .ui-footer { position: relative; border-left-width: 0; border-right-width: 0; } +.ui-header .ui-btn-left, +.ui-header .ui-btn-right, +.ui-footer .ui-btn-left, +.ui-footer .ui-btn-right { position: absolute; top: 3px; } +.ui-header .ui-btn-left, +.ui-footer .ui-btn-left { left: 5px; } +.ui-header .ui-btn-right, +.ui-footer .ui-btn-right { right: 5px; } +.ui-footer .ui-btn-icon-notext, +.ui-header .ui-btn-icon-notext { top: 6px; } +.ui-header .ui-title, .ui-footer .ui-title { min-height: 1.1em; text-align: center; font-size: 16px; display: block; margin: .6em 30% .8em; padding: 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; outline: 0 !important; } +.ui-footer .ui-title { margin: .6em 15px .8em; } +/*content area*/ +.ui-content { border-width: 0; overflow: visible; overflow-x: hidden; padding: 15px; } +/* icons sizing */ +.ui-icon { width: 18px; height: 18px; } +/* non-js content hiding */ +.ui-nojs { position: absolute; left: -9999px; } +/* accessible content hiding */ +.ui-hide-label label, +.ui-hidden-accessible { position: absolute !important; left: -9999px; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +/* Transitions originally inspired by those from jQtouch, nice work, folks */ +.ui-mobile-viewport-transitioning, +.ui-mobile-viewport-transitioning .ui-page { + width: 100%; + height: 100%; + overflow: hidden; +} +.in { + -webkit-animation-timing-function: ease-out; + -webkit-animation-duration: 350ms; + -moz-animation-timing-function: ease-out; + -moz-animation-duration: 350ms; +} +.out { + -webkit-animation-timing-function: ease-in; + -webkit-animation-duration: 225ms; + -moz-animation-timing-function: ease-in; + -moz-animation-duration: 225; +} +@-webkit-keyframes fadein { + from { opacity: 0; } + to { opacity: 1; } +} +@-moz-keyframes fadein { + from { opacity: 0; } + to { opacity: 1; } +} +@-webkit-keyframes fadeout { + from { opacity: 1; } + to { opacity: 0; } +} +@-moz-keyframes fadeout { + from { opacity: 1; } + to { opacity: 0; } +} +.fade.out { + opacity: 0; + -webkit-animation-duration: 125ms; + -webkit-animation-name: fadeout; + -moz-animation-duration: 125ms; + -moz-animation-name: fadeout; +} +.fade.in { + opacity: 1; + -webkit-animation-duration: 225ms; + -webkit-animation-name: fadein; + -moz-animation-duration: 225ms; + -moz-animation-name: fadein; +} +.pop { + -webkit-transform-origin: 50% 50%; + -moz-transform-origin: 50% 50%; +} +.pop.in { + -webkit-transform: scale(1); + -moz-transform: scale(1); + opacity: 1; + -webkit-animation-name: popin; + -moz-animation-name: popin; + -webkit-animation-duration: 350ms; + -moz-animation-duration: 350ms; +} +.pop.out { + -webkit-animation-name: fadeout; + -moz-animation-name: fadeout; + opacity: 0; + -webkit-animation-duration: 100ms; + -moz-animation-duration: 100ms; +} +.pop.in.reverse { + -webkit-animation-name: fadein; + -moz-animation-name: fadein; +} +.pop.out.reverse { + -webkit-transform: scale(.8); + -moz-transform: scale(.8); + -webkit-animation-name: popout; + -moz-animation-name: popout; +} +@-webkit-keyframes popin { + from { + -webkit-transform: scale(.8); + opacity: 0; + } + to { + -webkit-transform: scale(1); + opacity: 1; + } +} +@-moz-keyframes popin { + from { + -moz-transform: scale(.8); + opacity: 0; + } + to { + -moz-transform: scale(1); + opacity: 1; + } +} +@-webkit-keyframes popout { + from { + -webkit-transform: scale(1); + opacity: 1; + } + to { + -webkit-transform: scale(.8); + opacity: 0; + } +} +@-moz-keyframes popout { + from { + -moz-transform: scale(1); + opacity: 1; + } + to { + -moz-transform: scale(.8); + opacity: 0; + } +} +/* keyframes for slidein from sides */ +@-webkit-keyframes slideinfromright { + from { -webkit-transform: translateX(100%); } + to { -webkit-transform: translateX(0); } +} +@-moz-keyframes slideinfromright { + from { -moz-transform: translateX(100%); } + to { -moz-transform: translateX(0); } +} +@-webkit-keyframes slideinfromleft { + from { -webkit-transform: translateX(-100%); } + to { -webkit-transform: translateX(0); } +} +@-moz-keyframes slideinfromleft { + from { -moz-transform: translateX(-100%); } + to { -moz-transform: translateX(0); } +} +/* keyframes for slideout to sides */ +@-webkit-keyframes slideouttoleft { + from { -webkit-transform: translateX(0); } + to { -webkit-transform: translateX(-100%); } +} +@-moz-keyframes slideouttoleft { + from { -moz-transform: translateX(0); } + to { -moz-transform: translateX(-100%); } +} +@-webkit-keyframes slideouttoright { + from { -webkit-transform: translateX(0); } + to { -webkit-transform: translateX(100%); } +} +@-moz-keyframes slideouttoright { + from { -moz-transform: translateX(0); } + to { -moz-transform: translateX(100%); } +} +.slide.out, .slide.in { + -webkit-animation-timing-function: ease-out; + -webkit-animation-duration: 350ms; + -moz-animation-timing-function: ease-out; + -moz-animation-duration: 350ms; +} +.slide.out { + -webkit-transform: translateX(-100%); + -webkit-animation-name: slideouttoleft; + -moz-transform: translateX(-100%); + -moz-animation-name: slideouttoleft; +} +.slide.in { + -webkit-transform: translateX(0); + -webkit-animation-name: slideinfromright; + -moz-transform: translateX(0); + -moz-animation-name: slideinfromright; +} +.slide.out.reverse { + -webkit-transform: translateX(100%); + -webkit-animation-name: slideouttoright; + -moz-transform: translateX(100%); + -moz-animation-name: slideouttoright; +} +.slide.in.reverse { + -webkit-transform: translateX(0); + -webkit-animation-name: slideinfromleft; + -moz-transform: translateX(0); + -moz-animation-name: slideinfromleft; +} +.slidefade.out { + -webkit-transform: translateX(-100%); + -webkit-animation-name: slideouttoleft; + -moz-transform: translateX(-100%); + -moz-animation-name: slideouttoleft; + -webkit-animation-duration: 225ms; + -moz-animation-duration: 225ms; +} +.slidefade.in { + -webkit-transform: translateX(0); + -webkit-animation-name: fadein; + -moz-transform: translateX(0); + -moz-animation-name: fadein; + -webkit-animation-duration: 200ms; + -moz-animation-duration: 200ms; +} +.slidefade.out.reverse { + -webkit-transform: translateX(100%); + -webkit-animation-name: slideouttoright; + -moz-transform: translateX(100%); + -moz-animation-name: slideouttoright; + -webkit-animation-duration: 200ms; + -moz-animation-duration: 200ms; +} +.slidefade.in.reverse { + -webkit-transform: translateX(0); + -webkit-animation-name: fadein; + -moz-transform: translateX(0); + -moz-animation-name: fadein; + -webkit-animation-duration: 200ms; + -moz-animation-duration: 200ms; +} +/* slide down */ +.slidedown.out { + -webkit-animation-name: fadeout; + -moz-animation-name: fadeout; + -webkit-animation-duration: 100ms; + -moz-animation-duration: 100ms; +} +.slidedown.in { + -webkit-transform: translateY(0); + -webkit-animation-name: slideinfromtop; + -moz-transform: translateY(0); + -moz-animation-name: slideinfromtop; + -webkit-animation-duration: 250ms; + -moz-animation-duration: 250ms; +} +.slidedown.in.reverse { + -webkit-animation-name: fadein; + -moz-animation-name: fadein; + -webkit-animation-duration: 150ms; + -moz-animation-duration: 150ms; +} +.slidedown.out.reverse { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -webkit-animation-name: slideouttotop; + -moz-animation-name: slideouttotop; + -webkit-animation-duration: 200ms; + -moz-animation-duration: 200ms; +} +@-webkit-keyframes slideinfromtop { + from { -webkit-transform: translateY(-100%); } + to { -webkit-transform: translateY(0); } +} +@-moz-keyframes slideinfromtop { + from { -moz-transform: translateY(-100%); } + to { -moz-transform: translateY(0); } +} +@-webkit-keyframes slideouttotop { + from { -webkit-transform: translateY(0); } + to { -webkit-transform: translateY(-100%); } +} +@-moz-keyframes slideouttotop { + from { -moz-transform: translateY(0); } + to { -moz-transform: translateY(-100%); } +} +/* slide up */ +.slideup.out { + -webkit-animation-name: fadeout; + -moz-animation-name: fadeout; + -webkit-animation-duration: 100ms; + -moz-animation-duration: 100ms; +} +.slideup.in { + -webkit-transform: translateY(0); + -webkit-animation-name: slideinfrombottom; + -moz-transform: translateY(0); + -moz-animation-name: slideinfrombottom; + -webkit-animation-duration: 250ms; + -moz-animation-duration: 250ms; +} +.slideup.in.reverse { + -webkit-animation-name: fadein; + -moz-animation-name: fadein; + -webkit-animation-duration: 150ms; + -moz-animation-duration: 150ms; +} +.slideup.out.reverse { + -webkit-transform: translateY(100%); + -moz-transform: translateY(100%); + -webkit-animation-name: slideouttobottom; + -moz-animation-name: slideouttobottom; + -webkit-animation-duration: 200ms; + -moz-animation-duration: 200ms; +} +@-webkit-keyframes slideinfrombottom { + from { -webkit-transform: translateY(100%); } + to { -webkit-transform: translateY(0); } +} +@-moz-keyframes slideinfrombottom { + from { -moz-transform: translateY(100%); } + to { -moz-transform: translateY(0); } +} +@-webkit-keyframes slideouttobottom { + from { -webkit-transform: translateY(0); } + to { -webkit-transform: translateY(100%); } +} +@-moz-keyframes slideouttobottom { + from { -moz-transform: translateY(0); } + to { -moz-transform: translateY(100%); } +} +/* The properties in this rule are only necessary for the 'flip' transition. + * We need specify the perspective to create a projection matrix. This will add + * some depth as the element flips. The depth number represents the distance of + * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate + * value. + */ +.viewport-flip { + -webkit-perspective: 1000; + -moz-perspective: 1000; + position: absolute; +} +.flip { + -webkit-backface-visibility:hidden; + -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ + -moz-backface-visibility:hidden; + -moz-transform:translateX(0); +} +.flip.out { + -webkit-transform: rotateY(-90deg) scale(.9); + -webkit-animation-name: flipouttoleft; + -webkit-animation-duration: 175ms; + -moz-transform: rotateY(-90deg) scale(.9); + -moz-animation-name: flipouttoleft; + -moz-animation-duration: 175ms; +} +.flip.in { + -webkit-animation-name: flipintoright; + -webkit-animation-duration: 225ms; + -moz-animation-name: flipintoright; + -moz-animation-duration: 225ms; +} +.flip.out.reverse { + -webkit-transform: rotateY(90deg) scale(.9); + -webkit-animation-name: flipouttoright; + -moz-transform: rotateY(90deg) scale(.9); + -moz-animation-name: flipouttoright; +} +.flip.in.reverse { + -webkit-animation-name: flipintoleft; + -moz-animation-name: flipintoleft; +} +@-webkit-keyframes flipouttoleft { + from { -webkit-transform: rotateY(0); } + to { -webkit-transform: rotateY(-90deg) scale(.9); } +} +@-moz-keyframes flipouttoleft { + from { -moz-transform: rotateY(0); } + to { -moz-transform: rotateY(-90deg) scale(.9); } +} +@-webkit-keyframes flipouttoright { + from { -webkit-transform: rotateY(0) ; } + to { -webkit-transform: rotateY(90deg) scale(.9); } +} +@-moz-keyframes flipouttoright { + from { -moz-transform: rotateY(0); } + to { -moz-transform: rotateY(90deg) scale(.9); } +} +@-webkit-keyframes flipintoleft { + from { -webkit-transform: rotateY(-90deg) scale(.9); } + to { -webkit-transform: rotateY(0); } +} +@-moz-keyframes flipintoleft { + from { -moz-transform: rotateY(-90deg) scale(.9); } + to { -moz-transform: rotateY(0); } +} +@-webkit-keyframes flipintoright { + from { -webkit-transform: rotateY(90deg) scale(.9); } + to { -webkit-transform: rotateY(0); } +} +@-moz-keyframes flipintoright { + from { -moz-transform: rotateY(90deg) scale(.9); } + to { -moz-transform: rotateY(0); } +} +/* The properties in this rule are only necessary for the 'flip' transition. + * We need specify the perspective to create a projection matrix. This will add + * some depth as the element flips. The depth number represents the distance of + * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate + * value. + */ +.viewport-turn { + -webkit-perspective: 1000; + -moz-perspective: 1000; + position: absolute; +} +.turn { + -webkit-backface-visibility:hidden; + -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ + -webkit-transform-origin: 0; + + -moz-backface-visibility:hidden; + -moz-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ + -moz-transform-origin: 0; +} +.turn.out { + -webkit-transform: rotateY(-90deg) scale(.9); + -webkit-animation-name: flipouttoleft; + -moz-transform: rotateY(-90deg) scale(.9); + -moz-animation-name: flipouttoleft; + -webkit-animation-duration: 125ms; + -moz-animation-duration: 125ms; +} +.turn.in { + -webkit-animation-name: flipintoright; + -moz-animation-name: flipintoright; + -webkit-animation-duration: 250ms; + -moz-animation-duration: 250ms; + +} +.turn.out.reverse { + -webkit-transform: rotateY(90deg) scale(.9); + -webkit-animation-name: flipouttoright; + -moz-transform: rotateY(90deg) scale(.9); + -moz-animation-name: flipouttoright; +} +.turn.in.reverse { + -webkit-animation-name: flipintoleft; + -moz-animation-name: flipintoleft; +} +@-webkit-keyframes flipouttoleft { + from { -webkit-transform: rotateY(0); } + to { -webkit-transform: rotateY(-90deg) scale(.9); } +} +@-moz-keyframes flipouttoleft { + from { -moz-transform: rotateY(0); } + to { -moz-transform: rotateY(-90deg) scale(.9); } +} +@-webkit-keyframes flipouttoright { + from { -webkit-transform: rotateY(0) ; } + to { -webkit-transform: rotateY(90deg) scale(.9); } +} +@-moz-keyframes flipouttoright { + from { -moz-transform: rotateY(0); } + to { -moz-transform: rotateY(90deg) scale(.9); } +} +@-webkit-keyframes flipintoleft { + from { -webkit-transform: rotateY(-90deg) scale(.9); } + to { -webkit-transform: rotateY(0); } +} +@-moz-keyframes flipintoleft { + from { -moz-transform: rotateY(-90deg) scale(.9); } + to { -moz-transform: rotateY(0); } +} +@-webkit-keyframes flipintoright { + from { -webkit-transform: rotateY(90deg) scale(.9); } + to { -webkit-transform: rotateY(0); } +} +@-moz-keyframes flipintoright { + from { -moz-transform: rotateY(90deg) scale(.9); } + to { -moz-transform: rotateY(0); } +} +/* flow transition */ +.flow { + -webkit-transform-origin: 50% 30%; + -moz-transform-origin: 50% 30%; + -webkit-box-shadow: 0 0 20px rgba(0,0,0,.4); + -moz-box-shadow: 0 0 20px rgba(0,0,0,.4); +} +.ui-dialog.flow { + -webkit-transform-origin: none; + -moz-transform-origin: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; +} +.flow.out { + -webkit-transform: translateX(-100%) scale(.7); + -webkit-animation-name: flowouttoleft; + -webkit-animation-timing-function: ease; + -webkit-animation-duration: 350ms; + -moz-transform: translateX(-100%) scale(.7); + -moz-animation-name: flowouttoleft; + -moz-animation-timing-function: ease; + -moz-animation-duration: 350ms; +} +.flow.in { + -webkit-transform: translateX(0) scale(1); + -webkit-animation-name: flowinfromright; + -webkit-animation-timing-function: ease; + -webkit-animation-duration: 350ms; + -moz-transform: translateX(0) scale(1); + -moz-animation-name: flowinfromright; + -moz-animation-timing-function: ease; + -moz-animation-duration: 350ms; +} +.flow.out.reverse { + -webkit-transform: translateX(100%); + -webkit-animation-name: flowouttoright; + -moz-transform: translateX(100%); + -moz-animation-name: flowouttoright; +} +.flow.in.reverse { + -webkit-animation-name: flowinfromleft; + -moz-animation-name: flowinfromleft; +} +@-webkit-keyframes flowouttoleft { + 0% { -webkit-transform: translateX(0) scale(1); } + 60%, 70% { -webkit-transform: translateX(0) scale(.7); } + 100% { -webkit-transform: translateX(-100%) scale(.7); } +} +@-moz-keyframes flowouttoleft { + 0% { -moz-transform: translateX(0) scale(1); } + 60%, 70% { -moz-transform: translateX(0) scale(.7); } + 100% { -moz-transform: translateX(-100%) scale(.7); } +} +@-webkit-keyframes flowouttoright { + 0% { -webkit-transform: translateX(0) scale(1); } + 60%, 70% { -webkit-transform: translateX(0) scale(.7); } + 100% { -webkit-transform: translateX(100%) scale(.7); } +} +@-moz-keyframes flowouttoright { + 0% { -moz-transform: translateX(0) scale(1); } + 60%, 70% { -moz-transform: translateX(0) scale(.7); } + 100% { -moz-transform: translateX(100%) scale(.7); } +} +@-webkit-keyframes flowinfromleft { + 0% { -webkit-transform: translateX(-100%) scale(.7); } + 30%, 40% { -webkit-transform: translateX(0) scale(.7); } + 100% { -webkit-transform: translateX(0) scale(1); } +} +@-moz-keyframes flowinfromleft { + 0% { -moz-transform: translateX(-100%) scale(.7); } + 30%, 40% { -moz-transform: translateX(0) scale(.7); } + 100% { -moz-transform: translateX(0) scale(1); } +} +@-webkit-keyframes flowinfromright { + 0% { -webkit-transform: translateX(100%) scale(.7); } + 30%, 40% { -webkit-transform: translateX(0) scale(.7); } + 100% { -webkit-transform: translateX(0) scale(1); } +} +@-moz-keyframes flowinfromright { + 0% { -moz-transform: translateX(100%) scale(.7); } + 30%, 40% { -moz-transform: translateX(0) scale(.7); } + 100% { -moz-transform: translateX(0) scale(1); } +} +/* content configurations. */ +.ui-grid-a, .ui-grid-b, .ui-grid-c, .ui-grid-d { overflow: hidden; } +.ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d, .ui-block-e { margin: 0; padding: 0; border: 0; float: left; min-height:1px;} +/* grid solo: 100 - single item fallback */ +.ui-grid-solo .ui-block-a { width: 100%; float: none; } +/* grid a: 50/50 */ +.ui-grid-a .ui-block-a, .ui-grid-a .ui-block-b { width: 50%; } +.ui-grid-a .ui-block-a { clear: left; } +/* grid b: 33/33/33 */ +.ui-grid-b .ui-block-a, .ui-grid-b .ui-block-b, .ui-grid-b .ui-block-c { width: 33.333%; } +.ui-grid-b .ui-block-a { clear: left; } +/* grid c: 25/25/25/25 */ +.ui-grid-c .ui-block-a, .ui-grid-c .ui-block-b, .ui-grid-c .ui-block-c, .ui-grid-c .ui-block-d { width: 25%; } +.ui-grid-c .ui-block-a { clear: left; } +/* grid d: 20/20/20/20/20 */ +.ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e { width: 20%; } +.ui-grid-d .ui-block-a { clear: left; } +/* fixed page header & footer configuration */ +.ui-header-fixed, +.ui-footer-fixed { + left: 0; + right: 0; + width: 100%; + position: fixed; + z-index: 1000; +} +.ui-header-fixed { + top: 0; +} +.ui-footer-fixed { + bottom: 0; +} +.ui-header-fullscreen, +.ui-footer-fullscreen { + opacity: .9; +} +.ui-page-header-fixed { + padding-top: 2.5em; +} +.ui-page-footer-fixed { + padding-bottom: 3em; +} +.ui-page-header-fullscreen .ui-content, +.ui-page-footer-fullscreen .ui-content { + padding: 0; +} +.ui-fixed-hidden { + position: absolute; +} +.ui-page-header-fullscreen .ui-fixed-hidden, +.ui-page-footer-fullscreen .ui-fixed-hidden { + left: -99999em; +} +.ui-header-fixed .ui-btn, +.ui-footer-fixed .ui-btn { + z-index: 10; +} +.ui-navbar { overflow: hidden; } +.ui-navbar ul, .ui-navbar-expanded ul { list-style:none; padding: 0; margin: 0; position: relative; display: block; border: 0;} +.ui-navbar-collapsed ul { float: left; width: 75%; margin-right: -2px; } +.ui-navbar-collapsed .ui-navbar-toggle { float: left; width: 25%; } +.ui-navbar li.ui-navbar-truncate { position: absolute; left: -9999px; top: -9999px; } +.ui-navbar li .ui-btn, .ui-navbar .ui-navbar-toggle .ui-btn { display: block; font-size: 12px; text-align: center; margin: 0; border-right-width: 0; max-width: 100%; } +.ui-navbar li .ui-btn { margin-right: -1px; } +.ui-navbar li .ui-btn:last-child { margin-right: 0; } +.ui-header .ui-navbar li .ui-btn, .ui-header .ui-navbar .ui-navbar-toggle .ui-btn, +.ui-footer .ui-navbar li .ui-btn, .ui-footer .ui-navbar .ui-navbar-toggle .ui-btn { border-top-width: 0; border-bottom-width: 0; } +.ui-navbar .ui-btn-inner { padding-left: 2px; padding-right: 2px; } +.ui-navbar-noicons li .ui-btn .ui-btn-inner, .ui-navbar-noicons .ui-navbar-toggle .ui-btn-inner { padding-top: .8em; padding-bottom: .9em; } +/*expanded page styles*/ +.ui-navbar-expanded .ui-btn { margin: 0; font-size: 14px; } +.ui-navbar-expanded .ui-btn-inner { padding-left: 5px; padding-right: 5px; } +.ui-navbar-expanded .ui-btn-icon-top .ui-btn-inner { padding: 45px 5px 15px; text-align: center; } +.ui-navbar-expanded .ui-btn-icon-top .ui-icon { top: 15px; } +.ui-navbar-expanded .ui-btn-icon-bottom .ui-btn-inner { padding: 15px 5px 45px; text-align: center; } +.ui-navbar-expanded .ui-btn-icon-bottom .ui-icon { bottom: 15px; } +.ui-navbar-expanded li .ui-btn .ui-btn-inner { min-height: 2.5em; } +.ui-navbar-expanded .ui-navbar-noicons .ui-btn .ui-btn-inner { padding-top: 1.8em; padding-bottom: 1.9em; } +.ui-btn { display: block; text-align: center; cursor:pointer; position: relative; margin: .5em 5px; padding: 0; } +.ui-mini { margin: .25em 5px; } +.ui-btn-inner { padding: .6em 20px; min-width: .75em; display: block; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; position: relative; zoom: 1; } +.ui-btn input, .ui-btn button { z-index: 2; } +.ui-btn-left, .ui-btn-right, .ui-btn-inline { display: inline-block; } +.ui-btn-block { display: block; } +.ui-header .ui-btn, +.ui-footer .ui-btn { display: inline-block; margin: 0; } +.ui-header .ui-btn-inner, +.ui-footer .ui-btn-inner, +.ui-mini .ui-btn-inner { font-size: 12.5px; padding: .55em 11px .5em; } +.ui-header .ui-fullsize .ui-btn-inner, +.ui-footer .ui-fullsize .ui-btn-inner { font-size: 16px; padding: .6em 25px; } +.ui-btn-icon-notext { width: 24px; height: 24px; } +.ui-btn-icon-notext .ui-btn-inner { padding: 0; height: 100%; } +.ui-btn-icon-notext .ui-btn-inner .ui-icon { margin: 2px 1px 2px 3px; } +.ui-btn-text { position: relative; z-index: 1; width: 100%; } +.ui-btn-icon-notext .ui-btn-text { position: absolute; left: -9999px; } +.ui-btn-icon-left .ui-btn-inner { padding-left: 40px; } +.ui-btn-icon-right .ui-btn-inner { padding-right: 40px; } +.ui-btn-icon-top .ui-btn-inner { padding-top: 40px; } +.ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 40px; } +.ui-header .ui-btn-icon-left .ui-btn-inner, +.ui-footer .ui-btn-icon-left .ui-btn-inner, +.ui-mini .ui-btn-icon-left .ui-btn-inner { padding-left: 30px; } +.ui-header .ui-btn-icon-right .ui-btn-inner, +.ui-footer .ui-btn-icon-right .ui-btn-inner, +.ui-mini .ui-btn-icon-right .ui-btn-inner { padding-right: 30px; } +.ui-header .ui-btn-icon-top .ui-btn-inner, +.ui-footer .ui-btn-icon-top .ui-btn-inner, +.ui-mini .ui-btn-icon-top .ui-btn-inner { padding: 30px 3px .5em 3px; } +.ui-header .ui-btn-icon-bottom .ui-btn-inner, +.ui-footer .ui-btn-icon-bottom .ui-btn-inner, +.ui-mini .ui-btn-icon-bottom .ui-btn-inner { padding: .55em 3px 30px 3px; } +/*btn icon positioning*/ +.ui-btn-icon-notext .ui-icon { display: block; z-index: 0;} +.ui-btn-icon-left .ui-btn-inner .ui-icon, .ui-btn-icon-right .ui-btn-inner .ui-icon { position: absolute; top: 50%; margin-top: -9px; } +.ui-btn-icon-top .ui-btn-inner .ui-icon, .ui-btn-icon-bottom .ui-btn-inner .ui-icon { position: absolute; left: 50%; margin-left: -9px; } +.ui-btn-icon-left .ui-icon { left: 10px; } +.ui-btn-icon-right .ui-icon { right: 10px; } +.ui-btn-icon-top .ui-icon { top: 10px; } +.ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; } +.ui-header .ui-btn-icon-left .ui-icon, +.ui-footer .ui-btn-icon-left .ui-icon, +.ui-mini.ui-btn-icon-left .ui-icon, +.ui-mini .ui-btn-icon-left .ui-icon { left: 5px; } +.ui-header .ui-btn-icon-right .ui-icon, +.ui-footer .ui-btn-icon-right .ui-icon, +.ui-mini.ui-btn-icon-right .ui-icon, +.ui-mini .ui-btn-icon-right .ui-icon { right: 5px; } +.ui-header .ui-btn-icon-top .ui-icon, +.ui-footer .ui-btn-icon-top .ui-icon, +.ui-mini.ui-btn-icon-top .ui-icon, +.ui-mini .ui-btn-icon-top .ui-icon { top: 5px; } +.ui-header .ui-btn-icon-bottom .ui-icon, +.ui-footer .ui-btn-icon-bottom .ui-icon, +.ui-mini.ui-btn-icon-bottom .ui-icon, +.ui-mini .ui-btn-icon-bottom .ui-icon { bottom: 5px; } +/*hiding native button,inputs */ +.ui-btn-hidden { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-appearance: button; opacity: .1; cursor: pointer; background: #fff; background: rgba(255,255,255,0); filter: Alpha(Opacity=.0001); font-size: 1px; border: none; text-indent: -9999px; } +.ui-collapsible { margin: .5em 0; } +.ui-collapsible-heading { font-size: 16px; display: block; margin: 0 -8px; padding: 0; border-width: 0 0 1px 0; position: relative; } +.ui-collapsible-heading a { text-align: left; margin: 0; } +.ui-collapsible-heading .ui-btn-inner, +.ui-collapsible-heading .ui-btn-icon-left .ui-btn-inner { padding-left: 40px; } +.ui-collapsible-heading .ui-btn-icon-right .ui-btn-inner { padding-left: 12px; padding-right: 40px; } +.ui-collapsible-heading .ui-btn-icon-top .ui-btn-inner, +.ui-collapsible-heading .ui-btn-icon-bottom .ui-btn-inner { padding-right: 40px; text-align: center; } +.ui-collapsible-heading a span.ui-btn { position: absolute; left: 6px; top: 50%; margin: -12px 0 0 0; width: 20px; height: 20px; padding: 1px 0px 1px 2px; text-indent: -9999px; } +.ui-collapsible-heading a span.ui-btn .ui-btn-inner { padding: 10px 0; } +.ui-collapsible-heading a span.ui-btn .ui-icon { left: 0; margin-top: -10px; } +.ui-collapsible-heading-status { position: absolute; top: -9999px; left:0px; } +.ui-collapsible-content { + display: block; + margin: 0 -8px; + padding: 10px 16px; + border-top: none; /* Overrides ui-btn-up-* */ + background-image: none; /* Overrides ui-btn-up-* */ + font-weight: normal; /* Overrides ui-btn-up-* */ +} +.ui-collapsible-content-collapsed { display: none; } +.ui-collapsible-set { margin: .5em 0; } +.ui-collapsible-set .ui-collapsible { margin: -1px 0 0; } +.ui-controlgroup, fieldset.ui-controlgroup { padding: 0; margin: 0em 0 .5em; zoom: 1; } +.ui-bar .ui-controlgroup { margin: 0 .3em; } +.ui-controlgroup-label { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .4em; } +.ui-controlgroup-controls { display: block; width: 100%;} +.ui-controlgroup li { list-style: none; } +.ui-controlgroup-vertical .ui-btn, +.ui-controlgroup-vertical .ui-checkbox, .ui-controlgroup-vertical .ui-radio { margin: 0; border-bottom-width: 0; } +.ui-controlgroup-controls label.ui-select { position: absolute; left: -9999px; } +.ui-controlgroup-vertical .ui-controlgroup-last { border-bottom-width: 1px; } +.ui-controlgroup-horizontal { padding: 0; } +.ui-controlgroup-horizontal .ui-btn-inner { text-align:center; } +.ui-controlgroup-horizontal .ui-btn, .ui-controlgroup-horizontal .ui-select { display: inline-block; margin: 0 -6px 0 0; } +.ui-controlgroup-horizontal .ui-checkbox, .ui-controlgroup-horizontal .ui-radio { float: left; clear: none; margin: 0 -1px 0 0; } +.ui-controlgroup-horizontal .ui-checkbox .ui-btn, .ui-controlgroup-horizontal .ui-radio .ui-btn, +.ui-controlgroup-horizontal .ui-checkbox:last-child, .ui-controlgroup-horizontal .ui-radio:last-child { margin-right: 0; } +.ui-controlgroup-horizontal .ui-controlgroup-last { margin-right: 0; } +.ui-controlgroup .ui-checkbox label, .ui-controlgroup .ui-radio label { font-size: 16px; } +/* conflicts with listview.. +.ui-controlgroup .ui-btn-icon-notext { width: 30px; height: 30px; text-indent: -9999px; } +.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { padding: 5px 6px 5px 5px; } +*/ +@media all and (min-width: 450px){ + .ui-field-contain .ui-controlgroup-label { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } + .ui-field-contain .ui-controlgroup-controls { width: 60%; display: inline-block; } + .ui-field-contain .ui-controlgroup .ui-select { width: 100%; } + .ui-field-contain .ui-controlgroup-horizontal .ui-select { width: auto; } +} +.ui-dialog { + background: none !important; /* this is to ensure that dialog theming does not apply (by default at least) on the page div */ +} +.ui-dialog-contain { width: 92.5%; max-width: 500px; margin: 10% auto 15px auto; padding: 0; } +.ui-dialog .ui-header { + margin-top: 15%; + border: none; + overflow: hidden; +} +.ui-dialog .ui-header, +.ui-dialog .ui-content, +.ui-dialog .ui-footer { + display: block; + position: relative; + width: auto; +} +.ui-dialog .ui-header, +.ui-dialog .ui-footer { + z-index: 10; + padding: 0; +} +.ui-dialog .ui-footer { + padding: 0 15px; +} +.ui-dialog .ui-content { + padding: 15px; +} +.ui-dialog { + margin-top: -15px; +} +.ui-checkbox, .ui-radio { position: relative; clear: both; margin: .2em 0 .5em; z-index: 1; } +.ui-checkbox .ui-btn, .ui-radio .ui-btn { margin: 0; text-align: left; z-index: 2; } +.ui-checkbox .ui-btn-inner, .ui-radio .ui-btn-inner { white-space: normal; } +.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner { padding-left: 45px; } +.ui-checkbox .ui-mini.ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-mini.ui-btn-icon-left .ui-btn-inner { padding-left: 36px; } +.ui-checkbox .ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; } +.ui-checkbox .ui-mini.ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 36px; } +.ui-checkbox .ui-btn-icon-top .ui-btn-inner,.ui-radio .ui-btn-icon-top .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; } +.ui-checkbox .ui-btn-icon-bottom .ui-btn-inner, .ui-radio .ui-btn-icon-bottom .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; } +.ui-checkbox .ui-icon, .ui-radio .ui-icon { top: 1.1em; } +.ui-checkbox .ui-btn-icon-left .ui-icon, .ui-radio .ui-btn-icon-left .ui-icon { left: 15px; } +.ui-checkbox .ui-mini.ui-btn-icon-left .ui-icon, .ui-radio .ui-mini.ui-btn-icon-left .ui-icon { left: 9px; } +.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; } +.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; } +.ui-checkbox .ui-btn-icon-top .ui-icon, .ui-radio .ui-btn-icon-top .ui-icon { top: 10px; } +.ui-checkbox .ui-btn-icon-bottom .ui-icon, .ui-radio .ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; } +.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; } +.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; } +/* input, label positioning */ +.ui-checkbox input,.ui-radio input { position:absolute; left:20px; top:50%; width: 10px; height: 10px; margin:-5px 0 0 0; outline: 0 !important; z-index: 1; } +.ui-field-contain, fieldset.ui-field-contain { padding: .8em 0; margin: 0; border-width: 0 0 1px 0; overflow: visible; } +.ui-field-contain:first-child { border-top-width: 0; } +.ui-header .ui-field-contain-left, +.ui-header .ui-field-contain-right { + position: absolute; + top: 0; + width: 25%; +} +.ui-header .ui-field-contain-left { + left: 1em; +} +.ui-header .ui-field-contain-right { + right: 1em; +} +@media all and (min-width: 450px){ + .ui-field-contain, .ui-mobile fieldset.ui-field-contain { border-width: 0; padding: 0; margin: 1em 0; } +} +.ui-select { display: block; position: relative; } +.ui-select select { position: absolute; left: -9999px; top: -9999px; } +.ui-select .ui-btn { overflow: hidden; opacity: 1; margin: 0; } +/* Fixes #2588 — When Windows Phone 7.5 (Mango) tries to calculate a numeric opacity for a select—including “inherit”—without explicitly specifying an opacity on the parent to give it context, a bug appears where clicking elsewhere on the page after opening the select will open the select again. */ +.ui-select .ui-btn select { cursor: pointer; -webkit-appearance: button; left: 0; top:0; width: 100%; min-height: 1.5em; min-height: 100%; height: 3em; max-height: 100%; opacity: 0; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter: alpha(opacity=0); z-index: 2; } +.ui-select .ui-disabled { opacity: .3; } +@-moz-document url-prefix() {.ui-select .ui-btn select { opacity: 0.0001; }} +.ui-select .ui-btn select.ui-select-nativeonly { opacity: 1; text-indent: 0; } +.ui-select .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; } +.ui-select .ui-btn-icon-right .ui-icon { right: 15px; } +.ui-select .ui-mini.ui-btn-icon-right .ui-icon { right: 7px; } +/* labels */ +label.ui-select { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; } +/*listbox*/ +.ui-select .ui-btn-text, .ui-selectmenu .ui-btn-text { display: block; min-height: 1em; overflow: hidden !important; +/* This !important is required for iPad Safari specifically. See https://github.com/jquery/jquery-mobile/issues/2647 */ } +.ui-select .ui-btn-text { text-overflow: ellipsis; } +.ui-selectmenu { position: absolute; padding: 0; z-index: 1100 !important; width: 80%; max-width: 350px; padding: 6px; } +.ui-selectmenu .ui-listview { margin: 0; } +.ui-selectmenu .ui-btn.ui-li-divider { cursor: default; } +.ui-selectmenu-hidden { top: -9999px; left: -9999px; } +.ui-selectmenu-screen { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 99; } +.ui-screen-hidden, .ui-selectmenu-list .ui-li .ui-icon { display: none; } +.ui-selectmenu-list .ui-li .ui-icon { display: block; } +.ui-li.ui-selectmenu-placeholder { display: none; } +.ui-selectmenu .ui-header .ui-title { margin: 0.6em 46px 0.8em; } +@media all and (min-width: 450px){ + .ui-field-contain label.ui-select { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } + .ui-field-contain .ui-select { width: 60%; display: inline-block; } +} +/* when no placeholder is defined in a multiple select, the header height doesn't even extend past the close button. this shim's content in there */ +.ui-selectmenu .ui-header h1:after { content: '.'; visibility: hidden; } +label.ui-input-text { font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em; } +input.ui-input-text, textarea.ui-input-text { background-image: none; padding: .4em; line-height: 1.4; font-size: 16px; display: block; width: 97%; outline: 0; } +.ui-header input.ui-input-text, +.ui-footer input.ui-input-text { margin-left: 1.25%; padding: .4em 1%; width: 95.5% } /* Note that padding left/right on text inputs is factored into how the element is displayed in Firefox, but does not actually pad the text inside it. */ + input.ui-input-text { -webkit-appearance: none; } +textarea.ui-input-text { height: 50px; -webkit-transition: height 200ms linear; -moz-transition: height 200ms linear; -o-transition: height 200ms linear; transition: height 200ms linear; } +.ui-input-search { padding: 0 30px; background-image: none; position: relative; } +.ui-icon-searchfield:after { position: absolute; left: 7px; top: 50%; margin-top: -9px; content: ""; width: 18px; height: 18px; opacity: .5; } +.ui-input-search input.ui-input-text { border: none; width: 98%; padding: .4em 0; margin: 0; display: block; background: transparent none; outline: 0 !important; } +.ui-input-search .ui-input-clear { position: absolute; right: 0; top: 50%; margin-top: -13px; } +.ui-mini .ui-input-clear { right: -3px; } +.ui-input-search .ui-input-clear-hidden { display: none; } +input.ui-mini, .ui-mini input, textarea.ui-mini { font-size: 14px; } +textarea.ui-mini { height: 45px; } +/* orientation adjustments - incomplete!*/ +@media all and (min-width: 450px){ + .ui-field-contain label.ui-input-text { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0 } + .ui-field-contain input.ui-input-text, + .ui-field-contain textarea.ui-input-text, + .ui-field-contain .ui-input-search { width: 60%; display: inline-block; } + .ui-field-contain .ui-input-search { width: 50%; } + .ui-hide-label input.ui-input-text, + .ui-hide-label textarea.ui-input-text, + .ui-hide-label .ui-input-search { padding: .4em; width: 97%; } + .ui-input-search input.ui-input-text { width: 98%; /*echos rule from above*/ } +} +.ui-listview { margin: 0; counter-reset: listnumbering; } +.ui-content .ui-listview { margin: -15px; } +.ui-content .ui-listview-inset { margin: 1em 0; } +.ui-listview, .ui-li { list-style:none; padding:0; } +.ui-li, .ui-li.ui-field-contain { display: block; margin:0; position: relative; overflow: visible; text-align: left; border-width: 0; border-top-width: 1px; } +.ui-li .ui-btn-text a.ui-link-inherit { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } +.ui-li-divider, .ui-li-static { padding: .5em 15px; font-size: 14px; font-weight: bold; } +.ui-li-divider { counter-reset: listnumbering; } +ol.ui-listview .ui-link-inherit:before, ol.ui-listview .ui-li-static:before, .ui-li-dec { font-size: .8em; display: inline-block; padding-right: .3em; font-weight: normal;counter-increment: listnumbering; content: counter(listnumbering) ". "; } +ol.ui-listview .ui-li-jsnumbering:before { content: "" !important; } /* to avoid chance of duplication */ +.ui-listview-inset .ui-li { border-right-width: 1px; border-left-width: 1px; } +.ui-li:last-child, .ui-li.ui-field-contain:last-child { border-bottom-width: 1px; } +.ui-li>.ui-btn-inner { display: block; position: relative; padding: 0; } +.ui-li .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li { padding: .7em 15px .7em 15px; display: block; } +.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-thumb { min-height: 60px; padding-left: 100px; } +.ui-li-has-icon .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-icon { min-height: 20px; padding-left: 40px; } +.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-count { padding-right: 45px; } +.ui-li-has-arrow .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow { padding-right: 30px; } +.ui-li-has-arrow.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow.ui-li-has-count { padding-right: 75px; } +.ui-li-has-count .ui-btn-text { padding-right: 15px; } +.ui-li-heading { font-size: 16px; font-weight: bold; display: block; margin: .6em 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } +.ui-li-desc { font-size: 12px; font-weight: normal; display: block; margin: -.5em 0 .6em; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } +.ui-li-thumb, .ui-listview .ui-li-icon { position: absolute; left: 1px; top: 0; max-height: 80px; max-width: 80px; } +.ui-listview .ui-li-icon { max-height: 40px; max-width: 40px; left: 10px; top: .9em; } +.ui-li-thumb, .ui-listview .ui-li-icon, .ui-li-content { float: left; margin-right: 10px; } +.ui-li-aside { float: right; width: 50%; text-align: right; margin: .3em 0; } +@media all and (min-width: 480px){ + .ui-li-aside { width: 45%; } +} +.ui-li-divider { cursor: default; } +.ui-li-has-alt .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt { padding-right: 95px; } +.ui-li-has-count .ui-li-count { position: absolute; font-size: 11px; font-weight: bold; padding: .2em .5em; top: 50%; margin-top: -.9em; right: 48px; } +.ui-li-divider .ui-li-count, .ui-li-static .ui-li-count { right: 10px; } +.ui-li-has-alt .ui-li-count { right: 55px; } +.ui-li-link-alt { position: absolute; width: 40px; height: 100%; border-width: 0; border-left-width: 1px; top: 0; right: 0; margin: 0; padding: 0; z-index: 2; } +.ui-li-link-alt .ui-btn { overflow: hidden; position: absolute; right: 8px; top: 50%; margin: -11px 0 0 0; border-bottom-width: 1px; z-index: -1;} +.ui-li-link-alt .ui-btn-inner { padding: 0; height: 100%; position: absolute; width: 100%; top: 0; left: 0;} +.ui-li-link-alt .ui-btn .ui-icon { right: 50%; margin-right: -9px; } +.ui-listview * .ui-btn-inner > .ui-btn > .ui-btn-inner { border-top: 0px; } +.ui-listview-filter { border-width: 0; overflow: hidden; margin: -15px -15px 15px -15px } +.ui-listview-filter .ui-input-search { margin: 5px; width: auto; display: block; } +.ui-listview-filter-inset { margin: -15px -5px -15px -5px; background: transparent; } +.ui-li.ui-screen-hidden{display:none;} +/* Odd iPad positioning issue. */ +@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) { + .ui-li .ui-btn-text { overflow: visible; } +} +label.ui-slider { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; } +input.ui-slider-input, +.ui-field-contain input.ui-slider-input { display: inline-block; width: 50px; } +select.ui-slider-switch { display: none; } +div.ui-slider { position: relative; display: inline-block; overflow: visible; height: 15px; padding: 0; margin: 0 2% 0 20px; top: 4px; width: 65%; } +div.ui-slider-mini { height: 12px; margin-left: 10px; } +div.ui-slider-bg { border: none; height: 100%; padding-right: 8px; } +.ui-controlgroup a.ui-slider-handle, a.ui-slider-handle { position: absolute; z-index: 1; top: 50%; width: 28px; height: 28px; margin-top: -15px; margin-left: -15px; outline: 0; } +a.ui-slider-handle .ui-btn-inner { padding: 0; height: 100%; } +div.ui-slider-mini a.ui-slider-handle { height: 14px; width: 14px; margin: -8px 0 0 -7px; } +div.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: -9px 0 0 -9px; } +@media all and (min-width: 450px){ + .ui-field-contain label.ui-slider { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } + .ui-field-contain div.ui-slider { width: 43%; } + .ui-field-contain div.ui-slider-switch { width: 5.5em; } +} +div.ui-slider-switch { height: 32px; margin-left: 0; width: 5.8em; } +a.ui-slider-handle-snapping { -webkit-transition: left 70ms linear; -moz-transition: left 70ms linear; } +div.ui-slider-switch .ui-slider-handle { margin-top: 1px; } +.ui-slider-inneroffset { margin: 0 16px; position: relative; z-index: 1; } +div.ui-slider-switch.ui-slider-mini { width: 5em; height: 29px; } +div.ui-slider-switch.ui-slider-mini .ui-slider-inneroffset { margin: 0 15px 0 14px; } +div.ui-slider-switch.ui-slider-mini .ui-slider-handle { width: 25px; height: 25px; margin: 1px 0 0 -13px; } +div.ui-slider-switch.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: 0; } +span.ui-slider-label { position: absolute; text-align: center; width: 100%; overflow: hidden; font-size: 16px; top: 0; line-height: 2; min-height: 100%; border-width: 0; white-space: nowrap; } +.ui-slider-mini span.ui-slider-label { font-size: 14px; } +span.ui-slider-label-a { z-index: 1; left: 0; text-indent: -1.5em; } +span.ui-slider-label-b { z-index: 0; right: 0; text-indent: 1.5em;} +.ui-slider-inline { width: 120px; display: inline-block; } diff --git a/Js/jquery/jquery.mobile-1.1.0.js b/Js/jquery/jquery.mobile-1.1.0.js new file mode 100644 index 0000000..c12426c --- /dev/null +++ b/Js/jquery/jquery.mobile-1.1.0.js @@ -0,0 +1,7551 @@ +/* +* jQuery Mobile Framework 1.1.0 db342b1f315c282692791aa870455901fdb46a55 +* http://jquerymobile.com +* +* Copyright 2011 (c) jQuery Project +* Dual licensed under the MIT or GPL Version 2 licenses. +* http://jquery.org/license +* +*/ +(function ( root, doc, factory ) { + if ( typeof define === "function" && define.amd ) { + // AMD. Register as an anonymous module. + define( [ "jquery" ], function ( $ ) { + factory( $, root, doc ); + return $.mobile; + }); + } else { + // Browser globals + factory( root.jQuery, root, doc ); + } +}( this, document, function ( $, window, document, undefined ) { + + +// This plugin is an experiment for abstracting away the touch and mouse +// events so that developers don't have to worry about which method of input +// the device their document is loaded on supports. +// +// The idea here is to allow the developer to register listeners for the +// basic mouse events, such as mousedown, mousemove, mouseup, and click, +// and the plugin will take care of registering the correct listeners +// behind the scenes to invoke the listener at the fastest possible time +// for that device, while still retaining the order of event firing in +// the traditional mouse environment, should multiple handlers be registered +// on the same element for different events. +// +// The current version exposes the following virtual events to jQuery bind methods: +// "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel" + +(function( $, window, document, undefined ) { + +var dataPropertyName = "virtualMouseBindings", + touchTargetPropertyName = "virtualTouchID", + virtualEventNames = "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split( " " ), + touchEventProps = "clientX clientY pageX pageY screenX screenY".split( " " ), + mouseHookProps = $.event.mouseHooks ? $.event.mouseHooks.props : [], + mouseEventProps = $.event.props.concat( mouseHookProps ), + activeDocHandlers = {}, + resetTimerID = 0, + startX = 0, + startY = 0, + didScroll = false, + clickBlockList = [], + blockMouseTriggers = false, + blockTouchTriggers = false, + eventCaptureSupported = "addEventListener" in document, + $document = $( document ), + nextTouchID = 1, + lastTouchID = 0; + +$.vmouse = { + moveDistanceThreshold: 10, + clickDistanceThreshold: 10, + resetTimerDuration: 1500 +}; + +function getNativeEvent( event ) { + + while ( event && typeof event.originalEvent !== "undefined" ) { + event = event.originalEvent; + } + return event; +} + +function createVirtualEvent( event, eventType ) { + + var t = event.type, + oe, props, ne, prop, ct, touch, i, j; + + event = $.Event(event); + event.type = eventType; + + oe = event.originalEvent; + props = $.event.props; + + // addresses separation of $.event.props in to $.event.mouseHook.props and Issue 3280 + // https://github.com/jquery/jquery-mobile/issues/3280 + if ( t.search( /^(mouse|click)/ ) > -1 ) { + props = mouseEventProps; + } + + // copy original event properties over to the new event + // this would happen if we could call $.event.fix instead of $.Event + // but we don't have a way to force an event to be fixed multiple times + if ( oe ) { + for ( i = props.length, prop; i; ) { + prop = props[ --i ]; + event[ prop ] = oe[ prop ]; + } + } + + // make sure that if the mouse and click virtual events are generated + // without a .which one is defined + if ( t.search(/mouse(down|up)|click/) > -1 && !event.which ){ + event.which = 1; + } + + if ( t.search(/^touch/) !== -1 ) { + ne = getNativeEvent( oe ); + t = ne.touches; + ct = ne.changedTouches; + touch = ( t && t.length ) ? t[0] : ( (ct && ct.length) ? ct[ 0 ] : undefined ); + + if ( touch ) { + for ( j = 0, len = touchEventProps.length; j < len; j++){ + prop = touchEventProps[ j ]; + event[ prop ] = touch[ prop ]; + } + } + } + + return event; +} + +function getVirtualBindingFlags( element ) { + + var flags = {}, + b, k; + + while ( element ) { + + b = $.data( element, dataPropertyName ); + + for ( k in b ) { + if ( b[ k ] ) { + flags[ k ] = flags.hasVirtualBinding = true; + } + } + element = element.parentNode; + } + return flags; +} + +function getClosestElementWithVirtualBinding( element, eventType ) { + var b; + while ( element ) { + + b = $.data( element, dataPropertyName ); + + if ( b && ( !eventType || b[ eventType ] ) ) { + return element; + } + element = element.parentNode; + } + return null; +} + +function enableTouchBindings() { + blockTouchTriggers = false; +} + +function disableTouchBindings() { + blockTouchTriggers = true; +} + +function enableMouseBindings() { + lastTouchID = 0; + clickBlockList.length = 0; + blockMouseTriggers = false; + + // When mouse bindings are enabled, our + // touch bindings are disabled. + disableTouchBindings(); +} + +function disableMouseBindings() { + // When mouse bindings are disabled, our + // touch bindings are enabled. + enableTouchBindings(); +} + +function startResetTimer() { + clearResetTimer(); + resetTimerID = setTimeout(function(){ + resetTimerID = 0; + enableMouseBindings(); + }, $.vmouse.resetTimerDuration ); +} + +function clearResetTimer() { + if ( resetTimerID ){ + clearTimeout( resetTimerID ); + resetTimerID = 0; + } +} + +function triggerVirtualEvent( eventType, event, flags ) { + var ve; + + if ( ( flags && flags[ eventType ] ) || + ( !flags && getClosestElementWithVirtualBinding( event.target, eventType ) ) ) { + + ve = createVirtualEvent( event, eventType ); + + $( event.target).trigger( ve ); + } + + return ve; +} + +function mouseEventCallback( event ) { + var touchID = $.data(event.target, touchTargetPropertyName); + + if ( !blockMouseTriggers && ( !lastTouchID || lastTouchID !== touchID ) ){ + var ve = triggerVirtualEvent( "v" + event.type, event ); + if ( ve ) { + if ( ve.isDefaultPrevented() ) { + event.preventDefault(); + } + if ( ve.isPropagationStopped() ) { + event.stopPropagation(); + } + if ( ve.isImmediatePropagationStopped() ) { + event.stopImmediatePropagation(); + } + } + } +} + +function handleTouchStart( event ) { + + var touches = getNativeEvent( event ).touches, + target, flags; + + if ( touches && touches.length === 1 ) { + + target = event.target; + flags = getVirtualBindingFlags( target ); + + if ( flags.hasVirtualBinding ) { + + lastTouchID = nextTouchID++; + $.data( target, touchTargetPropertyName, lastTouchID ); + + clearResetTimer(); + + disableMouseBindings(); + didScroll = false; + + var t = getNativeEvent( event ).touches[ 0 ]; + startX = t.pageX; + startY = t.pageY; + + triggerVirtualEvent( "vmouseover", event, flags ); + triggerVirtualEvent( "vmousedown", event, flags ); + } + } +} + +function handleScroll( event ) { + if ( blockTouchTriggers ) { + return; + } + + if ( !didScroll ) { + triggerVirtualEvent( "vmousecancel", event, getVirtualBindingFlags( event.target ) ); + } + + didScroll = true; + startResetTimer(); +} + +function handleTouchMove( event ) { + if ( blockTouchTriggers ) { + return; + } + + var t = getNativeEvent( event ).touches[ 0 ], + didCancel = didScroll, + moveThreshold = $.vmouse.moveDistanceThreshold; + didScroll = didScroll || + ( Math.abs(t.pageX - startX) > moveThreshold || + Math.abs(t.pageY - startY) > moveThreshold ), + flags = getVirtualBindingFlags( event.target ); + + if ( didScroll && !didCancel ) { + triggerVirtualEvent( "vmousecancel", event, flags ); + } + + triggerVirtualEvent( "vmousemove", event, flags ); + startResetTimer(); +} + +function handleTouchEnd( event ) { + if ( blockTouchTriggers ) { + return; + } + + disableTouchBindings(); + + var flags = getVirtualBindingFlags( event.target ), + t; + triggerVirtualEvent( "vmouseup", event, flags ); + + if ( !didScroll ) { + var ve = triggerVirtualEvent( "vclick", event, flags ); + if ( ve && ve.isDefaultPrevented() ) { + // The target of the mouse events that follow the touchend + // event don't necessarily match the target used during the + // touch. This means we need to rely on coordinates for blocking + // any click that is generated. + t = getNativeEvent( event ).changedTouches[ 0 ]; + clickBlockList.push({ + touchID: lastTouchID, + x: t.clientX, + y: t.clientY + }); + + // Prevent any mouse events that follow from triggering + // virtual event notifications. + blockMouseTriggers = true; + } + } + triggerVirtualEvent( "vmouseout", event, flags); + didScroll = false; + + startResetTimer(); +} + +function hasVirtualBindings( ele ) { + var bindings = $.data( ele, dataPropertyName ), + k; + + if ( bindings ) { + for ( k in bindings ) { + if ( bindings[ k ] ) { + return true; + } + } + } + return false; +} + +function dummyMouseHandler(){} + +function getSpecialEventObject( eventType ) { + var realType = eventType.substr( 1 ); + + return { + setup: function( data, namespace ) { + // If this is the first virtual mouse binding for this element, + // add a bindings object to its data. + + if ( !hasVirtualBindings( this ) ) { + $.data( this, dataPropertyName, {}); + } + + // If setup is called, we know it is the first binding for this + // eventType, so initialize the count for the eventType to zero. + var bindings = $.data( this, dataPropertyName ); + bindings[ eventType ] = true; + + // If this is the first virtual mouse event for this type, + // register a global handler on the document. + + activeDocHandlers[ eventType ] = ( activeDocHandlers[ eventType ] || 0 ) + 1; + + if ( activeDocHandlers[ eventType ] === 1 ) { + $document.bind( realType, mouseEventCallback ); + } + + // Some browsers, like Opera Mini, won't dispatch mouse/click events + // for elements unless they actually have handlers registered on them. + // To get around this, we register dummy handlers on the elements. + + $( this ).bind( realType, dummyMouseHandler ); + + // For now, if event capture is not supported, we rely on mouse handlers. + if ( eventCaptureSupported ) { + // If this is the first virtual mouse binding for the document, + // register our touchstart handler on the document. + + activeDocHandlers[ "touchstart" ] = ( activeDocHandlers[ "touchstart" ] || 0) + 1; + + if (activeDocHandlers[ "touchstart" ] === 1) { + $document.bind( "touchstart", handleTouchStart ) + .bind( "touchend", handleTouchEnd ) + + // On touch platforms, touching the screen and then dragging your finger + // causes the window content to scroll after some distance threshold is + // exceeded. On these platforms, a scroll prevents a click event from being + // dispatched, and on some platforms, even the touchend is suppressed. To + // mimic the suppression of the click event, we need to watch for a scroll + // event. Unfortunately, some platforms like iOS don't dispatch scroll + // events until *AFTER* the user lifts their finger (touchend). This means + // we need to watch both scroll and touchmove events to figure out whether + // or not a scroll happenens before the touchend event is fired. + + .bind( "touchmove", handleTouchMove ) + .bind( "scroll", handleScroll ); + } + } + }, + + teardown: function( data, namespace ) { + // If this is the last virtual binding for this eventType, + // remove its global handler from the document. + + --activeDocHandlers[ eventType ]; + + if ( !activeDocHandlers[ eventType ] ) { + $document.unbind( realType, mouseEventCallback ); + } + + if ( eventCaptureSupported ) { + // If this is the last virtual mouse binding in existence, + // remove our document touchstart listener. + + --activeDocHandlers[ "touchstart" ]; + + if ( !activeDocHandlers[ "touchstart" ] ) { + $document.unbind( "touchstart", handleTouchStart ) + .unbind( "touchmove", handleTouchMove ) + .unbind( "touchend", handleTouchEnd ) + .unbind( "scroll", handleScroll ); + } + } + + var $this = $( this ), + bindings = $.data( this, dataPropertyName ); + + // teardown may be called when an element was + // removed from the DOM. If this is the case, + // jQuery core may have already stripped the element + // of any data bindings so we need to check it before + // using it. + if ( bindings ) { + bindings[ eventType ] = false; + } + + // Unregister the dummy event handler. + + $this.unbind( realType, dummyMouseHandler ); + + // If this is the last virtual mouse binding on the + // element, remove the binding data from the element. + + if ( !hasVirtualBindings( this ) ) { + $this.removeData( dataPropertyName ); + } + } + }; +} + +// Expose our custom events to the jQuery bind/unbind mechanism. + +for ( var i = 0; i < virtualEventNames.length; i++ ){ + $.event.special[ virtualEventNames[ i ] ] = getSpecialEventObject( virtualEventNames[ i ] ); +} + +// Add a capture click handler to block clicks. +// Note that we require event capture support for this so if the device +// doesn't support it, we punt for now and rely solely on mouse events. +if ( eventCaptureSupported ) { + document.addEventListener( "click", function( e ){ + var cnt = clickBlockList.length, + target = e.target, + x, y, ele, i, o, touchID; + + if ( cnt ) { + x = e.clientX; + y = e.clientY; + threshold = $.vmouse.clickDistanceThreshold; + + // The idea here is to run through the clickBlockList to see if + // the current click event is in the proximity of one of our + // vclick events that had preventDefault() called on it. If we find + // one, then we block the click. + // + // Why do we have to rely on proximity? + // + // Because the target of the touch event that triggered the vclick + // can be different from the target of the click event synthesized + // by the browser. The target of a mouse/click event that is syntehsized + // from a touch event seems to be implementation specific. For example, + // some browsers will fire mouse/click events for a link that is near + // a touch event, even though the target of the touchstart/touchend event + // says the user touched outside the link. Also, it seems that with most + // browsers, the target of the mouse/click event is not calculated until the + // time it is dispatched, so if you replace an element that you touched + // with another element, the target of the mouse/click will be the new + // element underneath that point. + // + // Aside from proximity, we also check to see if the target and any + // of its ancestors were the ones that blocked a click. This is necessary + // because of the strange mouse/click target calculation done in the + // Android 2.1 browser, where if you click on an element, and there is a + // mouse/click handler on one of its ancestors, the target will be the + // innermost child of the touched element, even if that child is no where + // near the point of touch. + + ele = target; + + while ( ele ) { + for ( i = 0; i < cnt; i++ ) { + o = clickBlockList[ i ]; + touchID = 0; + + if ( ( ele === target && Math.abs( o.x - x ) < threshold && Math.abs( o.y - y ) < threshold ) || + $.data( ele, touchTargetPropertyName ) === o.touchID ) { + // XXX: We may want to consider removing matches from the block list + // instead of waiting for the reset timer to fire. + e.preventDefault(); + e.stopPropagation(); + return; + } + } + ele = ele.parentNode; + } + } + }, true); +} +})( jQuery, window, document ); + + + +// Script: jQuery hashchange event +// +// *Version: 1.3, Last updated: 7/21/2010* +// +// Project Home - http://benalman.com/projects/jquery-hashchange-plugin/ +// GitHub - http://github.com/cowboy/jquery-hashchange/ +// Source - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js +// (Minified) - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (0.8kb gzipped) +// +// About: License +// +// Copyright (c) 2010 "Cowboy" Ben Alman, +// Dual licensed under the MIT and GPL licenses. +// http://benalman.com/about/license/ +// +// About: Examples +// +// These working examples, complete with fully commented code, illustrate a few +// ways in which this plugin can be used. +// +// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/ +// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/ +// +// About: Support and Testing +// +// Information about what version or versions of jQuery this plugin has been +// tested with, what browsers it has been tested in, and where the unit tests +// reside (so you can test it yourself). +// +// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2 +// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5, +// Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5. +// Unit Tests - http://benalman.com/code/projects/jquery-hashchange/unit/ +// +// About: Known issues +// +// While this jQuery hashchange event implementation is quite stable and +// robust, there are a few unfortunate browser bugs surrounding expected +// hashchange event-based behaviors, independent of any JavaScript +// window.onhashchange abstraction. See the following examples for more +// information: +// +// Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/ +// Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/ +// WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/ +// Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/ +// +// Also note that should a browser natively support the window.onhashchange +// event, but not report that it does, the fallback polling loop will be used. +// +// About: Release History +// +// 1.3 - (7/21/2010) Reorganized IE6/7 Iframe code to make it more +// "removable" for mobile-only development. Added IE6/7 document.title +// support. Attempted to make Iframe as hidden as possible by using +// techniques from http://www.paciellogroup.com/blog/?p=604. Added +// support for the "shortcut" format $(window).hashchange( fn ) and +// $(window).hashchange() like jQuery provides for built-in events. +// Renamed jQuery.hashchangeDelay to and +// lowered its default value to 50. Added +// and properties plus document-domain.html +// file to address access denied issues when setting document.domain in +// IE6/7. +// 1.2 - (2/11/2010) Fixed a bug where coming back to a page using this plugin +// from a page on another domain would cause an error in Safari 4. Also, +// IE6/7 Iframe is now inserted after the body (this actually works), +// which prevents the page from scrolling when the event is first bound. +// Event can also now be bound before DOM ready, but it won't be usable +// before then in IE6/7. +// 1.1 - (1/21/2010) Incorporated document.documentMode test to fix IE8 bug +// where browser version is incorrectly reported as 8.0, despite +// inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag. +// 1.0 - (1/9/2010) Initial Release. Broke out the jQuery BBQ event.special +// window.onhashchange functionality into a separate plugin for users +// who want just the basic event & back button support, without all the +// extra awesomeness that BBQ provides. This plugin will be included as +// part of jQuery BBQ, but also be available separately. + +(function($,window,undefined){ + // Reused string. + var str_hashchange = 'hashchange', + + // Method / object references. + doc = document, + fake_onhashchange, + special = $.event.special, + + // Does the browser support window.onhashchange? Note that IE8 running in + // IE7 compatibility mode reports true for 'onhashchange' in window, even + // though the event isn't supported, so also test document.documentMode. + doc_mode = doc.documentMode, + supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 ); + + // Get location.hash (or what you'd expect location.hash to be) sans any + // leading #. Thanks for making this necessary, Firefox! + function get_fragment( url ) { + url = url || location.href; + return '#' + url.replace( /^[^#]*#?(.*)$/, '$1' ); + }; + + // Method: jQuery.fn.hashchange + // + // Bind a handler to the window.onhashchange event or trigger all bound + // window.onhashchange event handlers. This behavior is consistent with + // jQuery's built-in event handlers. + // + // Usage: + // + // > jQuery(window).hashchange( [ handler ] ); + // + // Arguments: + // + // handler - (Function) Optional handler to be bound to the hashchange + // event. This is a "shortcut" for the more verbose form: + // jQuery(window).bind( 'hashchange', handler ). If handler is omitted, + // all bound window.onhashchange event handlers will be triggered. This + // is a shortcut for the more verbose + // jQuery(window).trigger( 'hashchange' ). These forms are described in + // the section. + // + // Returns: + // + // (jQuery) The initial jQuery collection of elements. + + // Allow the "shortcut" format $(elem).hashchange( fn ) for binding and + // $(elem).hashchange() for triggering, like jQuery does for built-in events. + $.fn[ str_hashchange ] = function( fn ) { + return fn ? this.bind( str_hashchange, fn ) : this.trigger( str_hashchange ); + }; + + // Property: jQuery.fn.hashchange.delay + // + // The numeric interval (in milliseconds) at which the + // polling loop executes. Defaults to 50. + + // Property: jQuery.fn.hashchange.domain + // + // If you're setting document.domain in your JavaScript, and you want hash + // history to work in IE6/7, not only must this property be set, but you must + // also set document.domain BEFORE jQuery is loaded into the page. This + // property is only applicable if you are supporting IE6/7 (or IE8 operating + // in "IE7 compatibility" mode). + // + // In addition, the property must be set to the + // path of the included "document-domain.html" file, which can be renamed or + // modified if necessary (note that the document.domain specified must be the + // same in both your main JavaScript as well as in this file). + // + // Usage: + // + // jQuery.fn.hashchange.domain = document.domain; + + // Property: jQuery.fn.hashchange.src + // + // If, for some reason, you need to specify an Iframe src file (for example, + // when setting document.domain as in ), you can + // do so using this property. Note that when using this property, history + // won't be recorded in IE6/7 until the Iframe src file loads. This property + // is only applicable if you are supporting IE6/7 (or IE8 operating in "IE7 + // compatibility" mode). + // + // Usage: + // + // jQuery.fn.hashchange.src = 'path/to/file.html'; + + $.fn[ str_hashchange ].delay = 50; + /* + $.fn[ str_hashchange ].domain = null; + $.fn[ str_hashchange ].src = null; + */ + + // Event: hashchange event + // + // Fired when location.hash changes. In browsers that support it, the native + // HTML5 window.onhashchange event is used, otherwise a polling loop is + // initialized, running every milliseconds to + // see if the hash has changed. In IE6/7 (and IE8 operating in "IE7 + // compatibility" mode), a hidden Iframe is created to allow the back button + // and hash-based history to work. + // + // Usage as described in : + // + // > // Bind an event handler. + // > jQuery(window).hashchange( function(e) { + // > var hash = location.hash; + // > ... + // > }); + // > + // > // Manually trigger the event handler. + // > jQuery(window).hashchange(); + // + // A more verbose usage that allows for event namespacing: + // + // > // Bind an event handler. + // > jQuery(window).bind( 'hashchange', function(e) { + // > var hash = location.hash; + // > ... + // > }); + // > + // > // Manually trigger the event handler. + // > jQuery(window).trigger( 'hashchange' ); + // + // Additional Notes: + // + // * The polling loop and Iframe are not created until at least one handler + // is actually bound to the 'hashchange' event. + // * If you need the bound handler(s) to execute immediately, in cases where + // a location.hash exists on page load, via bookmark or page refresh for + // example, use jQuery(window).hashchange() or the more verbose + // jQuery(window).trigger( 'hashchange' ). + // * The event can be bound before DOM ready, but since it won't be usable + // before then in IE6/7 (due to the necessary Iframe), recommended usage is + // to bind it inside a DOM ready handler. + + // Override existing $.event.special.hashchange methods (allowing this plugin + // to be defined after jQuery BBQ in BBQ's source code). + special[ str_hashchange ] = $.extend( special[ str_hashchange ], { + + // Called only when the first 'hashchange' event is bound to window. + setup: function() { + // If window.onhashchange is supported natively, there's nothing to do.. + if ( supports_onhashchange ) { return false; } + + // Otherwise, we need to create our own. And we don't want to call this + // until the user binds to the event, just in case they never do, since it + // will create a polling loop and possibly even a hidden Iframe. + $( fake_onhashchange.start ); + }, + + // Called only when the last 'hashchange' event is unbound from window. + teardown: function() { + // If window.onhashchange is supported natively, there's nothing to do.. + if ( supports_onhashchange ) { return false; } + + // Otherwise, we need to stop ours (if possible). + $( fake_onhashchange.stop ); + } + + }); + + // fake_onhashchange does all the work of triggering the window.onhashchange + // event for browsers that don't natively support it, including creating a + // polling loop to watch for hash changes and in IE 6/7 creating a hidden + // Iframe to enable back and forward. + fake_onhashchange = (function(){ + var self = {}, + timeout_id, + + // Remember the initial hash so it doesn't get triggered immediately. + last_hash = get_fragment(), + + fn_retval = function(val){ return val; }, + history_set = fn_retval, + history_get = fn_retval; + + // Start the polling loop. + self.start = function() { + timeout_id || poll(); + }; + + // Stop the polling loop. + self.stop = function() { + timeout_id && clearTimeout( timeout_id ); + timeout_id = undefined; + }; + + // This polling loop checks every $.fn.hashchange.delay milliseconds to see + // if location.hash has changed, and triggers the 'hashchange' event on + // window when necessary. + function poll() { + var hash = get_fragment(), + history_hash = history_get( last_hash ); + + if ( hash !== last_hash ) { + history_set( last_hash = hash, history_hash ); + + $(window).trigger( str_hashchange ); + + } else if ( history_hash !== last_hash ) { + location.href = location.href.replace( /#.*/, '' ) + history_hash; + } + + timeout_id = setTimeout( poll, $.fn[ str_hashchange ].delay ); + }; + + // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + // vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv + // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + $.browser.msie && !supports_onhashchange && (function(){ + // Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8 + // when running in "IE7 compatibility" mode. + + var iframe, + iframe_src; + + // When the event is bound and polling starts in IE 6/7, create a hidden + // Iframe for history handling. + self.start = function(){ + if ( !iframe ) { + iframe_src = $.fn[ str_hashchange ].src; + iframe_src = iframe_src && iframe_src + get_fragment(); + + // Create hidden Iframe. Attempt to make Iframe as hidden as possible + // by using techniques from http://www.paciellogroup.com/blog/?p=604. + iframe = $(''); + if (options.previewPosition == 'after') { + iFrame.insertAfter(footer); + } else { + iFrame.insertBefore(header); + } + previewWindow = iFrame[iFrame.length - 1].contentWindow || frame[iFrame.length - 1]; + } + } else if (altKey === true) { + // Thx Stephen M. Redd for the IE8 fix + if (iFrame) { + iFrame.remove(); + } else { + previewWindow.close(); + } + previewWindow = iFrame = false; + } + if (!options.previewAutoRefresh) { + refreshPreview(); + } + } + + // refresh Preview window + function refreshPreview() { + renderPreview(); + } + + function renderPreview() { + var phtml; + if (options.previewParserPath !== '') { + $.ajax( { + type: 'POST', + url: options.previewParserPath, + data: options.previewParserVar+'='+encodeURIComponent($$.val()), + success: function(data) { + writeInPreview( localize(data, 1) ); + } + } ); + } else { + if (!template) { + $.ajax( { + url: options.previewTemplatePath, + success: function(data) { + writeInPreview( localize(data, 1).replace(//g, $$.val()) ); + } + } ); + } + } + return false; + } + + function writeInPreview(data) { + if (previewWindow.document) { + try { + sp = previewWindow.document.documentElement.scrollTop + } catch(e) { + sp = 0; + } + previewWindow.document.open(); + previewWindow.document.write(data); + previewWindow.document.close(); + previewWindow.document.documentElement.scrollTop = sp; + } + if (options.previewInWindow) { + previewWindow.focus(); + } + } + + // set keys pressed + function keyPressed(e) { + shiftKey = e.shiftKey; + altKey = e.altKey; + ctrlKey = (!(e.altKey && e.ctrlKey)) ? e.ctrlKey : false; + + if (e.type === 'keydown') { + if (ctrlKey === true) { + li = $("a[accesskey="+String.fromCharCode(e.keyCode)+"]", header).parent('li'); + if (li.length !== 0) { + ctrlKey = false; + setTimeout(function() { + li.triggerHandler('mousedown'); + },1); + return false; + } + } + if (e.keyCode === 13 || e.keyCode === 10) { // Enter key + if (ctrlKey === true) { // Enter + Ctrl + ctrlKey = false; + markup(options.onCtrlEnter); + return options.onCtrlEnter.keepDefault; + } else if (shiftKey === true) { // Enter + Shift + shiftKey = false; + markup(options.onShiftEnter); + return options.onShiftEnter.keepDefault; + } else { // only Enter + markup(options.onEnter); + return options.onEnter.keepDefault; + } + } + if (e.keyCode === 9) { // Tab key + if (shiftKey == true || ctrlKey == true || altKey == true) { // Thx Dr Floob. + return false; + } + if (caretOffset !== -1) { + get(); + caretOffset = $$.val().length - caretOffset; + set(caretOffset, 0); + caretOffset = -1; + return false; + } else { + markup(options.onTab); + return options.onTab.keepDefault; + } + } + } + } + + init(); + }); + }; + + $.fn.markItUpRemove = function() { + return this.each(function() { + var $$ = $(this).unbind().removeClass('markItUpEditor'); + $$.parent('div').parent('div.markItUp').parent('div').replaceWith($$); + } + ); + }; + + $.markItUp = function(settings) { + var options = { target:false }; + $.extend(options, settings); + if (options.target) { + return $(options.target).each(function() { + $(this).focus(); + $(this).trigger('insertion', [options]); + }); + } else { + $('textarea').trigger('insertion', [options]); + } + }; +})(jQuery); diff --git a/Js/markitup/sets/bbcode/images/bold.png b/Js/markitup/sets/bbcode/images/bold.png new file mode 100644 index 0000000..889ae80 Binary files /dev/null and b/Js/markitup/sets/bbcode/images/bold.png differ diff --git a/Js/markitup/sets/bbcode/images/clean.png b/Js/markitup/sets/bbcode/images/clean.png new file mode 100644 index 0000000..7e7cefb Binary files /dev/null and b/Js/markitup/sets/bbcode/images/clean.png differ diff --git a/Js/markitup/sets/bbcode/images/code.png b/Js/markitup/sets/bbcode/images/code.png new file mode 100644 index 0000000..63fe6ce Binary files /dev/null and b/Js/markitup/sets/bbcode/images/code.png differ diff --git a/Js/markitup/sets/bbcode/images/fonts.png b/Js/markitup/sets/bbcode/images/fonts.png new file mode 100644 index 0000000..b7960db Binary files /dev/null and b/Js/markitup/sets/bbcode/images/fonts.png differ diff --git a/Js/markitup/sets/bbcode/images/h1.png b/Js/markitup/sets/bbcode/images/h1.png new file mode 100644 index 0000000..9c122e9 Binary files /dev/null and b/Js/markitup/sets/bbcode/images/h1.png differ diff --git a/Js/markitup/sets/bbcode/images/h2.png b/Js/markitup/sets/bbcode/images/h2.png new file mode 100644 index 0000000..fbd8765 Binary files /dev/null and b/Js/markitup/sets/bbcode/images/h2.png differ diff --git a/Js/markitup/sets/bbcode/images/h3.png b/Js/markitup/sets/bbcode/images/h3.png new file mode 100644 index 0000000..c7836cf Binary files /dev/null and b/Js/markitup/sets/bbcode/images/h3.png differ diff --git a/Js/markitup/sets/bbcode/images/italic.png b/Js/markitup/sets/bbcode/images/italic.png new file mode 100644 index 0000000..8482ac8 Binary files /dev/null and b/Js/markitup/sets/bbcode/images/italic.png differ diff --git a/Js/markitup/sets/bbcode/images/link.png b/Js/markitup/sets/bbcode/images/link.png new file mode 100644 index 0000000..25eacb7 Binary files /dev/null and b/Js/markitup/sets/bbcode/images/link.png differ diff --git a/Js/markitup/sets/bbcode/images/list-bullet.png b/Js/markitup/sets/bbcode/images/list-bullet.png new file mode 100644 index 0000000..4a8672b Binary files /dev/null and b/Js/markitup/sets/bbcode/images/list-bullet.png differ diff --git a/Js/markitup/sets/bbcode/images/list-item.png b/Js/markitup/sets/bbcode/images/list-item.png new file mode 100644 index 0000000..8cb4d69 Binary files /dev/null and b/Js/markitup/sets/bbcode/images/list-item.png differ diff --git a/Js/markitup/sets/bbcode/images/list-numeric.png b/Js/markitup/sets/bbcode/images/list-numeric.png new file mode 100644 index 0000000..33b0b8d Binary files /dev/null and b/Js/markitup/sets/bbcode/images/list-numeric.png differ diff --git a/Js/markitup/sets/bbcode/images/paragraph.png b/Js/markitup/sets/bbcode/images/paragraph.png new file mode 100644 index 0000000..95704fb Binary files /dev/null and b/Js/markitup/sets/bbcode/images/paragraph.png differ diff --git a/Js/markitup/sets/bbcode/images/picture.png b/Js/markitup/sets/bbcode/images/picture.png new file mode 100644 index 0000000..4a158fe Binary files /dev/null and b/Js/markitup/sets/bbcode/images/picture.png differ diff --git a/Js/markitup/sets/bbcode/images/preview.png b/Js/markitup/sets/bbcode/images/preview.png new file mode 100644 index 0000000..a9925a0 Binary files /dev/null and b/Js/markitup/sets/bbcode/images/preview.png differ diff --git a/Js/markitup/sets/bbcode/images/quotes.png b/Js/markitup/sets/bbcode/images/quotes.png new file mode 100644 index 0000000..e54ebeb Binary files /dev/null and b/Js/markitup/sets/bbcode/images/quotes.png differ diff --git a/Js/markitup/sets/bbcode/images/stroke.png b/Js/markitup/sets/bbcode/images/stroke.png new file mode 100644 index 0000000..612058a Binary files /dev/null and b/Js/markitup/sets/bbcode/images/stroke.png differ diff --git a/Js/markitup/sets/bbcode/images/underline.png b/Js/markitup/sets/bbcode/images/underline.png new file mode 100644 index 0000000..90d0df2 Binary files /dev/null and b/Js/markitup/sets/bbcode/images/underline.png differ diff --git a/Js/markitup/sets/bbcode/readme.txt b/Js/markitup/sets/bbcode/readme.txt new file mode 100644 index 0000000..745d5dd --- /dev/null +++ b/Js/markitup/sets/bbcode/readme.txt @@ -0,0 +1,11 @@ +Markup language: +BBCode + +Description: +A basic BBCode markup set with Bold, Italic, Underline, Picture, Link, Size, List, Quotes, Code, Clean button, Preview button. + +Install: +- Download the zip file +- Unzip it in your markItUp! sets folder +- Modify your JS link to point at this set.js +- Modify your CSS link to point at this style.css \ No newline at end of file diff --git a/Js/markitup/sets/bbcode/set.js b/Js/markitup/sets/bbcode/set.js new file mode 100644 index 0000000..3d16ea5 --- /dev/null +++ b/Js/markitup/sets/bbcode/set.js @@ -0,0 +1,32 @@ +// ---------------------------------------------------------------------------- +// markItUp! +// ---------------------------------------------------------------------------- +// Copyright (C) 2008 Jay Salvat +// http://markitup.jaysalvat.com/ +// ---------------------------------------------------------------------------- +// BBCode tags example +// http://en.wikipedia.org/wiki/Bbcode +// ---------------------------------------------------------------------------- +// Feel free to add more tags +// ---------------------------------------------------------------------------- +mySettings = { + previewParserPath: '', // path to your BBCode parser + markupSet: [ + {name:'Heading 1', key:'1', openWith:'[h1]', closeWith:'[/h1]' }, + {name:'Heading 2', key:'2', openWith:'[h2]', closeWith:'[/h2]' }, + {name:'Heading 3', key:'3', openWith:'[h3]', closeWith:'[/h3]' }, + {name:'Paragraph', openWith:'[p]', closeWith:'[/p]' }, + {separator:'---------------' }, + {name:'Bold', key:'B', openWith:'[b]', closeWith:'[/b]'}, + {name:'Italic', key:'I', openWith:'[i]', closeWith:'[/i]'}, + {name:'Underline', key:'U', openWith:'[u]', closeWith:'[/u]'}, + {name:'Stroke through', key:'S', openWith:'[del]', closeWith:'[/del]' }, + {separator:'---------------' }, + {name:'Bulleted list', openWith:'[list]\n', closeWith:'\n[/list]'}, + {name:'Numeric list', openWith:'[enum]\n', closeWith:'\n[/enum]'}, + {name:'List item', openWith:'[*] ', closeWith:'[/*]'}, + {separator:'---------------' }, + {name:'Code', openWith:'[code]', closeWith:'[/code]'}, + {name:'Link', key: 'L', openWith:'[a]', closeWith:'[/a]',placeHolder:'http://the_url | the_text'}, + ] +} \ No newline at end of file diff --git a/Js/markitup/sets/bbcode/style.css b/Js/markitup/sets/bbcode/style.css new file mode 100644 index 0000000..4ab6031 --- /dev/null +++ b/Js/markitup/sets/bbcode/style.css @@ -0,0 +1,72 @@ +/* ------------------------------------------------------------------- +// markItUp! +// By Jay Salvat - http://markitup.jaysalvat.com/ +// ------------------------------------------------------------------*/ +.markItUp .markItUpButton1 a { + background-image:url(images/h1.png); +} +.markItUp .markItUpButton2 a { + background-image:url(images/h2.png); +} +.markItUp .markItUpButton3 a { + background-image:url(images/h3.png); +} +.markItUp .markItUpButton4 a { + background-image:url(images/paragraph.png); +} +.markItUp .markItUpButton5 a { + background-image:url(images/bold.png); +} +.markItUp .markItUpButton6 a { + background-image:url(images/italic.png); +} +.markItUp .markItUpButton7 a { + background-image:url(images/underline.png); +} +.markItUp .markItUpButton8 a { + background-image:url(images/stroke.png); +} +.markItUp .markItUpButton9 a { + background-image:url(images/list-bullet.png); +} +.markItUp .markItUpButton10 a { + background-image:url(images/list-numeric.png); +} +.markItUp .markItUpButton11 a { + background-image:url(images/list-item.png); +} +.markItUp .markItUpButton12 a { + background-image:url(images/code.png); +} +.markItUp .markItUpButton13 a { + background-image:url(images/link.png); +} +/*.markItUp .markItUpButton4 a { + background-image:url(images/stroke.png); +}*/ + +/*.markItUp .markItUpButton4 a { + background-image:url(images/picture.png); +}*/ +/*.markItUp .markItUpButton5 a { + background-image:url(images/link.png); +} + +.markItUp .markItUpButton6 a { + background-image:url(images/fonts.png); +} + + +.markItUp .markItUpButton10 a { + background-image:url(images/quotes.png); +} +.markItUp .markItUpButton11 a { + background-image:url(images/code.png); +} + +.markItUp .clean a { + background-image:url(images/clean.png); +} +.markItUp .preview a { + background-image:url(images/preview.png); +}*/ \ No newline at end of file diff --git a/Js/markitup/skins/simple/images/handle.png b/Js/markitup/skins/simple/images/handle.png new file mode 100644 index 0000000..3993b20 Binary files /dev/null and b/Js/markitup/skins/simple/images/handle.png differ diff --git a/Js/markitup/skins/simple/images/menu.png b/Js/markitup/skins/simple/images/menu.png new file mode 100644 index 0000000..44a07af Binary files /dev/null and b/Js/markitup/skins/simple/images/menu.png differ diff --git a/Js/markitup/skins/simple/images/submenu.png b/Js/markitup/skins/simple/images/submenu.png new file mode 100644 index 0000000..03d1977 Binary files /dev/null and b/Js/markitup/skins/simple/images/submenu.png differ diff --git a/Js/markitup/skins/simple/style.css b/Js/markitup/skins/simple/style.css new file mode 100644 index 0000000..4ff830f --- /dev/null +++ b/Js/markitup/skins/simple/style.css @@ -0,0 +1,118 @@ +/* ------------------------------------------------------------------- +// markItUp! Universal MarkUp Engine, JQuery plugin +// By Jay Salvat - http://markitup.jaysalvat.com/ +// ------------------------------------------------------------------*/ +.markItUp * { + margin:0px; padding:0px; + outline:none; +} +.markItUp a:link, +.markItUp a:visited { + color:#000; + text-decoration:none; +} +.markItUp { + width:700px; + margin:5px 0 5px 0; +} +.markItUpContainer { + font:11px Verdana, Arial, Helvetica, sans-serif; +} +.markItUpEditor { + font:12px 'Courier New', Courier, monospace; + padding:5px; + width:640px; + height:300px; + clear:both; display:block; + line-height:18px; + overflow:auto; +} +.markItUpPreviewFrame { + overflow:auto; + background-color:#FFF; + width:99.9%; + height:300px; + margin:5px 0; +} +.markItUpFooter { + width:100%; +} +.markItUpResizeHandle { + overflow:hidden; + width:22px; height:5px; + margin-left:auto; + margin-right:auto; + background-image:url(images/handle.png); + cursor:n-resize; +} +/***************************************************************************************/ +/* first row of buttons */ +.markItUpHeader ul li { + list-style:none; + float:left; + position:relative; +} +.markItUpHeader ul li:hover > ul{ + display:block; +} +.markItUpHeader ul .markItUpDropMenu { + background:transparent url(images/menu.png) no-repeat 115% 50%; + margin-right:5px; +} +.markItUpHeader ul .markItUpDropMenu li { + margin-right:0px; +} +/* next rows of buttons */ +.markItUpHeader ul ul { + display:none; + position:absolute; + top:18px; left:0px; + background:#FFF; + border:1px solid #000; +} +.markItUpHeader ul ul li { + float:none; + border-bottom:1px solid #000; +} +.markItUpHeader ul ul .markItUpDropMenu { + background:#FFF url(images/submenu.png) no-repeat 100% 50%; +} +.markItUpHeader ul .markItUpSeparator { + margin:0 10px; + width:1px; + height:16px; + overflow:hidden; + background-color:#CCC; +} +.markItUpHeader ul ul .markItUpSeparator { + width:auto; height:1px; + margin:0px; +} +/* next rows of buttons */ +.markItUpHeader ul ul ul { + position:absolute; + top:-1px; left:150px; +} +.markItUpHeader ul ul ul li { + float:none; +} +.markItUpHeader ul a { + display:block; + width:16px; height:16px; + text-indent:-10000px; + background-repeat:no-repeat; + padding:3px; + margin:0px; +} +.markItUpHeader ul ul a { + display:block; + padding-left:0px; + text-indent:0; + width:120px; + padding:5px 5px 5px 25px; + background-position:2px 50%; +} +.markItUpHeader ul ul a:hover { + color:#FFF; + background-color:#000; +} diff --git a/Js/stats.js b/Js/stats.js new file mode 100644 index 0000000..7d6be08 --- /dev/null +++ b/Js/stats.js @@ -0,0 +1,35 @@ + +/*************************************************************************** + phpTrafficA @soft.ZoneO.net + Copyright (C) 2004-2008 ZoneO-soft, Butchu (email: "butchu" with the domain "zoneo.net") + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + More Info About The Licence At http://www.gnu.org/copyleft/gpl.html +****************************************************************************/ + +function encode64(inp){ +var key="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; +var chr1,chr2,chr3,enc3,enc4,i=0,out=""; +while(i127) chr1=88; +chr2=inp.charCodeAt(i++);if(chr2>127) chr2=88; +chr3=inp.charCodeAt(i++);if(chr3>127) chr3=88; +if(isNaN(chr3)) {enc4=64;chr3=0;} else enc4=chr3&63; +if(isNaN(chr2)) {enc3=64;chr2=0;} else enc3=((chr2<<2)|(chr3>>6))&63; +out+=key.charAt((chr1>>2)&63)+key.charAt(((chr1<<4)|(chr2>>4))&63)+key.charAt(enc3)+key.charAt(enc4); +} +return encodeURIComponent(out); +} + +function stats(sid){ +var referer=encode64(document.referrer); +var thispage=encode64(window.location.pathname+location.search); +var date=new Date(); +var time=date.getTime(); +var resolution= screen.width + "x" + screen.height; +document.writeln("\"\"\n"); +} diff --git a/Library/Array/Validate/Base.php b/Library/Array/Validate/Base.php new file mode 100644 index 0000000..fb4a66c --- /dev/null +++ b/Library/Array/Validate/Base.php @@ -0,0 +1,258 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to validate associative arrays +class Array_Validate_Base +{ + + public $errorString = null; //string containing the list fields not found + public $errorsNumb = null; //numbers of errors + + protected $_lang; //language of notices + protected $_resultString; //reference to the class arraycheckStrings containing all the result strings + + + public function __construct($lang = 'En') + { + $this->_lang = $lang; + $stringClass = 'Lang_'.$this->_lang.'_ValCondStrings'; + if (!class_exists($stringClass)) + { + $stringClass = 'Lang_En_ValCondStrings'; + } + $this->_resultString = new $stringClass(); + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other + public function checkEqual($associativeArray,$keyString) + { + $errorString = null; + $keyArray = explode(',',$keyString); + $numb = 0; + + //set the first value to null + $firstValue = null; + + foreach ($keyArray as $key) + { + if (array_key_exists($key,$associativeArray)) + { + $firstValue = $associativeArray[$key]; + break; + } + } + + if (isset($firstValue)) + { + for ($i = 0; $i < count($keyArray); $i++) + { + if (array_key_exists($keyArray[$i],$associativeArray)) + { + if (strcmp($associativeArray[$keyArray[$i]],$firstValue) !== 0) + { + $numb++; + $errorString = $this->_resultString->getNotEqualResultString($keyString); + } + } + } + } + + $this->errorString = $errorString; + return $numb === 0 ? true : false; + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphabetic values + //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null + public function checkAlpha($associativeArray,$keyString,$strength = 'strong') + { + return $this->checkGeneric($associativeArray,$keyString,$strength,'ctype_alpha','getNotAlphabeticResultString'); + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphanumeric values + //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null + public function checkAlphaNum($associativeArray,$keyString,$strength = 'strong') + { + return $this->checkGeneric($associativeArray,$keyString,$strength,'ctype_alnum','getNotAlphanumericResultString'); + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal digits + //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null + public function checkDigit($associativeArray,$keyString,$strength = 'strong') + { + return $this->checkGeneric($associativeArray,$keyString,$strength,'ctype_digit','getNotDecimalDigitResultString'); + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have mail format + //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null + public function checkMail($associativeArray,$keyString,$strength = 'strong') + { + return $this->checkGeneric($associativeArray,$keyString,$strength,'checkMail','getNotMailFormatResultString'); + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function + //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null + public function checkNumeric($associativeArray,$keyString,$strength = 'strong') + { + return $this->checkGeneric($associativeArray,$keyString,$strength,'is_numeric','getNotNumericResultString'); + } + + + //apply a generic check function + //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null + //$func: the function to apply + //$strFunc: the method of the object $this->_resultString to apply + private function checkGeneric($associativeArray,$keyString,$strength,$func,$strFunc) + { + + $errorString = null; + $keyArray = explode(',',$keyString); + $numb = 0; + + for ($i = 0; $i < count($keyArray); $i++) + { + if (array_key_exists($keyArray[$i],$associativeArray)) + { + if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong') + { + if (!call_user_func($func,$associativeArray[$keyArray[$i]])) + { + $numb++; + $errorString .= call_user_func(array($this->_resultString,$strFunc),$keyArray[$i]); + } + } + } + } + + $this->errorString = $errorString; + return $numb === 0 ? true : false; + + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have a number of chars smaller than $maxLenght + public function checkLength($associativeArray,$keyString,$maxLength = 10) + { + $errorString = null; + $keyArray = explode(',',$keyString); + $numb = 0; + for ($i = 0; $i < count($keyArray); $i++) + { + if (array_key_exists($keyArray[$i],$associativeArray)) + { + if (eg_strlen($associativeArray[$keyArray[$i]]) > $maxLength) + { + $numb++; + $errorString .= $this->_resultString->getLengthExceedsResultString($keyArray[$i],$maxLength); + } + } + } + $this->errorString = $errorString; + return $numb === 0 ? true : false; + + } + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are different from the values indicated in the argument $strings (a comma-separated list of words) + public function checkIsNotStrings($associativeArray,$keyString,$strings = '') + { + $errorString = null; + $keyArray = explode(',',$keyString); + $numb = 0; + //get the array from the comma-separated list of strings + $stringsArray = explode(',',$strings); + for ($i = 0; $i < count($keyArray); $i++) + { + if (array_key_exists($keyArray[$i],$associativeArray)) + { + foreach ($stringsArray as $string) + { + if (strcmp($associativeArray[$keyArray[$i]],$string) === 0) + { + $numb++; + $errorString .= $this->_resultString->getIsForbiddenStringResultString($keyArray[$i],$strings); + } + } + } + } + $this->errorString = $errorString; + return $numb === 0 ? true : false; + } + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are one of the values indicated in the argument $strings (a comma-separated list of words) + //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null + public function checkIsStrings($associativeArray,$keyString,$strings = '',$strength = 'strong') + { + $errorString = null; + $keyArray = explode(',',$keyString); + $numb = 0; + //get the array from the comma-separated list of strings + $stringsArray = explode(',',$strings); + for ($i = 0; $i < count($keyArray); $i++) + { + if (array_key_exists($keyArray[$i],$associativeArray)) + { + if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong') + { + if (!in_array($associativeArray[$keyArray[$i]],$stringsArray)) + { + $numb++; + $errorString .= $this->_resultString->getIsNotStringResultString($keyArray[$i],$strings); + } + } + } + } + $this->errorString = $errorString; + return $numb === 0 ? true : false; + } + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) match the regular expression $regExp + public function checkMatch($associativeArray,$keyString,$regExp = '/./',$strength = 'strong') + { + $errorString = null; + $keyArray = explode(',',$keyString); + $numb = 0; + for ($i = 0; $i < count($keyArray); $i++) + { + if (array_key_exists($keyArray[$i],$associativeArray)) + { + if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong') + { + if (!preg_match($regExp,$associativeArray[$keyArray[$i]])) + { + $numb++; + $errorString .= $this->_resultString->getDoesntMatchResultString($keyArray[$i],$regExp); + } + } + } + } + $this->errorString = $errorString; + return $numb === 0 ? true : false; + } + +} \ No newline at end of file diff --git a/Library/Array/Validate/Soft.php b/Library/Array/Validate/Soft.php new file mode 100644 index 0000000..b348bdc --- /dev/null +++ b/Library/Array/Validate/Soft.php @@ -0,0 +1,102 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to validate associative arrays +class Array_Validate_Soft extends Array_Validate_Base +{ + + public function __construct($lang = 'Eng') + { + parent::__construct($lang); + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other + public function checkEqual($associativeArray,$keyString) + { + return parent::checkEqual($associativeArray,$keyString); + } + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphabetic values + public function checkAlpha($associativeArray,$keyString) + { + return parent::checkAlpha($associativeArray,$keyString,'soft'); + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphanumeric values + public function checkAlphaNum($associativeArray,$keyString) + { + return parent::checkAlphaNum($associativeArray,$keyString,'soft'); + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal digits + public function checkDigit($associativeArray,$keyString) + { + return parent::checkDigit($associativeArray,$keyString,'soft'); + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have mail format + public function checkMail($associativeArray,$keyString) + { + return parent::checkMail($associativeArray,$keyString,'soft'); + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function + public function checkNumeric($associativeArray,$keyString) + { + return parent::checkNumeric($associativeArray,$keyString,'soft'); + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have a number of chars smaller than $maxLenght + public function checkLength($associativeArray,$keyString,$maxLength = 10) + { + return parent::checkLength($associativeArray,$keyString,$maxLength); + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are different from the values indicated in the argument $strings (a comma-separated list of words) + public function checkIsNotStrings($associativeArray,$keyString,$strings = '') + { + return parent::checkIsNotStrings($associativeArray,$keyString,$strings); + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are one of the values indicated in the argument $strings (a comma-separated list of words) + public function checkIsStrings($associativeArray,$keyString,$strings = '') + { + return parent::checkIsStrings($associativeArray,$keyString,$strings,'soft'); + } + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) match the regular expression $regExp + public function checkMatch($associativeArray,$keyString,$regExp = '/./') + { + return parent::checkMatch($associativeArray,$keyString,$regExp,'soft'); + } + +} \ No newline at end of file diff --git a/Library/Array/Validate/Strong.php b/Library/Array/Validate/Strong.php new file mode 100644 index 0000000..ccdce74 --- /dev/null +++ b/Library/Array/Validate/Strong.php @@ -0,0 +1,197 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to manage arrays +class Array_Validate_Strong extends Array_Validate_Base +{ + + public function __construct($lang = 'Eng') + { + parent::__construct($lang); + } + + + public function checkNotEmpty($associativeArray,$keyString) + { + $errorString = null; + $keyArray = explode(',',$keyString); + $numb = 0; + for ($i = 0; $i < count($keyArray); $i++) + { + if (array_key_exists($keyArray[$i],$associativeArray)) + { + if (strcmp(trim($associativeArray[$keyArray[$i]]),'') === 0) + { + $errorString .= $this->_resultString->getNotDefinedResultString($keyArray[$i]); + $numb++; + } + } + else + { + $errorString .= $this->_resultString->getNotDefinedResultString($keyArray[$i]); + $numb++; + } + } + $this->errorString = $errorString; + $this->errorNumb = $numb; + return $numb === 0 ? true : false; + } + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other + public function checkEqual($associativeArray,$keyString) + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkEqual($associativeArray,$keyString); + + } else { + return false; + } + } + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphabetic values + public function checkAlpha($associativeArray,$keyString) + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkAlpha($associativeArray,$keyString,'strong'); + + } else { + return false; + } + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphanumeric values + public function checkAlphaNum($associativeArray,$keyString) + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkAlphaNum($associativeArray,$keyString,'strong'); + + } else { + return false; + } + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal digits + public function checkDigit($associativeArray,$keyString) + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkDigit($associativeArray,$keyString,'strong'); + + } else { + return false; + } + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have mail format + public function checkMail($associativeArray,$keyString) + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkMail($associativeArray,$keyString,'strong'); + + } else { + return false; + } + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function + public function checkNumeric($associativeArray,$keyString) + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkNumeric($associativeArray,$keyString,'strong'); + + } else { + return false; + } + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have a number of chars smaller than $maxLenght + public function checkLength($associativeArray,$keyString,$maxLength = 10) + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkLength($associativeArray,$keyString,$maxLength); + + } else { + return false; + } + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are different from the values indicated in the argument $strings (a comma-separated list of words) + public function checkIsNotStrings($associativeArray,$keyString,$strings = '') + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkIsNotStrings($associativeArray,$keyString,$strings); + + } else { + return false; + } + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are one of the values indicated in the argument $strings (a comma-separated list of words) + public function checkIsStrings($associativeArray,$keyString,$strings = '') + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkIsStrings($associativeArray,$keyString,$strings,'strong'); + + } else { + return false; + } + } + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) match the regular expression $regExp + public function checkMatch($associativeArray,$keyString,$regExp = '/./') + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkMatch($associativeArray,$keyString,$regExp,'strong'); + + } else { + return false; + } + } +} \ No newline at end of file diff --git a/Library/Array/Validate/index.html b/Library/Array/Validate/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Library/Array/Validate/index.html @@ -0,0 +1 @@ + diff --git a/Library/Array/index.html b/Library/Array/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Library/Array/index.html @@ -0,0 +1 @@ + diff --git a/Library/ArrayExt.php b/Library/ArrayExt.php new file mode 100755 index 0000000..2b02c9e --- /dev/null +++ b/Library/ArrayExt.php @@ -0,0 +1,80 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to manage arrays +class ArrayExt { + + public $errorString = null; //string containing the list fields not found + public $errorsNumb = null; //numbers of errors + + //get the subset of the associative array $associativeArray defined by the keys in the string $keyString (keys separated by comma) + public function subset($associativeArray,$keyString,$func = 'none') { + if (!in_array($func,explode(',',Params::$allowedSanitizeFunc))) { + throw new Exception('"'.$func. '" argument not allowed in '.__METHOD__.' method'); + } + $tempArray = array(); + if (strcmp($keyString,'') !== 0) { + $keyArray=explode(',',$keyString); + for ($i = 0; $i < count($keyArray); $i++) + { + $temp = array(); + //extract the function after the colon + if (strstr($keyArray[$i],':')) { + $temp = explode(':',$keyArray[$i]); + } else { + $temp[0] = $keyArray[$i]; + $temp[1] = 'none'; + } + //exception + if (!in_array($temp[1],explode(',',Params::$allowedSanitizeFunc))) { + throw new Exception('"'.$temp[1]. '" function not allowed'); + } + if (array_key_exists($temp[0],$associativeArray)) { + $tempArray[$temp[0]] = call_user_func($temp[1],$associativeArray[$temp[0]]); + } else { + $tempArray[$temp[0]] = ''; + } + } + } + return call_user_func($func.'Deep',$tempArray); //clean the array values + } + + //exctract the complementary subset from an associative array ($associativeArray) of the subset identified by the keys $keyString + public function subsetComplementary($associativeArray,$keyString,$func = 'none') { + if (!in_array($func,explode(',',Params::$allowedSanitizeFunc))) { + throw new Exception('"'.$func. '" argument not allowed in '.__METHOD__.' method'); + } + $keyArray=explode(',',$keyString); + $complementaryKeyArray = array(); + $keys = array_keys($associativeArray); + foreach ($keys as $key) { + if (!in_array($key,$keyArray)) { + $complementaryKeyArray[] = $key; + } + } + $complementaryKeyString = implode(',',$complementaryKeyArray); + return $this->subset($associativeArray,$complementaryKeyString,$func); + } + +} diff --git a/Library/Bootstrap.php b/Library/Bootstrap.php new file mode 100755 index 0000000..5d7a12f --- /dev/null +++ b/Library/Bootstrap.php @@ -0,0 +1,31 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +require_once (ROOT . DS . 'Config' . DS . 'Reporting.php'); +require_once (ROOT . DS . 'Config' . DS . 'Restricted.php'); +require_once (ROOT . DS . 'Config' . DS . 'Autoload.php'); +require_once (ROOT . DS . 'Library' . DS . 'Functions.php'); +require_once (ROOT . DS . 'Library' . DS . 'Strings' . DS . 'Functions.php'); +require_once (ROOT . DS . 'Library' . DS . 'ErrorReporting.php'); +require_once (ROOT . DS . 'Library' . DS . 'Call.php'); diff --git a/Library/BoxParser.php b/Library/BoxParser.php new file mode 100644 index 0000000..0e7e03f --- /dev/null +++ b/Library/BoxParser.php @@ -0,0 +1,86 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to parse an XML text in order to create the modules corresponding to the elements of the XML text. +//the module name tag defines the name of the object that has to be instantiate and saved in the +//$modules property (that is an array referencing different module objects) array(moduleObj1,moduleObj2, ...) +//if the module class corresponding ot the module name tag does not exists, than no module is created and the next module name is checked +class BoxParser { + + public $modules = array(); //array referencing different module classes --> array(moduleObj1,moduleObj2, ...) See files inside the Application/Modules folder + + //$simpleXMLText: it has to be an XML text + //$type; it can be string or file. + public function __construct($simpleXMLText, $type = 'string') + { + if ($type === 'string') + { + if (@simplexml_load_string($simpleXMLText)) + { + $simpleXmlObj = simplexml_load_string($simpleXMLText); + $this->populate($simpleXmlObj); + } + } + else if ($type === 'file') + { + if (@simplexml_load_file($simpleXMLText)) + { + $simpleXmlObj = simplexml_load_file($simpleXMLText); + $this->populate($simpleXmlObj); + } + } + } + + //inistantiate the module objects and save them in the $this->modules property array + private function populate($simpleXmlObj) + { + foreach ($simpleXmlObj as $mod) + { + $className = 'Mod'.ucwords((string)$mod->type); + if (class_exists($className)) + { + if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Modules' . DS . $className . '.php')) + { + $newModule = new $className($mod); + if ($newModule instanceof ModAbstract) + { + $this->modules[] = $newModule; + } + } + } + } + } + + //create the HTML of the modules + public function render() + { + $HTML = null; + foreach ($this->modules as $module) + { + $HTML .= $module->render(); + } + return $HTML; + } + +} \ No newline at end of file diff --git a/Library/Call.php b/Library/Call.php new file mode 100755 index 0000000..a9145c2 --- /dev/null +++ b/Library/Call.php @@ -0,0 +1,359 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + + +/* SANITIZE SUPERGLOBAL ARRAYS */ +function sanitizeSuperGlobal() +{ + $_GET = stripslashesDeep($_GET); + + $_POST = stripslashesDeep($_POST); + + $_COOKIE = stripslashesDeep($_COOKIE); + + $_SERVER = stripslashesDeep($_SERVER); +} + + + +function checkPostLength() +{ + if (MAX_POST_LENGTH !== 0) + { + foreach ($_POST as $key => $value) + { + if (strlen($value) > MAX_POST_LENGTH) die('the length of some of the $_POST values is too large'); + } + } +} + +function checkRequestUriLength() +{ + if (MAX_REQUEST_URI_LENGTH !== 0) + { + if (strlen($_SERVER['REQUEST_URI']) > MAX_REQUEST_URI_LENGTH) die('the length of the REQUEST_URI is too large'); + } +} + +function checkRegisterGlobals() +{ + if (ini_get('register_globals')) die('register globals is on: easyGiant works only with register globals off'); +} + +function callHook() +{ + + $currentUrl = null; + + if (MOD_REWRITE_MODULE === true) + { + $url = isset($_GET['url']) ? $_GET['url'] : DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION; + } + else + { + $url = (strcmp(getQueryString(),"") !== 0) ? getQueryString() : DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION; + } + +// rewrite the URL + if (Route::$rewrite === 'yes') + { + $res = rewrite($url); + $url = $res[0]; + $currentUrl = $res[1]; + } + +// echo $url; + + $urlArray = array(); + $urlArray = explode("/",$url); + + $controller = DEFAULT_CONTROLLER; + $action = DEFAULT_ACTION; + + if (isset($urlArray[0])) + { + $controller = (strcmp($urlArray[0],'') !== 0) ? strtolower(trim($urlArray[0])) : DEFAULT_CONTROLLER; + } + + array_shift($urlArray); + + if (isset($urlArray[0])) + { + $action = (strcmp($urlArray[0],'') !== 0) ? strtolower(trim($urlArray[0])) : DEFAULT_ACTION; + } + + //set ERROR_CONTROLLER and ERROR_ACTION + $errorController = ERROR_CONTROLLER !== false ? ERROR_CONTROLLER : DEFAULT_CONTROLLER; + $errorAction = ERROR_ACTION !== false ? ERROR_ACTION : DEFAULT_ACTION; + + /* + VERIFY THE ACTION NAME + */ + if (method_exists('Controller', $action) or !ctype_alnum($action) or (strcmp($action,'') === 0)) + { + $controller = $errorController; + $action = $errorAction; + $urlArray = array(); + } + + /* + VERIFY THE CONTROLLER NAME + */ + if (!ctype_alnum($controller) or (strcmp($controller,'') === 0)) + { + $controller = $errorController; + $action = $errorAction; + $urlArray = array(); + } + + //check that the controller class belongs to the application/controllers folder + //otherwise set the controller to the default controller + if (!file_exists(ROOT.DS.APPLICATION_PATH.DS.'Controllers'.DS.ucwords($controller).'Controller.php')) + { + $controller = $errorController; + $action = $errorAction; + $urlArray = array(); + } + + //set the controller class to DEFAULT_CONTROLLER if it doesn't exists + if (!class_exists(ucwords($controller).'Controller')) + { + $controller = $errorController; + $action = $errorAction; + $urlArray = array(); + } + + //set the action to DEFAULT_ACTION if it doesn't exists + if (!method_exists(ucwords($controller).'Controller', $action)) + { + $controller = $errorController; + $action = $errorAction; + $urlArray = array(); + } + + /* + CHECK COUPLES CONTROLLER,ACTION + */ + if (!in_array('all',Route::$allowed)) + { + $couple = "$controller,$action"; + if (!in_array($couple,Route::$allowed)) + { + $controller = $errorController; + $action = $errorAction; + $urlArray = array(); + } + } + + array_shift($urlArray); + $queryString = $urlArray; + //set the name of the application + $application = $controller; + $controller = ucwords($controller); + $model = $controller; + $controller .= 'Controller'; + $model .= 'Model'; + + //include the file containing the set of actions to carry out before the initialization of the controller class + Hooks::load(ROOT . DS . APPLICATION_PATH . DS . 'Hooks' . DS . 'BeforeInitialization.php'); + + if (class_exists($controller)) + { + $dispatch = new $controller($model,$application,$queryString); + + //pass the action to the controller object + $dispatch->action = $action; + + $dispatch->currPage = $dispatch->baseUrl.'/'.$dispatch->controller.'/'.$dispatch->action; + if (isset($currentUrl)) + { + $dispatch->currPage = $dispatch->baseUrl.'/'.$currentUrl; + } + + //require the file containing the set of actions to carry out after the initialization of the controller class + Hooks::load(ROOT . DS . APPLICATION_PATH . DS . 'Hooks' . DS . 'AfterInitialization.php'); + + $templateFlag= true; + + if (method_exists($controller, $action)) + { + //pass the action to the theme object + $dispatch->theme->action = $action; + $dispatch->theme->currPage = $dispatch->baseUrl.'/'.$dispatch->controller.'/'.$dispatch->action; + if (isset($currentUrl)) + { + $dispatch->theme->currPage = $dispatch->baseUrl.'/'.$currentUrl; + } + + call_user_func_array(array($dispatch,$action),$queryString); + } + else + { + $templateFlag= false; + } + + if ($templateFlag) + { + $dispatch->theme->render(); + } + + } + else + { + echo "

        the '$controller' controller is not present!

        "; + } + +} + + +//rewrite the URL +function rewrite($url) +{ + foreach (Route::$map as $key => $address) + { + $oldKey = $key; + $key = str_replace('\/','/',$key); + $key = str_replace('/','\/',$key); + if (preg_match('/^'.$key.'/',$url)) + { + $nurl = preg_replace('/^'.$key.'/',$address,$url); + return array($nurl,$oldKey); +// return preg_replace('/^'.$key.'/',$address,$url); + } + } +// return $url; + return array($url,null); +} + +function getQueryString() +{ + + if (strstr($_SERVER['REQUEST_URI'],'index.php/')) + { + return Params::$mbStringLoaded === true ? mb_substr(mb_strstr($_SERVER['REQUEST_URI'],'index.php/'),10) : substr(strstr($_SERVER['REQUEST_URI'],'index.php/'),10); + } + + return ''; +} + +function autoloader($className) +{ + + $backupName = $className; + + if (strstr($className,'_')) + { + $parts = explode('_',$className); + $className = implode(DS,$parts); + } + + if (file_exists(ROOT . DS . 'Library' . DS . $className . '.php')) + { + require_once(ROOT . DS . 'Library' . DS . $className . '.php'); + } + else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Controllers' . DS . $backupName . '.php')) + { + require_once(ROOT . DS . APPLICATION_PATH . DS . 'Controllers' . DS . $backupName . '.php'); + } + else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Models' . DS . $backupName . '.php')) + { + require_once(ROOT . DS . APPLICATION_PATH . DS . 'Models' . DS . $backupName . '.php'); + } + else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Modules' . DS . $backupName . '.php')) + { + require_once(ROOT . DS . APPLICATION_PATH . DS . 'Modules' . DS . $backupName . '.php'); + } + else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Strings' . DS . $className . '.php')) + { + require_once(ROOT . DS . APPLICATION_PATH . DS . 'Strings' . DS . $className . '.php'); + } + +} +spl_autoload_register('autoloader'); + +try { + + //check the length of the $_POST values + checkPostLength(); + + //check the length of the REQUEST_URI + checkRequestUriLength(); + + //connect to the database + Factory_Db::getInstance(DATABASE_TYPE,array(HOST,USER,PWD,DB)); + + //set htmlentities charset + switch (DEFAULT_CHARSET) + { + case 'SJIS': + Params::$htmlentititiesCharset = 'Shift_JIS'; + break; + } + + $allowedCharsets = array('UTF-8','ISO-8859-1','EUC-JP','SJIS'); + if (!in_array(DEFAULT_CHARSET,$allowedCharsets)) die('charset not-allowed'); + + //check if the mbstring extension is loaded + if (extension_loaded('mbstring')) + { + //set the internal encoding + mb_internal_encoding(DEFAULT_CHARSET); + Params::$mbStringLoaded = true; + } + + //load the files defined inside Config/Autoload.php + foreach (Autoload::$files as $file) + { + $parts = explode('.', $file); + $ext = strtolower(end($parts)); + $path = ROOT . DS . APPLICATION_PATH . DS . 'Include' . DS . $file; + if (file_exists($path) and $ext === 'php') + { + require_once($path); + } + } + + //include the file containing the set of actions to carry out before the check of the super global array + Hooks::load(ROOT . DS . APPLICATION_PATH . DS . 'Hooks' . DS . 'BeforeChecks.php'); + + //sanitize super global arrays + sanitizeSuperGlobal(); + + //report errors + ErrorReporting(); + + //verify that register globals is not active + checkRegisterGlobals(); + + //call the main hook + callHook(); + + //disconnect to the database + Factory_Db::disconnect(DATABASE_TYPE); + +} catch (Exception $e) { + + echo '
        Message: '.$e->getMessage().'
        '; + +} diff --git a/Library/Controller.php b/Library/Controller.php new file mode 100755 index 0000000..b0eef53 --- /dev/null +++ b/Library/Controller.php @@ -0,0 +1,321 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Controller { + + protected $m = array(); //associative array referencing different models + protected $h = array(); //associative array referencing different helpers + protected $s = array(); //associative array referencing different sessions objects (users_checkAdmin objects: see library/users/checkAdmin.php) + protected $c = array(); //associative array referencing different controllers + + protected $_queryString = array(); //the array of args coming from the url + + public $controller; + public $action; + public $currPage; //the URL of the current page + + public $request = null; //reference to a Request object + + public $modelName; + + public $argKeys = array(); //the array of keys representing the status args of the view action of the controller (validate function after colon) + public $argDefault = array(); //the array containing the default values of the $viewArgs array + + public $argFunc = array(); //the array containing the functions to be applied upon the $viewArgs array + + public $viewArgs = array(); //the associative array representing the status args of the main action of the controller. It is the combination of $argKeys and $queryString + public $viewStatus = ''; //string containing the additional url string to get the status of the view action of the controller (derived from $this->viewArgs) + + public $theme; + public $baseUrl = null; //the base url of the website: http://domainname + public $baseUrlSrc = null; //the base url of the website (http://domainname) if MOD_REWRITE_MODULE has been set to false + + public $headerObj; //reference to headerObj class + +// protected $_users; //object to manage access + + protected $scaffold = null; //the reference to the scaffold object + + function __construct($model, $controller, $queryString = array()) { + $this->controller = $controller; + $this->modelName = $model; + $this->_queryString = $queryString; + + $this->theme = new Theme($controller); + $this->baseUrl = $this->theme->baseUrl; + $this->baseUrlSrc = $this->theme->baseUrlSrc; + + $this->headerObj = new HeaderObj(DOMAIN_NAME); + $this->request = new Request(); + } + + //redirect to $path after the time $time + final public function redirect($path,$time = 0,$string = null) + { + $this->headerObj->redirect($path,$time,$string); + } + + //set the $_data structure of the theme + final public function set($value) + { + $this->theme->set($value); + } + + //append values to the $_data structure of the theme + final public function append($value) + { + $this->theme->append($value); + } + + //load a view file + final public function load($viewFile,$option = 'none') { + $this->theme->load($viewFile,$option); + } + + //clean the array containing the view files to load + final public function clean() { + $this->theme->clean(); + } + + //load an helper class + final function helper($helperName) { + $args = func_get_args(); + array_shift($args); + $name = 'Helper_'.$helperName; + if (class_exists($name)) + { + $this->h[$helperName] = new $name(); + + if ($this->h[$helperName] instanceof Helper_Html) { + $this->h[$helperName]->viewArgs = $this->viewArgs; + $this->h[$helperName]->viewStatus = $this->viewStatus; + } + + if (method_exists($this->h[$helperName], 'build')) { + call_user_func_array(array($this->h[$helperName],'build'),$args); + } + } + + } + + //load a model class + //$name: the name of the model class + final public function model($name = null) { + $modelName = isset($name) ? $name : $this->modelName; + if (class_exists($modelName)) { + $this->m[$modelName] = new $modelName(); + } else { + throw new Exception('Error in '.__METHOD__.': class "'.$modelName.'" has not been defined'); + } + } + + //load a controller + //$controllerName: the name of the controller class to load + final public function controller($controller) + { + if (class_exists($controller)) { + $model = str_replace('Controller',null,$controller).'Model'; + $application = strtolower(str_replace('Controller',null,$controller)); + $this->c[$controller] = new $controller($model,$application,array()); + $this->c[$controller]->theme = $this->theme; + } + } + + //load a users_checkAdmin class + //$sessonType: the type of session. It can be 'admin' (in the case of the access of an admin user) or 'registered' (in the case of the access of a registerd user) + final public function session($sessionType = 'admin') { + $sessionTypeArray = array('admin','registered'); + if (!in_array($sessionType,$sessionTypeArray)) { + throw new Exception('Error in '.__METHOD__.': the session type can be \'admin\' or \'registered\' only'); + } + //admin session + if ($sessionType === 'admin') { + $params = array( + 'users_controller' => ADMIN_USERS_CONTROLLER, + 'users_login_action' => ADMIN_USERS_LOGIN_ACTION, + 'panel_controller' => ADMIN_PANEL_CONTROLLER, + 'panel_main_action' => ADMIN_PANEL_MAIN_ACTION, + 'cookie_name' => ADMIN_COOKIE_NAME, + 'sessionsTable' => ADMIN_SESSIONS_TABLE, + 'usersTable' => ADMIN_USERS_TABLE, + 'groupsTable' => ADMIN_GROUPS_TABLE, + 'manyToManyTable' => ADMIN_MANYTOMANY_TABLE, + 'accessesTable' => ADMIN_ACCESSES_TABLE, + 'session_expire' => ADMIN_SESSION_EXPIRE, + 'cookie_path' => ADMIN_COOKIE_PATH, + 'database_type' => DATABASE_TYPE, + 'hijacking_check' => ADMIN_HIJACKING_CHECK, + 'on_hijacking_event' => ADMIN_ON_HIJACKING_EVENT, + 'hijacking_action' => ADMIN_HIJACKING_ACTION, + 'time_after_failure' => ADMIN_TIME_AFTER_FAILURE, + 'password_hash' => PASSWORD_HASH, + 'cookie_domain' => ADMIN_COOKIE_DOMAIN, + 'cookie_secure' => ADMIN_COOKIE_SECURE + ); + $this->s['admin'] = new Users_CheckAdmin($params); + } + //registered session + if ($sessionType === 'registered') { + $params = array( + 'users_controller' => REG_USERS_CONTROLLER, + 'users_login_action' => REG_USERS_LOGIN_ACTION, + 'panel_controller' => REG_PANEL_CONTROLLER, + 'panel_main_action' => REG_PANEL_MAIN_ACTION, + 'cookie_name' => REG_COOKIE_NAME, + 'sessionsTable' => REG_SESSIONS_TABLE, + 'usersTable' => REG_USERS_TABLE, + 'groupsTable' => REG_GROUPS_TABLE, + 'manyToManyTable' => REG_MANYTOMANY_TABLE, + 'accessesTable' => REG_ACCESSES_TABLE, + 'session_expire' => REG_SESSION_EXPIRE, + 'cookie_path' => REG_COOKIE_PATH, + 'database_type' => DATABASE_TYPE, + 'hijacking_check' => REG_HIJACKING_CHECK, + 'on_hijacking_event' => REG_ON_HIJACKING_EVENT, + 'hijacking_action' => REG_HIJACKING_ACTION, + 'time_after_failure' => REG_TIME_AFTER_FAILURE, + 'password_hash' => PASSWORD_HASH, + 'cookie_domain' => REG_COOKIE_DOMAIN, + 'cookie_secure' => REG_COOKIE_SECURE + ); + $this->s['registered'] = new Users_CheckAdmin($params); + } + } + + //method to set $this->argKeys. Chenge the string in the array! + final public function setArgKeys($argKeys) { +// $this->argKeys = explode(',',$argKeys); + $this->argKeys = array_keys($argKeys); + $this->argDefault = array_values($argKeys); + } + + //shift the $this->_queryString array a number of times equal to the number indicated by the $number variable and build the $this->viewArgs array and the $this->viewStatus string (additional url) + final public function shift($number = 0) { + + //save the query string array + $oldQueryString = $this->_queryString; + + for ($i = 0; $i < $number; $i++) + { + array_shift($this->_queryString); + } + $this->callInArgKeysFunc(); + for ($i = 0; $i < count($this->argKeys); $i++) + { + if (isset($_GET[$this->argKeys[$i]]) and strcmp($_GET[$this->argKeys[$i]],'') !== 0) + { + $this->viewArgs[$this->argKeys[$i]] = $this->request->get($this->argKeys[$i],'',$this->argFunc[$i]); + continue; + } + if (!isset($this->_queryString[$i])) { + $this->viewArgs[$this->argKeys[$i]] = isset($this->argDefault[$i]) ? $this->argDefault[$i] : null; + continue; + } + $this->viewArgs[$this->argKeys[$i]] = $this->_queryString[$i]; + } + $this->viewStatus = Url::createUrl(array_values($this->viewArgs)); + $this->updateHelpers(); + + //update the theme + $this->theme->viewStatus = $this->viewStatus; + $this->theme->viewArgs = $this->viewArgs; + + //restore the query string array + $this->_queryString = $oldQueryString; + } + + //call the functions defined in $this->argKeys after the colon (ex- 'page:forceInt' => apply the forceInt() function upon the $page arg) + final public function callInArgKeysFunc() { + for ($i = 0; $i < count($this->argKeys); $i++) { + + $this->argFunc[$i] = 'none'; + + if (strstr($this->argKeys[$i],':')) { + $temp = explode(':',$this->argKeys[$i]); + + $this->argFunc[$i] = $temp[1]; + + //exception + if (!in_array($temp[1],explode(',',params::$allowedSanitizeFunc))) { + throw new Exception('"'.$temp[1]. '" function not allowed in $this->argKeys'); + } + $this->argKeys[$i] = $temp[0]; + if (!isset($this->_queryString[$i])) { + continue; + } + $this->_queryString[$i] = call_user_func($temp[1],$this->_queryString[$i]); + } + } + } + + //function to update all the Helper that are instance of the HtmlHelper class. This function update the $viesArgs and $viewStatus properties. This function is called by the shift method. + final public function updateHelpers() { + foreach ($this->h as $Helper) { + if ($Helper instanceof Helper_Html) { + $Helper->viewArgs = $this->viewArgs; + $Helper->viewStatus = $this->viewStatus; + } + } + } + + //create the viewStatus property + final public function buildStatus() + { + $this->viewStatus = Url::createUrl(array_values($this->viewArgs)); + //update the theme + $this->theme->viewStatus = $this->viewStatus; + $this->theme->viewArgs = $this->viewArgs; + } + + //method to instanciate the scaffold + final public function loadScaffold($type,$params = null) { + + $typeArray = array('main','form'); + if (!in_array($type,$typeArray)) { + throw new Exception("the type '$type' is not allowed in ".__METHOD__); + } + $this->scaffold = new Scaffold($type,$this->controller,$this->m[$this->modelName],$this->viewArgs,$params); + + $this->helper('Menu',$this->controller,$this->scaffold->params['panelController']); + $this->scaffold->mainMenu = $this->h['Menu']; + + $this->m[$this->modelName]->popupBuild(); + $popupArray = $this->m[$this->modelName]->popupArray; + + if ($type === 'main') { + + $here = $this->controller.'/'.$this->scaffold->params['mainAction']; + $this->helper('Pages',$here,$this->scaffold->params['pageVariable']); + $this->helper('List',$this->m[$this->modelName]->identifierName,$here,$this->scaffold->params['pageVariable']); + + + $this->helper('Popup',$here,$popupArray,$this->scaffold->params['popupType'],$this->scaffold->params['pageVariable'],true); + + $this->scaffold->pageList = $this->h['Pages']; + $this->scaffold->itemList = $this->h['List']; + $this->scaffold->popupMenu = $this->h['Popup']; + } + } + +} \ No newline at end of file diff --git a/Library/Db/Mysql.php b/Library/Db/Mysql.php new file mode 100755 index 0000000..4561a1b --- /dev/null +++ b/Library/Db/Mysql.php @@ -0,0 +1,446 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to manage the database +//singleton! +class Db_Mysql { + + public $query = null; //the last query executed + public $charsetError = true; //true: non eccor occurred during the modification of the connection charset, false: one error occurred + public $charset = null; //the charset of the client connection + + private static $instance = null; //instance of this class + + private $dblink; + private $fieldsType = array('tinyint','smallint','int','mediumint','bigint','float','double'); + /** + + *connect to the database + *'host','user','password','db_name' + + */ + + //PHP-Mysql charset translation table + private $charsetTranslationTable = array( + 'UTF-8' => 'utf8', + 'ISO-8859-1' => 'latin1', + 'EUC-JP' => 'ujis', + 'SJIS' => 'sjis' + ); + + private function __construct($host,$user,$pwd,$db_name) + { + + $this->dblink = mysql_connect($host,$user,$pwd); + + if ($this->dblink === FALSE) { + die ("Connection error. Verify parameters in config.php"); + } + + $db2 = mysql_select_db($db_name, $this->dblink) + or die ("Database selection error. Verify parameters in config.php"); + + $charset = array_key_exists(DEFAULT_CHARSET,$this->charsetTranslationTable) ? $this->charsetTranslationTable[DEFAULT_CHARSET] : 'utf8'; + + if (!@mysql_set_charset($charset,$this->dblink)) $this->charsetError = false; + + $this->charset = mysql_client_encoding(); + } + + public static function getInstance($host = null, $user = null, $pwd = null, $db_name = null) + { + if (!isset(self::$instance)) { + $className = __CLASS__; + self::$instance = new $className($host,$user,$pwd,$db_name); + } + + return self::$instance; + } + + + //close the connection + public function disconnect() + { + mysql_close($this->dblink); + } + + //the text of the error message from previous MySQL operation + public function getError() + { + return mysql_error($this->dblink); + } + + //the numerical value of the error message from previous MySQL operation + public function getErrno() + { + return mysql_errno($this->dblink); + } + + public function getJoinString($string) + { + if (strstr($string,':')) + { + $tArray = explode(':',$string); + switch($tArray[0]) + { + case 'i': + $jString = ' INNER JOIN ' . $tArray[1]; + break; + case 'l': + $jString = ' LEFT JOIN ' . $tArray[1]; + break; + case 'r': + $jString = ' RIGHT JOIN ' . $tArray[1]; + break; + default: + $jString = ' INNER JOIN ' . $tArray[1]; + break; + } + return $jString; + } + else + { + return ' INNER JOIN '.$string; + } + } + + public function createSelectQuery($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=array(),$using=array(),$join=array()) + { + $maxValue = max(count($on),count($using),count($join)); + + $joinString = null; + for ($i=0; $i < $maxValue; $i++) + { + $joinString .= isset($join[$i]) ? $this->getJoinString($join[$i]) : null; + if (isset($using[$i])) + { + $joinString .= ' USING ('.$using[$i].')'; + } + else if (isset($on[$i])) + { + $joinString .= ' ON '.$on[$i]; + } + } + + if (isset($where)) + { + $where='WHERE '.$where; + } + if (isset($order_by)) { + $order_by='ORDER BY '.$order_by; + } + if (isset($group_by)) { + $group_by='GROUP BY '.$group_by; + } + if (isset($limit)) { + $limit='LIMIT '.$limit; + } + + $query="SELECT $fields FROM $table $joinString $where $group_by $order_by $limit;"; + return $query; + } + + public function get_num_rows($table,$where=null,$group_by=null,$on=array(),$using=array(),$join=array()) { + + $query = $this->createSelectQuery($table,'*',$where,$group_by,null,null,$on,$using,$join); + + $this->query=$query; + + $ris = mysql_query($query); + if ($ris) { + $num_rows = mysql_num_rows($ris); + return $num_rows; + } else { + return false; + } + } + + //get the maximum value of the field $field of the table $table having the $where conditions + public function getMath($func,$table,$field,$where=null,$group_by = null, $on=array(),$using=array(),$join=array()) + { + $query = $this->createSelectQuery($table,"$func($field) AS m",$where,$group_by,null,null,$on,$using,$join); + + $this->query = $query; + $result = mysql_query($query); + if ($result) + { + $row = mysql_fetch_array($result); + return $row['m']; + } + else + { + return false; + } + } + + //get the maximum value of the field $field of the table $table having the $where conditions + public function getMax($table,$field,$where=null,$group_by = null,$on=array(),$using=array(),$join=array()) + { + return $this->getMath('MAX',$table,$field,$where,$group_by,$on,$using,$join); + } + + //get the minimum value of the field $field of the table $table having the $where conditions + public function getMin($table,$field,$where=null,$group_by = null,$on=array(),$using=array(),$join=array()) + { + return $this->getMath('MIN',$table,$field,$where,$group_by,$on,$using,$join); + } + + //get the sum of the fields + public function getSum($table,$field,$where=null,$group_by = null,$on=array(),$using=array(),$join=array()) + { + return $this->getMath('SUM',$table,$field,$where,$group_by,$on,$using,$join); + } + + //get the average of the fields + public function getAvg($table,$field,$where=null,$group_by = null,$on=array(),$using=array(),$join=array()) + { + return $this->getMath('AVG',$table,$field,$where,$group_by,$on,$using,$join); + } + + public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=array(),$using=array(),$join=array()) + { + $query = $this->createSelectQuery($table,$fields,$where,$group_by,$order_by,$limit,$on,$using,$join); + + $this->query = $query; + $result = mysql_query($query); + return $this->getData($result); + } + + +// public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null) { +// $query = $this->selectQuery($table,$fields,$where,$group_by,$order_by,$limit); +// return $this->getData($query); +// } + + + //obtain an associative array containing the result values (keys:tableName_fieldsName) + //$par = 'single/multi' single table,multi table + public function getData($result) + { + $data = array(); //data from the query + $temp = array(); //temporary array (values of a single record) +// $result = mysql_query($query); + if ($result) + { + $fieldsNumber = mysql_num_fields($result); + while ($row = mysql_fetch_array($result)) + { + for ($i = 0;$i < $fieldsNumber;$i++) + { + $tableName = mysql_field_table($result, $i); + if (strcmp($tableName,'') === 0) $tableName = Params::$aggregateKey; + $fieldName = mysql_field_name($result, $i); + $temp[$tableName][$fieldName] = $row[$i]; + } + array_push($data,$temp); + } + return $data; + } + else + { + return false; + } + } + + //return an array containing all the types of the fields (indicated in $fields) of a table (indicated in $table) + public function getTypes($table, $fields) + { + $query = "DESCRIBE $table;"; + $result = mysql_query($query); + $temp = array(); + while ($row = mysql_fetch_assoc($result)) { + $temp[$row['Field']] = reset(explode('(',$row['Type'])); + } + + $types = array(); + $fields = explode(',',$fields); + for ($i = 0; $i < count($fields); $i++) + { + if (!array_key_exists($fields[$i],$temp)) return false; + $types[] = $temp[$fields[$i]]; + } + + return $types; + } + + public function insert($table,$fields,$values) { + + #$table is a string + #$fields has to be a string with comma as separator: name1,name2,... + #$values has to be an array + $values = array_values($values); + if (strcmp($fields,'') !== 0) + { + //get the type of the fields + $types = $this->getTypes($table,$fields); + if (!$types) return false; + + for($i = 0; $i < count($values); $i++) + { + if (!in_array($types[$i],$this->fieldsType)) + { + $values[$i] = '"'.$values[$i].'"'; + } + else + { + if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"'; + } + } + + $values = implode(',',$values); + $query="INSERT INTO $table ($fields) VALUES ($values);"; + $this->query = $query; + $ris = mysql_query($query); + + #check the result + if ($ris) { + return true; + } else { + return false; + } + + } else { + return false; + } + } + + // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT). + public function lastId() + { + return mysql_insert_id(); + } + + public function update($table,$fields,$values,$where) { + + #$table and $where are two strings + #$fields has to be a string with comma as separator: name1,name2,... + #$values has to be an array + $values = array_values($values); +// if (isset($where)) { + $where='WHERE '.$where; +// } + #get the array from the $fields string + if (strcmp($fields,'') !== 0) + { + //get the type of the fields + $types = $this->getTypes($table,$fields); + if (!$types) return false; + + $fields=explode(',',$fields); + $str=array(); + + for ($i=0;$ifieldsType)) + { + $values[$i] = '"'.$values[$i].'"'; + } + else + { + if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"'; + } + $str[$i]= $fields[$i].'='.$values[$i]; + } + + #set the string name1=value1,name2=... + $str=implode(',',$str); + $query="UPDATE $table SET $str $where;"; + $this->query=$query; + $ris = mysql_query($query); + + #check the result + if ($ris) { + return true; + } else { + return false; + } + } else { + return false; + } + + } + + + public function del($table,$where) { + + #$table and $where are two strings +// if (isset($where)) { + $where='WHERE '.$where; +// } + $query="DELETE FROM $table $where;"; + $this->query=$query; + $ris = mysql_query($query); + #check the result + + if ($ris) { + return true; + } else { + return false; + } + + } + + // function to check if exist the record having the field $id_name=$id_value + public function recordExists($table,$fieldName,$fieldValue,$where = null,$groupBy=null,$on=array(),$using=array(),$join=array()) + { + if (isset($where)) + { + $where=' AND '.$where; + } + + $fieldValue = '"'.$fieldValue.'"'; + + $num=$this->get_num_rows($table,$fieldName.'='.$fieldValue.$where,$groupBy,$on,$using,$join); + $res=($num>0) ? true : false; + return $res; + + } + + + //send a generic query to the database + //$query: the query to be sent + public function query($query) + { + $this->query = $query; + $result = mysql_query($query); + if ($result === false) + { + return false; + } + else if ($result === true) + { + return true; + } + else if (@get_resource_type($result)) + { + return $this->getData($result); + } + } + + // Prevent users to clone the instance + public function __clone() + { + throw new Exception('error in '. __METHOD__.': clone is not allowed'); + } + +} \ No newline at end of file diff --git a/Library/Db/Mysqli.php b/Library/Db/Mysqli.php new file mode 100644 index 0000000..df57a54 --- /dev/null +++ b/Library/Db/Mysqli.php @@ -0,0 +1,452 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to manage the database +//singleton! +class Db_Mysqli +{ + + public $query = null; //the last query executed + public $charsetError = true; //true: non eccor occurred during the modification of the connection charset, false: one error occurred + public $charset = null; //the charset of the client connection + + private static $instance = null; //instance of this class + + private $db; + private $fieldsType = array('tinyint','smallint','int','mediumint','bigint','float','double'); + + //PHP-Mysql charset translation table + private $charsetTranslationTable = array( + 'UTF-8' => 'utf8', + 'ISO-8859-1' => 'latin1', + 'EUC-JP' => 'ujis', + 'SJIS' => 'sjis' + ); + + /** + + *connect to the database + *'host','user','password','db_name' + + */ + + private function __construct($host,$user,$pwd,$db_name) + { + + $this->db = new mysqli($host,$user,$pwd,$db_name); + + if (mysqli_connect_error()) + { + die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); + } + + $charset = array_key_exists(DEFAULT_CHARSET,$this->charsetTranslationTable) ? $this->charsetTranslationTable[DEFAULT_CHARSET] : 'utf8'; + + if (!@$this->db->set_charset($charset)) $this->charsetError = false; + + $this->charset = $this->db->character_set_name(); + + } + + //return the $this->db property + public function getDb() + { + return $this->db; + } + + public static function getInstance($host = null, $user = null, $pwd = null, $db_name = null) + { + if (!isset(self::$instance)) { + $className = __CLASS__; + self::$instance = new $className($host,$user,$pwd,$db_name); + } + + return self::$instance; + } + + + //close the connection + public function disconnect() + { + $this->db->close(); + } + + //the text of the error message from previous MySQL operation + public function getError() + { + return $this->db->error; + } + + //the numerical value of the error message from previous MySQL operation + public function getErrno() + { + return $this->db->errno; + } + + public function getJoinString($string) + { + if (strstr($string,':')) + { + $tArray = explode(':',$string); + switch($tArray[0]) + { + case 'i': + $jString = ' INNER JOIN ' . $tArray[1]; + break; + case 'l': + $jString = ' LEFT JOIN ' . $tArray[1]; + break; + case 'r': + $jString = ' RIGHT JOIN ' . $tArray[1]; + break; + default: + $jString = ' INNER JOIN ' . $tArray[1]; + break; + } + return $jString; + } + else + { + return ' INNER JOIN '.$string; + } + } + + public function createSelectQuery($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=array(),$using=array(),$join=array()) + { + $maxValue = max(count($on),count($using),count($join)); + + $joinString = null; + for ($i=0; $i < $maxValue; $i++) + { + $joinString .= isset($join[$i]) ? $this->getJoinString($join[$i]) : null; + if (isset($using[$i])) + { + $joinString .= ' USING ('.$using[$i].')'; + } + else if (isset($on[$i])) + { + $joinString .= ' ON '.$on[$i]; + } + } + + if (isset($where)) + { + $where='WHERE '.$where; + } + if (isset($order_by)) { + $order_by='ORDER BY '.$order_by; + } + if (isset($group_by)) { + $group_by='GROUP BY '.$group_by; + } + if (isset($limit)) { + $limit='LIMIT '.$limit; + } + + $query="SELECT $fields FROM $table $joinString $where $group_by $order_by $limit;"; + return $query; + } + + public function get_num_rows($table,$where=null,$group_by=null,$on=array(),$using=array(),$join=array()) { + + $query = $this->createSelectQuery($table,'*',$where,$group_by,null,null,$on,$using,$join); + + $this->query = $query; + $ris = $this->db->query($query); + if ($ris) { + $num_rows = $ris->num_rows; + $ris->close(); + return $num_rows; + } else { + return false; + } + } + + public function getMath($func,$table,$field,$where=null,$group_by = null, $on=array(),$using=array(),$join=array()) + { + $query = $this->createSelectQuery($table,"$func($field) AS m",$where,$group_by,null,null,$on,$using,$join); + + $this->query = $query; + $result = $this->db->query($query); + if ($result) + { + $row = $result->fetch_array(); + $result->close(); + return $row['m']; + } + else + { + return false; + } + } + + //get the maximum value of the field $field of the table $table having the $where conditions + public function getMax($table,$field,$where=null,$group_by = null,$on=array(),$using=array(),$join=array()) + { + return $this->getMath('MAX',$table,$field,$where,$group_by,$on,$using,$join); + } + + //get the minimum value of the field $field of the table $table having the $where conditions + public function getMin($table,$field,$where=null,$group_by = null,$on=array(),$using=array(),$join=array()) + { + return $this->getMath('MIN',$table,$field,$where,$group_by,$on,$using,$join); + } + + //get the sum of the fields + public function getSum($table,$field,$where=null,$group_by = null,$on=array(),$using=array(),$join=array()) + { + return $this->getMath('SUM',$table,$field,$where,$group_by,$on,$using,$join); + } + + //get the average of the fields + public function getAvg($table,$field,$where=null,$group_by = null,$on=array(),$using=array(),$join=array()) + { + return $this->getMath('AVG',$table,$field,$where,$group_by,$on,$using,$join); + } + + public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=array(),$using=array(),$join=array()) + { + $query = $this->createSelectQuery($table,$fields,$where,$group_by,$order_by,$limit,$on,$using,$join); + + $this->query = $query; + $result = $this->db->query($query); + return $this->getData($result); + } + + +// public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null) { +// $query = $this->selectQuery($table,$fields,$where,$group_by,$order_by,$limit); +// return $this->getData($query); +// } + + + //obtain an associative array containing the result values (keys:tableName_fieldsName) + //$par = 'single/multi' single table,multi table + public function getData($result) { + $data = array(); //data from the query + $temp = array(); //temporary array (values of a single record) +// $result = $this->db->query($query); + if ($result) { + $fieldsNumber = $result->field_count; + while ($row = $result->fetch_array()) { + for ($i = 0;$i < $fieldsNumber;$i++) { + $finfo = $result->fetch_field_direct($i); + $tableName = $finfo->table; + if (strcmp($tableName,'') === 0) $tableName = Params::$aggregateKey; + $fieldName = $finfo->name; + $temp[$tableName][$fieldName] = $row[$i]; + } + array_push($data,$temp); + } + $result->close(); + return $data; + } else { + return false; + } + } + + //return an array containing all the types of the fields (indicated in $fields) of a table (indicated in $table) + public function getTypes($table, $fields) + { + $query = "DESCRIBE $table;"; + $result = $this->db->query($query); + $temp = array(); + while ($row = $result->fetch_assoc()) { + $temp[$row['Field']] = reset(explode('(',$row['Type'])); + } + $result->close(); + + $types = array(); + $fields = explode(',',$fields); + for ($i = 0; $i < count($fields); $i++) + { + if (!array_key_exists($fields[$i],$temp)) return false; + $types[] = $temp[$fields[$i]]; + } + + return $types; + } + + public function insert($table,$fields,$values) { + + #$table is a string + #$fields has to be a string with comma as separator: name1,name2,... + #$values has to be an array + $values = array_values($values); + if (strcmp($fields,'') !== 0) + { + //get the type of the fields + $types = $this->getTypes($table,$fields); + if (!$types) return false; + + for($i = 0; $i < count($values); $i++) + { + if (!in_array($types[$i],$this->fieldsType)) + { + $values[$i] = '"'.$values[$i].'"'; + } + else + { + if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"'; + } + } + + $values = implode(',',$values); + $query="INSERT INTO $table ($fields) VALUES ($values);"; + $this->query=$query; + + $ris = $this->db->query($query); + + #check the result + if ($ris) { + return true; + } else { + return false; + } + + } else { + return false; + } + } + + // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT). + public function lastId() + { + return $this->db->insert_id; + } + + public function update($table,$fields,$values,$where) { + + #$table and $where are two strings + #$fields has to be a string with comma as separator: name1,name2,... + #$values has to be an array + $values = array_values($values); +// if (isset($where)) { + $where='WHERE '.$where; +// } + #get the array from the $fields string + if (strcmp($fields,'') !== 0) + { + //get the type of the fields + $types = $this->getTypes($table,$fields); + if (!$types) return false; + + $fields = explode(',',$fields); + $str = array(); + + for ($i=0;$ifieldsType)) + { + $values[$i] = '"'.$values[$i].'"'; + } + else + { + if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"'; + } + $str[$i]= $fields[$i].'='.$values[$i]; + } + + #set the string name1=value1,name2=... + $str=implode(',',$str); + $query="UPDATE $table SET $str $where;"; + $this->query=$query; + $ris = $this->db->query($query); + + #check the result + if ($ris) { + return true; + } else { + return false; + } + } else { + return false; + } + + } + + + public function del($table,$where) { + + #$table and $where are two strings +// if (isset($where)) { + $where='WHERE '.$where; +// } + $query="DELETE FROM $table $where;"; + $this->query=$query; + $ris = $this->db->query($query); + #check the result + + if ($ris) { + return true; + } else { + return false; + } + + } + + + //function to check if exist the record having the field $id_name=$id_value + public function recordExists($table,$fieldName,$fieldValue,$where = null,$groupBy=null,$on=array(),$using=array(),$join=array()) + { + if (isset($where)) + { + $where=' AND '.$where; + } + + $fieldValue = '"'.$fieldValue.'"'; + + $num = $this->get_num_rows($table,$fieldName.'='.$fieldValue.$where,$groupBy,$on,$using,$join); + $res=($num>0) ? true : false; + return $res; + + } + + + //send a generic query to the database + //$query: the query to be sent + public function query($query) + { + $this->query = $query; + $result = $this->db->query($query); + if ($result === true) + { + return true; + } + else if ($result === false) + { + return false; + } + else if ($result instanceof MySQLi_Result) + { + return $this->getData($result); + } + } + + // Prevent users to clone the instance + public function __clone() + { + throw new Exception('error in '. __METHOD__.': clone is not allowed'); + } + +} \ No newline at end of file diff --git a/Library/Db/index.html b/Library/Db/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Library/Db/index.html @@ -0,0 +1 @@ + diff --git a/Library/Email.php b/Library/Email.php new file mode 100644 index 0000000..9d2ff19 --- /dev/null +++ b/Library/Email.php @@ -0,0 +1,246 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to send an e-mail +class Email { + + //sent to parameters (array) + private $_sendTo = array(); + + //cc parameters (array) + private $_cc = array(); + + //bcc parameters (array) + private $_bcc = array(); + + //the address of the sender + private $_from = null; + + //subject (string) + private $_subject = null; + + //charset + private $_charset = "iso-8859-1"; + + //Content-Transfer-Encoding + private $_ctencoding = "7bit"; + + //body + private $_body = ''; + + //headers + private $_headers = null; + + //check flag. If _check = true than check the mail addresses + private $_check = null; + + //regular expression to check each e-mail address + private $_addressRegExp = null; + + //array containing all the errors encountered during the execution + public $errorsArray = array(); + + public function __construct($bool = true) + { + $this->_check = $bool; + } + + //set the sentTo addresses array + //$addresses: array of e-mail addresses or a string + public function sendTo($addresses) + { + $this->_sendTo = explode(',',$addresses); + } + + //set the subject + public function subject($subject) + { + $this->_subject = $subject; + } + + //set the cc addresses array + //$addresses: array of e-mail addresses or a string + public function cc($addresses) + { + $this->_cc = explode(',',$addresses); + } + + //set the bcc addresses array + //$addresses: array of e-mail addresses or a string + public function bcc($addresses) + { + $this->_bcc = explode(',',$addresses); + } + + //set the address of the sender + public function from($address) + { + $this->_from = $address; + } + + //set the charset + public function charset($charset) + { + $this->_charset = $charset; + } + + //set the Content-Transfer-Encoding + public function ctencoding($ctencoding) + { + $this->_ctencoding = $ctencoding; + } + + //set the text body + public function body($body) + { + $this->_body = $body; + } + + //set the address regular expression + public function addressRegExp($regExp) + { + $this->_addressRegExp = $regExp; + } + + //check if the mail address is valid + public function isValidAddress($address) + { + + if( preg_match( '/^[^<>]*<(.+)>$/', $address, $matches ) ) + { + $address = $matches[1]; + } + + if (isset($this->_addressRegExp)) + { + if (preg_match($this->_addressRegExp,$address)) + { + return true; + } + else + { + return false; + } + } + else + { + if (checkMail($address)) return true; + } + + return false; + + } + + //check the addresses inside the $addresses array + public function checkAddresses($addresses) + { + foreach ($addresses as $address) + { + if(!$this->isValidAddress($address)) return false; + } + return true; + } + + //build the mail + public function buildMail() + { + + if (empty($this->_sendTo)) + { + $this->errorsArray[] = 'no address specified'; + return false; + } + + if ($this->_check) + { + if (!$this->checkAddresses($this->_sendTo)) + { + $this->errorsArray[] = 'errors in the sendTo address validation'; + return false; + } + + if (!empty($this->_cc)) + { + if (!$this->checkAddresses($this->_cc)) + { + $this->errorsArray[] = 'errors in the cc address validation'; + return false; + } + } + + if (!empty($this->_bcc)) + { + if (!$this->checkAddresses($this->_bcc)) + { + $this->errorsArray[] = 'errors in the bcc address validation'; + return false; + } + } + + if (isset($this->_from)) + { + if (!$this->checkAddresses(array($this->_from))) + { + $this->errorsArray[] = 'errors in the from address validation'; + return false; + } + } + } + + if (strcmp($this->_subject,'') === 0) + { + $this->errorsArray[] = 'no subject specified'; + return false; + } + + $headers = null; + if (isset($this->_from)) $headers .= "From: ".$this->_from."\r\n"; + $headers .= "MIME-Version: 1.0\r\n"; + $headers .= "Content-Type: text/plain; charset=\"".$this->_charset."\"\r\n"; + $headers .= "Content-Transfer-Encoding: ".$this->_ctencoding."\r\n"; + if (!empty($this->_cc)) $headers .= "CC: ".implode(',',$this->_cc)."\r\n"; + if (!empty($this->_bcc)) $headers .= "Bcc: ".implode(',',$this->_bcc)."\r\n"; + + $this->_headers = $headers; + + return true; + + } + + public function send() + { + if (!$this->buildMail()) return false; + + $to = implode(',',$this->_sendTo); + + if (!@mail($to,$this->_subject,$this->_body,$this->_headers)) + { + $this->errorsArray[] = 'error in the send process'; + return false; + } + + return true; + } + +} \ No newline at end of file diff --git a/Library/ErrorReporting.php b/Library/ErrorReporting.php new file mode 100644 index 0000000..2cb8aed --- /dev/null +++ b/Library/ErrorReporting.php @@ -0,0 +1,45 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +function ErrorReporting() { + if (RUNTIME_CONFIGURATION === true) + { + error_reporting(ERROR_REPORTING_DIRECTIVE); + if (DISPLAY_ERRORS === 'On') { + ini_set('display_errors','On'); + } else { + ini_set('display_errors','Off'); + } + + if (ERROR_REPORTING_FILE === true) + { + if (LOG_ERROR_FILE === 'default') + { + ini_set('error_log',ROOT.DS.'Logs/Errors.log'); + } else { + ini_set('error_log',LOG_ERROR_FILE); + } + } + } +} diff --git a/Library/Factory/Db.php b/Library/Factory/Db.php new file mode 100755 index 0000000..32a82c1 --- /dev/null +++ b/Library/Factory/Db.php @@ -0,0 +1,69 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to create the database layer class +class Factory_Db { + + //start the database connection + //$dbType: mysql,mysqli,pg + //$dbArrayParams: array containing the HOST, the USER, the PWD, and the DB of the database (see config.php) + public static function getInstance($dbType,$dbArrayParams = array()) { + if (!in_array($dbType,Params::$allowedDb)) { + throw new Exception('error in ' . __METHOD__ . ' : the database type has to be '.implode(' or ',Params::$allowedDb)); + } + switch ($dbType) { + case 'Mysql': + return call_user_func_array(array('Db_'.$dbType,'getInstance'),$dbArrayParams); + break; + case 'Mysqli': + return call_user_func_array(array('Db_'.$dbType,'getInstance'),$dbArrayParams); + break; + case 'None': + return null; + break; + } + } + + //close the database connection + public static function disconnect($dbType) + { + if (!in_array($dbType,Params::$allowedDb)) { + throw new Exception('error in ' . __METHOD__ . ' : the database type has to be '.implode(' or ',Params::$allowedDb)); + } + switch ($dbType) { + case 'Mysql': + $mysql = Db_Mysql::getInstance(); + $mysql->disconnect(); + break; + case 'Mysqli': + $mysqli = Db_Mysqli::getInstance(); + $mysqli->disconnect(); + break; + case 'None': + return null; + break; + } + } + +} diff --git a/Library/Factory/Strings.php b/Library/Factory/Strings.php new file mode 100644 index 0000000..3e766bd --- /dev/null +++ b/Library/Factory/Strings.php @@ -0,0 +1,38 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//return the string class +class Factory_Strings { + + //return an instance of the Lang_{language}_Generic class + public static function generic($lang = 'En') { + $stringClass = 'Lang_'.$lang.'_Generic'; + if (!class_exists($stringClass)) + { + $stringClass = 'Lang_En_Generic'; + } + return new $stringClass(); + } + +} diff --git a/Library/Factory/index.html b/Library/Factory/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Library/Factory/index.html @@ -0,0 +1 @@ + diff --git a/Library/Files/Log.php b/Library/Files/Log.php new file mode 100644 index 0000000..7eda7b7 --- /dev/null +++ b/Library/Files/Log.php @@ -0,0 +1,114 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to manage a file di log +//this is a singleton class +class Files_Log +{ + + const DS = DIRECTORY_SEPARATOR; + + // array of instances of the class + //key: name of the instance, value:instance. The name of the instance is also the name of the log file to open + private static $instance = array(); + + public static $logFolder = './'; //the log folder + public static $logExtension = '.log'; //the extension of the log files + public static $logPermission = 0777; + + private $splFile; //SplFileObject + + //$fileName: the file to open + private function __construct($fileName) + { + $finalChar = self::$logFolder[strlen(self::$logFolder) - 1]; + if (strcmp($finalChar,self::DS) !== 0) self::$logFolder .= self::DS; + + $path = self::$logFolder . $fileName . self::$logExtension; + $this->splFile = new SplFileObject($path,'a+'); + //change the permission of the file + @chmod($path,self::$logPermission); + } + + // The singleton method + // $instanceName: name of the key of self::$instance. It is also the name of the log file to open + public static function getInstance($instanceName) + { + if (!isset(self::$instance[$instanceName])) { + $className = __CLASS__; + self::$instance[$instanceName] = new $className($instanceName); + } + + return self::$instance[$instanceName]; + } + + //write the string $string at the end of the file + public function writeString($string,$format = 'Y-m-d H:i:s') + { + $date = date($format); + $this->splFile->fwrite("[$date]\t".$string."\n"); + } + + //get the date string of the line $line + public function getDateString($line) + { + if (preg_match('/^[\[]{1}([a-zA-Z0-9:\-\s])*[\]]{1}/',$line,$match)) + { + $match[0] = str_replace('[',null,$match[0]); + $match[0] = str_replace(']',null,$match[0]); + return $match[0]; + } + else + { + return false; + } + } + + //delete all the lines older than a number of days equal to $days + public function clearBefore($days = 30) + { + $tempArray = array(); + $newTime = time() - (int)$days * 24 * 3600; + foreach ($this->splFile as $line) + { + $lineTime = strtotime($this->getDateString($line)); + if ($lineTime !== false and $lineTime > $newTime) + { + $tempArray[] = $line; + } + } + $this->splFile->ftruncate(0); + foreach ($tempArray as $row) + { + $this->splFile->fwrite($row); + } + } + + // Prevent users to clone the instance + public function __clone() + { + throw new Exception('error in '. __METHOD__.': clone is not allowed'); + } + +} \ No newline at end of file diff --git a/Library/Files/Upload.php b/Library/Files/Upload.php new file mode 100755 index 0000000..7dbc7d1 --- /dev/null +++ b/Library/Files/Upload.php @@ -0,0 +1,603 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to manage upload files +class Files_Upload +{ + + const DS = DIRECTORY_SEPARATOR; + + private $base = null; //root directory + private $directory = null; //current directory. Path relative to the base directory (Files_Upload::base) + private $parentDir = null; //parent folder + private $subDir = array(); //subdirectories of the current directory + private $relSubDir = array(); //subfolders of $this->directory. The path starts from the $base folder + private $files = array(); //files inside the current directory + private $relFiles = array(); //files inside $this->directory. The path starts from the $base directory + private $params; //class parameters + private $pattern = null; //the pattern for the preg_match function + + protected $_resultString; //reference to the class uploadStrings containing all the result strings + + public $fileName = null; //the name of the last file that has been uploaded + public $notice = null; //the result string of the operation + + public function __construct($base,$params = null, $directory = null) { + + $this->base = $this->addTrailingSlash($base); + + //set the match pattern + $tmp = str_replace(self::DS,'\\'.self::DS,$this->base); + $this->pattern = "/^(".$tmp.")/"; + + $defaultParams = array( + 'filesPermission' => 0777, + 'delFolderAction' => 'delFolderAction', + 'delFileAction' => 'delFileAction', + 'createFolderAction' => 'createFolderAction', + 'uploadFileAction' => 'uploadFileAction', + 'maxFileSize' => 3000000, + 'language' => 'En', + 'allowedExtensions' => 'jpg,jpeg,png,gif,txt', + 'allowedMimeTypes' => '', + 'fileUploadKey' => 'userfile', + 'fileUploadBehaviour' => 'add_token', //can be none or add_token + 'fileUploadBeforeTokenChar' => '_', + 'functionUponFileNane' => 'none', + 'createImage' => false, + ); + + //set the $this->scaffold->params array + if (is_array($params)) + { + foreach ($params as $key => $value) + { + $defaultParams[$key] = $value; + } + } + $this->params = $defaultParams; + + //instantiate the $_resultString object + $stringClass = 'Lang_'.$this->params['language'].'_UploadStrings'; + if (!class_exists($stringClass)) + { + $stringClass = 'Lang_En_UploadStrings'; + } + $this->_resultString = new $stringClass(); + + $this->setDirectory($directory); + + } + + //set a new value for one element of the $params array + public function setParam($key,$value) + { + if (array_key_exists($key,$this->params)) + { + $this->params[$key] = $value; + } + } + + //change a resulting string + public function setString($key,$value) + { + $this->_resultString->string[$key] = $value; + } + + //obtain the current directory + public function setDirectory($directory = null) + { + $relDir = (strcmp($directory,"") !== 0) ? $this->addTrailingSlash($directory) : null; + $absDir = $this->addTrailingSlash($this->base.$directory); + + if (is_dir($absDir)) + { + if ($this->isValidFolder($absDir)) + { + $this->directory = $relDir; + return true; + } + else + { + $this->notice = $this->_resultString->getString('not-child'); + } + } + else + { + $this->directory = null; + $this->notice = $this->_resultString->getString('not-dir'); + } + return false; + } + + //check if $folder is a folder and is subfolder of $this->base + protected function isValidFolder($folder) + { + if (is_dir($folder)) + { + $folder = $this->addTrailingSlash(realpath($folder)); + if ($this->isMatching($folder)) return true; + } + return false; + } + + protected function isMatching($path) + { + if (preg_match($this->pattern,$path)) + { + if (strstr($path,'..')) return false; + return true; + } + return false; + } + + public function getDirectory() { + return $this->directory; + } + + public function getBase() + { + return $this->base; + } + + public function setBase($path) + { + $this->base = $this->addTrailingSlash($path); + + //set the match pattern + $tmp = str_replace(self::DS,'\\'.self::DS,$this->base); + $this->pattern = "/^(".$tmp.")/"; + } + + public function getSubDir() { + return $this->subDir; + } + + public function getRelSubDir() + { + return $this->relSubDir; + } + + public function getFiles() { + return $this->files; + } + + public function getRelFiles() + { + return $this->relFiles; + } + + public function getParentDir() { + return $this->parentDir; + } + + //add the trailing slash to the string + protected function addTrailingSlash($string) + { + $finalChar = $string[strlen($string) - 1]; + if (strcmp($finalChar,self::DS) !== 0) + { + return $string.self::DS; + } + return $string; + } + + protected function urlDeep($dir) { #funzione per creare l'indirizzo completo della cartella all'interno della quale voglio entrare + #$dir:cartella all'interno della quale voglio entrare + return $this->base.$this->directory.$dir.self::DS; + } + + public function listFiles() { #creo la lista di file e cartelle all'interno della directory corrente + $items = scandir($this->base.$this->directory); + foreach( $items as $this_file ) { + if( strcmp($this_file,".") !== 0 && strcmp($this_file,"..") !== 0 ) { + if (is_dir($this->urlDeep($this_file))) { + $this->subDir[] = $this_file; + $this->relSubDir[] = $this->directory.$this_file; + } else { + $this->files[] = $this_file; + $this->relFiles[] = $this->directory.$this_file; + } + } + } + //get the parent dir + $this->parentDir(); + } + + //get the extension of the file + public function getFileExtension($file) + { + if (strstr($file,'.')) + { + return strtolower(end(explode('.', $file))); + } + return ''; + } + + //get the file name without the extension + public function getNameWithoutFileExtension($file) + { + if (strstr($file,'.')) + { + $copy = explode('.', $file); + array_pop($copy); + return implode('.',$copy); + } + return $file; + } + + //get a not existing file name if the one retrieved from the upload process already exists in the current directory + public function getUniqueName($file,$int = 0) + { + $fileNameWithoutExt = $this->getNameWithoutFileExtension($file); + $extension = $this->getFileExtension($file); + $token = $int === 0 ? null : $this->params['fileUploadBeforeTokenChar'].$int; + + $dotExt = strcmp($extension,'') !== 0 ? ".$extension" : null; + + $newName = $fileNameWithoutExt.$token.$dotExt; + if (!file_exists($this->base.$this->directory.$newName)) + { + return $newName; + } + else + { + return $this->getUniqueName($file,$int+1); + } + + } + + protected function parentDir() { #individuo la cartella madre + + $folders = explode(self::DS,$this->directory); + array_pop($folders); + array_pop($folders); + $parent = implode(self::DS,$folders); + $parent = (strcmp($parent,"") !== 0) ? $this->addTrailingSlash($parent) : null; + + if ($this->isValidFolder($this->base.$parent)) + { + $this->parentDir = $parent; + } + else + { + $this->parentDir = null; + } + } + + //create the $name subfolder of the $this->directory folder + public function createFolder($name) { #funzione per creare una cartella nella directory corrente + $name = basename($name); + if (strcmp(trim($name),'') !== 0) + { + if (is_writable($this->base.$this->directory)) + { + $path = $this->base.$this->directory.$name; + + if ($this->isMatching($path)) + { + if (!file_exists($path)) + { + if (@mkdir($path,$this->params['filesPermission'])) + { + @chmod($path, $this->params['filesPermission']); + $this->notice = $this->_resultString->getString('executed'); + return true; + } + else + { + $this->notice = $this->_resultString->getString('error'); + } + } + else + { + $this->notice = $this->_resultString->getString('dir-exists'); + } + } + else + { + $this->notice = $this->_resultString->getString('not-child'); + } + } + else + { + $this->notice = $this->_resultString->getString('not-writable'); + } + } + else + { + $this->notice = $this->_resultString->getString('no-folder-specified'); + } + return false; + } + + //check if the $name folder is empty or not + protected function isEmpty($name) + { + $items = scandir($name); + foreach( $items as $this_file ) { + if( strcmp($this_file,".") !== 0 && strcmp($this_file,"..") !== 0 ) { + return false; + } + } + return true; + } + + public function removeFile($name) + { + $name = basename($name); + if (strcmp(trim($name),'') !== 0) + { + $path = $this->base.$this->directory.$name; + if ($this->isMatching($path)) + { + if ($this->removeAbsFile($path)) return true; + } + else + { + $this->notice = $this->_resultString->getString('not-child'); + } + } + else + { + $this->notice = $this->_resultString->getString('no-file-specified'); + } + return false; + } + + //remove the $name file + protected function removeAbsFile($name) + { + if (strcmp(trim($name),'') !== 0) + { + if (is_writable($name)) + { + if (@unlink($name)) + { + $this->notice = $this->_resultString->getString('executed'); + return true; + } + else + { + $this->notice = $this->_resultString->getString('error'); + } + } + else + { + $this->notice = $this->_resultString->getString('not-writable-file'); + } + } + else + { + $this->notice = $this->_resultString->getString('no-file-specified'); + } + return false; + } + + public function removeFolder($name) + { + $name = basename($name); + if (strcmp(trim($name),'') !== 0) + { + $dir = $this->base.$this->directory.$name; + if ($this->isMatching($dir)) + { + if ($this->removeAbsFolder($dir)) return true; + } + else + { + $this->notice = $this->_resultString->getString('not-child'); + } + } + else + { + $this->notice = $this->_resultString->getString('no-folder-specified'); + } + return false; + } + + //remove the $name folder + protected function removeAbsFolder($name) { + if (strcmp(trim($name),'') !== 0) { + if (is_writable($name)) + { + if ($this->isEmpty($name)) + { + if (@rmdir($name)) + { + $this->notice = $this->_resultString->getString('executed'); + return true; + } + else + { + $this->notice = $this->_resultString->getString('error'); + } + } + else + { + $this->notice = $this->_resultString->getString('not-empty'); + } + } + else + { + $this->notice = $this->_resultString->getString('not-writable'); + } + } + else + { + $this->notice = $this->_resultString->getString('no-folder-specified'); + } + return false; + } + + //remove all the files that are not inside the $list argument + public function removeFilesNotInTheList($list = array()) + { + $this->listFiles(); + $files = $this->getFiles(); + foreach ($files as $file) + { + if (!in_array($file,$list)) + { + $this->removeFile($file); + } + } + } + + //upload a file in the current directory + //$fileName: name of the file + public function uploadFile($fileName = null) + { + $userfile = $this->params['fileUploadKey']; + + if(strcmp(trim($_FILES[$userfile]["name"]),"") !== 0) + { + $nameFromUpload = basename($_FILES[$userfile]["name"]); + + $ext = $this->getFileExtension($nameFromUpload); + $nameWithoutExtension = $this->getNameWithoutFileExtension($nameFromUpload); + + $dotExt = strcmp($ext,'') !== 0 ? ".$ext" : null; + + //check if the "functionUponFileNane" function exists + if (!function_exists($this->params['functionUponFileNane'])) { + throw new Exception('Error in '.__METHOD__.': function '.$this->params['functionUponFileNane']. ' does not exist'); + } + + //check if the fileinfo extension is loaded + if (strcmp($this->params['allowedMimeTypes'],'') !== 0 and !extension_loaded('fileinfo')) { + throw new Exception('Error in '.__METHOD__.': no MIME type check is possible because the fileinfo extension is not loaded'); + } + + $nameWithoutExtension = call_user_func($this->params['functionUponFileNane'],$nameWithoutExtension); + + $fileName = isset($fileName) ? $fileName.$dotExt : $nameWithoutExtension.$dotExt; + + $this->fileName = $fileName; + + switch($this->params['fileUploadBehaviour']) + { + case 'none': + break; + case 'add_token': + $this->fileName = $this->getUniqueName($this->fileName); + $fileName = $this->fileName; + break; + } + + if(@is_uploaded_file($_FILES[$userfile]["tmp_name"])) { + if ($_FILES[$userfile]["size"] <= $this->params['maxFileSize']) + { + //check the extension of the file + $AllowedExtensionsArray = explode(',',$this->params['allowedExtensions']); + + if (strcmp($this->params['allowedExtensions'],'') === 0 or in_array($ext,$AllowedExtensionsArray)) + { + if (strcmp($this->params['allowedMimeTypes'],'') !== 0) + { + //get the MIME type of the file + $finfo = finfo_open(FILEINFO_MIME_TYPE); + $MIMEtype = finfo_file($finfo, $_FILES[$userfile]["tmp_name"]); + finfo_close($finfo); + } + + $AllowedMimeTypesArray = explode(',',$this->params['allowedMimeTypes']); + + if (strcmp($this->params['allowedMimeTypes'],'') === 0 or in_array($MIMEtype,$AllowedMimeTypesArray)) + { + //check if the file doesn't exist + if (!file_exists($this->base.$this->directory.$fileName)) + { + if (@move_uploaded_file($_FILES[$userfile]["tmp_name"],$this->base.$this->directory.$fileName)) + { + if ($this->params['createImage']) + { + //create the image + $basePath = $this->base.$this->directory; + $thumb = new Image_Gd_Thumbnail($basePath); + $thumb->render($fileName,$this->base.$this->directory.$fileName); + } + + @chmod($this->base.$this->directory.$fileName, $this->params['filesPermission']); + $this->notice = $this->_resultString->getString('executed'); + return true; + } + else + { + $this->notice = $this->_resultString->getString('error'); + } + } + else + { + $this->notice = $this->_resultString->getString('file-exists'); + } + } + else + { + $this->notice = $this->_resultString->getString('not-allowed-mime-type'); + } + } + else + { + $this->notice = $this->_resultString->getString('not-allowed-ext'); + } + } + else + { + $this->notice = $this->_resultString->getString('size-over'); + } + } + else + { + $this->notice = $this->_resultString->getString('no-upload-file'); + } + } + else + { + $this->notice = $this->_resultString->getString('no-upload-file'); + } + return false; + } + + //update the folder tree + public function updateTree() { + + if (isset($_POST[$this->params['delFolderAction']])) { + $this->removeFolder($_POST[$this->params['delFolderAction']]); + } + + if (isset($_POST[$this->params['delFileAction']])) { + $this->removeFile($_POST[$this->params['delFileAction']]); + } + + if (isset($_POST[$this->params['createFolderAction']])) { + $this->createFolder($_POST['folderName']); + } + + if (isset($_POST[$this->params['uploadFileAction']])) { + $this->uploadFile(); + } + + } +} \ No newline at end of file diff --git a/Library/Files/index.html b/Library/Files/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Library/Files/index.html @@ -0,0 +1 @@ + diff --git a/Library/Form/Checkbox.php b/Library/Form/Checkbox.php new file mode 100755 index 0000000..497c097 --- /dev/null +++ b/Library/Form/Checkbox.php @@ -0,0 +1,49 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +/** create the HTML of an input text entry */ +class Form_Checkbox extends Form_Entry +{ + + public function __construct($entryName = null) + { + $this->entryName = $entryName; + } + + public function render($value = null) + { + $wrap = $this->getWrapElements($value); + $returnString = $wrap[0]; + $returnString .= "
        \n\t"; + $returnString .= $wrap[1]; + $returnString .= $this->getLabelTag(); + $returnString .= $wrap[2]; + $returnString .= Html_Form::checkbox($this->entryName, $value, $this->options, $this->className,$this->idName); + $returnString .= $wrap[3]; + $returnString .="
        \n"; + $returnString .= $wrap[4]; + return $returnString; + } + +} diff --git a/Library/Form/Entry.php b/Library/Form/Entry.php new file mode 100755 index 0000000..6f45557 --- /dev/null +++ b/Library/Form/Entry.php @@ -0,0 +1,112 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//base class of the form entries +abstract class Form_Entry { + + public $entryName = null; //the name of the entry + public $entryClass = null; //the class of the entry + public $idName = null; //the id of the input entry + public $className = null; //the class of the input entry + public $labelString = null; //label of the form + public $labelClass = null; //the class of the tag of the label + public $options = array(); //options (if the entry is a \n"; + } + $returnString .= $wrap[3]; + $returnString .="
        \n"; + $returnString .= $wrap[4]; + return $returnString; + } + +} diff --git a/Library/Form/Form.php b/Library/Form/Form.php new file mode 100755 index 0000000..a1a9fda --- /dev/null +++ b/Library/Form/Form.php @@ -0,0 +1,140 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//create the HTML of the whole form +class Form_Form { + + public $entry = array(); //associative array containing the entries of the form (objects that inherit the class form_entryModel). Each element of the array corresponds to one field of the table + + public $action = null; //the action of the form + public $name = null; //the name of the form + public $className = 'formClass'; //the class of the form + public $id = null; + public $submit = array(); //the submit entries array('name'=>'value') + public $method = 'POST'; //the transmission method: POST/GET + public $enctype = null; //enctype attribute of the form + + public function __construct($action,$submit = array('generalAction'=>'save'),$method = 'POST',$enctype = null) + { + $this->action = $action; //action of the form: controller/action + $this->submit = $submit; + $this->method = $method; + $this->enctype = $enctype; + } + + //method to manage the $this->entry associative array + //entryType: the type of the object to be initialized, $entryName: the name of the entry + //$options: the list of options (if the entry is a \n\n"; + } + $htmlForm .= "\n"; + return $htmlForm; + } + +} diff --git a/Library/Form/Hidden.php b/Library/Form/Hidden.php new file mode 100755 index 0000000..c589662 --- /dev/null +++ b/Library/Form/Hidden.php @@ -0,0 +1,40 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//create the HTML of an input hidden entry +class Form_Hidden extends Form_Entry +{ + + public function __construct($entryName = null) + { + $this->entryName = $entryName; + } + + public function render($value = null) + { + $returnString = Html_Form::hidden($this->entryName, $value); + return $returnString; + } + +} diff --git a/Library/Form/Html.php b/Library/Form/Html.php new file mode 100644 index 0000000..e5c9989 --- /dev/null +++ b/Library/Form/Html.php @@ -0,0 +1,40 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//create the HTML of an input text entry +class Form_Html extends Form_Entry +{ + + public function __construct($entryName = null) + { + $this->entryName = $entryName; + } + + public function render($value = null) + { + $returnString = "
        \n\t$value\n
        \n"; + return $returnString; + } + +} diff --git a/Library/Form/InputText.php b/Library/Form/InputText.php new file mode 100755 index 0000000..344264e --- /dev/null +++ b/Library/Form/InputText.php @@ -0,0 +1,49 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//create the HTML of an input text entry +class Form_InputText extends Form_Entry +{ + + public function __construct($entryName = null) + { + $this->entryName = $entryName; + } + + public function render($value = null) + { + $wrap = $this->getWrapElements($value); + $returnString = $wrap[0]; + $returnString .= "
        \n\t"; + $returnString .= $wrap[1]; + $returnString .= $this->getLabelTag(); + $returnString .= $wrap[2]; + $returnString .= Html_Form::input($this->entryName, $value, $this->className, $this->idName); + $returnString .= $wrap[3]; + $returnString .="
        \n"; + $returnString .= $wrap[4]; + return $returnString; + } + +} diff --git a/Library/Form/Password.php b/Library/Form/Password.php new file mode 100644 index 0000000..9bfc68b --- /dev/null +++ b/Library/Form/Password.php @@ -0,0 +1,49 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//create the HTML of an input text entry +class Form_Password extends Form_Entry +{ + + public function __construct($entryName = null) + { + $this->entryName = $entryName; + } + + public function render($value = null) + { + $wrap = $this->getWrapElements($value); + $returnString = $wrap[0]; + $returnString .= "
        \n\t"; + $returnString .= $wrap[1]; + $returnString .= $this->getLabelTag(); + $returnString .= $wrap[2]; + $returnString .= Html_Form::password($this->entryName, null, $this->className); + $returnString .= $wrap[3]; + $returnString .="
        \n"; + $returnString .= $wrap[4]; + return $returnString; + } + +} diff --git a/Library/Form/Radio.php b/Library/Form/Radio.php new file mode 100755 index 0000000..4f596ed --- /dev/null +++ b/Library/Form/Radio.php @@ -0,0 +1,49 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//create the HTML of a radio entry +class Form_Radio extends Form_Entry +{ + + public function __construct($entryName = null) + { + $this->entryName = $entryName; + } + + public function render($value = null) + { + $wrap = $this->getWrapElements($value); + $returnString = $wrap[0]; + $returnString .= "
        \n\t"; + $returnString .= $wrap[1]; + $returnString .= $this->getLabelTag(); + $returnString .= $wrap[2]; + $returnString .= Html_Form::radio($this->entryName,$value,$this->options,$this->className, 'after', $this->idName); + $returnString .= $wrap[3]; + $returnString .="
        \n"; + $returnString .= $wrap[4]; + return $returnString; + } + +} diff --git a/Library/Form/Select.php b/Library/Form/Select.php new file mode 100755 index 0000000..53d7632 --- /dev/null +++ b/Library/Form/Select.php @@ -0,0 +1,49 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//create the HTML of an select entry +class Form_Select extends Form_Entry +{ + + public function __construct($entryName = null) + { + $this->entryName = $entryName; + } + + public function render($value = null) + { + $wrap = $this->getWrapElements($value); + $returnString = $wrap[0]; + $returnString .= "
        \n\t"; + $returnString .= $wrap[1]; + $returnString .= $this->getLabelTag(); + $returnString .= $wrap[2]; + $returnString .= Html_Form::select($this->entryName,$value,$this->options,$this->className, $this->idName, $this->reverse); + $returnString .= $wrap[3]; + $returnString .="
        \n"; + $returnString .= $wrap[4]; + return $returnString; + } + +} diff --git a/Library/Form/Textarea.php b/Library/Form/Textarea.php new file mode 100755 index 0000000..aaaf19e --- /dev/null +++ b/Library/Form/Textarea.php @@ -0,0 +1,49 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//create the HTML of a textarea entry +class Form_Textarea extends Form_Entry +{ + + public function __construct($entryName = null) + { + $this->entryName = $entryName; + } + + public function render($value = null) + { + $wrap = $this->getWrapElements($value); + $returnString = $wrap[0]; + $returnString .= "
        \n\t"; + $returnString .= $wrap[1]; + $returnString .= $this->getLabelTag(); + $returnString .= $wrap[2]; + $returnString .= Html_Form::textarea($this->entryName, $value, $this->className, $this->idName); + $returnString .= $wrap[3]; + $returnString .="
        \n"; + $returnString .= $wrap[4]; + return $returnString; + } + +} diff --git a/Library/Form/index.html b/Library/Form/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Library/Form/index.html @@ -0,0 +1 @@ + diff --git a/Library/Functions.php b/Library/Functions.php new file mode 100755 index 0000000..e0e77bf --- /dev/null +++ b/Library/Functions.php @@ -0,0 +1,304 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + + +/* + SANITIZE FUNCTIONS +*/ + +function none($string) { + return $string; +} + +function forceInt($string) { + return (int)$string; +} + +function forceNat($string) +{ + $string = (int)$string; + if ($string <= 0) return 1; + return $string; +} + +function sanitizeDb($stringa) { + + if (DATABASE_TYPE === 'Mysql') + { + $stringa = mysql_real_escape_string($stringa); + return $stringa; + } + + if (DATABASE_TYPE === 'Mysqli') + { + $mysqli = Db_Mysqli::getInstance(); + $db = $mysqli->getDb(); + $stringa = $db->real_escape_string($stringa); + return $stringa; + } + + return $stringa; +} + +function sanitizeAll($stringa) { + + $stringa=sanitizeHtml($stringa); + $stringa=sanitizeDb($stringa); + return $stringa; + +} + +function sanitizeHtml($stringa) { + + $charset = Params::$htmlentititiesCharset; + $stringa=htmlentities($stringa,ENT_QUOTES,$charset); + return $stringa; + +} + +//check if only alphabetic + optional characters are present in the string $string. Set $string to $altString if other characters are found +//$optChar: allowed characters divided by '|' Ex: '+|-|;' +function sanitizeCustom($string,$optChar,$altString = 'EasyGiant') +{ + + $optChar = html_entity_decode($optChar,ENT_QUOTES); + $optCharArray = explode('|',$optChar); + $temp = $string; + foreach($optCharArray as $char) + { + $temp = str_replace($char,null,$temp); + } + if (ctype_alnum($temp)) + { + return $string; + } + else + { + return $altString; + } +} + + + + +/* +SANITIZE DEEP +*/ + +function stripslashesDeep($value) { + return $value; +} + + +function sanitizeHtmlDeep($value) { + return array_map('sanitizeHtml', $value); +} + + +function sanitizeDbDeep($value) { + return array_map('sanitizeDb', $value); +} + + +function sanitizeCustomDeep($stringArray,$optChar,$altString = 'EasyGiant') +{ + $result = array(); + foreach ($stringArray as $key => $value) + { + $result[$key] = sanitizeCustom($value,$optChar,$altString); + } + return $result; +} + + +function sanitizeAllDeep($value) { + return array_map('sanitizeAll', $value); +} + + +function forceIntDeep($value) { + return array_map('forceInt', $value); +} + +function forceNatDeep($value) { + return array_map('forceNat', $value); +} + +function noneDeep($value) { + return array_map('none', $value); +} + + +function md5Deep($value) +{ + return array_map('md5', $value); +} + +function sha1Deep($value) +{ + return array_map('sha1', $value); +} + + + + + + + +function sanitizeAlnum($string) +{ + return ctype_alnum($string) ? sanitizeAll($string) : ''; +} + + +function sanitizeIp($ip) +{ + return preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/',$ip) ? sanitizeAll($ip) : ''; +} + + +/* + CHECK FUNCTIONS +*/ + +//check if a string has the mail format (abc.efg@hij.klm.on) +//modification of the rule found at http://www.sastgroup.com/tutorials/8-espressioni-regolari-per-validare-un-po-di-tutto +//original rule: /^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/ +function checkMail($string) +{ + if (preg_match('/^[a-zA-Z0-9_\-]+([.][a-zA-Z0-9_\-]+){0,2}[@][a-zA-Z0-9_\-]+([.][a-zA-Z0-9_\-]+){0,2}[.][a-zA-Z]{2,4}$/',$string)) + { + return true; + } + else + { + return false; + } +} + + + +function wrap($string,$tag_class) {#wrap the string with the tag and its class + #$tag_class has to be an associative array (tag1=>class1,$tag2=>class2,.. )!! + $str_front=null; + $str_rear=null; + if (is_array($tag_class)) { + foreach ($tag_class as $tag => $class) { + $tag = str_replace('+','',$tag); + if (!is_array($class)) + { + $str_class=isset($class) ? " class=\"".$class."\"" : null; + } + else + { + $str_class = null; + foreach ($class as $attr => $val) + { + $str_class .= " ".$attr."='".$val."' "; + } + } + $str_front.="<".$tag.$str_class.">\n"; + $str_rear.="\n"; + } + } + return $str_front.$string.$str_rear; +} + +//generate a random password +//$start: start number of mt_rand +//$end: end number of mt_rand +function randString($length,$start = 33, $end = 126) +{ + $random = ''; + for ($i = 0; $i < $length; $i++) + { + $random .= chr(mt_rand($start, $end)); + } + return $random; +} + +//generate a random string +//$charNumb:number of characters of the final string +//$allowedChars: allowed characters +function generateString($charNumb = 8,$allowedChars = '0123456789abcdefghijklmnopqrstuvwxyz') +{ + $str = null; + for ($i = 0; $i < $charNumb; $i++) + { + $str .= substr($allowedChars, mt_rand(0, strlen($allowedChars)-1), 1); + } + return $str; +} + + +function getIp() +{ + $ip = ""; + + if (isset($_SERVER)) + { + if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) + { + $ip = sanitizeIp($_SERVER["HTTP_X_FORWARDED_FOR"]); + } else if (!empty($_SERVER["HTTP_CLIENT_IP"])) { + $ip = sanitizeIp($_SERVER["HTTP_CLIENT_IP"]); + } else { + $ip = sanitizeIp($_SERVER["REMOTE_ADDR"]); + } + } else { + if ( getenv( 'HTTP_X_FORWARDED_FOR' ) !== false ) { + $ip = sanitizeIp(getenv( 'HTTP_X_FORWARDED_FOR' )); + } else if ( getenv( 'HTTP_CLIENT_IP' ) !== false ) { + $ip = sanitizeIp(getenv( 'HTTP_CLIENT_IP' )); + } else { + $ip = sanitizeIp(getenv( 'REMOTE_ADDR' )); + } + } + return $ip; +} + + + +function getUserAgent() { + if (isset($_SERVER['HTTP_USER_AGENT'])) + { + return md5($_SERVER['HTTP_USER_AGENT']); + } + else + { + return md5('firefox'); + } +} + + +function xml_encode($string) +{ + $trans = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES); + foreach ($trans as $k=>$v) + { + $trans[$k]= "&#".ord($k).";"; + } + + return strtr($string, $trans); +} diff --git a/Library/HeaderObj.php b/Library/HeaderObj.php new file mode 100644 index 0000000..994eb16 --- /dev/null +++ b/Library/HeaderObj.php @@ -0,0 +1,45 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//manage the header +class HeaderObj { + + private $domainName; //the base path of the website (domainname) + + public function __construct($domainName) + { + $this->domainName = $domainName; + } + + //redirect to $path after the time $time + //string that appears until the page is redirected + public function redirect($path,$time = 0,$string = null) + { + $completePath = Url::getRoot().$path; + header('Refresh: '.$time.';url='.$completePath); + if (isset($string)) echo $string; + exit; + } + +} diff --git a/Library/Helper/Array.php b/Library/Helper/Array.php new file mode 100755 index 0000000..329463f --- /dev/null +++ b/Library/Helper/Array.php @@ -0,0 +1,28 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//Helper class to manage arrays +class Helper_Array extends ArrayExt { + +} \ No newline at end of file diff --git a/Library/Helper/Html.php b/Library/Helper/Html.php new file mode 100755 index 0000000..81a9bdd --- /dev/null +++ b/Library/Helper/Html.php @@ -0,0 +1,31 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//base class of all the Helper classes that returns HTML +class Helper_Html { + + public $viewArgs = array(); //arguments of the view action (to mantain the status, ex: page,language,etc) + public $viewStatus = null; //additional string to the url to define the status of the view action (ex: page,language,etc) + +} \ No newline at end of file diff --git a/Library/Helper/List.php b/Library/Helper/List.php new file mode 100755 index 0000000..57aeeff --- /dev/null +++ b/Library/Helper/List.php @@ -0,0 +1,496 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to create the HTML of a list of records +class Helper_List extends Helper_Html { + + private $__rowArray = array(); //the current associative array representing the database record + + protected $_itemsList = array(); //2-dimensional associative array containing the list items + //keys: type,table:field,controller/action,value + protected $_head = array(); //2-dimensional array containing the head of the table + protected $_identifierName; + + protected $_recordNumber = null; //number of records from the table + + protected $_allowedItems = array('simpleLink','simpleText','delForm','editForm','associateForm','moveupForm','movedownForm','Form','ledit','link','text'); //type of items allowed + + //it can be: both, top, bottom, none + protected $_boundaries = 'none'; + + //array of filters + protected $_filters = array(); + + //set if the submit buttons have to be images or not (it can be yse or not) + public $submitImageType = 'yes'; + + //set the files of the images + public $submitImages = array(); + + //set the titles of the input:submit + public $submitTitles = array(); + + //properties of columns + public $colProperties = array(); + + //table attributes + public $tableAttributes = array('class'=>'listTable','cellspacing'=>'0'); + + //$position: array. First element: page number, second element: number of pages + public $position = array(); + + //instance of Lang_{language}_Generic + public $strings = null; + + //the url (controller/action) of the current page + public $url = null; + + public $pageArg = null; //the key of the viewArgs array representing the page number. $this->viewArgs[$this->pageArg] is set to 1 if $this->pageArg !== null + + public function __construct() { + + //get the generic language class + $this->strings = Factory_Strings::generic(Params::$language); + + $baseUrl = '/Public/Img/Icons/elementary_2_5/'; + + //set the files of the images + $this->submitImages = array( + 'up' => $baseUrl.'up.png', + 'down' => $baseUrl.'down.png', + 'edit' => $baseUrl.'edit.png', + 'del' => $baseUrl.'delete.png', + 'link' => $baseUrl.'link.png', + ); + + $this->submitTitles = array( + 'edit' => $this->strings->gtext('edit'), + 'del' => $this->strings->gtext('delete'), + 'up' => $this->strings->gtext('move up'), + 'down' => $this->strings->gtext('move down'), + 'link' => $this->strings->gtext('associate') + ); + + } + + public function build($identifierName = 'identifier', $url = null, $pageArg = null) + { + $this->_identifierName = $identifierName; + $this->url = $url; + $this->pageArg = $pageArg; + } + + public function setIdentifierName($identifierName) + { + $this->_identifierName = $identifierName; + } + + //add a list Item. $type: the type of the item, $field: the table.field to exctract (use colon to separate the table and the field),$action: controller/action,$value=if type == link->the value of the link + public function addItem($type, $action = '', $field = '', $name = '', $value = '', $title = '') { + if (!in_array($type,$this->_allowedItems)) { + throw new Exception('"'.$type. '" argument not allowed in '.__METHOD__.' method'); + } + $temp=array(); + $temp['type'] = $type; + $temp['action'] = $action; + $temp['field'] = $field; + $temp['name'] = $name; + $temp['value'] = $value; + $temp['title'] = $title; + $this->_itemsList[] = $temp; + + //set the $this->_head array + $head = array(); + $head['type'] = $type; + + if ($type === 'simpleText') { + $head['action'] = $this->extractFieldName($action); + } else { + $head['action'] = ' '; + } + $this->_head[] = $head; + } + + + //set the head of the table + //$columnsName: name of the columns. It has to be a comma-separated list of strings + public function setHead($columnsName = '') + { + //get the array from the list + $columnsArray = explode(',',$columnsName); + for ($i = 0; $i < count($columnsArray); $i++) + { + if ($i < count($this->_itemsList)) $this->_head[$i]['action'] = $columnsArray[$i]; + } + } + + //set the filters + //$filters: array whose elements are the viewArgs to be used for the filters forms + public function setFilters($filters) + { + $this->_filters = $filters; + } + + //check that the ViewArgs array is complete + public function checkViewArgs() + { + foreach ($this->_filters as $field) + { + if (!array_key_exists($field,$this->viewArgs) and strcmp($field,null) !== 0) return false; + } + return true; + } + + //$method to extract the field name from the $action string (;table:field;). Used for the head + public function extractFieldName($string) { + $string = str_replace(';','',$string); + return $string; + } + + //replace the strings wrapped by ; with their correspondent value taken by the $recordArray associative array (a row of the select query) + public function replaceFields($string,$rowArray) { + $this->__rowArray = $rowArray; //used by the replaceField method + + $string = preg_replace_callback('/(\;)(.*?)(\;)/', 'Helper_List::replaceField' ,$string); + + return $string; + } + + //replace a single string wrapped by ; with its correspondent value taken by the $recordArray associative array (a row of the select query) + public function replaceField($match) + { + $string = $match[2]; + + if (strstr($string,':') or strstr($string,'.')) { + if (strstr($string,':')) + { + $char = ':'; + } + else + { + $char = '.'; + } + //check if a function has been indicated + if (strstr($string,'|')) + { + //get the function + $firstArray = explode('|',$string); + $func = $firstArray[0]; + //replace the fields + $temp = explode($char,$firstArray[1]); + $string = $this->__rowArray[$temp[0]][$temp[1]]; + + if (!function_exists($func)) { + throw new Exception('Error in '.__METHOD__.': function '.$func.' does not exists..'); + } + //apply the function + $string = call_user_func($func,$string); + } + else + { + $temp = explode($char,$string); + $string = $this->__rowArray[$temp[0]][$temp[1]]; + } + } + return $string; + } + + //call the method replaceFields upon the $items array using the associative array $rowArray + public function replaceAll($item,$rowArray) { + $item['action'] = $this->replaceFields($item['action'],$rowArray); + $item['field'] = $this->replaceFields($item['field'],$rowArray); + $item['name'] = $this->replaceFields($item['name'],$rowArray); + $item['value'] = $this->replaceFields($item['value'],$rowArray); + $item['title'] = $this->replaceFields($item['title'],$rowArray); + return $item; + } + + //wrap the column with the tag td + public function wrapColumn($string, $className = null) { + return wrap($string,array('td'=>$className)); + } + + //wrap the row with the tag tr + public function wrapRow($string,$className = null) { + return wrap($string,array('tr'=>$className)); + } + + public function wrapList($string) { + return wrap($string,array('table'=>$this->tableAttributes)); + } + + //method to create the HTML of the head of the table + public function createHead() { + $htmlHead = null; + + $count = 0; + foreach ($this->_head as $item) { + $temp = $item['action']; + + $prop = $item['type']; + if (isset($this->colProperties[$count])) + { + $prop = $this->colProperties[$count]; + } + + $htmlHead .= $this->wrapColumn($temp,$prop); + + $count++; + } + + return $htmlHead; + } + + //method to create the HTML of the head of the table + public function createFilters() { + $htmlFilters = null; + + if (count($this->_filters) > 0) + { + if ($this->checkViewArgs()) + { + $count = 0; + foreach ($this->_head as $item) { + + $prop = $item['type']; + if (isset($this->colProperties[$count])) + { + $prop = $this->colProperties[$count]; + } + + $html = ' '; + if (isset($this->_filters[$count])) + { + $html = $this->filterForm($this->_filters[$count]); + } + $htmlFilters .= $this->wrapColumn($html,$prop); + + $count++; + } + } + } + + return $htmlFilters; + } + + //create the HTML of a single row (values taken from the associative array $rowArray) + public function getRowList($rowArray) { + $htmlList = null; + + $count = 0; + foreach ($this->_itemsList as $item) { + $item = $this->replaceAll($item,$rowArray); + + $prop = $item['type']; + if (isset($this->colProperties[$count])) + { + $prop = $this->colProperties[$count]; + } + + if (($this->_boundaries === 'top' and $item['type'] === 'moveupForm') or ($this->_boundaries === 'bottom' and $item['type'] === 'movedownForm') or ($this->_boundaries === 'both' and ($item['type'] === 'moveupForm' or $item['type'] === 'movedownForm'))) + { + $htmlList .= $this->wrapColumn(' ',$prop); + } + else + { + $temp = call_user_func_array(array($this,$item['type']),array($item)); + $htmlList .= $this->wrapColumn($temp,$prop); + } + $count++; + } + return $htmlList; + } + + //$index: record number + public function ifInBoundaries($index) + { + $this->_boundaries = 'none'; + + if (!empty($this->position)) + { + if ($this->_recordNumber === 1 and strcmp($this->position[0],1) === 0) + { + $this->_boundaries = 'both'; + } + else if ($index === 0 and strcmp($this->position[0],1) === 0) + { + $this->_boundaries = 'top'; + } + else if ($index === ($this->_recordNumber-1) and strcmp($this->position[0],$this->position[1]) === 0) + { + $this->_boundaries = 'bottom'; + } + } + + } + + //create the HTML of the entire list. $queryResult: the array coming from the select query + public function render($queryResult) + { + //set the number of records + $this->_recordNumber = count($queryResult); + $htmlList = null; + //create the HTML of the head of the record list + $htmlList .= $this->wrapRow($this->createHead(),'listHead'); + //create the HTML of the filters + $htmlList .= $this->wrapRow($this->createFilters(),'listFilters'); + for ($i = 0; $i < count($queryResult); $i++) + { + $this->ifInBoundaries($i); + $temp = $this->getRowList($queryResult[$i]); + $htmlList .= $this->wrapRow($temp,'listRow'); + } + return $this->wrapList($htmlList); + } + + public function generalForm($itemArray, $submitName, $submitValue) + { + $string = "
        viewStatus."' method='POST'>\n"; + $name = (strcmp($itemArray['name'],'') !== 0) ? $itemArray['name'] : $submitName; + $value = (strcmp($itemArray['value'],'') !== 0) ? $itemArray['value'] : $submitValue; + + $oldValue = $value; + $value = $this->strings->gtext($value); + + if (strcmp($itemArray['title'],'') !== 0) + { + $title = "title='".$itemArray['title']."'"; + } + else + { + $title = isset($this->submitTitles[$oldValue]) ? "title='".$this->submitTitles[$oldValue]."'" : null; + } + + if (strcmp($this->submitImageType,'yes') === 0 and isset($this->submitImages[$oldValue])) + { + $imgSrc = $this->submitImages[$oldValue]; + + $string .= "\n"; + $string .= "\n"; + } + else + { + $string .= "\n"; + } + + $string .= "\n"; + $string .= "\n"; + return $string; + } + + public function Form($itemArray) + { + return $this->generalForm($itemArray, 'name_missing', 'value_missing'); + } + + public function moveupForm($itemArray) + { + return $this->generalForm($itemArray, 'moveupAction', 'up'); + } + + public function movedownForm($itemArray) + { + return $this->generalForm($itemArray, 'movedownAction', 'down'); + } + + public function editForm($itemArray) + { + return $this->generalForm($itemArray, 'generalAction', 'edit'); + } + + public function delForm($itemArray) + { + return $this->generalForm($itemArray, 'delAction', 'del'); + } + + public function associateForm($itemArray) + { + return $this->generalForm($itemArray, 'generalAction', 'link'); + } + + public function simpleText($itemArray) { + $text = strcmp($itemArray['action'],'') !== 0 ? $itemArray['action'] : ' '; + $string = "".$text."\n"; + return $string; + } + + public function text($itemArray) + { + return $this->simpleText($itemArray); + } + + public function simpleLink($itemArray) { + $string = "viewStatus."'>".$itemArray['name']."\n"; + return $string; + } + + public function link($itemArray) + { + return $this->simpleLink($itemArray); + } + + public function ledit($itemArray) + { + $text = isset($this->submitImages['edit']) ? "" : $itemArray['name']; + $title = isset($this->submitTitles['edit']) ? $this->submitTitles['edit'] : $itemArray['field']; + $string = "viewStatus."'>$text\n"; + return $string; + } + + //create the HTML of the filter + public function filterForm($viewArgsName) + { + $cleanName = str_replace('n!',null,$viewArgsName); + $cleanName = str_replace('-',null,$cleanName); + + if (isset($this->viewArgs[$this->pageArg])) + { + $this->viewArgs[$this->pageArg] = 1; + } + + $temp = $value = $this->viewArgs[$viewArgsName]; + //set the viewArg to the null query value + if (Params::$nullQueryValue) + { + $this->viewArgs[$viewArgsName] = Params::$nullQueryValue; + $viewStatus = Url::createUrl(array_values($this->viewArgs)); + if (strcmp($value,Params::$nullQueryValue) === 0) $value = ''; + } + $this->viewArgs[$viewArgsName] = $temp; + + $action = Url::getRoot($this->url).$viewStatus; + $imgSrc = Url::getRoot('Public/Img/Icons/elementary_2_5/find.png'); + $title = $this->strings->gtext('filter'); + $clearLinkTitle = $this->strings->gtext('clear the filter'); + + $html = "
        \n"; + $html .= ""; + $html .= ""; + $html .= "\n"; + $html .= "\n"; + + return $html; + } + +} \ No newline at end of file diff --git a/Library/Helper/Menu.php b/Library/Helper/Menu.php new file mode 100755 index 0000000..86ee24a --- /dev/null +++ b/Library/Helper/Menu.php @@ -0,0 +1,109 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to write the top menù of the view files +class Helper_Menu extends Helper_Html +{ + + public $panelController; //panel controller + public $controller; + + public $links = array(); + + //instance of Lang_{language}_Generic + public $strings = null; + + public function __construct() + { + $baseUrl = '/Public/Img/Icons/elementary_2_5/'; + + //get the generic language class + $this->strings = Factory_Strings::generic(Params::$language); + + $this->links = array( + + 'back' => array( + 'title' => $this->strings->gtext('back'), + 'class' => 'mainMenuItem', + 'text' => $this->strings->gtext('Back'), + 'url' => 'main', + 'icon' => $baseUrl."left.png", + ), + + 'add' => array( + 'title' => $this->strings->gtext('add a new record'), + 'class' => 'mainMenuItem', + 'text' => $this->strings->gtext('Add'), + 'url' => 'form/insert', + 'icon' => $baseUrl."add.png", + ), + + 'panel' => array( + 'title' => $this->strings->gtext('back to the Panel'), + 'class' => 'mainMenuItem', + 'text' => $this->strings->gtext('Panel'), + 'url' => 'main', + 'icon' => $baseUrl."panel.png", + ) + + ); + } + + public function build($controller = null, $panelController = null) + { + $this->controller = $controller; + $this->panelController = $panelController; + } + + //$voices: comma-separated list of links you want to print + public function render($linksList) + { + $linksArray = explode(',',$linksList); + $menu = null; + foreach ($linksArray as $linkName) + { + //check that the voice exists + if (array_key_exists($linkName,$this->links)) + { + //check that the text and the ure are defined + if (isset($this->links[$linkName]['text']) and isset($this->links[$linkName]['url'])) + { + $title = isset($this->links[$linkName]['title']) ? "title='".$this->links[$linkName]['title']."'" : null; + $class = isset($this->links[$linkName]['class']) ? "class='".$this->links[$linkName]['class']."'" : null; + $icon = isset($this->links[$linkName]['icon']) ? " " : null; + + //choose the controller (current or panel) + $controller = (strcmp($linkName,'panel') === 0) ? $this->panelController.'/' : $this->controller.'/'; + $viewStatus = (strcmp($linkName,'panel') === 0) ? null : $this->viewStatus; + + $href = Url::getRoot($controller.$this->links[$linkName]['url'].$viewStatus); + $text = $this->links[$linkName]['text']; + $menu .= "
        $icon $text
        \n"; + } + } + } + return $menu; + } + +} \ No newline at end of file diff --git a/Library/Helper/Pages.php b/Library/Helper/Pages.php new file mode 100755 index 0000000..d8ac856 --- /dev/null +++ b/Library/Helper/Pages.php @@ -0,0 +1,140 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//Helper class to create the HTML of the page list +class Helper_Pages extends Helper_Html +{ + + protected $_urlViewAction; //url of the current page + protected $_currentPage; //number of the page + protected $_numbOfPages; //number of pages + protected $_variableArg = ''; //value of the $viewArgs key that has to be modified + + public $previousString = null; //string of the link to the previous page + public $nextString = null; //string of the link to the next page + public $showNext = true; + public $showPrev = true; + + //instance of Lang_{language}_Generic + public $strings = null; + + public function __construct() + { + //get the generic language class + $this->strings = Factory_Strings::generic(Params::$language); + } + + public function build($urlViewAction = '' , $variableArg = 'page', $previousString = 'previous', $nextString = 'next') + { + $this->_variableArg = $variableArg; + $this->_urlViewAction =$urlViewAction; //url of the controller and (/) main action + $this->previousString = $this->strings->gtext($previousString); + $this->nextString = $this->strings->gtext($nextString); + } + + //return the number of pages + public function getNumbOfPages() + { + return $this->_numbOfPages; + } + + //get the limit of the select query clause + public function getLimit($currentPage,$recordNumber,$recordPerPage) + { + $this->_currentPage = $currentPage; + $this->_numbOfPages=(($recordNumber%$recordPerPage)===0) ? (int) ($recordNumber/$recordPerPage) : ((int) ($recordNumber/$recordPerPage))+1; + $start=(($currentPage-1)*$recordPerPage); + return "$start,$recordPerPage"; + } + + //return the page list string + public function render($pageNumber,$numberOfPages) + { + $pageList = null; + if ($this->showPrev) + { + $pageList .= $this->pageLink($this->_currentPage-1,$this->previousString); + } + $pageList .= $this->recursiveLink($pageNumber,$numberOfPages); + if ($this->showNext) + { + $pageList .= $this->pageLink($this->_currentPage+1,$this->nextString); + } + return $pageList; + } + + //recorsive function in order to write the page list + public function recursiveLink($pageNumber,$numberOfPages) + { + + if ($numberOfPages === 0) return null; + + if ($numberOfPages === 1) { + return $this->pageLink($pageNumber); + } else { + return $this->pageLink($pageNumber) . $this->recursiveLink($pageNumber+1,$numberOfPages-1); + } + } + + public function pageLink($pageNumber, $string = null) { + if ($pageNumber > 0 and $pageNumber <= $this->_numbOfPages) { + return $this->html($pageNumber,$string); + } else { + return null; + } + } + + //return the html link + public function html($pageNumber,$string = null) { + if (isset($string)) { + $strNumber = $string; + $strClass = "class='itemListPage'"; + } else { + if ($pageNumber === $this->_currentPage) + { + $strNumber = $pageNumber; + $strClass = "class='currentPage'"; + } + else + { + $strNumber = $pageNumber; + $strClass = "class='itemListPage'"; + } + } + $this->viewArgs[$this->_variableArg] = $pageNumber; + $viewStatus = Url::createUrl(array_values($this->viewArgs)); + $href= Url::getRoot(null) . $this->_urlViewAction .$viewStatus; + return $this->getATag($href,$strNumber,$strClass); + } + + //get the HTMl of the tag + //$href: href of the link + //$text: the text of the link + //$strClass: the class of the link + public function getATag($href,$text,$strClass) + { + return "$text"; + } + +} \ No newline at end of file diff --git a/Library/Helper/Popup.php b/Library/Helper/Popup.php new file mode 100755 index 0000000..43140fe --- /dev/null +++ b/Library/Helper/Popup.php @@ -0,0 +1,142 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to create the popup menu +class Helper_Popup extends Helper_Html { + + public $popupArray = array(); //array of popup objects (see popup.php) + public $url = null; //the url (controller/action) to link by means of the popup menù +// public $fieldArg = null; //the key of the viewArgs array to set to the field in the where clause +// public $valueArg = null; //the key of the viewArgs array to be set to the value in the where clause + public $pageArg = null; //the key of the viewArgs array representing the page number. $this->viewArgs[$this->pageArg] is set to 1 if $this->pageArg !== null + + //the type of the popup. If type !=exclusive, than each voice selected is added to the where clause. If type=exclusive, the selection of a popup voice causes the unselection of the other voices + public $type = null; + + public $allString = null; + + //list of popup names + public $popupItems = array(); + + //if it has to print the filter legend + public $printLegend = false; + + //popup legend + public $legend = array(); + + public function __construct() + { + //get the generic language class + $this->strings = Factory_Strings::generic(Params::$language); + + $this->allString = $this->strings->gtext('All'); + } + + public function build($url, $popupArray = null, $type = 'exclusive', $pageArg = null, $printLegend = false) { + $this->url = $url; + $this->popupArray = $popupArray; + $this->pageArg = $pageArg; + $this->type = $type; + $this->printLegend = $printLegend; + + foreach ($this->popupArray as $field => $popup) + { + $this->popupItems[] = $field; + } + } + + //check that the ViewArgs array is complete + public function checkViewArgs() + { + foreach ($this->popupArray as $field => $popup) + { + if (!array_key_exists($field,$this->viewArgs)) return false; + } + return true; + } + + //unselect the voices different from the current one + public function unselect($currentVoice) + { + foreach ($this->popupItems as $item) + { + if (strcmp($item,$currentVoice) !== 0) $this->viewArgs[$item] = Params::$nullQueryValue; + } + } + + //create the HTML of the popup + public function render() { + $returnString = null; + if ($this->checkViewArgs()) + { + if (isset($this->viewArgs[$this->pageArg])) + { + $this->viewArgs[$this->pageArg] = 1; + } + foreach ($this->popupArray as $field => $popup) + { + //default legend + $this->legend[$field] = Params::$nullQueryValue; + + if ($this->type === 'exclusive') $this->unselect($field); + //save the value of the current ViewArg + $tempArg = $this->viewArgs[$field]; + $this->legend[$field] = $tempArg; + + $returnString .= "\n"; + $this->viewArgs[$field] = $tempArg; + } + if ($this->printLegend) + { + $returnString .= "\n"; + } + if (count($this->popupArray)>0) { + $returnString .= "\n"; + } + } + return $returnString; + } + +} diff --git a/Library/Helper/index.html b/Library/Helper/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Library/Helper/index.html @@ -0,0 +1 @@ + diff --git a/Library/Hooks.php b/Library/Hooks.php new file mode 100644 index 0000000..b16b6d5 --- /dev/null +++ b/Library/Hooks.php @@ -0,0 +1,38 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to call the hooks +class Hooks +{ + + //include an hook file + public static function load($path) + { + if (file_exists($path)) + { + include_once($path); + } + } + +} \ No newline at end of file diff --git a/Library/Html/Form.php b/Library/Html/Form.php new file mode 100644 index 0000000..ec81cfb --- /dev/null +++ b/Library/Html/Form.php @@ -0,0 +1,211 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//create the HTML of the inputs of a form +class Html_Form { + + //return the HTML of a select + //$name: name of the select + //$value: the selected value of the select (set $value equal to null if you don't want to select an option) + //$options: options of the select. This param can be a comma-separated list of options or an associative array ('name'=>'value') + //$className: the class name of the select + //$idName: name of the id + static public function select($name, $value, $options, $className = null, $idName = null, $reverse = null, $attributes = null) + { + $strClass = isset($className) ? "class='".$className."'" : null; + $idStr = isset($idName) ? "id='".$idName."'" : null; + + $returnString = null; + $returnString .= "\n"; + return $returnString; + } + + //return the HTML of an + //$name: the name of the input + //$value: the value of the input + //$className: the class name of the input + //$idName: name of the id + static public function input($name, $value, $className = null, $idName = null, $attributes = null) + { + $strClass = isset($className) ? "class='".$className."'" : null; + $idStr = isset($idName) ? "id='".$idName."'" : null; + + $returnString ="\n"; + return $returnString; + } + + //return the HTML of an + //$name: the name of the input + //$className: the class name of the input + //$idName: name of the id + static public function fileUpload($name, $value, $className = null, $idName = null, $attributes = null) + { + $strClass = isset($className) ? "class='".$className."'" : null; + $idStr = isset($idName) ? "id='".$idName."'" : null; + + $returnString ="\n"; + return $returnString; + } + + //return the HTML of a checkBox + //$name: name of the checkBox (string) + //$value: the value of the checkBox (string or number) + //$option: option of the checkBox (string or number) + //$className: the class name of the checkBox (string) + //$idName: name of the id + static public function checkbox($name, $value, $option, $className = null, $idName = null, $attributes = null) + { + $strClass = isset($className) ? "class='".$className."'" : null; + $idStr = isset($idName) ? "id='".$idName."'" : null; + + $str = (strcmp($value,$option) === 0) ? "checked = 'checked'" : null; + return "\n"; + } + + //return the HTML of a hidden entry + //$name: name of the hidden entry (string) + //$value: the value of the hidden entry (string or number) + static public function hidden($name, $value, $className = null, $idName = null, $attributes = null) + { + $strClass = isset($className) ? "class='".$className."'" : null; + $idStr = isset($idName) ? "id='".$idName."'" : null; + + return "\n"; + } + + //return the HTML of a password entry + //$name: name of the password entry (string) + //$value: the value of the password entry (string or number) + //$idName: name of the id + static public function password($name, $value, $className = null, $idName = null, $attributes = null) + { + $strClass = isset($className) ? "class='".$className."'" : null; + $idStr = isset($idName) ? "id='".$idName."'" : null; + + return "\n"; + } + + //return the HTML of a textarea + //$name: name of the textarea (string) + //$value: the value of the textarea (string or number) + //$idName: name of the id + static public function textarea($name, $value, $className = null, $idName = null, $attributes = null) + { + $strClass = isset($className) ? "class='".$className."'" : null; + $idStr = isset($idName) ? "id='".$idName."'" : null; + + return "\n"; + } + + //return the HTML of a radio button + //$name: name of the radio button + //$value: the selected value of the radio button (set $value equal to null if you don't want to select an option) + //$options: options of the radio button. This param can be a comma-separated list of options or an associative array ('name'=>'value') + //$className: the class name of the radio button + //$position: position of the strings of the radio with respect to the "circles". It can be before or after + //$idName: name of the id + static public function radio($name, $value, $options, $className = null, $position = 'after', $idName = null, $attributes = null) + { + $strClass = isset($className) ? "class='".$className."'" : null; + $idStr = isset($idName) ? "id='".$idName."'" : null; + + $returnString = null; + + if (is_string($options)) { + $tempArray = explode(',',$options); + foreach ($tempArray as $item) + { + $optionsArray[$item] = $item; + } + } else { + $optionsArray = $options; + } + + foreach ($optionsArray as $optionName => $optionValue) { + + if ($position === 'before') + { + $before = $optionName; + $after = null; + } + else + { + $before = null; + $after = $optionName; + } + + $str= (strcmp($value,$optionValue) === 0) ? "checked='checked'" : null; + $returnString .= "$before$after\n"; + } + + return $returnString; + } + +} \ No newline at end of file diff --git a/Library/Html/index.html b/Library/Html/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Library/Html/index.html @@ -0,0 +1 @@ + diff --git a/Library/Image/Gd/Captcha.php b/Library/Image/Gd/Captcha.php new file mode 100644 index 0000000..1e8d706 --- /dev/null +++ b/Library/Image/Gd/Captcha.php @@ -0,0 +1,103 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to create a captcha +//you have to call session_start() before to initialize a captcha object +class Image_Gd_Captcha +{ + + private $params = array(); //parameters of the object + private $string = null; //the text string of the captcha + + public function __construct($params = null) + { + $here = realpath('.'); + + $defaultParams = array( + 'boxWidth' => 150, + 'boxHeight' => 100, + 'charNumber' => 6, + 'fontPath' => $here.'/External/Fonts/FreeFont/FreeMono.ttf', + 'undulation' => true, + 'align' => false, + 'charHeight' => 28, + 'sessionKey' => 'captchaString', + ); + + //set the $this->scaffold->params array + if (is_array($params)) + { + foreach ($params as $key => $value) + { + $defaultParams[$key] = $value; + } + } + $this->params = $defaultParams; + + $this->string = generateString($this->params['charNumber']); + } + + public function render() + { + //space among characters + $space = $this->params['boxWidth'] / ($this->params['charNumber']+1); + //create the image box + $img = imagecreatetruecolor($this->params['boxWidth'],$this->params['boxHeight']); + + $background = imagecolorallocate($img,255,255,255); + $border = imagecolorallocate($img,0,0,0); + $colors[] = imagecolorallocate($img,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125)); + $colors[] = imagecolorallocate($img,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125)); + $colors[] = imagecolorallocate($img,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125)); + + //create the background + imagefilledrectangle($img,1,1,$this->params['boxWidth']-2,$this->params['boxHeight']-2,$background); + imagerectangle($img,0,0,$this->params['boxWidth']-1,$this->params['boxHeight']-2,$border); + + //set the text + for ($i=0; $i< $this->params['charNumber']; $i++) + { + $color = $colors[$i % count($colors)]; + $char = substr($this->string,$i,1); + $fontPath = $this->params['fontPath']; + $angle = $this->params['undulation'] === false ? 0 : -20+rand(0,40); + $yposFixed = (int)(($this->params['boxHeight'])/2); + $ypos = $this->params['align'] === true ? $yposFixed : $yposFixed + mt_rand(0,10); + $charHeight = $this->params['charHeight']; + imagettftext($img,$charHeight + rand(0,8),$angle,($i+0.3)*$space,$ypos,$color,$fontPath,$char); + } + + $noiseColor = imagecolorallocate($img, mt_rand(125,255), mt_rand(125,255), mt_rand(125,255)); + /* generate random dots in background */ + for( $i=0; $i<($this->params['boxWidth'] * $this->params['boxHeight'])/7; $i++ ) { + imagefilledellipse($img, mt_rand(0,$this->params['boxWidth']), mt_rand(0,$this->params['boxHeight']), 1, 1, $noiseColor); + } + + $_SESSION[$this->params['sessionKey']] = $this->string; + header('Content-Type: image/png'); + imagepng($img); + imagedestroy($img); + } + +} \ No newline at end of file diff --git a/Library/Image/Gd/Thumbnail.php b/Library/Image/Gd/Thumbnail.php new file mode 100644 index 0000000..22e501e --- /dev/null +++ b/Library/Image/Gd/Thumbnail.php @@ -0,0 +1,220 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to create a thumbnail +class Image_Gd_Thumbnail +{ + const DS = DIRECTORY_SEPARATOR; + + private $params = array(); //parameters of the object + private $basePath = null; //the path of the folder inside which the images are saved + + public function __construct($basePath,$params = null) + { + $finalChar = $basePath[strlen($basePath) - 1]; + if (strcmp($finalChar,self::DS) !== 0) $basePath .= self::DS; + + $this->basePath = $basePath; + + $defaultParams = array( + 'imgWidth' => null, + 'imgHeight' => null, + 'defaultImage' => null, + 'cropImage' => 'no', + 'horizAlign' => 'left', + 'vertAlign' => 'top', + 'resample' => 'yes', + 'function' => 'none', + 'outputFormat' => 'jpeg', + ); + + //set the $this->scaffold->params array + if (is_array($params)) + { + foreach ($params as $key => $value) + { + $defaultParams[$key] = $value; + } + } + $this->params = $defaultParams; + } + + //create the thumbnail + //$imageName: the name of the file inside $this->basePath + //$outputFile: the name of the output file + public function render($imageFile, $outputFile = null) + { + $imagePath = $this->basePath . basename($imageFile); + + if (!file_exists($imagePath) and isset($this->params['defaultImage'])) $imagePath = $this->params['defaultImage']; + + $img = null; + $type = 'jpeg'; + $contentType = 'image/jpeg'; + + if (file_exists($imagePath)) + { + $ext = strtolower(end(explode('.', $imagePath))); + + if (strcmp($ext,'jpg') === 0 or strcmp($ext,'jpeg') === 0) { + $img = @imagecreatefromjpeg($imagePath); + $type = 'jpeg'; + $contentType = 'image/jpeg'; + } else if (strcmp($ext,'png') === 0) { + $img = @imagecreatefrompng($imagePath); + $type = 'png'; + $contentType = 'image/png'; + } else if (strcmp($ext,'gif') === 0) { + $img = @imagecreatefromgif($imagePath); + $type = 'gif'; + $contentType = 'image/gif'; + } + } + + //If an image was successfully loaded, test the image for size + if ($img) + { + //image size + $width = imagesx($img); + $height = imagesy($img); + + if (!isset($this->params['imgWidth'])) $this->params['imgWidth'] = $width; + if (!isset($this->params['imgHeight'])) $this->params['imgHeight'] = $height; + + if ($this->params['cropImage'] === 'no') + { + $scale = min($this->params['imgWidth']/$width, $this->params['imgHeight']/$height); + } + else if ($this->params['cropImage'] === 'yes') + { + $scale = max($this->params['imgWidth']/$width, $this->params['imgHeight']/$height); + } + + if ($scale < 1) { + + $xSrc = 0; + $ySrc = 0; + + if ($this->params['cropImage'] === 'no') + { + $newWidth = floor($scale*$width); + $newHeight = floor($scale*$height); + } + else if ($this->params['cropImage'] === 'yes') + { + + $newWidth = $this->params['imgWidth']; + $newHeight = $this->params['imgHeight']; + $oldWidth = $width; + $oldHeight = $height; + $width = floor($newWidth/$scale); + $height = floor($newHeight/$scale); + + switch ($this->params['horizAlign']) + { + case 'left': + $xSrc = 0; + break; + case 'right': + $xSrc = floor(($oldWidth-$width)); + break; + case 'center': + $xSrc = floor(($oldWidth-$width)/2); + break; + default: + $xSrc = $this->params['horizAlign']; + } + + switch ($this->params['vertAlign']) + { + case 'top': + $ySrc = 0; + break; + case 'bottom': + $ySrc = floor(($oldHeight-$height)); + break; + case 'center': + $ySrc = floor(($oldHeight-$height)/2); + break; + default: + $ySrc = $this->params['vertAlign']; + } + + } + + //temp image + $tmpImg = imagecreatetruecolor($newWidth, $newHeight); + + if ($this->params['resample'] === 'yes') + { + //copy and resample + imagecopyresampled($tmpImg, $img, 0, 0, $xSrc, $ySrc,$newWidth, $newHeight, $width, $height); + } + else + { + //copy and resize + imagecopyresized($tmpImg, $img, 0, 0, $xSrc, $ySrc,$newWidth, $newHeight, $width, $height); + } + imagedestroy($img); + $img = $tmpImg; + + if (!function_exists($this->params['function'])) { + throw new Exception('Error in '.__METHOD__.': function '.$this->params['function']. ' does not exist'); + } + + $img = call_user_func($this->params['function'],$img); + } + + } + + if (!$img) + { + $imgWidth = isset($this->params['imgWidth']) ? $this->params['imgWidth'] : 100; + $imgHeight = isset($this->params['imgHeight']) ? $this->params['imgHeight'] : 100; + + $img = imagecreate($imgWidth, $imgHeight); + imagecolorallocate($img,200,200,200); + } + + //print the image + if (!isset($outputFile)) + { + header("Content-type: $contentType"); + } + + if (strcmp($type,'png') === 0) + { + imagepng($img,$outputFile,9); + } + else if (strcmp($type,'gif') === 0) + { + imagegif($img,$outputFile); + } + else + { + imagejpeg($img,$outputFile,90); + } + } + +} \ No newline at end of file diff --git a/Library/Image/Gd/index.html b/Library/Image/Gd/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Library/Image/Gd/index.html @@ -0,0 +1 @@ + diff --git a/Library/Image/index.html b/Library/Image/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Library/Image/index.html @@ -0,0 +1 @@ + diff --git a/Library/Lang/En/DbCondStrings.php b/Library/Lang/En/DbCondStrings.php new file mode 100644 index 0000000..bfc5867 --- /dev/null +++ b/Library/Lang/En/DbCondStrings.php @@ -0,0 +1,34 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//error strings in the case database conditions are not satisfied +class Lang_En_DbCondStrings { + + //get the error string in the case that the value of the field $field is already present in the table $table + public function getNotUniqueString($field) + { + return "
        The value of ". $field ." is already present. Please choose a different value.
        \n"; + } + +} diff --git a/Library/Lang/En/Generic.php b/Library/Lang/En/Generic.php new file mode 100644 index 0000000..3268270 --- /dev/null +++ b/Library/Lang/En/Generic.php @@ -0,0 +1,64 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//generic strings +class Lang_En_Generic +{ + + //English to English + public $translations = array( + 'edit' => 'edit', + 'delete' => 'delete', + 'move up' => 'move up', + 'move down' => 'move down', + 'associate' => 'associate', + 'up' => 'su', + 'down' => 'down', + 'link' => 'link', + 'del' => 'del', + 'back' => 'back', + 'Back' => 'Back', + 'add a new record' => 'add a new record', + 'Add' => 'Add', + 'back to the Panel' => 'back to the Panel', + 'Panel' => 'Panel', + 'previous' => 'previous', + 'next' => 'next', + 'All' => 'All', + 'pages' => 'pages', + 'filter' => 'filter', + 'clear the filter' => 'clear the filter', + ); + + public function gtext($string) + { + if (array_key_exists($string,$this->translations)) + { + return $this->translations[$string]; + } + + return $string; + } + +} diff --git a/Library/Lang/En/ModelStrings.php b/Library/Lang/En/ModelStrings.php new file mode 100644 index 0000000..cf26b8f --- /dev/null +++ b/Library/Lang/En/ModelStrings.php @@ -0,0 +1,36 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Lang_En_ModelStrings extends Lang_ResultStrings { + + public $string = array( + "error" => "
        Query error: Contact the administrator!
        \n", + "executed" => "
        Operation executed!
        \n", + "associate" => "
        Referential integrity problem: record associated to some other record in a child table. Break the association before.
        \n", + "no-id" => "
        Alert: record identifier not defined!
        \n", + "not-linked" => "
        The Item is not associated : you can't dissociate it
        ", + "linked" => "
        The Item is already associated: you can't associate it another time
        " + ); + +} diff --git a/Library/Lang/En/UploadStrings.php b/Library/Lang/En/UploadStrings.php new file mode 100644 index 0000000..61bc0c5 --- /dev/null +++ b/Library/Lang/En/UploadStrings.php @@ -0,0 +1,45 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Lang_En_UploadStrings extends Lang_ResultStrings { + + public $string = array( + "error" => "
        Error: verify the permissions of the file/directory
        \n", + "executed" => "
        Operation executed!
        \n", + "not-child" => "
        The selected directory is not a child of the base directory
        \n", + "not-dir" => "
        The selected directory is not a directory
        \n", + "not-empty" => "
        The selected directory is not empty
        \n", + "no-folder-specified" => "
        No folder has been specified
        \n", + "no-file-specified" => "
        No file has been specified
        \n", + "not-writable" => "
        The folder is not writable
        \n", + "not-writable-file" => "
        The file is not writable
        \n", + "dir-exists" => "
        The directory is already present in the current folder
        \n", + "no-upload-file" => "
        There is no file to upload
        \n", + "size-over" => "
        The size of the file is too big
        \n", + "not-allowed-ext" => "
        The extension of the file you want to upload is not allowed
        \n", + "not-allowed-mime-type" => "
        The MIME type of the file you want to upload is not allowed
        \n", + "file-exists" => "
        The file is already present in the current folder
        \n" + ); + +} diff --git a/Library/Lang/En/ValCondStrings.php b/Library/Lang/En/ValCondStrings.php new file mode 100644 index 0000000..7f4e7ea --- /dev/null +++ b/Library/Lang/En/ValCondStrings.php @@ -0,0 +1,93 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Lang_En_ValCondStrings { + + //if the element is not defined + public function getNotDefinedResultString($element) + { + return "
        ". $element ." not defined!
        \n"; + } + + //if the elements are not equal + public function getNotEqualResultString($element) + { + return "
        Different values: $element
        \n"; + } + + //if the element is not alphabetic + public function getNotAlphabeticResultString($element) + { + return "
        ".$element." has to be alphabetic
        \n"; + } + + //if the element is not alphanumeric + public function getNotAlphanumericResultString($element) + { + return "
        ".$element." has to be alphanumeric
        \n"; + } + + //if the element is not a decimal digit + public function getNotDecimalDigitResultString($element) + { + return "
        ".$element." has to be a decimal digit
        \n"; + } + + //if the element has the mail format + public function getNotMailFormatResultString($element) + { + return "
        ".$element." doesn't seem an e-mail address
        \n"; + } + + //if the element is numeric + public function getNotNumericResultString($element) + { + return "
        ".$element." has to be a numeric
        \n"; + } + + //if the element (string) length exceeds the value of characters (defined by $maxLength) + public function getLengthExceedsResultString($element,$maxLength) + { + return "
        ".$element." exceeds the value of $maxLength characters
        \n"; + } + + //if the element is one of the strings indicated by $stringList (a comma-separated list of strings) + public function getIsForbiddenStringResultString($element,$stringList) + { + return "
        ".$element." can't be one of the following strings: $stringList
        \n"; + } + + //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings) + public function getIsNotStringResultString($element,$stringList) + { + return "
        ".$element." has to be one of the following strings: $stringList
        \n"; + } + + //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings) + public function getDoesntMatchResultString($element,$regExp) + { + return "
        ".$element." has to match the following regular expression: $regExp
        \n"; + } + +} diff --git a/Library/Lang/En/index.html b/Library/Lang/En/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Library/Lang/En/index.html @@ -0,0 +1 @@ + diff --git a/Library/Lang/Eng/DbCondStrings.php b/Library/Lang/Eng/DbCondStrings.php new file mode 100644 index 0000000..e4196b6 --- /dev/null +++ b/Library/Lang/Eng/DbCondStrings.php @@ -0,0 +1,34 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//error strings in the case database conditions are not satisfied +class Lang_Eng_DbCondStrings { + + //get the error string in the case that the value of the field $field is already present in the table $table + public function getNotUniqueString($field) + { + return "
        The value of ". $field ." is already present. Please choose a different value.
        \n"; + } + +} diff --git a/Library/Lang/Eng/Generic.php b/Library/Lang/Eng/Generic.php new file mode 100644 index 0000000..bb0ab99 --- /dev/null +++ b/Library/Lang/Eng/Generic.php @@ -0,0 +1,48 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//generic strings +class Lang_Eng_Generic +{ + + //English to English + public $translations = array( + 'edit' => 'edit', + 'delete' => 'delete', + 'move up' => 'move up', + 'move down' => 'move down', + 'associate' => 'associate', + ); + + public function gtext($string) + { + if (array_key_exists($string,$this->translations)) + { + return $this->translations[$string]; + } + + return $string; + } + +} diff --git a/Library/Lang/Eng/ModelStrings.php b/Library/Lang/Eng/ModelStrings.php new file mode 100644 index 0000000..fa741a2 --- /dev/null +++ b/Library/Lang/Eng/ModelStrings.php @@ -0,0 +1,36 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Lang_Eng_ModelStrings extends Lang_ResultStrings { + + public $string = array( + "error" => "
        Query error: Contact the administrator!
        \n", + "executed" => "
        Operation executed!
        \n", + "associate" => "
        Referential integrity problem: record associated to some other record in a child table. Break the association before.
        \n", + "no-id" => "
        Alert: record identifier not defined!
        \n", + "not-linked" => "
        The Item is not associated : you can't dissociate it
        ", + "linked" => "
        The Item is already associated: you can't associate it another time
        " + ); + +} diff --git a/Library/Lang/Eng/UploadStrings.php b/Library/Lang/Eng/UploadStrings.php new file mode 100644 index 0000000..2ae4c9b --- /dev/null +++ b/Library/Lang/Eng/UploadStrings.php @@ -0,0 +1,45 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Lang_Eng_UploadStrings extends Lang_ResultStrings { + + public $string = array( + "error" => "
        Error: verify the permissions of the file/directory
        \n", + "executed" => "
        Operation executed!
        \n", + "not-child" => "
        The selected directory is not a child of the base directory
        \n", + "not-dir" => "
        The selected directory is not a directory
        \n", + "not-empty" => "
        The selected directory is not empty
        \n", + "no-folder-specified" => "
        No folder has been specified
        \n", + "no-file-specified" => "
        No file has been specified
        \n", + "not-writable" => "
        The folder is not writable
        \n", + "not-writable-file" => "
        The file is not writable
        \n", + "dir-exists" => "
        The directory is already present in the current folder
        \n", + "no-upload-file" => "
        There is no file to upload
        \n", + "size-over" => "
        The size of the file is too big
        \n", + "not-allowed-ext" => "
        The extension of the file you want to upload is not allowed
        \n", + "not-allowed-mime-type" => "
        The MIME type of the file you want to upload is not allowed
        \n", + "file-exists" => "
        The file is already present in the current folder
        \n" + ); + +} diff --git a/Library/Lang/Eng/ValCondStrings.php b/Library/Lang/Eng/ValCondStrings.php new file mode 100644 index 0000000..42e70d8 --- /dev/null +++ b/Library/Lang/Eng/ValCondStrings.php @@ -0,0 +1,93 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Lang_Eng_ValCondStrings { + + //if the element is not defined + public function getNotDefinedResultString($element) + { + return "
        ". $element ." not defined!
        \n"; + } + + //if the elements are not equal + public function getNotEqualResultString($element) + { + return "
        Different values: $element
        \n"; + } + + //if the element is not alphabetic + public function getNotAlphabeticResultString($element) + { + return "
        ".$element." has to be alphabetic
        \n"; + } + + //if the element is not alphanumeric + public function getNotAlphanumericResultString($element) + { + return "
        ".$element." has to be alphanumeric
        \n"; + } + + //if the element is not a decimal digit + public function getNotDecimalDigitResultString($element) + { + return "
        ".$element." has to be a decimal digit
        \n"; + } + + //if the element has the mail format + public function getNotMailFormatResultString($element) + { + return "
        ".$element." doesn't seem an e-mail address
        \n"; + } + + //if the element is numeric + public function getNotNumericResultString($element) + { + return "
        ".$element." has to be a numeric
        \n"; + } + + //if the element (string) length exceeds the value of characters (defined by $maxLength) + public function getLengthExceedsResultString($element,$maxLength) + { + return "
        ".$element." exceeds the value of $maxLength characters
        \n"; + } + + //if the element is one of the strings indicated by $stringList (a comma-separated list of strings) + public function getIsForbiddenStringResultString($element,$stringList) + { + return "
        ".$element." can't be one of the following strings: $stringList
        \n"; + } + + //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings) + public function getIsNotStringResultString($element,$stringList) + { + return "
        ".$element." has to be one of the following strings: $stringList
        \n"; + } + + //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings) + public function getDoesntMatchResultString($element,$regExp) + { + return "
        ".$element." has to match the following regular expression: $regExp
        \n"; + } + +} diff --git a/Library/Lang/Eng/index.html b/Library/Lang/Eng/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Library/Lang/Eng/index.html @@ -0,0 +1 @@ + diff --git a/Library/Lang/ResultStrings.php b/Library/Lang/ResultStrings.php new file mode 100644 index 0000000..2181b90 --- /dev/null +++ b/Library/Lang/ResultStrings.php @@ -0,0 +1,42 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Lang_ResultStrings { + + public $string = array(); + + //method to get the string $stringName + public function getString($stringName) + { + if (isset($this->string[$stringName])) + { + return $this->string[$stringName]; + } + else + { + return 'result string not defined!'; + } + } + +} diff --git a/Library/Lang/index.html b/Library/Lang/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Library/Lang/index.html @@ -0,0 +1 @@ + diff --git a/Library/ModAbstract.php b/Library/ModAbstract.php new file mode 100644 index 0000000..f576c10 --- /dev/null +++ b/Library/ModAbstract.php @@ -0,0 +1,42 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//aach module class has to inherits from this abstract class +abstract class ModAbstract +{ + + //reference to a simpleXML object + protected $simpleXmlObj = null; + + //type hinting: simplexmlelement + public function __construct(SimpleXMLElement $simpleXmlObj) + { + $this->simpleXmlObj = $simpleXmlObj; + } + + //define the abstract method to render (create the HTML) of the single module + //$xmlObject: simpleXML object + abstract public function render(); + +} diff --git a/Library/Model/#Base.php# b/Library/Model/#Base.php# new file mode 100755 index 0000000..4162a56 --- /dev/null +++ b/Library/Model/#Base.php# @@ -0,0 +1,1273 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +abstract class Model_Base +{ + + public $fields = ''; //the fields that have to be manipulated by the update and insert query + public $values = array(); //the values that corresponding to the $this->fields fields + public $form = null; //reference to a Form_Form object + public $formStruct = null; //the form structure + + public $submitName = null; //the current submitName (from the form) + public $identifierName = 'identifier'; + + public $notice = null; //a string explaining the result of the query applied (or not if an error occured): executed, error, etc + public $result = true; //the result of validate conditions, database conditions and query. It can be 'true' or 'false' + public $queryResult = false; //the result of the query + + //conditions that have to be satisfied before applying the query + //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions' + public $strongConditions = array(); + + //conditions that have to be satisfied before applying the query + //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions' + //do not return error if a value is equal to '' or null + public $softConditions = array(); + + //conditions that have to be satisfied before applying the query + //check that the new values inserted satisfy some conditions + //Ex: 'update'=>'checkUniqueCompl:titolo,autore;checkUnique:titolo','insert'=>'checkUnique:titolo' + public $databaseConditions = array(); + + public $popupArray = array(); //array of popup objects (see popup.php) + + public $supplInsertValues = array(); //associative array defining supplementary values to be inserted on each insert query. It has to have the following form: array(field1 => value1,field2 => value2, ...) + + public $supplUpdateValues = array(); //associative array defining supplementary values to be inserted on each update query. It has to have the following form: array(field1 => value1,field2 => value2, ...) + + public $select = null; //fields that have to be selected in select queries + public $where = array(); //associative array containing all the where clauses ($field => $value) + //group by, order by and limit clauses + public $groupBy = null; + public $orderBy = null; + public $limit = null; + + public $from = null; //from clause of the select queries + public $on = array(); //on array + public $using = array(); //using array + public $join = array(); //join array + + public $toList = false; //if the result have to be given in a list format + public $listArray = array(); //array containing the $key and the $value to be used to extract a list from a resultSet + + //logic operator between statements in the where clause of select queries + public $logicalOperators = array('AND'); + + public $files = null; //reference to the Files_Upload class + + protected $_tables='itemTable,boxTable,item_boxTable'; + protected $_idFields='id_item,id_box'; + protected $_tablesArray=array(); + protected $_idFieldsArray=array(); + protected $_where = array(); + + //the name of the field that has to be used to order the rows of the main table of the model + protected $_idOrder = null; + + protected $_onDelete = 'check'; //can be 'nocheck' or 'check'. check: referential integrity check. nocheck: no referential integrity check + protected $_reference = null; //array containing the child table that have a reference to this table and the foreign key of the child table-> array($childTable,$foreignKey) + + protected $_popupItemNames = array(); //the fields to be used as names in the popupArray elements. Associative array ($itemNameField1 => $itemNameValue1, ...) + + //the labels of the pop-up menus + protected $_popupLabels = array(); + + //functions that have to be applied upon the label fields of the popup menu + protected $_popupFunctions = array(); + + protected $_popupWhere = array(); //where clause for the pupup menu + + protected $_resultString; //reference to the class containing all the result strings of the db queries + protected $_dbCondString; //reference to the class containing all the result strings of the database conditions + + protected $_backupFields = ''; //field saved after the delFields method has been applied + protected $_backupValues = array(); //values saved after the delFields method has been applied + protected $_allowedDbMethods = array('update','insert','del','moveup','movedown'); //methods that can be called by the updateTable method + + protected $submitNames = array( + 'update' => 'updateAction', + 'insert' => 'insertAction', + 'del' =>'delAction', + 'moveup' =>'moveupAction', + 'movedown' =>'movedownAction' + ); + + protected $identifierValue = null; //the value of the identifier ($_POST[$this->identifier]) + protected $arrayExt; //arrayExt object (see library/arrayExt.php) + + protected $_arrayStrongCheck; //Array_Validate_Strong object + protected $_arraySoftCheck; //Array_Validate_Soft object + + public $db; //reference to the database layer class + protected $_lang = null; //language of notices + + + public function __construct() { + $this->_tablesArray = explode(',',$this->_tables); + $this->_idFieldsArray = explode(',',$this->_idFields); + $this->_where[$this->_idFieldsArray[0]] = $this->_tablesArray[0]; + $this->arrayExt = new ArrayExt(); + + //initialize the validate objects + $this->_arrayStrongCheck = new Array_Validate_Strong($this->_lang); + $this->_arraySoftCheck = new Array_Validate_Soft($this->_lang); + + $this->identifierName = $this->_idFieldsArray[0]; + + //set the language of notices + $this->_lang = Params::$language; + + //create the $_resultString object (result strings of the db queries) + $modelStringClass = 'Lang_'.$this->_lang.'_ModelStrings'; + if (!class_exists($modelStringClass)) + { + $modelStringClass = 'Lang_En_ModelStrings'; + } + $this->_resultString = new $modelStringClass(); + + //create the $_dbCondString object (result strings of the database conditions) + $dbCondStringClass = 'Lang_'.$this->_lang.'_DbCondStrings'; + if (!class_exists($dbCondStringClass)) + { + $dbCondStringClass = 'Lang_En_DbCondStrings'; + } + $this->_dbCondString = new $dbCondStringClass(); + + //instantiate the database class + $this->db = Factory_Db::getInstance(DATABASE_TYPE); + + //instantiate the Files_Upload class + $params = array( + 'filesPermission' => 0777, + 'language' => $this->_lang, + 'allowedExtensions' => 'png,jpg,jpeg,gif', + 'maxFileSize' => 20000000, + 'fileUploadKey' => 'userfile' + ); + + $this->files = new Files_Upload(ROOT."/media/",$params); + } + + //sanitize all the $values property + public function sanitize() + { + $keys = implode(',',array_keys($this->values)); + $this->values = $this->arrayExt->subset($this->values,$keys,'sanitizeDb'); + } + + //change a resulting string from a db query + public function setString($key,$value) + { + $this->_resultString->string[$key] = $value; + } + + //set the submitNames property (array) + //$methodName : the method name, $submitName: the submit name of the submit action of the form + public function setSubmitNames($methodName,$submitName) + { + if (!in_array($methodName,$this->_allowedDbMethods)) + { + throw new Exception('query type "'.$methodName. '" not allowed in '. __METHOD__); + } + $this->submitNames[$methodName] = $submitName; + } + + //get the last query executed + public function getQuery() + { + return $this->db->query; + } + + //get the where clause of the select query + public function getWhereQueryClause() + { + return $this->where; + } + + //set the where clause of the select query + //whereArray = array ($table_field => $value) + public function setWhereQueryClause($whereArray) + { + $this->where = $whereArray; + } + + //append the whereArray clause to $this_->whereClause + //whereArray = array ($table_field => $value) + public function appendWhereQueryClause($whereArray) + { + $this->where = array_merge($this->where,$whereArray); + } + + //drop the char $char from the beginning of the string $string + public function dropStartChar($string,$char) + { + while(strcmp($string[0],$char) === 0) + { + $string = substr($string,1); + } + return $string; + } + + //get the table name from $this->_where. If the table is not present then return $this->_tablesArray[0] + public function getTableName($field) + { + return isset($this->_where[$field]) ? $this->_where[$field] : $this->_tablesArray[0]; + } + + //method to create the where clause of the select query from the $this->where array + //$level: level of the ricorsion + //$whereClauseLevel: array containing the field=>value statements of the where clause. If $whereClause = null than $this->where is considered + public function createWhereClause($level = 0, $whereClauseLevel = null, $operator = null) + { + $whereClause = null; + $whereClauseArray = array(); + + $whereClause = isset($whereClauseLevel) ? $whereClauseLevel : $this->where; + + foreach ($whereClause as $field => $value) + { + if (is_array($value)) + { + if (strstr($field,"OR")) + { + $op = " OR "; + } + else if (strstr($field,"AND")) + { + $op = " AND "; + } + else + { + $op = null; + } + $newValue = $this->createWhereClause($level+1, $value, $op); + if (isset($newValue)) $whereClauseArray[] = $newValue; + } + else + { + $flag = 0; //equal where clause + if (isset($field)) + { + //drop the 'n:' and '-' chars from $field + $fieldClean = str_replace('n!',null,$field); + $fieldClean = $this->dropStartChar($fieldClean,'-'); + if (strcmp($value,Params::$nullQueryValue) !== 0 or (Params::$nullQueryValue === false)) + { + foreach (params::$whereClauseSymbolArray as $symbol) + { + if (strstr($value,$symbol)) + { + //check if write or not the table name + $tableName = strstr($field,'n!') ? null : $this->getTableName($field).'.'; + $whereClauseArray[] = $tableName.$fieldClean.' '.$value; + $flag = 1; //not equal where clause + break; + } + } + if ($flag === 0) + { + $value = '"'.$value.'"'; + //check if write or not the table name + $tableName = strstr($field,'n!') ? null : $this->getTableName($field).'.'; + $whereClauseArray[] = $tableName.$fieldClean.'='.$value; + } + } + } + } + } + //get the logic operator at the current level + if (isset($operator)) + { + $logicOper = $operator; + } + else + { + $logicOper = isset($this->logicalOperators[$level]) ? ' '.$this->logicalOperators[$level].' ' : ' AND '; + } + $whereClause = !empty($whereClauseArray) ? implode($logicOper,$whereClauseArray) : null; + $whereClause = (isset($whereClause) and $level>0) ? '('.$whereClause.')' : $whereClause; + return $whereClause; + } + + + //get the submitName having its key (the method name) + public function getSubmitName($key) + { + if (!array_key_exists($key,$this->submitNames)) + { + return 'generalAction'; +// throw new Exception('query type "'.$key. '" not allowed in '.__METHOD__); + } + return $this->submitNames[$key]; + + } + + + //return the values, taken from the $_POST array, to be inserted inside the forms + //$queryType: insert or update + //$func: sanitize function to apply upon each value + //$id: if $queryType='update' that the values are taken from the record (of the main table of this model) having the primary key equal to $id + //$defaultValues = associative array of the form: array($entry=>$defaultValue) + //$functionsIfFromDb = associative array of the form: array($entry=>$function_to_be_applied) + public function getFormValues($queryType = 'insert', $func = 'sanitizeHtml',$id = null,$defaultValues = array(),$functionsIfFromDb = array()) + { + @session_start(); + if (is_array($func)) + { + $funcPost = $func[0]; + $funcDb = $func[1]; + } + else + { + $funcPost = $func; + $funcDb = 'none'; + } + + $arrayType = array('update','insert'); + $values = array(); + $idName = $this->identifierName; + if (in_array($queryType,$arrayType)) + { + $ident = null; + if (isset($id)) + { + $ident = (int)$id; + } + else if (isset($_POST[$idName])) + { + $ident = (int)$_POST[$idName]; + } + if ($this->result) + { + if ($queryType === 'update') + { + if (isset($ident)) + { + $recordArray = $this->selectId($ident); + + $fieldsArray = explode(',',$this->fields); + + $values = $this->arrayExt->subset($recordArray,$this->fields,$funcDb); + +// foreach ($fieldsArray as $field) +// { +// $values[$field] = array_key_exists($field,$recordArray) ? $recordArray[$field] : ''; +// } + + $values[$idName] = $ident; + + //apply the functions upon entries + foreach ($functionsIfFromDb as $entry => $funcUponEntry) + { + if (array_key_exists($entry,$values)) + { + if (!function_exists($funcUponEntry)) { + throw new Exception('Error in '.__METHOD__.': function '.$funcUponEntry. ' does not exist'); + } + + $values[$entry] = call_user_func($funcUponEntry,$values[$entry]); + } + } + + //set values of $_SESSION array + foreach ($values as $k => $v) + { + if (isset($this->formStruct['entries'][$k]['type'])) + { + if ($this->formStruct['entries'][$k]['type'] === 'File') + { + $_SESSION['form_'.$k] = $v; + } + } + } + } + } + else if ($queryType === 'insert') + { + + $tempArray = is_array($defaultValues) ? $defaultValues : array(); + + $values = $this->arrayExt->subset($tempArray,$this->fields,$funcPost); + + } + } + else + { + $values = $this->arrayExt->subset($_POST,$this->fields,$funcPost); + + if ($queryType === 'update') + { + $values[$idName] = $ident; + + //take values from $_SESSION array + $tempFieldArray = explode(',',$this->fields); + + for ($i = 0; $i < count($tempFieldArray); $i++) + { + if (isset($this->formStruct['entries'][$tempFieldArray[$i]]['type'])) + { + if ($this->formStruct['entries'][$tempFieldArray[$i]]['type'] === 'File') + { + if (isset($_SESSION['form_'.$tempFieldArray[$i]])) + { + $values[$tempFieldArray[$i]] = $_SESSION['form_'.$tempFieldArray[$i]]; + } + } + } + } + } + } + } + return $values; + } + + + //method to set the properties $this->fields and $this->values + public function setFields($fields,$func = 'sanitizeAll') + { + $this->values = $this->arrayExt->subset($_POST,$fields,$func); + $this->fields = $this->extractFields($fields); + + //set the backup variables + $this->_backupFields = $this->fields; + $this->_backupValues = $this->values; + } + + + //clear the fields list + public function clearFields() + { + $this->_backupFields = $this->fields; + $this->_backupValues = $this->values; + $this->fields = ''; + $this->values = array(); + } + + //del the fields written in the $list argument. The $list argument has to be of the type: field1,field2,... + public function delFields($list) + { + $this->_backupFields = $this->fields; + $this->_backupValues = $this->values; + $this->values = $this->arrayExt->subsetComplementary($this->values,$list); +// $this->fields = implode(',',array_keys($this->values)); + } + + //restore the fields and values saved in $_backupFields and $_backupValues + public function restoreFields() + { + $this->fields = $this->_backupFields; + $this->values = $this->_backupValues; + } + + //method to clean the $fields string deleting the colons (and the word after the colon) + public function extractFields($fields) { + $fieldsArray = explode(',',$fields); + $resultString = array(); + foreach ($fieldsArray as $field) { + if (strstr($field,':')) { + $temp = explode(':',$field); + $resultString[] = $temp[0]; + } else { + $resultString[] = $field; + } + } + return implode(',',$resultString); + } + + //add the supplementary value on insert and update queries + //$queryType: insert or update + public function setSupplValues($queryType) + { + if ($queryType === 'insert') + { + $supplValues = $this->supplInsertValues; + } + else if ($queryType === 'update') + { + $supplValues = $this->supplUpdateValues; + } + + $baseFields = implode(',',array_keys($this->values)); + + $supplFields = implode(',',array_keys($supplValues)); + $supplFields = (strcmp($supplFields,'') === 0) ? $supplFields : ',' . $supplFields; + + $fields = $baseFields . $supplFields; + $values = array_merge(array_values($this->values),array_values($supplValues)); + + return array($fields,$values); + } + + + //method to call the update query (overriding of the base_db del method) + //update the record with the primary key equal to $id (default) + //if $whereClause is set then use $whereClause as where clause of the update query + public function update($id = null, $whereClause = null) + { + if (!is_array($this->supplUpdateValues)) + { + throw new Exception('error in ' . __METHOD__ . ': the supplUpdateValues property has to be an array.'); + } + $el = $this->setSupplValues('update'); + $this->queryResult = false; + + if (isset($whereClause)) + { + $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$whereClause); + $this->setNotice($result); + return $result; + } + else + { + if (isset($id)) + { + $where = $this->_idFieldsArray[0].'='.(int)($id); + $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$where); + $this->setNotice($result); + return $result; + } + else + { + $this->notice = $this->_resultString->getString('no-id'); + $this->result = false; + $this->identifierValue = null; + return false; + } + } + } + + //method to call the insert query (overriding of the base_db del method) + public function insert() { + + $this->queryResult = false; + if (!is_array($this->supplInsertValues)) { + throw new Exception('error in ' . __METHOD__ . ': the supplInsertValues property has to be an array.'); + } + + if (isset($this->_idOrder)) + { + $maxValue = $this->db->getMax($this->_tablesArray[0],$this->_idOrder); + $this->supplInsertValues[$this->_idOrder] = (int)$maxValue + 1; + } + + $el = $this->setSupplValues('insert'); + + $result = $this->db->insert($this->_tablesArray[0],$el[0],$el[1]); + $this->setNotice($result); + return $result; + } + + //method to call the delete query (overriding of the base_db del method) + public function del($id = null, $whereClause = null) { + + $this->queryResult = false; + + if (isset($whereClause)) + { + $result = $this->db->del($this->_tablesArray[0],$whereClause); + $this->setNotice($result); + return $result; + } + else + { + if (isset($id)) { + $where = $this->_idFieldsArray[0].'='.(int)$id; + $result = $this->db->del($this->_tablesArray[0],$where); + $this->setNotice($result); + return $result; + } else { + $this->notice = $this->_resultString->getString('no-id'); + $this->result = false; + $this->identifierValue = null; + return false; + } + } + } + + //move to the top the record having $this->_idOrder = $id + //where clause + public function moveup($id) + { + return $this->move($id,'up'); + } + + //move to the top the record having $this->_idOrder = $id + //where clause + public function movedown($id) + { + return $this->move($id,'down'); + } + + //move the record having $this->_tablesArray[0] = $id + //$par: 'up' or 'down' + //where clause + public function move($id,$par = 'up') + { + $this->queryResult = false; + if (isset($id)) + { + $increm = ($par === 'up') ? 1 : -1; + + $backupLimit = $this->limit; + $this->limit = null; + + $data = $this->getFields($this->_tablesArray[0].'.'.$this->_idFieldsArray[0].','.$this->_tablesArray[0].'.'.$this->_idOrder); + + for($i = 0; $i < count($data); $i++) + { + if (strcmp($data[$i][$this->_tablesArray[0]][$this->_idFieldsArray[0]],$id) === 0) + { + if (($par === 'up' and $i !== 0) or ($par === 'down' and $i !== (count($data)-1))) + { + $prevOrder = $data[$i-$increm][$this->_tablesArray[0]][$this->_idOrder]; + $prevId = $data[$i-$increm][$this->_tablesArray[0]][$this->_idFieldsArray[0]]; + $currentOrder = $data[$i][$this->_tablesArray[0]][$this->_idOrder]; + $currentId = $data[$i][$this->_tablesArray[0]][$this->_idFieldsArray[0]]; + + //exchange the id_order of the two record + $res1 = $this->db->update($this->_tablesArray[0],$this->_idOrder,array($prevOrder),$this->_idFieldsArray[0]."='$currentId'"); + $res2 = $this->db->update($this->_tablesArray[0],$this->_idOrder,array($currentOrder),$this->_idFieldsArray[0]."='$prevId'"); + $result = ($res1 and $res2); + $this->setNotice($result); + return $result; + } + } + } + + $this->limit = $backupLimit; + } + else + { + $this->notice = $this->_resultString->getString('no-id'); + $this->result = false; + $this->identifierValue = null; + return false; + } + return false; + } + + public function setNotice($result) { + if ($result) { + $this->notice = $this->_resultString->getString('executed'); + $this->result = true; + $this->queryResult = true; + } else { + $this->notice = $this->_resultString->getString('error'); + $this->result = false; + $this->queryResult = false; + } + } + + //method used to verify that the value of a field is not duplicated + //$fieldsList: list of fields to check. Ex: field1,field2,... + //$where: the where clause + public function checkUnique($fieldsList,$where = null) + { + $errorString = null; + $numb = 0; + $fieldsArray = explode(',',$fieldsList); + $queryFieldsArray = explode(',',$this->fields); + foreach ($fieldsArray as $field) + { + if (in_array($field,$queryFieldsArray)) + { + if ($this->db->recordExists($this->_tablesArray[0],$field,$this->values[$field],$where)) + { + $errorString .= $this->_dbCondString->getNotUniqueString($field); + $numb++; + } + } + } + $this->notice = $errorString; + return $numb === 0 ? true : false; + } + + //like checkUnique: check all the records of the table apart from the record that has to be modified + public function checkUniqueCompl($fieldsList,$id = null) + { + if (isset($id)) + { + $where = $this->_idFieldsArray[0].'!='.(int)($id); + return $this->checkUnique($fieldsList,$where); + } else { + $this->notice = $this->_resultString->getString('no-id'); + return false; + } + } + + //method to apply the database conditions listed in the $this->databaseConditions associative array + //$queryType: indicates what set of validate conditions has to be considered (it's the key of the associative array) + public function applyDatabaseConditions($queryType,$id = null) + { + if (array_key_exists($queryType,$this->databaseConditions)) + { + if (!is_array($this->databaseConditions[$queryType])) + { + throw new Exception('error in method '.__METHOD__.' : databaseConditions['.$queryType.'] has to be an associative array'); + } + + foreach ($this->databaseConditions[$queryType] as $key => $values) + { + + //personalized error string + $altErrorString = null; + + //delete all the '+' chars + $key = $this->dropStartChar($key,'+'); + + if (strcmp($values,'all') === 0 or strstr($values,'all|')) + { + if (strstr($values,'all|')) + { + $values = str_replace('all|',$this->fields.'|',$values); + } + else + { + $values = $this->fields; + } + } + + if (strstr($values,'|')) + { + $temp = explode('|',$values); + $altErrorString = "
        ".$temp[1]."
        \n"; + $values = $temp[0]; + } + + $allowedMethod = array('checkUnique','checkUniqueCompl'); + if (!in_array($key,$allowedMethod)) + { + throw new Exception('error in method '.__METHOD__.' : method "'.$key. '" not allowed in the property named databaseConditions'); + } + if (!call_user_func_array(array($this,$key),array($values,$id))) + { + if (isset($altErrorString)) $this->notice = $altErrorString; + $this->result = false; + $this->queryResult = false; + return false; + } + } + return true; + } else { + return true; + } + } + + + //method to apply the validate conditions listed in the $this->strongConditions associative array + //$queryType: indicates what set of validate conditions has to be considered (it's the key of the associative array) + //$strength: 'strong' or 'soft' + public function applyValidateConditions($queryType,$strength = 'strong') + { + if ($strength === 'strong') + { + $validateObj = $this->_arrayStrongCheck; + $conditions = $this->strongConditions; + $errString = 'strongConditions'; + } + else + { + $validateObj = $this->_arraySoftCheck; + $conditions = $this->softConditions; + $errString = 'softConditions'; + + if (Params::$nullQueryValue !== false) + { + $conditions['insert']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all'; + $conditions['update']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all'; + } + } + + if (array_key_exists($queryType,$conditions)) + { + if (!is_array($conditions[$queryType])) + { + throw new Exception('error in method '.__METHOD__.' : '.$errString.'['.$queryType.'] has to be an associative array'); + } + + foreach ($conditions[$queryType] as $key => $values) + { + + //personalized error string + $altErrorString = null; + + //delete all the '+' chars + $key = $this->dropStartChar($key,'+'); + + if (strcmp($values,'all') === 0 or strstr($values,'all|')) + { + if (strstr($values,'all|')) + { + $values = str_replace('all|',$this->fields.'|',$values); + } + else + { + $values = $this->fields; + } + } + + if (strstr($values,'|')) + { + $temp = explode('|',$values); + $altErrorString = "
        ".$temp[1]."
        \n"; + $values = $temp[0]; + } + + $baseArgs = array($_POST,$values); + + if (strstr($key,'|')) + { + $funcArray = explode('|',$key); + $funcName = $funcArray[0]; + array_shift($funcArray); + $funcArgs = array_merge($baseArgs,$funcArray); + } + else + { + $funcName = $key; + $funcArgs = $baseArgs; + } + + if (!method_exists($validateObj,$funcName) or $funcName === 'checkGeneric') + { + throw new Exception('error in method '.__METHOD__.' :method "'.$funcName. '" not allowed in '.$errString); + } + if (!call_user_func_array(array($validateObj,$funcName),$funcArgs)) + { + $this->notice .= (isset($altErrorString)) ? $altErrorString : $validateObj->errorString; + $this->result = false; + $this->queryResult = false; + return false; + } + } + return true; + } else { + return true; + } + } + + + //apply, in sequence, the strong,soft and database conditions + //$methodName: insert,update + //$id: the id of the record. It is necessary for database conditions + public function checkConditions($methodName,$id = null) + { + if ($this->applyValidateConditions($methodName,'strong')) + { + if ($this->applyValidateConditions($methodName,'soft')) + { + if ($this->applyDatabaseConditions($methodName,$id)) + { + return true; + } + } + } + return false; + } + + //method that calls the function indicated in $this->submitNames. Ex: if $_POST['delAction'] is found, then the "del" method is called. + public function updateTable($methodsList = '',$id = null) { + + $allowedMethodsArray = explode(',',$methodsList); + $resultArray = array(); + $this->identifierValue = null; + if (isset($id)) + { + $this->identifierValue = (int)$id; + } + else if (isset($_POST[$this->identifierName])) + { + $this->identifierValue = (int)$_POST[$this->identifierName]; + } + foreach ($this->submitNames as $methodName => $submitName) + { + if (array_key_exists($submitName,$_POST)) + { + $this->submitName = $submitName; + if (method_exists($this,$methodName)) + { + //if the method is allowed + if (in_array($methodName,$allowedMethodsArray)) + { + if ($this->checkConditions($methodName,$this->identifierValue)) + { + $this->notice = null; + call_user_func_array(array($this,$methodName),array($this->identifierValue)); + } + } + } + else + { + throw new Exception('method '.$methodName.' not defined in class '.__CLASS__.'; error in method '.__METHOD__.''); + } + return; //only one cycle! + } + } + } + + //method to build the array of popup objects + public function popupBuild() + { + foreach ($this->_popupItemNames as $field => $itemName) + { +// if (array_key_exists($field,$this->_where)) +// { + $fieldClean = str_replace('n!',null,$field); + $itemNameClean = str_replace('n!',null,$itemName); + $fieldClean = $this->dropStartChar($fieldClean,'-'); + $itemNameClean = $this->dropStartChar($itemNameClean,'-'); + + //fields that have to be extracted + $queryFields = ($fieldClean === $itemNameClean) ? $fieldClean : $fieldClean.','.$itemNameClean; + + $table = $this->getTableName($field); + $this->popupArray[$field] = new Popup(); + + $popupWhereClause = array_key_exists($field,$this->_popupWhere) ? $this->_popupWhere[$field] : null; + + $result = $this->db->select($table,$queryFields,$popupWhereClause,$fieldClean); + + if ($result and $result !== false) + { + //get the label of the popup menu + $label = array_key_exists($field,$this->_popupLabels) ? $this->_popupLabels[$field] : $table.' : '.$itemNameClean; + $this->popupArray[$field]->name = $label; + + //get the table name + $fieldTable = isset($result[0][$table][$fieldClean]) ? $table : Params::$aggregateKey; + $itemNameTable = isset($result[0][$table][$itemNameClean]) ? $table : Params::$aggregateKey; + + foreach ($result as $row) + { + $this->popupArray[$field]->itemsValue[] = $row[$fieldTable][$fieldClean]; + + if (array_key_exists($field,$this->_popupFunctions)) + { + if (!function_exists($this->_popupFunctions[$field])) + { + throw new Exception('Error in '.__METHOD__.': function '.$this->_popupFunctions[$field]. ' does not exist'); + } + + $tempName = call_user_func($this->_popupFunctions[$field],$row[$itemNameTable][$itemNameClean]); + } + else + { + $tempName = $row[$itemNameTable][$itemNameClean]; + } + + $this->popupArray[$field]->itemsName[] = $tempName; + } + } +// } + } + } + + + //get the element before and after the current one + //$key: the key of the self::$where array that indicates the field to be used in order to find out the records before and after + //$fields: the fields that have to be extracted + public function getNeighbours($key,$fields = '') + { + //backup of the values + $tempWhere = $this->where; + $tempLimit = $this->limit; + $tempOrderBy = $this->orderBy; + $this->limit = 1; + //before + $this->where[$key] = '<'.$tempWhere[$key]; + $this->orderBy = $this->getTableName($key).'.'.$key.' DESC'; + $dataAfter = $this->getFields($fields); + //after + $this->where[$key] = '>'.$tempWhere[$key]; + $this->orderBy = $this->getTableName($key).'.'.$key; + $dataBefore = $this->getFields($fields); + //restore the previous values + $this->where = $tempWhere; + $this->limit = $tempLimit; + $this->orderBy = $tempOrderBy; + $result[0] = isset($dataBefore[0]) ? $dataBefore[0] : null; + $result[1] = isset($dataAfter[0]) ? $dataAfter[0] : null; + return $result; + } + + //set the $select property and return the current object + public function select($fields = null) + { + $this->select = $fields; + return $this; + } + + //set the $from property and return the current object + public function from($tables = null) + { + $this->from = isset($tables) ? $tables : $this->_tables; + return $this; + } + + //set the on property and return the current object + public function on($joinClause = '-') + { + $this->on[] = $joinClause; + $this->using[] = null; + return $this; + } + + //set the $using property and return the current object + public function using($using = null) + { + $this->using[] = $using; + $this->on[] = null; + return $this; + } + + //set the $join property and return the current object + public function left($string = null) + { + $this->join[] = "l:$string"; + return $this; + } + + //set the $join property and return the current object + public function right($string = null) + { + $this->join[] = "r:$string"; + return $this; + } + + //set the $join property and return the current object + public function inner($string = null) + { + $this->join[] = "i:$string"; + return $this; + } + + //set the $where property and return the current object + public function where($where = array()) + { + $this->where = $where; + return $this; + } + + //append the $where array to the ::where property and return the current object + public function aWhere($where = array()) + { + $this->appendWhereQueryClause($where); + return $this; + } + + //set the $groupBy property and return the current object + public function groupBy($groupBy = null) + { + $this->groupBy = $groupBy; + return $this; + } + + //set the $orderBy property and return the current object + public function orderBy($orderBy = null) + { + $this->orderBy = $orderBy; + return $this; + } + + //set the $limit property and return the current object + public function limit($limit = null) + { + $this->limit = $limit; + return $this; + } + + //set the $listArray property + public function toList($key, $value = null) + { + $this->listArray = array($key,$value); + $this->toList = true; + return $this; + } + + //reset all the clauses of the select query + public function clear() + { + $this->select = null; + $this->where = array(); + $this->groupBy = null; + $this->orderBy = null; + $this->limit = null; + $this->from = null; + $this->on = array(); + $this->using = array(); + $this->join = array(); + $this->toList = false; + return $this; + } + + //initialize and populate the ::form property (reference to a Form_Form object) + public function setForm($defAction = null, $defSubmit = array(), $defMethod = 'POST', $defEnctype = null) + { + if (isset($this->formStruct)) + { + $action = array_key_exists('action',$this->formStruct) ? $this->formStruct['action'] : $defAction; + $submit = array_key_exists('submit',$this->formStruct) ? $this->formStruct['submit'] : $defSubmit; + $entries = array_key_exists('entries',$this->formStruct) ? $this->formStruct['entries'] : null; + $method = array_key_exists('post',$this->formStruct) ? $this->formStruct['post'] : $defMethod; + $enctype = array_key_exists('enctype',$this->formStruct) ? $this->formStruct['enctype'] : $defEnctype; + + $this->form = new Form_Form($action,$submit,$method,$enctype); + + if (isset($entries)) + { + $this->form->setEntries($entries); + } + + $copy = $this->form->entry; + + foreach ($copy as $name => $entry) + { + if (strcmp($entry->type,'Select') === 0 and isset($entry->options)) + { + if (!is_array($entry->options)) + { + if (strstr($entry->options,'foreign::')) + { + $elements = explode('::',$entry->options); + + for ($i = 0; $i < count($elements); $i++) + { + if (strcmp($elements[$i],'--') === 0) $elements[$i] = null; + } + //send the query + array_shift($elements); + $resultSet = call_user_func_array(array($this->db,'select'),$elements); + + $single = true; + + if (strstr($elements[1],',')) + { + $args = explode(',',$elements[1]); + //add the table name + $args[0] = $elements[0].'.'.$args[0]; + $args[1] = $elements[0].'.'.$args[1]; + //associative array + $single = false; + } + else + { + $args[0] = $elements[0].'.'.$elements[1]; + $args[1] = null; + } + + $list = $this->getList($resultSet,$args[0],$args[1]); + + $this->form->entry[$name]->options = ($single) ? implode(',',array_values($list)) : $list; + } + } + } + } + + } + else + { + $this->form = new Form_Form($defAction,$defSubmit,$defMethod,$defEnctype); + } + } + + //get a list from a result set + //$resultSet: the result set coming from a select query + public function getList($resultSet, $key, $value = null) + { + $list = array(); + + if (strstr($key,'.')) + { + $arr = explode('.',$key); + $keyTable = $arr[0]; + $keyField = $arr[1]; + } + else + { + $keyTable = $this->_tablesArray[0]; + $keyField = $key; + } + + if (!isset($value)) + { + foreach ($resultSet as $row) + { + $list[] = $row[$keyTable][$keyField]; + } + } + else + { + if (strstr($value,'.')) + { + $arr = explode('.',$value); + $valueTable = $arr[0]; + $valueField = $arr[1]; + } + else + { + $valueTable = $this->_tablesArray[0]; + $valueField = $value; + } + + foreach ($resultSet as $row) + { + $list[$row[$keyTable][$keyField]] = $row[$valueTable][$valueField]; + } + + } + return $list; + } + + // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT). + public function lastId() + { + return $this->db->lastId(); + } + + //send a free query + public function query($query) + { + return $this->db->query($query); + } + + //the text of the error message from previous MySQL operation + public function getError() + { + return $this->db->getError(); + } + + //the numerical value of the error message from previous MySQL operation + public function getErrno() + { + return $this->db->getErrno(); + } + + //define the abstract method to get the value of the record $id of the main table + abstract public function selectId($id); + + //define the abstract method to get the fields from the tables + abstract public function getFields(); + +} \ No newline at end of file diff --git a/Library/Model/Base.php b/Library/Model/Base.php new file mode 100755 index 0000000..4162a56 --- /dev/null +++ b/Library/Model/Base.php @@ -0,0 +1,1273 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +abstract class Model_Base +{ + + public $fields = ''; //the fields that have to be manipulated by the update and insert query + public $values = array(); //the values that corresponding to the $this->fields fields + public $form = null; //reference to a Form_Form object + public $formStruct = null; //the form structure + + public $submitName = null; //the current submitName (from the form) + public $identifierName = 'identifier'; + + public $notice = null; //a string explaining the result of the query applied (or not if an error occured): executed, error, etc + public $result = true; //the result of validate conditions, database conditions and query. It can be 'true' or 'false' + public $queryResult = false; //the result of the query + + //conditions that have to be satisfied before applying the query + //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions' + public $strongConditions = array(); + + //conditions that have to be satisfied before applying the query + //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions' + //do not return error if a value is equal to '' or null + public $softConditions = array(); + + //conditions that have to be satisfied before applying the query + //check that the new values inserted satisfy some conditions + //Ex: 'update'=>'checkUniqueCompl:titolo,autore;checkUnique:titolo','insert'=>'checkUnique:titolo' + public $databaseConditions = array(); + + public $popupArray = array(); //array of popup objects (see popup.php) + + public $supplInsertValues = array(); //associative array defining supplementary values to be inserted on each insert query. It has to have the following form: array(field1 => value1,field2 => value2, ...) + + public $supplUpdateValues = array(); //associative array defining supplementary values to be inserted on each update query. It has to have the following form: array(field1 => value1,field2 => value2, ...) + + public $select = null; //fields that have to be selected in select queries + public $where = array(); //associative array containing all the where clauses ($field => $value) + //group by, order by and limit clauses + public $groupBy = null; + public $orderBy = null; + public $limit = null; + + public $from = null; //from clause of the select queries + public $on = array(); //on array + public $using = array(); //using array + public $join = array(); //join array + + public $toList = false; //if the result have to be given in a list format + public $listArray = array(); //array containing the $key and the $value to be used to extract a list from a resultSet + + //logic operator between statements in the where clause of select queries + public $logicalOperators = array('AND'); + + public $files = null; //reference to the Files_Upload class + + protected $_tables='itemTable,boxTable,item_boxTable'; + protected $_idFields='id_item,id_box'; + protected $_tablesArray=array(); + protected $_idFieldsArray=array(); + protected $_where = array(); + + //the name of the field that has to be used to order the rows of the main table of the model + protected $_idOrder = null; + + protected $_onDelete = 'check'; //can be 'nocheck' or 'check'. check: referential integrity check. nocheck: no referential integrity check + protected $_reference = null; //array containing the child table that have a reference to this table and the foreign key of the child table-> array($childTable,$foreignKey) + + protected $_popupItemNames = array(); //the fields to be used as names in the popupArray elements. Associative array ($itemNameField1 => $itemNameValue1, ...) + + //the labels of the pop-up menus + protected $_popupLabels = array(); + + //functions that have to be applied upon the label fields of the popup menu + protected $_popupFunctions = array(); + + protected $_popupWhere = array(); //where clause for the pupup menu + + protected $_resultString; //reference to the class containing all the result strings of the db queries + protected $_dbCondString; //reference to the class containing all the result strings of the database conditions + + protected $_backupFields = ''; //field saved after the delFields method has been applied + protected $_backupValues = array(); //values saved after the delFields method has been applied + protected $_allowedDbMethods = array('update','insert','del','moveup','movedown'); //methods that can be called by the updateTable method + + protected $submitNames = array( + 'update' => 'updateAction', + 'insert' => 'insertAction', + 'del' =>'delAction', + 'moveup' =>'moveupAction', + 'movedown' =>'movedownAction' + ); + + protected $identifierValue = null; //the value of the identifier ($_POST[$this->identifier]) + protected $arrayExt; //arrayExt object (see library/arrayExt.php) + + protected $_arrayStrongCheck; //Array_Validate_Strong object + protected $_arraySoftCheck; //Array_Validate_Soft object + + public $db; //reference to the database layer class + protected $_lang = null; //language of notices + + + public function __construct() { + $this->_tablesArray = explode(',',$this->_tables); + $this->_idFieldsArray = explode(',',$this->_idFields); + $this->_where[$this->_idFieldsArray[0]] = $this->_tablesArray[0]; + $this->arrayExt = new ArrayExt(); + + //initialize the validate objects + $this->_arrayStrongCheck = new Array_Validate_Strong($this->_lang); + $this->_arraySoftCheck = new Array_Validate_Soft($this->_lang); + + $this->identifierName = $this->_idFieldsArray[0]; + + //set the language of notices + $this->_lang = Params::$language; + + //create the $_resultString object (result strings of the db queries) + $modelStringClass = 'Lang_'.$this->_lang.'_ModelStrings'; + if (!class_exists($modelStringClass)) + { + $modelStringClass = 'Lang_En_ModelStrings'; + } + $this->_resultString = new $modelStringClass(); + + //create the $_dbCondString object (result strings of the database conditions) + $dbCondStringClass = 'Lang_'.$this->_lang.'_DbCondStrings'; + if (!class_exists($dbCondStringClass)) + { + $dbCondStringClass = 'Lang_En_DbCondStrings'; + } + $this->_dbCondString = new $dbCondStringClass(); + + //instantiate the database class + $this->db = Factory_Db::getInstance(DATABASE_TYPE); + + //instantiate the Files_Upload class + $params = array( + 'filesPermission' => 0777, + 'language' => $this->_lang, + 'allowedExtensions' => 'png,jpg,jpeg,gif', + 'maxFileSize' => 20000000, + 'fileUploadKey' => 'userfile' + ); + + $this->files = new Files_Upload(ROOT."/media/",$params); + } + + //sanitize all the $values property + public function sanitize() + { + $keys = implode(',',array_keys($this->values)); + $this->values = $this->arrayExt->subset($this->values,$keys,'sanitizeDb'); + } + + //change a resulting string from a db query + public function setString($key,$value) + { + $this->_resultString->string[$key] = $value; + } + + //set the submitNames property (array) + //$methodName : the method name, $submitName: the submit name of the submit action of the form + public function setSubmitNames($methodName,$submitName) + { + if (!in_array($methodName,$this->_allowedDbMethods)) + { + throw new Exception('query type "'.$methodName. '" not allowed in '. __METHOD__); + } + $this->submitNames[$methodName] = $submitName; + } + + //get the last query executed + public function getQuery() + { + return $this->db->query; + } + + //get the where clause of the select query + public function getWhereQueryClause() + { + return $this->where; + } + + //set the where clause of the select query + //whereArray = array ($table_field => $value) + public function setWhereQueryClause($whereArray) + { + $this->where = $whereArray; + } + + //append the whereArray clause to $this_->whereClause + //whereArray = array ($table_field => $value) + public function appendWhereQueryClause($whereArray) + { + $this->where = array_merge($this->where,$whereArray); + } + + //drop the char $char from the beginning of the string $string + public function dropStartChar($string,$char) + { + while(strcmp($string[0],$char) === 0) + { + $string = substr($string,1); + } + return $string; + } + + //get the table name from $this->_where. If the table is not present then return $this->_tablesArray[0] + public function getTableName($field) + { + return isset($this->_where[$field]) ? $this->_where[$field] : $this->_tablesArray[0]; + } + + //method to create the where clause of the select query from the $this->where array + //$level: level of the ricorsion + //$whereClauseLevel: array containing the field=>value statements of the where clause. If $whereClause = null than $this->where is considered + public function createWhereClause($level = 0, $whereClauseLevel = null, $operator = null) + { + $whereClause = null; + $whereClauseArray = array(); + + $whereClause = isset($whereClauseLevel) ? $whereClauseLevel : $this->where; + + foreach ($whereClause as $field => $value) + { + if (is_array($value)) + { + if (strstr($field,"OR")) + { + $op = " OR "; + } + else if (strstr($field,"AND")) + { + $op = " AND "; + } + else + { + $op = null; + } + $newValue = $this->createWhereClause($level+1, $value, $op); + if (isset($newValue)) $whereClauseArray[] = $newValue; + } + else + { + $flag = 0; //equal where clause + if (isset($field)) + { + //drop the 'n:' and '-' chars from $field + $fieldClean = str_replace('n!',null,$field); + $fieldClean = $this->dropStartChar($fieldClean,'-'); + if (strcmp($value,Params::$nullQueryValue) !== 0 or (Params::$nullQueryValue === false)) + { + foreach (params::$whereClauseSymbolArray as $symbol) + { + if (strstr($value,$symbol)) + { + //check if write or not the table name + $tableName = strstr($field,'n!') ? null : $this->getTableName($field).'.'; + $whereClauseArray[] = $tableName.$fieldClean.' '.$value; + $flag = 1; //not equal where clause + break; + } + } + if ($flag === 0) + { + $value = '"'.$value.'"'; + //check if write or not the table name + $tableName = strstr($field,'n!') ? null : $this->getTableName($field).'.'; + $whereClauseArray[] = $tableName.$fieldClean.'='.$value; + } + } + } + } + } + //get the logic operator at the current level + if (isset($operator)) + { + $logicOper = $operator; + } + else + { + $logicOper = isset($this->logicalOperators[$level]) ? ' '.$this->logicalOperators[$level].' ' : ' AND '; + } + $whereClause = !empty($whereClauseArray) ? implode($logicOper,$whereClauseArray) : null; + $whereClause = (isset($whereClause) and $level>0) ? '('.$whereClause.')' : $whereClause; + return $whereClause; + } + + + //get the submitName having its key (the method name) + public function getSubmitName($key) + { + if (!array_key_exists($key,$this->submitNames)) + { + return 'generalAction'; +// throw new Exception('query type "'.$key. '" not allowed in '.__METHOD__); + } + return $this->submitNames[$key]; + + } + + + //return the values, taken from the $_POST array, to be inserted inside the forms + //$queryType: insert or update + //$func: sanitize function to apply upon each value + //$id: if $queryType='update' that the values are taken from the record (of the main table of this model) having the primary key equal to $id + //$defaultValues = associative array of the form: array($entry=>$defaultValue) + //$functionsIfFromDb = associative array of the form: array($entry=>$function_to_be_applied) + public function getFormValues($queryType = 'insert', $func = 'sanitizeHtml',$id = null,$defaultValues = array(),$functionsIfFromDb = array()) + { + @session_start(); + if (is_array($func)) + { + $funcPost = $func[0]; + $funcDb = $func[1]; + } + else + { + $funcPost = $func; + $funcDb = 'none'; + } + + $arrayType = array('update','insert'); + $values = array(); + $idName = $this->identifierName; + if (in_array($queryType,$arrayType)) + { + $ident = null; + if (isset($id)) + { + $ident = (int)$id; + } + else if (isset($_POST[$idName])) + { + $ident = (int)$_POST[$idName]; + } + if ($this->result) + { + if ($queryType === 'update') + { + if (isset($ident)) + { + $recordArray = $this->selectId($ident); + + $fieldsArray = explode(',',$this->fields); + + $values = $this->arrayExt->subset($recordArray,$this->fields,$funcDb); + +// foreach ($fieldsArray as $field) +// { +// $values[$field] = array_key_exists($field,$recordArray) ? $recordArray[$field] : ''; +// } + + $values[$idName] = $ident; + + //apply the functions upon entries + foreach ($functionsIfFromDb as $entry => $funcUponEntry) + { + if (array_key_exists($entry,$values)) + { + if (!function_exists($funcUponEntry)) { + throw new Exception('Error in '.__METHOD__.': function '.$funcUponEntry. ' does not exist'); + } + + $values[$entry] = call_user_func($funcUponEntry,$values[$entry]); + } + } + + //set values of $_SESSION array + foreach ($values as $k => $v) + { + if (isset($this->formStruct['entries'][$k]['type'])) + { + if ($this->formStruct['entries'][$k]['type'] === 'File') + { + $_SESSION['form_'.$k] = $v; + } + } + } + } + } + else if ($queryType === 'insert') + { + + $tempArray = is_array($defaultValues) ? $defaultValues : array(); + + $values = $this->arrayExt->subset($tempArray,$this->fields,$funcPost); + + } + } + else + { + $values = $this->arrayExt->subset($_POST,$this->fields,$funcPost); + + if ($queryType === 'update') + { + $values[$idName] = $ident; + + //take values from $_SESSION array + $tempFieldArray = explode(',',$this->fields); + + for ($i = 0; $i < count($tempFieldArray); $i++) + { + if (isset($this->formStruct['entries'][$tempFieldArray[$i]]['type'])) + { + if ($this->formStruct['entries'][$tempFieldArray[$i]]['type'] === 'File') + { + if (isset($_SESSION['form_'.$tempFieldArray[$i]])) + { + $values[$tempFieldArray[$i]] = $_SESSION['form_'.$tempFieldArray[$i]]; + } + } + } + } + } + } + } + return $values; + } + + + //method to set the properties $this->fields and $this->values + public function setFields($fields,$func = 'sanitizeAll') + { + $this->values = $this->arrayExt->subset($_POST,$fields,$func); + $this->fields = $this->extractFields($fields); + + //set the backup variables + $this->_backupFields = $this->fields; + $this->_backupValues = $this->values; + } + + + //clear the fields list + public function clearFields() + { + $this->_backupFields = $this->fields; + $this->_backupValues = $this->values; + $this->fields = ''; + $this->values = array(); + } + + //del the fields written in the $list argument. The $list argument has to be of the type: field1,field2,... + public function delFields($list) + { + $this->_backupFields = $this->fields; + $this->_backupValues = $this->values; + $this->values = $this->arrayExt->subsetComplementary($this->values,$list); +// $this->fields = implode(',',array_keys($this->values)); + } + + //restore the fields and values saved in $_backupFields and $_backupValues + public function restoreFields() + { + $this->fields = $this->_backupFields; + $this->values = $this->_backupValues; + } + + //method to clean the $fields string deleting the colons (and the word after the colon) + public function extractFields($fields) { + $fieldsArray = explode(',',$fields); + $resultString = array(); + foreach ($fieldsArray as $field) { + if (strstr($field,':')) { + $temp = explode(':',$field); + $resultString[] = $temp[0]; + } else { + $resultString[] = $field; + } + } + return implode(',',$resultString); + } + + //add the supplementary value on insert and update queries + //$queryType: insert or update + public function setSupplValues($queryType) + { + if ($queryType === 'insert') + { + $supplValues = $this->supplInsertValues; + } + else if ($queryType === 'update') + { + $supplValues = $this->supplUpdateValues; + } + + $baseFields = implode(',',array_keys($this->values)); + + $supplFields = implode(',',array_keys($supplValues)); + $supplFields = (strcmp($supplFields,'') === 0) ? $supplFields : ',' . $supplFields; + + $fields = $baseFields . $supplFields; + $values = array_merge(array_values($this->values),array_values($supplValues)); + + return array($fields,$values); + } + + + //method to call the update query (overriding of the base_db del method) + //update the record with the primary key equal to $id (default) + //if $whereClause is set then use $whereClause as where clause of the update query + public function update($id = null, $whereClause = null) + { + if (!is_array($this->supplUpdateValues)) + { + throw new Exception('error in ' . __METHOD__ . ': the supplUpdateValues property has to be an array.'); + } + $el = $this->setSupplValues('update'); + $this->queryResult = false; + + if (isset($whereClause)) + { + $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$whereClause); + $this->setNotice($result); + return $result; + } + else + { + if (isset($id)) + { + $where = $this->_idFieldsArray[0].'='.(int)($id); + $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$where); + $this->setNotice($result); + return $result; + } + else + { + $this->notice = $this->_resultString->getString('no-id'); + $this->result = false; + $this->identifierValue = null; + return false; + } + } + } + + //method to call the insert query (overriding of the base_db del method) + public function insert() { + + $this->queryResult = false; + if (!is_array($this->supplInsertValues)) { + throw new Exception('error in ' . __METHOD__ . ': the supplInsertValues property has to be an array.'); + } + + if (isset($this->_idOrder)) + { + $maxValue = $this->db->getMax($this->_tablesArray[0],$this->_idOrder); + $this->supplInsertValues[$this->_idOrder] = (int)$maxValue + 1; + } + + $el = $this->setSupplValues('insert'); + + $result = $this->db->insert($this->_tablesArray[0],$el[0],$el[1]); + $this->setNotice($result); + return $result; + } + + //method to call the delete query (overriding of the base_db del method) + public function del($id = null, $whereClause = null) { + + $this->queryResult = false; + + if (isset($whereClause)) + { + $result = $this->db->del($this->_tablesArray[0],$whereClause); + $this->setNotice($result); + return $result; + } + else + { + if (isset($id)) { + $where = $this->_idFieldsArray[0].'='.(int)$id; + $result = $this->db->del($this->_tablesArray[0],$where); + $this->setNotice($result); + return $result; + } else { + $this->notice = $this->_resultString->getString('no-id'); + $this->result = false; + $this->identifierValue = null; + return false; + } + } + } + + //move to the top the record having $this->_idOrder = $id + //where clause + public function moveup($id) + { + return $this->move($id,'up'); + } + + //move to the top the record having $this->_idOrder = $id + //where clause + public function movedown($id) + { + return $this->move($id,'down'); + } + + //move the record having $this->_tablesArray[0] = $id + //$par: 'up' or 'down' + //where clause + public function move($id,$par = 'up') + { + $this->queryResult = false; + if (isset($id)) + { + $increm = ($par === 'up') ? 1 : -1; + + $backupLimit = $this->limit; + $this->limit = null; + + $data = $this->getFields($this->_tablesArray[0].'.'.$this->_idFieldsArray[0].','.$this->_tablesArray[0].'.'.$this->_idOrder); + + for($i = 0; $i < count($data); $i++) + { + if (strcmp($data[$i][$this->_tablesArray[0]][$this->_idFieldsArray[0]],$id) === 0) + { + if (($par === 'up' and $i !== 0) or ($par === 'down' and $i !== (count($data)-1))) + { + $prevOrder = $data[$i-$increm][$this->_tablesArray[0]][$this->_idOrder]; + $prevId = $data[$i-$increm][$this->_tablesArray[0]][$this->_idFieldsArray[0]]; + $currentOrder = $data[$i][$this->_tablesArray[0]][$this->_idOrder]; + $currentId = $data[$i][$this->_tablesArray[0]][$this->_idFieldsArray[0]]; + + //exchange the id_order of the two record + $res1 = $this->db->update($this->_tablesArray[0],$this->_idOrder,array($prevOrder),$this->_idFieldsArray[0]."='$currentId'"); + $res2 = $this->db->update($this->_tablesArray[0],$this->_idOrder,array($currentOrder),$this->_idFieldsArray[0]."='$prevId'"); + $result = ($res1 and $res2); + $this->setNotice($result); + return $result; + } + } + } + + $this->limit = $backupLimit; + } + else + { + $this->notice = $this->_resultString->getString('no-id'); + $this->result = false; + $this->identifierValue = null; + return false; + } + return false; + } + + public function setNotice($result) { + if ($result) { + $this->notice = $this->_resultString->getString('executed'); + $this->result = true; + $this->queryResult = true; + } else { + $this->notice = $this->_resultString->getString('error'); + $this->result = false; + $this->queryResult = false; + } + } + + //method used to verify that the value of a field is not duplicated + //$fieldsList: list of fields to check. Ex: field1,field2,... + //$where: the where clause + public function checkUnique($fieldsList,$where = null) + { + $errorString = null; + $numb = 0; + $fieldsArray = explode(',',$fieldsList); + $queryFieldsArray = explode(',',$this->fields); + foreach ($fieldsArray as $field) + { + if (in_array($field,$queryFieldsArray)) + { + if ($this->db->recordExists($this->_tablesArray[0],$field,$this->values[$field],$where)) + { + $errorString .= $this->_dbCondString->getNotUniqueString($field); + $numb++; + } + } + } + $this->notice = $errorString; + return $numb === 0 ? true : false; + } + + //like checkUnique: check all the records of the table apart from the record that has to be modified + public function checkUniqueCompl($fieldsList,$id = null) + { + if (isset($id)) + { + $where = $this->_idFieldsArray[0].'!='.(int)($id); + return $this->checkUnique($fieldsList,$where); + } else { + $this->notice = $this->_resultString->getString('no-id'); + return false; + } + } + + //method to apply the database conditions listed in the $this->databaseConditions associative array + //$queryType: indicates what set of validate conditions has to be considered (it's the key of the associative array) + public function applyDatabaseConditions($queryType,$id = null) + { + if (array_key_exists($queryType,$this->databaseConditions)) + { + if (!is_array($this->databaseConditions[$queryType])) + { + throw new Exception('error in method '.__METHOD__.' : databaseConditions['.$queryType.'] has to be an associative array'); + } + + foreach ($this->databaseConditions[$queryType] as $key => $values) + { + + //personalized error string + $altErrorString = null; + + //delete all the '+' chars + $key = $this->dropStartChar($key,'+'); + + if (strcmp($values,'all') === 0 or strstr($values,'all|')) + { + if (strstr($values,'all|')) + { + $values = str_replace('all|',$this->fields.'|',$values); + } + else + { + $values = $this->fields; + } + } + + if (strstr($values,'|')) + { + $temp = explode('|',$values); + $altErrorString = "
        ".$temp[1]."
        \n"; + $values = $temp[0]; + } + + $allowedMethod = array('checkUnique','checkUniqueCompl'); + if (!in_array($key,$allowedMethod)) + { + throw new Exception('error in method '.__METHOD__.' : method "'.$key. '" not allowed in the property named databaseConditions'); + } + if (!call_user_func_array(array($this,$key),array($values,$id))) + { + if (isset($altErrorString)) $this->notice = $altErrorString; + $this->result = false; + $this->queryResult = false; + return false; + } + } + return true; + } else { + return true; + } + } + + + //method to apply the validate conditions listed in the $this->strongConditions associative array + //$queryType: indicates what set of validate conditions has to be considered (it's the key of the associative array) + //$strength: 'strong' or 'soft' + public function applyValidateConditions($queryType,$strength = 'strong') + { + if ($strength === 'strong') + { + $validateObj = $this->_arrayStrongCheck; + $conditions = $this->strongConditions; + $errString = 'strongConditions'; + } + else + { + $validateObj = $this->_arraySoftCheck; + $conditions = $this->softConditions; + $errString = 'softConditions'; + + if (Params::$nullQueryValue !== false) + { + $conditions['insert']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all'; + $conditions['update']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all'; + } + } + + if (array_key_exists($queryType,$conditions)) + { + if (!is_array($conditions[$queryType])) + { + throw new Exception('error in method '.__METHOD__.' : '.$errString.'['.$queryType.'] has to be an associative array'); + } + + foreach ($conditions[$queryType] as $key => $values) + { + + //personalized error string + $altErrorString = null; + + //delete all the '+' chars + $key = $this->dropStartChar($key,'+'); + + if (strcmp($values,'all') === 0 or strstr($values,'all|')) + { + if (strstr($values,'all|')) + { + $values = str_replace('all|',$this->fields.'|',$values); + } + else + { + $values = $this->fields; + } + } + + if (strstr($values,'|')) + { + $temp = explode('|',$values); + $altErrorString = "
        ".$temp[1]."
        \n"; + $values = $temp[0]; + } + + $baseArgs = array($_POST,$values); + + if (strstr($key,'|')) + { + $funcArray = explode('|',$key); + $funcName = $funcArray[0]; + array_shift($funcArray); + $funcArgs = array_merge($baseArgs,$funcArray); + } + else + { + $funcName = $key; + $funcArgs = $baseArgs; + } + + if (!method_exists($validateObj,$funcName) or $funcName === 'checkGeneric') + { + throw new Exception('error in method '.__METHOD__.' :method "'.$funcName. '" not allowed in '.$errString); + } + if (!call_user_func_array(array($validateObj,$funcName),$funcArgs)) + { + $this->notice .= (isset($altErrorString)) ? $altErrorString : $validateObj->errorString; + $this->result = false; + $this->queryResult = false; + return false; + } + } + return true; + } else { + return true; + } + } + + + //apply, in sequence, the strong,soft and database conditions + //$methodName: insert,update + //$id: the id of the record. It is necessary for database conditions + public function checkConditions($methodName,$id = null) + { + if ($this->applyValidateConditions($methodName,'strong')) + { + if ($this->applyValidateConditions($methodName,'soft')) + { + if ($this->applyDatabaseConditions($methodName,$id)) + { + return true; + } + } + } + return false; + } + + //method that calls the function indicated in $this->submitNames. Ex: if $_POST['delAction'] is found, then the "del" method is called. + public function updateTable($methodsList = '',$id = null) { + + $allowedMethodsArray = explode(',',$methodsList); + $resultArray = array(); + $this->identifierValue = null; + if (isset($id)) + { + $this->identifierValue = (int)$id; + } + else if (isset($_POST[$this->identifierName])) + { + $this->identifierValue = (int)$_POST[$this->identifierName]; + } + foreach ($this->submitNames as $methodName => $submitName) + { + if (array_key_exists($submitName,$_POST)) + { + $this->submitName = $submitName; + if (method_exists($this,$methodName)) + { + //if the method is allowed + if (in_array($methodName,$allowedMethodsArray)) + { + if ($this->checkConditions($methodName,$this->identifierValue)) + { + $this->notice = null; + call_user_func_array(array($this,$methodName),array($this->identifierValue)); + } + } + } + else + { + throw new Exception('method '.$methodName.' not defined in class '.__CLASS__.'; error in method '.__METHOD__.''); + } + return; //only one cycle! + } + } + } + + //method to build the array of popup objects + public function popupBuild() + { + foreach ($this->_popupItemNames as $field => $itemName) + { +// if (array_key_exists($field,$this->_where)) +// { + $fieldClean = str_replace('n!',null,$field); + $itemNameClean = str_replace('n!',null,$itemName); + $fieldClean = $this->dropStartChar($fieldClean,'-'); + $itemNameClean = $this->dropStartChar($itemNameClean,'-'); + + //fields that have to be extracted + $queryFields = ($fieldClean === $itemNameClean) ? $fieldClean : $fieldClean.','.$itemNameClean; + + $table = $this->getTableName($field); + $this->popupArray[$field] = new Popup(); + + $popupWhereClause = array_key_exists($field,$this->_popupWhere) ? $this->_popupWhere[$field] : null; + + $result = $this->db->select($table,$queryFields,$popupWhereClause,$fieldClean); + + if ($result and $result !== false) + { + //get the label of the popup menu + $label = array_key_exists($field,$this->_popupLabels) ? $this->_popupLabels[$field] : $table.' : '.$itemNameClean; + $this->popupArray[$field]->name = $label; + + //get the table name + $fieldTable = isset($result[0][$table][$fieldClean]) ? $table : Params::$aggregateKey; + $itemNameTable = isset($result[0][$table][$itemNameClean]) ? $table : Params::$aggregateKey; + + foreach ($result as $row) + { + $this->popupArray[$field]->itemsValue[] = $row[$fieldTable][$fieldClean]; + + if (array_key_exists($field,$this->_popupFunctions)) + { + if (!function_exists($this->_popupFunctions[$field])) + { + throw new Exception('Error in '.__METHOD__.': function '.$this->_popupFunctions[$field]. ' does not exist'); + } + + $tempName = call_user_func($this->_popupFunctions[$field],$row[$itemNameTable][$itemNameClean]); + } + else + { + $tempName = $row[$itemNameTable][$itemNameClean]; + } + + $this->popupArray[$field]->itemsName[] = $tempName; + } + } +// } + } + } + + + //get the element before and after the current one + //$key: the key of the self::$where array that indicates the field to be used in order to find out the records before and after + //$fields: the fields that have to be extracted + public function getNeighbours($key,$fields = '') + { + //backup of the values + $tempWhere = $this->where; + $tempLimit = $this->limit; + $tempOrderBy = $this->orderBy; + $this->limit = 1; + //before + $this->where[$key] = '<'.$tempWhere[$key]; + $this->orderBy = $this->getTableName($key).'.'.$key.' DESC'; + $dataAfter = $this->getFields($fields); + //after + $this->where[$key] = '>'.$tempWhere[$key]; + $this->orderBy = $this->getTableName($key).'.'.$key; + $dataBefore = $this->getFields($fields); + //restore the previous values + $this->where = $tempWhere; + $this->limit = $tempLimit; + $this->orderBy = $tempOrderBy; + $result[0] = isset($dataBefore[0]) ? $dataBefore[0] : null; + $result[1] = isset($dataAfter[0]) ? $dataAfter[0] : null; + return $result; + } + + //set the $select property and return the current object + public function select($fields = null) + { + $this->select = $fields; + return $this; + } + + //set the $from property and return the current object + public function from($tables = null) + { + $this->from = isset($tables) ? $tables : $this->_tables; + return $this; + } + + //set the on property and return the current object + public function on($joinClause = '-') + { + $this->on[] = $joinClause; + $this->using[] = null; + return $this; + } + + //set the $using property and return the current object + public function using($using = null) + { + $this->using[] = $using; + $this->on[] = null; + return $this; + } + + //set the $join property and return the current object + public function left($string = null) + { + $this->join[] = "l:$string"; + return $this; + } + + //set the $join property and return the current object + public function right($string = null) + { + $this->join[] = "r:$string"; + return $this; + } + + //set the $join property and return the current object + public function inner($string = null) + { + $this->join[] = "i:$string"; + return $this; + } + + //set the $where property and return the current object + public function where($where = array()) + { + $this->where = $where; + return $this; + } + + //append the $where array to the ::where property and return the current object + public function aWhere($where = array()) + { + $this->appendWhereQueryClause($where); + return $this; + } + + //set the $groupBy property and return the current object + public function groupBy($groupBy = null) + { + $this->groupBy = $groupBy; + return $this; + } + + //set the $orderBy property and return the current object + public function orderBy($orderBy = null) + { + $this->orderBy = $orderBy; + return $this; + } + + //set the $limit property and return the current object + public function limit($limit = null) + { + $this->limit = $limit; + return $this; + } + + //set the $listArray property + public function toList($key, $value = null) + { + $this->listArray = array($key,$value); + $this->toList = true; + return $this; + } + + //reset all the clauses of the select query + public function clear() + { + $this->select = null; + $this->where = array(); + $this->groupBy = null; + $this->orderBy = null; + $this->limit = null; + $this->from = null; + $this->on = array(); + $this->using = array(); + $this->join = array(); + $this->toList = false; + return $this; + } + + //initialize and populate the ::form property (reference to a Form_Form object) + public function setForm($defAction = null, $defSubmit = array(), $defMethod = 'POST', $defEnctype = null) + { + if (isset($this->formStruct)) + { + $action = array_key_exists('action',$this->formStruct) ? $this->formStruct['action'] : $defAction; + $submit = array_key_exists('submit',$this->formStruct) ? $this->formStruct['submit'] : $defSubmit; + $entries = array_key_exists('entries',$this->formStruct) ? $this->formStruct['entries'] : null; + $method = array_key_exists('post',$this->formStruct) ? $this->formStruct['post'] : $defMethod; + $enctype = array_key_exists('enctype',$this->formStruct) ? $this->formStruct['enctype'] : $defEnctype; + + $this->form = new Form_Form($action,$submit,$method,$enctype); + + if (isset($entries)) + { + $this->form->setEntries($entries); + } + + $copy = $this->form->entry; + + foreach ($copy as $name => $entry) + { + if (strcmp($entry->type,'Select') === 0 and isset($entry->options)) + { + if (!is_array($entry->options)) + { + if (strstr($entry->options,'foreign::')) + { + $elements = explode('::',$entry->options); + + for ($i = 0; $i < count($elements); $i++) + { + if (strcmp($elements[$i],'--') === 0) $elements[$i] = null; + } + //send the query + array_shift($elements); + $resultSet = call_user_func_array(array($this->db,'select'),$elements); + + $single = true; + + if (strstr($elements[1],',')) + { + $args = explode(',',$elements[1]); + //add the table name + $args[0] = $elements[0].'.'.$args[0]; + $args[1] = $elements[0].'.'.$args[1]; + //associative array + $single = false; + } + else + { + $args[0] = $elements[0].'.'.$elements[1]; + $args[1] = null; + } + + $list = $this->getList($resultSet,$args[0],$args[1]); + + $this->form->entry[$name]->options = ($single) ? implode(',',array_values($list)) : $list; + } + } + } + } + + } + else + { + $this->form = new Form_Form($defAction,$defSubmit,$defMethod,$defEnctype); + } + } + + //get a list from a result set + //$resultSet: the result set coming from a select query + public function getList($resultSet, $key, $value = null) + { + $list = array(); + + if (strstr($key,'.')) + { + $arr = explode('.',$key); + $keyTable = $arr[0]; + $keyField = $arr[1]; + } + else + { + $keyTable = $this->_tablesArray[0]; + $keyField = $key; + } + + if (!isset($value)) + { + foreach ($resultSet as $row) + { + $list[] = $row[$keyTable][$keyField]; + } + } + else + { + if (strstr($value,'.')) + { + $arr = explode('.',$value); + $valueTable = $arr[0]; + $valueField = $arr[1]; + } + else + { + $valueTable = $this->_tablesArray[0]; + $valueField = $value; + } + + foreach ($resultSet as $row) + { + $list[$row[$keyTable][$keyField]] = $row[$valueTable][$valueField]; + } + + } + return $list; + } + + // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT). + public function lastId() + { + return $this->db->lastId(); + } + + //send a free query + public function query($query) + { + return $this->db->query($query); + } + + //the text of the error message from previous MySQL operation + public function getError() + { + return $this->db->getError(); + } + + //the numerical value of the error message from previous MySQL operation + public function getErrno() + { + return $this->db->getErrno(); + } + + //define the abstract method to get the value of the record $id of the main table + abstract public function selectId($id); + + //define the abstract method to get the fields from the tables + abstract public function getFields(); + +} \ No newline at end of file diff --git a/Library/Model/Map.php b/Library/Model/Map.php new file mode 100755 index 0000000..7a093e1 --- /dev/null +++ b/Library/Model/Map.php @@ -0,0 +1,453 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Model_Map extends Model_Base { + +// //many to many model + + public $printAssError = 'yes'; //'yes': print association error if the association/dissociation is already present. 'no': doen't print association error + public $boxIdentifierName = 'boxIdentifier';//key of the value of the $_POST array that represent the id of the Box that we want to associate with the Item having the id $_POST[$this->identifierName] + protected $_boxIdentifierValue = null; //the id of the box that has to be associated with the item + + public function __construct() + { + //add some submit names (method => form_submit_value) + $this->submitNames['associate'] = 'associateAction'; + $this->submitNames['dissociate'] = 'dissociateAction'; + //add the allowed methods + $this->_allowedDbMethods[] = 'associate'; + $this->_allowedDbMethods[] = 'dissociate'; + parent::__construct(); + } + + public function createMapWhere($choice) + { //create the where join clause + //$choice=(first,last,all) + $first = $this->_tablesArray[0].'.'.$this->_idFieldsArray[0].'='.$this->_tablesArray[2].'.'.$this->_idFieldsArray[0]; + $last = $this->_tablesArray[1].'.'.$this->_idFieldsArray[1].'='.$this->_tablesArray[2].'.'.$this->_idFieldsArray[1]; + switch ($choice) { + case 'first': + return $first; + break; + case 'last': + return $last; + break; + case 'all': + return $first. ' and '.$last; + break; + } + } + + //check if a join query is necessary or not + //$val: 0 or 1 (items or boxes) + //$whereClauseLevel: array containing the field=>value statements of the where clause. If $whereClause = null than $this->where is considered + public function checkIfJoinNeeded($val, $whereClauseLevel = null) + { + $whereClause = isset($whereClauseLevel) ? $whereClauseLevel : $this->where; + + foreach ($whereClause as $field => $value) + { + if (is_array($value)) + { + if ($this->checkIfJoinNeeded($val, $value) === true) return true; + } + else + { + if (strcmp($this->getTableName($field),$this->_tablesArray[$val]) !== 0) + { + if (strcmp($value,Params::$nullQueryValue) !== 0 or (Params::$nullQueryValue === false)) return true; + } + } + } + //return false if no where clause has been defined + return false; + } + + //method to create the where clause and the list of tables of the select query + public function mapQueryElements($val) + { +// $val = $element === 'Items' ? 0 : 1; + $tables = $this->_tablesArray[$val]; + $where = null; + $fields = $this->_tablesArray[$val].'.*'; + + if ($this->checkIfJoinNeeded($val)) + { + $tables = $this->_tables; + $fields = $this->_tablesArray[$val].'.*'; + $wherePlus = $this->createWhereClause(); + $wherePlus = isset($wherePlus) ? ' AND ' . $wherePlus : null; + $where = $this->createMapWhere('all') . $wherePlus; + } + else + { + $where = $this->createWhereClause(); + } + + return array('tables' => $tables,'where' => $where,'fields' => $fields); + } + + //$element: Items or Boxes. + //get all Item or Boxes + public function getAll($element = 'Items') + { + return $this->getFields('',$element); + } + + //method to get the values of the selected fields + //$fields: the fields that have to be excracted from the tableName + public function getFields($fields = '',$element = 'Items') + { + //get all Item or Boxes + if ((strcmp($element,'Items') !== 0) and (strcmp($element,'Boxes') !== 0)) + { + throw new Exception('"'.$element. '" argument not allowed in '.__METHOD__.' method'); + } + $val = $element === 'Items' ? 0 : 1; + + $elements = $this->mapQueryElements($val); + + $queryFields = (strcmp($fields,'') === 0) ? $elements['fields'] : $fields; + + return $row = $this->db->select($elements['tables'],$queryFields,$elements['where'],$this->groupBy,$this->orderBy,$this->limit); + + } + + public function send($element = 'Items') + { + $table = $this->getFields($this->select, $element); + + if ($this->toList) + { + $key = $this->listArray[0]; + $value = isset($this->listArray[1]) ? $this->listArray[1] : null; + $this->toList = false; + return $this->getList($table, $key, $value); + } + else + { + return $table; + } + } + + //the fields that have to be extracted from the table + public function getTable($fields = null) + { + return isset($fields) ? $this->getFields($fields) : $this->getAll(); + } + + //select the values of a specified record + //$id: the id (primary key) of the record + //$fields: the comma separated list of fields that have to be extracted + public function selectId($id,$fields = null) + { + $id = (int)$id; + + $tempWhere = $this->where; + $this->setWhereQueryClause(array($this->_idFieldsArray[0] => $id)); + + if (isset($fields)) + { + $values = $this->getFields($fields,'Items'); + } + else + { + $values = $this->getAll('Items'); + } + + $this->where = $tempWhere; + + return (count($values) > 0) ? $values[0][$this->_tablesArray[0]] : array(); + } + + //get the number of records (items or boxes) + public function recordNumber($element) + { + $val = $element === 'Items' ? 0 : 1; + + $elements = $this->mapQueryElements($val); + return $this->db->get_num_rows($elements['tables'],$elements['where'],$this->groupBy); + } + + //get the number of records (only items) + public function rowNumber() + { + return $this->recordNumber('Items'); + } + + public function getMax($field) + { + $elements = $this->mapQueryElements(0); + return $this->db->getMax($elements['tables'],$field,$elements['where'],$this->groupBy); + } + + public function getMin($field) + { + $elements = $this->mapQueryElements(0); + return $this->db->getMin($elements['tables'],$field,$elements['where'],$this->groupBy); + } + + public function getSum($field) + { + $elements = $this->mapQueryElements(0); + return $this->db->getSum($elements['tables'],$field,$elements['where'],$this->groupBy); + } + + public function getAvg($field) + { + $elements = $this->mapQueryElements(0); + return $this->db->getAvg($elements['tables'],$field,$elements['where'],$this->groupBy); + } + + //check if the table has the field $field equal to $value + public function has($field,$value) + { + $elements = $this->mapQueryElements(0); + return $this->db->recordExists($elements['tables'],$field,$value,$elements['where'],$this->groupBy); + } + + //associate an item with a box + //$idItem : name of the field of the Items table, $idGroup : name of the field of the Boxes table + public function associate($idItem = null,$idGroup = null) + { + $this->queryResult = false; + if (isset($idItem) and isset($idGroup)) + { + $idItem = (int)$idItem; + $idGroup = (int)$idGroup; + $values = array($idItem,$idGroup); //values relative to the fields $this->_idFields + $var = $this->checkAssociation($idItem,$idGroup); + if (!$var) + { + $result = $this->db->insert($this->_tablesArray[2],$this->_idFields,$values); + $this->setNotice($result); + return $result; + } + else + { + if (strcmp($this->printAssError,'yes') === 0) $this->notice = $this->_resultString->getString('linked'); + $this->result = false; + } + } + else + { + $this->notice = $this->_resultString->getString('no-id'); + $this->result = false; + } + return false; + } + + //associate an item with a box + //$idItem : name of the field of the Items table, $idGroup : name of the field of the Boxes table + public function dissociate($idItem = null,$idGroup = null) + { + $this->queryResult = false; + if (isset($idItem) and isset($idGroup)) + { + $idItem = (int)$idItem; + $idGroup = (int)$idGroup; + $var = $this->checkAssociation($idItem,$idGroup); + if ($var) + { + $result = $this->db->del($this->_tablesArray[2],$this->_idFieldsArray[0].'='.$idItem.' and '.$this->_idFieldsArray[1].'='.$idGroup); + $this->setNotice($result); + return $result; + } + else + { + if (strcmp($this->printAssError,'yes') === 0) $this->notice = $this->_resultString->getString('not-linked'); + $this->result = false; + } + } + else + { + $this->notice = $this->_resultString->getString('no-id'); + $this->result = false; + } + return false; + } + + public function checkAssociation($idItem,$idGroup) + { + $idItem = (int)$idItem; + $idGroup = (int)$idGroup; + $numRow = $this->db->get_num_rows($this->_tablesArray[2],$this->_idFieldsArray[0].'='.$idItem.' and '.$this->_idFieldsArray[1].'='.$idGroup); + if ($numRow === 1) + { + return true; + } + else + { + return false; + } + } + + //check what items are associate to a box + //itemsArray:array of items to check + public function checkAssociationDeep($itemsArray) + { + $associatedItems = array(); + $itemsArray = is_array($itemsArray) ? array_values($itemsArray) : array($itemsArray); + foreach ($itemsArray as $item) { + if ($this->db->recordExists($this->_tablesArray[2],$this->_idFieldsArray[0],$item)) + { + $associatedItems[] = $item; + } + } + return $associatedItems; + } + + //method to call the delete query (overriding of the del method of Model.php) + //check the referential integrity + public function del($id = null, $whereClause = null) + { + $this->queryResult = false; + + if (isset($whereClause)) + { + return parent::del(null,$whereClause); + } + else + { + if ($this->_onDelete === 'check') + { + if ($this->db->recordExists($this->_tablesArray[2],$this->_idFieldsArray[0],(int)$id)) + { + $this->notice = $this->_resultString->getString('associate'); + $this->identifierValue = null; + $this->result = false; + } + else + { + return parent::del((int)$id); + } + } + else if ($this->_onDelete === 'nocheck') + { + return parent::del((int)$id); + } + } + return false; + } + + //override of the updateTable method of the parent class + //method that calls the function indicated in $this->submitNames. Ex: if $_POST['delAction'] is found, then the "del" method is called. + public function updateTable($methodsList = '',$id = null) + { + $allowedMethodsArray = explode(',',$methodsList); + $resultArray = array(); + $this->identifierValue = null; + if (isset($id)) + { + $this->identifierValue = (int)$id; + } + else if (isset($_POST[$this->identifierName])) + { + $this->identifierValue = (int)$_POST[$this->identifierName]; + } + foreach ($this->submitNames as $methodName => $submitName) { + if (array_key_exists($submitName,$_POST)) + { + $this->submitName = $submitName; + if (method_exists($this,$methodName)) + { + if (in_array($methodName,$allowedMethodsArray)) + { + if ($this->checkConditions($methodName,$this->identifierValue)) + { + $this->notice = null; + $methodArray = array('associate','dissociate'); + if (in_array($methodName,$methodArray)) + { + $this->_boxIdentifierValue = null; + if (isset($_POST[$this->boxIdentifierName])) + { + $this->_boxIdentifierValue = (int)$_POST[$this->boxIdentifierName]; + } + call_user_func_array(array($this,$methodName),array($this->identifierValue,$this->_boxIdentifierValue)); + } + else + { + call_user_func_array(array($this,$methodName),array($this->identifierValue)); + } + } + } + } + else + { + throw new Exception('method "'.$methodName. '" not defined in class '.__CLASS__.'; error in method '.__METHOD__); + } + return; //only one cycle! + } + } + } + + //method to obtain one columns from the tables $this->_tablesArray as an associative array + //$valueField: the column that have to be extracted (array_values of the resulting associative array), $keyField: the column that have to play the role of array_keys + //$valueField = field:table, $keyField = field:table + public function getFieldArray($valueField,$keyField = null, $groupBy = null, $orderBy = null, $limit = null) + { + + $keyField = isset($keyField) ? $keyField : $valueField; + $valueFieldArray = explode(':',$valueField); + $keyFieldArray = explode(':',$keyField); + + $keyFieldTable = $keyFieldArray[0]; + $valueFieldTable = $valueFieldArray[0]; + + $keyFieldName = $keyFieldArray[1]; + $valueFieldName = $valueFieldArray[1]; + + $fields = implode('.',$keyFieldArray) . ',' . implode('.',$valueFieldArray); + + $temp = $this->where; //save the $this->where array + $this->where = array(); + + $val = array_search($keyFieldTable,$this->_tablesArray); + + if (strcmp($keyFieldTable,$valueFieldTable) !== 0) + { + throw new Exception("the tables '$valueFieldTable' and '$keyFieldTable' do not match in ".__METHOD__); + } + + if ($val === false or !in_array($val,array(0,1))) + { + throw new Exception("the table '$keyFieldTable' is not allowed in ".__METHOD__); + } + + $elements = $this->mapQueryElements($val); + + $table = $this->db->select($elements['tables'],$fields,$elements['where'],$groupBy,$orderBy,$limit); + $this->where = $temp; + + $returnArray = array(); + foreach ($table as $record) { + $returnArray[$record[$keyFieldTable][$keyFieldName]] = $record[$valueFieldTable][$valueFieldName]; + } + + return $returnArray; + + } + +} \ No newline at end of file diff --git a/Library/Model/Tree.php b/Library/Model/Tree.php new file mode 100755 index 0000000..f7f95ea --- /dev/null +++ b/Library/Model/Tree.php @@ -0,0 +1,307 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Model_Tree extends Model_Base { + + public function __construct() { + parent::__construct(); + } + + //method to create the first part of where clause + //$index: the index of $this->_tablesArray + public function createTreeWhere($index) { + if (!empty($this->on)) + { + return $this->on; + } + else + { + $whereArray = array(); + for ($i = $index; $i < (count($this->_tablesArray)-1); $i++) + { + $whereArray[] = $this->_tablesArray[$i].'.'.$this->_idFieldsArray[$i+1].'='.$this->_tablesArray[$i+1].'.'.$this->_idFieldsArray[$i+1]; + } + $whereString = !empty($whereArray) ? implode(' and ',$whereArray) : null; + return $whereString; + } + } + + //create the list of tables of the select query + //$index: the index of $this->_tablesArray + public function createTablesList($index) { + if (isset($this->from)) + { + return $this->from; + } + else + { + $tablesString = null; + for ($i = $index; $i < (count($this->_tablesArray)-1); $i++) + { + $tablesString .= $this->_tablesArray[$i] . ','; + } + $tablesString .= $this->_tablesArray[count($this->_tablesArray)-1]; + return $tablesString; + } + } + + //method to create the list of fields of the select query + public function createFieldsList($index) { + $fieldsString = null; + for ($i = $index; $i < (count($this->_tablesArray)-1); $i++) + { + $fieldsString .= $this->_tablesArray[$i] . '.*,'; + } + $fieldsString .= $this->_tablesArray[count($this->_tablesArray)-1].'.*'; + return $fieldsString; + } + + + //method to create the where clause and the list of tables and fields of the select query + //$tableName: the table name ($this->_tablesArray) + //$choice:all->all the tables in $this->_arrayTables, other value->only the table of $this->_arrayTables ad index $index + //return: $elements = array('tables'=>$tables,'where'=>$where,'fields'=>$fields) + public function treeQueryElements($tableName,$choice = 'all') + { + $index = array_search($tableName,$this->_tablesArray); + $subArray = ($choice === 'all') ? array_slice($this->_tablesArray,$index) : array($tableName); //this array is necessary to verify that the where clause makes sense + $tables = ($choice === 'all') ? $this->createTablesList($index) : $tableName; + $where = ($choice === 'all') ? $this->createTreeWhere($index) : null; + $fields = ($choice === 'all') ? $this->createFieldsList($index) : $tableName.'.*'; + + $wherePlus = $this->createWhereClause(); + + if (empty($this->on)) + { + $on = array(); + + if (isset($where) and isset($wherePlus)) + { + $where .= ' AND ' . $wherePlus; + } + else if (!isset($where) and isset($wherePlus)) + { + $where .= $wherePlus; + } + } + else + { + $on = $where; + $where = $wherePlus; + } + + return array('tables' => $tables,'where' => $where,'fields'=>$fields,'on'=>$on); + } + + + //method to obtain the values of the whole tree + //$choice:all->all the tables in $this->_arrayTables, other value->only the table of $this->_arrayTables ad index $index + public function getAll($choice = 'all') { + return $this->getFields('',$choice); + } + + //method to get the values of the selected fields + //it walks the tree by means of a join query + //$fields: the fields that have to be excracted from the tableName + public function getFields($fields = '',$choice = 'all') + { + $elements = $this->treeQueryElements($this->_tablesArray[0],$choice); + + $queryFields = (strcmp($fields,'') === 0) ? $elements['fields'] : $fields; + + return $row = $this->db->select($elements['tables'],$queryFields,$elements['where'],$this->groupBy,$this->orderBy,$this->limit,$elements['on'],$this->using,$this->join); + } + + public function send() + { + $table = $this->getFields($this->select); + + if ($this->toList) + { + $key = $this->listArray[0]; + $value = isset($this->listArray[1]) ? $this->listArray[1] : null; + $this->toList = false; + return $this->getList($table, $key, $value); + } + else + { + return $table; + } + } + + //call the getAll method with $tableName = $this->_tablesArray[0] + //the fields that have to be extracted from the table + public function getTable($fields = null) { + return isset($fields) ? $this->getFields($fields) : $this->getAll(); + } + + //select the values of a specified record + //$id: the id (primary key) of the record + //$fields: the comma separated list of fields that have to be extracted + public function selectId($id,$fields = null) { + $tempWhere = $this->where; + $this->setWhereQueryClause(array($this->_idFieldsArray[0] => (int)$id)); + + $this->using = null; + + if (isset($fields)) + { + $values = $this->getFields($fields,'other'); + } + else + { + $values = $this->getAll('other'); + } + + $this->where = $tempWhere; + + return (count($values) > 0) ? $values[0][$this->_tablesArray[0]] : array(); + + } + + //get the number of records () + //the number of records of the table $tableName is returned + public function rowNumber() { + $elements = $this->treeQueryElements($this->_tablesArray[0]); + return $this->db->get_num_rows($elements['tables'],$elements['where'],$this->groupBy,$elements['on'],$this->using,$this->join); + } + + public function getMax($field) + { + $elements = $this->treeQueryElements($this->_tablesArray[0]); + return $this->db->getMax($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using,$this->join); + } + + public function getMin($field) + { + $elements = $this->treeQueryElements($this->_tablesArray[0]); + return $this->db->getMin($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using,$this->join); + } + + public function getSum($field) + { + $elements = $this->treeQueryElements($this->_tablesArray[0]); + return $this->db->getSum($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using,$this->join); + } + + public function getAvg($field) + { + $elements = $this->treeQueryElements($this->_tablesArray[0]); + return $this->db->getAvg($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using,$this->join); + } + + //check if the table has the field $field equal to $value + public function has($field,$value) + { + $elements = $this->treeQueryElements($this->_tablesArray[0]); + return $this->db->recordExists($elements['tables'],$field,$value,$elements['where'],$this->groupBy,$elements['on'],$this->using,$this->join); + } + +// //get the number of records of the table $this->_tablesArray[0] +// public function rowNumber() { +// return $this->recordNumber($this->_tablesArray[0]); +// } + + //method to call the delete query (overriding of the del method of Model.php) + //check the referential integrity + public function del($id = null, $whereClause = null) + { + $this->queryResult = false; + + if (isset($whereClause)) + { + return parent::del(null,$whereClause); + } + else + { + if ($this->_onDelete === 'check' and isset($this->_reference)) + { + if (isset($this->_reference[0]) and isset($this->_reference[1])) + { + if ($this->db->recordExists($this->_reference[0],$this->_reference[1],(int)$id)) + { + $this->notice = $this->_resultString->getString('associate'); + $this->identifierValue = null; + $this->result = false; + } + else + { + return parent::del((int)$id); + } + } + else + { + throw new Exception('you have forgotten to set \'$this->_reference\' or you have forgotten to set $this->_onDelete = \'nocheck\''); + } + } + else + { + return parent::del((int)$id); + } + } + return false; + } + + //method to obtain one columns from the tables $this->_tablesArray as an associative array + //$valueField: the column that have to be extracted (array_values of the resulting associative array), $keyField: the column that have to play the role of array_keys + public function getFieldArray($valueField,$keyField = null, $groupBy = null, $orderBy = null, $limit = null) { + + $keyField = isset($keyField) ? $keyField : $valueField; + $valueFieldArray = explode(':',$valueField); + $keyFieldArray = explode(':',$keyField); + + $keyFieldTable = $keyFieldArray[0]; + $valueFieldTable = $valueFieldArray[0]; + + $keyFieldName = $keyFieldArray[1]; + $valueFieldName = $valueFieldArray[1]; + + $fields = implode('.',$keyFieldArray) . ',' . implode('.',$valueFieldArray); + + $temp = $this->where; //save the $this->where array + $this->where = array(); + + if (strcmp($keyFieldTable,$valueFieldTable) !== 0) { + throw new Exception("the tables '$valueFieldTable' and '$keyFieldTable' do not match in ".__METHOD__); + } + + if (!in_array($keyFieldTable,$this->_tablesArray)) { + throw new Exception("the table '$keyFieldTable' is not allowed in ".__METHOD__); + } + + $elements = $this->treeQueryElements($keyFieldTable,''); + + $table = $this->db->select($elements['tables'],$fields,$elements['where'],$groupBy,$orderBy,$limit,$elements['on'],$this->using); + $this->where = $temp; + + $returnArray = array(); + foreach ($table as $record) { + $returnArray[$record[$keyFieldTable][$keyFieldName]] = $record[$valueFieldTable][$valueFieldName]; + } + + return $returnArray; + + } + +} \ No newline at end of file diff --git a/Library/Model/index.html b/Library/Model/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Library/Model/index.html @@ -0,0 +1 @@ + diff --git a/Library/Params.php b/Library/Params.php new file mode 100644 index 0000000..e5f5ab7 --- /dev/null +++ b/Library/Params.php @@ -0,0 +1,66 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class containing all the parameters necessary to EasyGiant to work properly +class Params +{ + + //allowed database type + public static $allowedDb = array('Mysql','Mysqli','None'); + + //allowed sanitize functions + public static $allowedSanitizeFunc = 'sanitizeAll,sanitizeDb,sanitizeHtml,forceInt,forceNat,none,md5,sha1'; + + //allowed hash functions + public static $allowedHashFunc = array('md5','sha1'); + + //conventional null value for the value of the field in the createWhereClause method of the Model class + public static $nullQueryValue = false; + + //use HTTPS for links or not + public static $useHttps = false; + + //class name of the div that contains the error strings + public static $errorStringClassName = 'alert'; + + //table name in the returning structure of the select queries in the case of an aggregate function. Ex count(*),sum(*) + public static $aggregateKey = 'aggregate'; + + //htmlentities function charset + //see http://php.net/manual/en/function.htmlentities.php for a complete list of the allowed values + public static $htmlentititiesCharset = DEFAULT_CHARSET; + + //list of symbols used in the statements of the where clause of the select queries + public static $whereClauseSymbolArray = array('<','>','!=','<=','>=','in(','not in(','like'); + + //is the mbstring extension enabled? + public static $mbStringLoaded = false; + + //subfolder of the View folder where to look for view files + public static $viewSubfolder = null; + + //global website language used by the models and by the helpers + public static $language = 'It'; + +} diff --git a/Library/Popup.php b/Library/Popup.php new file mode 100755 index 0000000..186e4b3 --- /dev/null +++ b/Library/Popup.php @@ -0,0 +1,32 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to contain the values of the popup menù of the scaffold +class Popup { + + public $name; //the name of the popup + public $itemsName = array(); //array containing the names of the different items of the list (popup) + public $itemsValue = array(); //array containing the values of the different items of the list (popup) + +} diff --git a/Library/Request.php b/Library/Request.php new file mode 100644 index 0000000..d99585d --- /dev/null +++ b/Library/Request.php @@ -0,0 +1,56 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//manage the associative arrays inside the request ($_GET,$_POST,$_COOKIE) +class Request +{ + + public function get($name, $default = null, $func = 'none') + { + if (!function_exists($func)) + { + throw new Exception('Error in '.__METHOD__.': function '.$func. ' does not exists'); + } + return isset($_GET[$name]) ? call_user_func($func,$_GET[$name]) : $default; + } + + public function post($name, $default = null, $func = 'none') + { + if (!function_exists($func)) + { + throw new Exception('Error in '.__METHOD__.': function '.$func. ' does not exists'); + } + return isset($_POST[$name]) ? call_user_func($func,$_POST[$name]) : $default; + } + + public function cookie($name, $default = null, $func = 'none') + { + if (!function_exists($func)) + { + throw new Exception('Error in '.__METHOD__.': function '.$func. ' does not exists'); + } + return isset($_COOKIE[$name]) ? call_user_func($func,$_COOKIE[$name]) : $default; + } + +} \ No newline at end of file diff --git a/Library/Scaffold.php b/Library/Scaffold.php new file mode 100755 index 0000000..7e43134 --- /dev/null +++ b/Library/Scaffold.php @@ -0,0 +1,304 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +//class to manage the scaffold of the controller +class Scaffold +{ + + protected $_type = null; //the type of the scaffold. It can be 'main' or 'form' + protected $_queryType = null; //it can be insert or update + + protected $_primaryKey = null; //the primary key of the table + protected $_controller = null; //the name of the controller + + public $model = null; //the reference to the model associated with the controller + + public $viewArgs = array(); //the associative array representing the status args of the main action of the controller. + + public $params = array(); //associative array containing the parameters of the scaffold + public $html = array(); //associative array containing the HTML of the scaffold ('pageList'=>HTML,..) + + public $mainMenu = null; //the reference to the MenuHelper object + public $pageList = null; //the reference to the PageDivisionHelper object + public $itemList = null; //the reference to the ListHelper object + public $popupMenu = null; //the reference to the PopupHelper object + + public $form = null; //the reference to the form object + public $entries = null; //the entries of the form (string having entries separated by comma) + public $values = array(); //the values inserted in the form (taken from the table if $this->queryType === 'update' or if an error occured during the databse query, otherwise taken from the $_POST array) + + //the list of fields of the select query + public $fields = null; + + //instance of Lang_{language}_Generic + public $strings = null; + + public function __construct($type,$controller,$model,$viewArgs,$params = null) { + + $this->_type = $type; + $this->_controller = $controller; + $this->model = $model; + $this->viewArgs = $viewArgs; + + //get the generic language class + $this->strings = Factory_Strings::generic(Params::$language); + + $autoParams = array( + 'mainAction' => 'main', + 'modifyAction' => 'form/update', + 'associateAction' => 'associate', + 'panelController' => 'panel', + 'pageList' => true, + 'pageVariable' => 'page', + 'recordPerPage' => 10, + 'mainMenu' => 'panel,add', + 'formMenu' => 'panel,back', + 'postSubmitValue' => 'Save', + 'popup' => false, + 'popupType' => 'exclusive' + ); + + //set the $this->scaffold->params array + if (is_array($params)) { + foreach ($params as $key => $value) { + $autoParams[$key] = $value; + } + } + $this->params = $autoParams; + + } + + //ad some clauses to the select query + //whereArray = array ($table_field => $value) + public function appendWhereQueryClause($whereArray) + { + $this->model->appendWhereQueryClause($whereArray); + } + + //set clauses to the select query + //whereArray = array ($table_field => $value) + public function setWhereQueryClause($whereArray) + { + $this->model->setWhereQueryClause($whereArray); + } + + //initialize the main scaffold (ListHelper) + //$recordList: field of the table to show, $primaryKey: the key of the table + public function loadMain($recordList,$primaryKey,$theme = 'edit,del') + { + $this->_primaryKey = $primaryKey; + + if (strcmp($recordList,'') !== 0) + { + $recordListArray = explode(',',$recordList); + foreach ($recordListArray as $record) { + $this->itemList->addItem("simpleText",";$record;"); + } + } + + $themeArray = explode(',',$theme); + + if (strcmp($theme,'') !== 0) + { + foreach ($themeArray as $el) + { + switch ($el) + { + case 'moveup': + $this->itemList->addItem('moveupForm',$this->_controller.'/'.$this->params['mainAction'],";".$primaryKey.";"); + break; + case 'movedown': + $this->itemList->addItem('movedownForm',$this->_controller.'/'.$this->params['mainAction'],";".$primaryKey.";"); + break; + case 'link': + $this->itemList->addItem('associateForm',$this->_controller.'/'.$this->params['associateAction'],";".$primaryKey.";"); + break; + case 'edit': + $this->itemList->addItem('editForm',$this->_controller.'/'.$this->params['modifyAction'],";".$primaryKey.";"); + break; + case 'del': + $this->itemList->addItem('delForm',$this->_controller.'/'.$this->params['mainAction'],";".$primaryKey.";"); + break; + case 'ledit': + $this->itemList->addItem('ledit',$this->_controller.'/'.$this->params['mainAction'].'/;'.$primaryKey.';','Edit','Edit'); + break; + } + } + } + + } + + //initialize the form + //$queryType = insert/update + //$action: the action of the form (controller/action/queryString) + public function loadForm($queryType,$action,$method = 'POST',$enctype = null) + { + $this->queryType = $queryType; + $submitName = $this->model->getSubmitName($queryType); + $value = $this->params['postSubmitValue']; + $viewStatus = Url::createUrl(array_values($this->viewArgs)); + $this->model->setForm($action.$viewStatus,array($submitName => $value),$method,$enctype); + $this->form = $this->model->form; + } + + //function to obtain the values to use in the form + //$func = function to validate the values + //$id = the id of the record (used if $_POST[$this->m[$this->model]->identifierName] is not present) + public function getFormValues($func = 'sanitizeHtml',$id = null,$defaultValues = array(),$functionsIfFromDb = array()) + { + if ($this->_type === 'form') + { + $this->values = $this->model->getFormValues($this->queryType,$func,$id,$defaultValues,$functionsIfFromDb); + } + } + + //set the head of the table + //$columnsName: name of the columns. It has to be a comma-separated list of strings + public function setHead($columnsName) + { + $this->itemList->setHead($columnsName); + } + + //method to set the type of the entries of the form + //$entries: string containing the list of the entries where each entry is separated by comma: entry1,entry2,entry3 + //$entryType: associative array that describes the entries of the form. The key is the entry name while the value is the entry type (textarea,inputText,etc) + public function setFormEntries($entries = 'model',$entryType = array(),$optionsArray = array()) + { + if ($this->_type === 'form') + { + if ($entries === 'model') + { + $this->entries = $this->model->fields; + if ($this->queryType === 'update') + { + $this->entries .= ','. $this->model->identifierName; + } + } + else + { + $this->entries = null; + } + $entriesArray = explode(',',$this->entries); + if (isset($this->form)) + { + foreach ($entriesArray as $entry) + { + $type = isset($entryType[$entry]) ? $entryType[$entry] : 'InputText'; + $options = isset($optionsArray[$entry]) ? $optionsArray[$entry] : null; + $this->form->setEntry($entry,$type,$options); + } + if ($this->queryType === 'update') + { + $this->form->setEntry($this->model->identifierName,'Hidden'); + } + } + else + { + throw new Exception('form object has not been initialized. Call the scaffold->loadForm method before'); + } + } + } + + //add an item to the list of items + public function addItem($type, $action = '', $field = '', $name = '', $value = '', $title = '') { + if ($this->_type === 'main') { + $this->itemList->addItem($type, $action, $field, $name, $value, $title); + } + } + + //update the table + public function update($methodsList = '',$id = null) { + $this->model->updateTable($methodsList,$id); + } + + //method to create the HTML of the scaffold + //$values: the values to insert in the from entries + public function render($values = null,$subset = null) + { + + if ($this->_type === 'main') + { + + $recordNumber = $this->model->rowNumber(); + + if (isset($this->viewArgs[$this->params['pageVariable']])) + { + $page = $this->viewArgs[$this->params['pageVariable']]; + } + else + { + $this->params['pageList'] = false; + } + + $recordPerPage = $this->params['recordPerPage']; + + if ($this->params['pageList'] === true) + { + $this->model->limit = $this->pageList->getLimit($page,$recordNumber,$recordPerPage); + $this->html['pageList'] = $this->pageList->render((int)($page-2),5); + $position = array($page,$this->pageList->getNumbOfPages()); + } + else + { + $this->model->limit = null; + $this->html['pageList'] = null; + $position = array(1,1); + } + + $values = $this->model->getTable($this->fields); + + $primaryKey = $this->_primaryKey; + + //pass the variable position + $this->itemList->position = $position; + $this->html['main'] = $this->itemList->render($values); + + $this->html['menu'] = $this->mainMenu->render($this->params['mainMenu']); + + $popupHtml = null; + if ($this->params['popup'] === true) + { + $this->html['popup'] = $this->popupMenu->render(); + $popupHtml = "
        \n".$this->html['popup']."\n
        \n"; + } + + $this->html['all'] = "\n".$this->model->notice."\n $popupHtml \n
        \n".$this->html['main']."\n
        \n"."
        \n
        \n".$this->strings->gtext('pages').": ".$this->html['pageList']."
        \n
        \n\n"; + + } + else if ($this->_type === 'form') + { + + $subset = (!isset($subset)) ? $this->entries : $subset; + $values = (!isset($values)) ? $this->values : $values; + $this->html['menu'] = $this->mainMenu->render($this->params['formMenu']); + $this->html['main'] = $this->form->render($values,$subset); + $this->html['all'] = "\n".$this->model->notice."\n
        \n".$this->html['main']."
        \n"; + + } + + return $this->html['all']; + + } + +} \ No newline at end of file diff --git a/Library/Strings/Functions.php b/Library/Strings/Functions.php new file mode 100644 index 0000000..1ee17af --- /dev/null +++ b/Library/Strings/Functions.php @@ -0,0 +1,47 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + + +function eg_strlen($string) +{ + return Params::$mbStringLoaded === true ? mb_strlen($string,DEFAULT_CHARSET) : strlen($string); +} + + +function eg_strtoupper($string) +{ + return Params::$mbStringLoaded === true ? mb_strtoupper($string,DEFAULT_CHARSET) : strtoupper($string); +} + + +function eg_strtolower($string) +{ + return Params::$mbStringLoaded === true ? mb_strtolower($string,DEFAULT_CHARSET) : strtolower($string); +} + + +// function eg_substr($string, $start, $length) +// { +// return Params::$mbStringLoaded === true ? mb_strtolower($string,DEFAULT_CHARSET) : strtolower($string); +// } \ No newline at end of file diff --git a/Library/Theme.php b/Library/Theme.php new file mode 100755 index 0000000..fe938ee --- /dev/null +++ b/Library/Theme.php @@ -0,0 +1,100 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Theme { + + protected $_data = array(); + protected $_viewFiles = array(); //view files to require + protected $_lastView = null; + + public $baseUrl = null; //the base url of the website: http://domainname + public $baseUrlSrc = null; //the base url of the website (http://domainname) in the case MOD_REWRITE_MODULE has been set to false + + public $viewArgs = array(); + public $viewStatus = ''; + public $controller = 'controller'; + public $action = ''; + public $currPage; //the URL of the current page + + function __construct($controller) { + + $this->controller = $controller; + $this->baseUrl = MOD_REWRITE_MODULE === true ? '': '/index.php'; + $this->baseUrlSrc = ''; + } + + + public function set($values) + { + $this->_data = $values; + } + + public function append($values) + { + $this->_data = array_merge($this->_data,$values); + } + + //clean the $this->viewFiles array + public function clean() { + $this->_viewFiles = array(); + $this->_lastView = null; + } + + public function load($fileName,$option = 'none') { + if ((strcmp($option,'last') !== 0) and (strcmp($option,'none') !== 0)) { + throw new Exception('"'.$option. '" argument not allowed in '.__METHOD__.' method'); + } + if ($option === 'last') { + $this->_lastView = $fileName; + } else { + $this->_viewFiles[] = $fileName; + } + } + + + public function render() { + extract($this->_data); + + //find the View subfolder where to look for view files + $subfolder = isset(Params::$viewSubfolder) ? Params::$viewSubfolder . DS : null; + + foreach ($this->_viewFiles as $file) { + if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $file . '.php')) { + include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $file . '.php'); + } else { + include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. $file . '.php'); + } + } + + if (isset($this->_lastView)) { + if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $this->_lastView . '.php')) { + include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $this->_lastView . '.php'); + } else { + include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. $this->_lastView . '.php'); + } + } + + } + +} diff --git a/Library/Url.php b/Library/Url.php new file mode 100755 index 0000000..efb8e6e --- /dev/null +++ b/Library/Url.php @@ -0,0 +1,56 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Url { + + //get the url starting from the root folder + public static function getRoot($pathFromRootFolder = null) { + + $protocol = Params::$useHttps ? "https" : "http"; + + $url = MOD_REWRITE_MODULE === true ? "$protocol://" . DOMAIN_NAME . '/' . $pathFromRootFolder : "$protocol://" . DOMAIN_NAME . '/index.php/' . $pathFromRootFolder; + return $url; + } + + //create an url string (element1/element2/element4) from the values of the array $valuesArray considering only the elements indicated in the numeric string $numericString (in this case '1,2,4') + public static function createUrl($valuesArray,$numericString = null) { + $elementsArray = explode(',',$numericString); + $valuesArray = array_values($valuesArray); + $urlString = null; + for ($i = 0; $i < count($valuesArray); $i++) + { + if (isset($numericString)) { + if (isset($valuesArray[$i]) and in_array($i,$elementsArray)) { + $urlString .= "/".$valuesArray[$i]; + } + } else { + if (isset($valuesArray[$i])) { + $urlString .= "/".$valuesArray[$i]; + } + } + } + return $urlString; + } + +} diff --git a/Library/Users/CheckAdmin.php b/Library/Users/CheckAdmin.php new file mode 100755 index 0000000..54deb2a --- /dev/null +++ b/Library/Users/CheckAdmin.php @@ -0,0 +1,386 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Users_CheckAdmin { + + public $status = array(); + + protected $_sessionsTable; //table containing all the sessions + protected $_usersTable; //table containing all the users + protected $_groupsTable; //table containing all the groups + protected $_manyToManyTable; //table for many to many relationships + protected $_accessesTable; //table containing all the accesses to admin side + protected $uid = null; + protected $_token = null; //token used in order to defense against CSRF (cross sire request forgeries) + protected $_login; //login action + protected $_main; //main action + protected $_retype; //retype (the password) action + protected $_db; //reference to the database layer class + protected $_params = array(); //the parameters of the object + + public function __construct($params = null) { + $this->_params = $params; + + $this->_sessionsTable = $params['sessionsTable']; + $this->_usersTable = $params['usersTable']; + $this->_groupsTable = $params['groupsTable']; + $this->_manyToManyTable = $params['manyToManyTable']; + $this->_accessesTable = $params['accessesTable']; + $this->_login = Url::getRoot(null) . $params['users_controller'] . '/' . $params['users_login_action'] ; + $this->_main = Url::getRoot(null) . $params['panel_controller'] . '/' . $params['panel_main_action'] ; + $this->_retype = Url::getRoot(null) . $params['users_controller'] . '/' . $params['hijacking_action'] ; + $this->_db = Factory_Db::getInstance($params['database_type']); + } + + private function acquireCookie() { #obtain cookie + #cookie + $this->uid = NULL; + global $_COOKIE; + $this->uid = isset($_COOKIE[$this->_params['cookie_name']]) ? sanitizeAlnum($_COOKIE[$this->_params['cookie_name']]) : null; + } + + private function cleanSessions() + { + #cancello le sessioni scadute + $row = $this->_db->select($this->_sessionsTable,'creation_date',"uid='".$this->uid."'"); + if ($row) + { + if ($row[0][$this->_sessionsTable]['creation_date']) + { + if($row[0][$this->_sessionsTable]['creation_date'] + $this->_params['session_expire'] <= time()) + { + setcookie($this->_params['cookie_name'],'',time()-3600,$this->_params['cookie_path']); + } + } + } + $this->_db->del($this->_sessionsTable,"creation_date + " . $this->_params['session_expire'] . " <= ".time()); + } + + public function checkStatus() + { #controlla se l'utente è già loggato + $this->acquireCookie(); #ottengo il cookie + $this->cleanSessions(); #elimino le sessioni vecchie + $row=$this->_db->select($this->_usersTable.','.$this->_sessionsTable,$this->_usersTable.'.id_user,username,token,user_agent',$this->_usersTable.".id_user=".$this->_sessionsTable.".id_user and uid='".$this->uid."'"); + if (count($row) === 1 and $row !== false) + { + $this->status['user']=$row[0][$this->_usersTable]['username']; + $this->status['status']='logged'; + $this->status['id_user']=$row[0][$this->_usersTable]['id_user']; + $this->status['user_agent'] = $row[0][$this->_sessionsTable]['user_agent']; + $this->status['token'] = $row[0][$this->_sessionsTable]['token']; + $this->obtainGroups(); + } else { + $this->status['user']='sconosciuto'; + $this->status['status']='not-logged'; + $this->status['id_user']=''; + $this->status['user_agent']=''; + $this->status['token'] = ''; + $this->status['groups'] = array(); + } + } + + public function redirect($val,$time = 3) { #fa il redirect dell'utente + if ($val === 'logged') { + header('Refresh: '.$time.';url='.$this->_main); + if ($time !== 0) echo "You are already logged, ".$this->status['user'].".."; + } else if ($val === 'accepted') { + header('Refresh: '.$time.';url='.$this->_main); + if ($time !== 0) echo "Hi ".$this->status['user'].".."; + } else if ($val === 'login-error') { + header('Refresh: '.$time.';url='.$this->_login); + if ($time !== 0) echo "Wrong username or password..."; + } else if ($val === 'not-logged') { + header('Refresh: '.$time.';url='.$this->_login); + if ($time !== 0) echo "Limited access... sorry"; + } else if ($val === 'not-authorized') { + header('Refresh: '.$time.';url='.$this->_main); + if ($time !== 0) echo "Your account doesn't allow you to manage this page.. sorry!"; + } else if ($val === 'stolen') { + header('Refresh: '.$time.';url='.$this->_login); + if ($time !== 0) echo "Your session have been probably intercepted! Please login another time."; + } else if ($val === 'retype') { + header('Refresh: '.$time.';url='.$this->_retype); + if ($time !== 0) echo "Your session have been probably intercepted. Please type your password another time."; + } else if ($val === 'wait') { + header('Refresh: '.$time.';url='.$this->_login); + if ($time !== 0) echo "You have to wait ".$this->_params['time_after_failure']." seconds before you can try to login another time"; + } + exit; + } + + //obtain the group of the user + private function obtainGroups() + { + $tables = $this->_usersTable.','.$this->_groupsTable.','.$this->_manyToManyTable; + $fields = $this->_groupsTable.'.name'; + $where = $this->_usersTable.'.id_user='.$this->_manyToManyTable.'.id_user and '.$this->_groupsTable.'.id_group='.$this->_manyToManyTable.'.id_group and '.$this->_usersTable.'.id_user='.$this->status['id_user']; + $groups = $this->_db->select($tables,$fields,$where); + $this->status['groups'] = array(); + foreach ($groups as $group) + { + $this->status['groups'][] = $group[$this->_groupsTable]['name']; + } + } + + //$groups: string with name of groups separated by comma; ex: base,root,users + public function checkAccess($groups) + { + $groupsArray = explode (',',$groups); + foreach ($this->status['groups'] as $group) + { + if (in_array($group,$groupsArray)) return true; + } + return false; + } + + //check that the user is logged and, if present, check the group of the user (if loggeg) + //$groups: comma-separated list of groups whose users can access the page + //$time: time before the redirect is carried out + public function check($groups = null, $time = 3) + { + $this->checkStatus(); + if (strcmp($this->status['status'],'not-logged') === 0) + { + $this->redirect('not-logged',$time); + } + else if (strcmp($this->status['status'],'logged') === 0) + { + if ($this->_params['hijacking_check']) + { + if (!$this->checkHijacking()) + { + if ($this->_params['on_hijacking_event'] === 'forceout') + { + $this->logout(); + $this->redirect('stolen',$time); + } + else if ($this->_params['on_hijacking_event'] === 'redirect') + { + $this->redirect('retype',$time); + } + } + } +// $this->obtainGroups(); + if (isset($groups)) + { + $permission = $this->checkAccess($groups); + if (!$permission) $this->redirect('not-authorized',$time); + } + } + } + + //check if someone have stolen your uid + private function checkHijacking() + { + if (array_key_exists('user_agent',$this->status)) + { + if (strcmp($this->status['user_agent'],'') !== 0) + { + if (strcmp($this->status['user_agent'],getUserAgent()) === 0) + { + return true; + } + } + } + return false; + } + + //check CSRF + //$token: token to check + public function checkCSRF($token) + { + if (strcmp($this->status['token'],'') !== 0) + { + if (strcmp($this->status['token'],$token) === 0) + { + return true; + } + } + return false; + } + + //get an array containing all the users currently logged + public function getUsersLogged() + { + $usersLogged = array(); + $data=$this->_db->select($this->_usersTable.','.$this->_sessionsTable,'DISTINCT '.$this->_usersTable.'.username',$this->_usersTable.".id_user=".$this->_sessionsTable.".id_user"); + foreach ($data as $row) + { + $usersLogged[] = $row[$this->_usersTable]['username']; + } + return $usersLogged; + } + + //get the password of the current user + public function getPassword() + { + $row=$this->_db->select($this->_usersTable,'password',"id_user=".$this->status['id_user']); + if ($row !== false) + { + return $row[0][$this->_usersTable]['password']; + } + else + { + return false; + } + } + + private function checkPassword($user,$pwd) { #check username and password + + if (!in_array($this->_params['password_hash'],Params::$allowedHashFunc)) + { + throw new Exception('Error in '.__METHOD__.' : the hash func has to be '.implode(' or ',Params::$allowedHashFunc)); + } + //calculate the hash of the password + $pwd = call_user_func($this->_params['password_hash'],$pwd); + + $row=$this->_db->select($this->_usersTable,$this->_usersTable.'.id_user,username,password',"username=\"".$user."\" and password=\"".$pwd."\" and has_confirmed=0"); + if (count($row) === 1 and $row !== false) + { + $this->status['user'] = $row[0][$this->_usersTable]['username']; + $this->status['status'] = 'accepted'; + $this->status['id_user'] = $row[0][$this->_usersTable]['id_user']; + } + else + { + $this->status['user'] = 'unknown'; + $this->status['status'] = 'login-error'; + $this->status['id_user'] = ''; + if ($this->_db->recordExists($this->_usersTable,'username',$user)) + { + $this->_db->update($this->_usersTable,'last_failure',array(time()),'username="'.$user.'"'); + } + } + } + + //check that enough time is passed since the last failure of the user + private function checkLastFailure($user) + { + //current time + $now = time(); + //max time + $max = $now - $this->_params['time_after_failure']; + $data = $this->_db->select($this->_usersTable,'last_failure','username="'.$user.'"'); + if (count($data) === 1 and $data !== false) + { + if ($data[0][$this->_usersTable]['last_failure'] < $max) + { + return true; + } + return false; + } + else + { + return true; + } + } + + public function login($user,$pwd) + { + $user = sanitizeAll($user); + $this->checkStatus(); + //check if already logged + if ($this->status['status'] === 'logged') + { +// $this->redirect('logged'); + return 'logged'; + } + else + { + if ($this->checkLastFailure($user)) + { + $this->checkPassword($user,$pwd); + if ($this->status['status']==='accepted') + { + $this->uid = md5(randString(10).uniqid(mt_rand(),true)); + $this->_token = md5(randString(12)); + $userAgent = getUserAgent(); + $this->_db->insert($this->_sessionsTable,'id_user,uid,token,creation_date,user_agent',array($this->status['id_user'],$this->uid,$this->_token,time(),$userAgent)); + setcookie($this->_params['cookie_name'],$this->uid,0,$this->_params['cookie_path']); #magic cookie + $this->updateAccesses(); + + $this->_db->del($this->_sessionsTable,'id_user='.$this->status['id_user'].' AND uid != "'.$this->uid.'"'); + +// $this->redirect('accepted'); + return 'accepted'; + } + else if ($this->status['status']==='login-error') + { +// $this->redirect('login-error'); + return 'login-error'; + } + } + else + { +// $this->redirect('wait'); + return 'wait'; + } + } +// $this->redirect('login-error'); + return 'login-error'; + } + + private function updateAccesses() + { + $ip=getIp(); #ip + $date=date('d'). "-" . date('m') . "-" . date('Y'); #date + $ora=date('H') . ":" . date('i'); #time + $values=array($ip,$date,$ora,$this->status['user']); + $res=$this->_db->insert($this->_accessesTable,'ip,data,ora,username',$values); + } + + //force out an user + //$id: the id of the user + public function forceOut($id) + { + $id = (int)$id; + if ($this->_db->del($this->_sessionsTable,'id_user='.$id)) + { + return true; + } + return false; + } + + public function logout() + { + $this->checkStatus(); + if ($this->status['status'] === 'logged') + { + setcookie ($this->_params['cookie_name'], "", time() - 3600,$this->_params['cookie_path']); + if ($this->_db->del($this->_sessionsTable,'id_user='.$this->status['id_user'])) + { + return 'was-logged'; + } + else + { + return 'error'; + } + } + else + { + return 'not-logged'; + } + } + +} \ No newline at end of file diff --git a/Library/Users/index.html b/Library/Users/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Library/Users/index.html @@ -0,0 +1 @@ + diff --git a/Library/index.html b/Library/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Library/index.html @@ -0,0 +1 @@ + diff --git a/License.txt b/License.txt new file mode 100755 index 0000000..404896a --- /dev/null +++ b/License.txt @@ -0,0 +1,201 @@ +GNU GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright © 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +Preamble + +The GNU General Public License is a free, copyleft license for software and other kinds of works. + +The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. + +Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. + +Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and modification follow. + +TERMS AND CONDITIONS + +0. Definitions. + +“This License” refers to version 3 of the GNU General Public License. +“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. +“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. +To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. +A “covered work” means either the unmodified Program or a work based on the Program. +To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. +To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. +An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. + +1. Source Code. + +The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. +A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. +The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. +The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. +The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. +The Corresponding Source for a work in source code form is that same work. + +2. Basic Permissions. + +All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. +You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. +Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. + +3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. +When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. + +4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. +You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. + +5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: +a) The work must carry prominent notices stating that you modified it, and giving a relevant date. +b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. +c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. +d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. +A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. + +6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: +a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. +b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. +c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. +d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. +e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. +A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. +A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. +“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. +If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). +The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. +Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. + +7. Additional Terms. + +“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. +When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. +Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: +a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or +b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or +c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or +d) Limiting the use for publicity purposes of names of licensors or authors of the material; or +e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or +f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. +All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. +If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. +Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. + +8. Termination. + +You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). +However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. +Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. +Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. + +9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. + +10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. +An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. +You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. + +11. Patents. + +A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. +A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. +Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. +In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. +If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. +If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. +A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. +Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. + +12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. + +13. Use with the GNU Affero General Public License. + +Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. + +14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. +Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. +If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. +Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. + +15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. +If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. + +You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . + +The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . + + diff --git a/Logs/index.html b/Logs/index.html new file mode 100755 index 0000000..8d1c8b6 --- /dev/null +++ b/Logs/index.html @@ -0,0 +1 @@ + diff --git a/Public/Css/comune.css b/Public/Css/comune.css new file mode 100644 index 0000000..b6ecdd3 --- /dev/null +++ b/Public/Css/comune.css @@ -0,0 +1,130 @@ +/*parte di login.css*/ + +/*controller:users*/ +/*action:login*/ +.login_box { + margin:10px 10px 20px 10px; +} +.login_box input { + border:1px solid orange; +} + +/*action:logout*/ +.logout_box { + margin:10px 10px 20px 10px; +} + +.logout_button a{ + margin:20px; + padding:10px; + background:orange; + border:1px solid black; +/* width:30px; */ +} + + +/*parte di scaffold.css*/ + +td { + font-size: 12px; +} + +td.editForm, td.delForm, td.associateForm, td.moveupForm, td.movedownForm { + width:3%; +} + +td.editForm input, td.delForm input, td.associateForm input, td.moveupForm input, td.movedownForm input +{ + height:30px; +} + +/*alert string*/ +.alert { + font:bold 12px/1.5 Verdana,arial; + padding:5px; + margin:5px 5px 15px 5px; + background:TOMATO; + border-top:2px solid MAROON; + border-bottom:2px solid MAROON; + color:MAROON; +} + +/*executed operation string*/ +.executed { + font:bold 12px/1.5 Verdana,arial; + padding:5px; + margin:5px 5px 15px 5px; + background:#E0FFFF; + border-top:2px solid #ADD8E6; + border-bottom:2px solid #ADD8E6; + color:#4169E1; +} + +/*action:main*/ +tr.listRow { + background:#E6E6FA; +} + +tr.listHead { + font-weight: bold; + background:#d1deed; + border:1px solid #4169E1; + border-bottom:1px solid #4169E1; +} + +tr.listHead td { +/* font-weight: bold; */ +/* background:#d1deed; */ + border-top:1px solid #4169E1; + border-bottom:1px solid #4169E1; +} + +.recordsBox { + margin:10px 0px; +} + +.recordsBox table { + width:100%; +} + +.listItemForm { + margin:0px; +} + +a.linkItem { +/* background:red; */ + font:bold 12px/1 Verdana,arial; +} + +/*controller:panel +/*action:main*/ +.main_box { + padding:50px 20px; + width:700px; + height:250px; +} +.top_color { + text-align:center; + width:160px; + height:35px; + margin:0; + padding:0; +} +.bottom_color { + background:lavender; + text-align:center; + width:160px; + margin:0; + padding:5px 0; +} + + + +/*box che dice dove ti trovi, in che controller*/ +.controller_info_header +{ + background:#E6E6FA; + padding:5px; + font: bold 16px/1.75em sans-serif; + border-bottom:1px solid #4169E1; +} \ No newline at end of file diff --git a/Public/Css/explorer6.css b/Public/Css/explorer6.css new file mode 100755 index 0000000..29b6456 --- /dev/null +++ b/Public/Css/explorer6.css @@ -0,0 +1,112 @@ +ul#menuBlock li { + height:24px; +} + +ul#menuBlock li ul { + top:25px; + margin-left:3px; +} + +ul#menuBlock li ul li { + margin-top:-1px; +} + +.view_page_top_box +{ + height:32px; +} + +.update_submit_class +{ + padding:7px; +} + +.view_page_update_button +{ + width:35px; +} + +/*div that contains the update form*/ +.view_page_update_button +{ + margin-top:2px; + margin-right:5px; +} +.update_submit_class +{ + padding:2px; + width:45px; +} +.notebooks_insert_form +{ + margin-right:-30px; +} + +.notebook_insert_link +{ + margin:0px 0px 0px 5px; + padding-right:0px; + width:245px; +} +.view_page_history_button +{ + margin-left:10px; +} +.top_left_images_help +{ + height:22px; + margin-bottom:-3px; +} +ul#menuBlock li { + height:26px; +} +ul#menuBlock li ul { + left:-6px; +} +.user_logged +{ + margin-left:62px; +} +.viewall_popup_menu_status_item +{ + padding-left:2px; +/* background:red; */ +} +.copyright_notice_box +{ + width:140px; +} +.language_links_box ul +{ + width:100%; + margin:-1px 5px 30px 5px; +} +.language_links_box ul li +{ + margin-bottom:5px; +} +.language_links_box ul li a +{ + height:30px; +} +.talk_numb_ext +{ + margin-top:-30px; +} +.talk_numb_ext a, .talk_numb_ext_wiki a +{ + margin-bottom:0px; +} +.talk_numb_ext_wiki +{ + width:130px; +} +.language_links_box a.current_lang +{ + background:#6495ED; +} + +.last_modifications ul +{ + margin-left:0px; +} \ No newline at end of file diff --git a/Public/Css/explorer7.css b/Public/Css/explorer7.css new file mode 100644 index 0000000..f63bf5b --- /dev/null +++ b/Public/Css/explorer7.css @@ -0,0 +1,25 @@ +.viewall_popup_menu_status_item +{ + width:129px; +} +.talk_numb_ext +{ + margin-top:-30px; +} +.language_links_box a.current_lang +{ + background:#6495ED; +} + +.last_modifications ul +{ + margin-left:0px; +} +.talk_numb_ext a, .talk_numb_ext_wiki a +{ + margin-bottom:0px; +} +.talk_numb_ext_wiki +{ + width:130px; +} \ No newline at end of file diff --git a/Public/Css/files.css b/Public/Css/files.css new file mode 100644 index 0000000..e98e681 --- /dev/null +++ b/Public/Css/files.css @@ -0,0 +1,113 @@ +form +{ + padding:0px; + margin:0px; +} + +/*external box*/ +.EGexternalBox +{ + height:500px; + overflow:scroll; +} + +/*top box containing the forms: upload,create folder,got to folder*/ +.EGformBox +{ + padding-left:10px; + padding-right:10px; + height:35px; + margin:5px; + border-top:1px solid #DC143C; + border-bottom:1px solid #DC143C; + background:#FF7F50; +} + +/*item box: folder*/ +.EGfolderBox +{ + padding-left:10px; + padding-right:10px; + height:55px; + margin:5px; +/* border-top:1px solid black; */ + background:#E6E6FA; +} + +/*item box: file*/ +.EGfileBox +{ + padding-left:10px; + padding-right:10px; + height:55px; + margin:5px; +/* border-top:1px solid black; */ + background:#E0FFFF; +} + +/*back box*/ +.EGbackBox +{ + padding-left:10px; + padding-right:10px; + height:50px; + margin:5px; + border-top:1px solid #6495ED; + border-bottom:1px solid #6495ED; + background:#ADD8E6; +} + +/*folder image and back image*/ +.EGfolderImage, .EGbackImage, .EGfileImage +{ + margin:3px; +/* padding:2px; */ + width:55px; +/* background:red; */ + float:left; +} + +/*box containing the form to create a new folder*/ +.EGcreateFolderBox +{ + margin:5px; + width:300px; + float:left; +} + +/*box containing the form to upload a file*/ +.EGuploadFileBox +{ + margin:5px; + margin-left:50px; + width:400px; + float:left; +} + +.EGcreateFolderBox input:text +{ + width:150px; +} + +/*name of the folder*/ +.EGfolderName, .EGfileName, .EGcurrentDirectory +{ + width:500px; + float:left; + font:normal 12px/1 Verdana,arial; + margin:10px; +} + +/*del image*/ +.EGfolderDelImage, .EGfileDelImage +{ + float:right; + margin:2px; +} + +/*preview of the image in upload file*/ +#imagePreview +{ + margin:10px; + height:120px; +} diff --git a/Public/Css/form.css b/Public/Css/form.css new file mode 100755 index 0000000..911af19 --- /dev/null +++ b/Public/Css/form.css @@ -0,0 +1,31 @@ +.entryLabel { + display:block; + font:bold 12px/1em Verdana,arial; + padding:3px 0px; + margin-top:10px; + background:#E6E6FA; + width:500px; +} + +.formEntry textarea{ + width:500px; + height:300px; +} + +.formEntry input,.formEntry textarea { + width:500px; + padding:3px; + border: 1px solid #4169E1; +} + +.formClass { + margin:10px; +} + +.inputEntry { + margin:10px 0px; +} + +.formEntry #abstract { + height:100px; +} \ No newline at end of file diff --git a/Public/Css/index.html b/Public/Css/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Public/Css/index.html @@ -0,0 +1 @@ + diff --git a/Public/Css/login.css b/Public/Css/login.css new file mode 100644 index 0000000..7c42964 --- /dev/null +++ b/Public/Css/login.css @@ -0,0 +1,21 @@ +/*controller:users*/ +/*action:login*/ +.login_box { + margin:10px 10px 20px 10px; +} +.login_box input { + border:1px solid orange; +} + +/*action:logout*/ +.logout_box { + margin:10px 10px 20px 10px; +} + +.logout_button a{ + margin:20px; + padding:10px; + background:orange; + border:1px solid black; +/* width:30px; */ +} \ No newline at end of file diff --git a/Public/Css/main.css b/Public/Css/main.css new file mode 100644 index 0000000..2314940 --- /dev/null +++ b/Public/Css/main.css @@ -0,0 +1,2254 @@ +/*stili per il layout fisso*/ +html, body +{ + margin: 0; + padding:0; +} + +body +{ + font:normal 15px/1.3 sans-serif,arial; + text-align: center; + background:#ffffff; +} + +img +{ + border:0px; +} + +.message_view_description li, .issues_view_description li, .talk_message_item_content li, .message_view_description_hidden li +{ + margin-left:1em; +} + + +div#container +{ + width: 950px; + margin: 0px auto; + text-align: left; + background:white; +} + + +/*stile header grande*/ +div#external_header { + background:#b7f18c; + text-align:center; + height:80px; +} +div#header { + background:#b7f18c; + width: 950px; + margin: 0px auto; + text-align:left; + height:80px; +} + +div#top_menu_external +{ + text-align:center; + background:#015512; + margin-bottom:50px; +/* border-top:1px solid #4169E1; */ +/* border-bottom:1px solid #4169E1; */ +} + +div#top_menu +{ + font:bold 15px sans-serif,arial; + text-align:left; + padding:0.4em 0px; + background:#015512; + width: 950px; + margin: 0px auto; +} +#top_menu .currentitem a +{ + background:#DC143C; + color:#FFF; +} + +div#top_menu a +{ + font:bold 16px sans-serif,arial; + padding:0.4em 10px; + text-decoration:none; + font-weight:bold; + color:#FFF; +/* border-left:1px solid #4169E1; */ +} +#top_menu a:hover, +#top_menu a:focus, +#top_menu a:active +{ + background:#61c418; +} + +div#top_menu ul +{ + list-style-type: none; + display:inline; + margin:0px; + padding:0px; +} + +div#top_menu li +{ + display:inline; +/* padding:10px; */ +} + + +div#left +{ + width:730px; + float:left; +} + +div#right +{ + width:198px; + float:right; +} + +.login_username_input,.login_password_input +{ + width:150px; +} + +.login_table_box +{ + clear:left; + margin:5px; + margin-bottom:35px; +/* border:1px solid #B7F18C; */ +/* padding:5px; */ +} +.statistics_ext_box +{ + margin:5px; + margin-bottom:30px; +} +.statistics_int_title +{ + margin:5px 0px 15px 0px; + padding:3px 0px; +/* background-color:#B7F18C; */ + border-bottom:2px solid #DC143C; + font-weight:bold; +} +.statistics_hard_title +{ + margin:5px 0px; + color:#808080; +} +.user_logged +{ + margin-left:55px; + color:black; + font-weight:bold; +} +.login_right_label +{ + font-weight:bold; +} +.login_right_form input +{ + border:1px solid #6495ED; + width:180px; + padding:2px; + margin:3px 0px; +} + +.login_input +{ + width:100px; +} + +.login_form_title +{ + color:black; + +/* padding:10px; */ +/* background:#5c98dc; */ +} + +.login_box +{ + margin-bottom:400px; +} + +.hardware_element +{ + width:335px; + float:left; + -moz-border-radius: 8px; + -webkit-border-radius: 8px; + border-radius: 8px; + margin:2px; + margin-left:5px; + margin-bottom:5px; + padding:10px; + background:#c7daef; +/* border-bottom:1px solid #6495ED; */ +} +.hardware_element_link +{ + display:block; + width:250px; + float:left; + margin:0px 10px; + margin-top:10px; +} +.notebook_view_title +{ + width:400px; + height:50px; + float:left; + overflow:hidden; +/* background:red; */ + margin:10px 0px 10px 10px; + font:normal 14px/1 sans-serif,arial; +} + +.notebook_insert_link +{ +/* border:1px solid black; */ +/* background-color:#c1e3ef; */ + width:200px; +/* background:orange; */ + float:right; + padding:3px 6px 1px 3px; + margin:0px 5px 30px 5px; + text-align:right; + overflow:hidden; + height:48px; +} + +.select_entry +{ +/* width:400px; */ + padding:2px; +/* border:1px solid #6495ED; */ +} +.input_entry, .talk_input_entry +{ + width:400px; + padding:2px; + border:1px solid #6495ED; +} +.textarea_entry, .talk_textarea_entry, .device_textarea_entry +{ + width:630px; + height:300px; + padding:2px; + border:1px solid #6495ED; +} +.device_textarea_entry +{ + width:400px; + height:50px; +} +/*.talk_input_entry +{ + border:1px solid #CECECE; +}*/ +.form_entry .talk_textarea_entry +{ + width:400px; + height:200px; + border:1px solid #6495ED; +} +.notebooks_insert_form +{ + width:710px; + margin-left:10px; +} +.notebooks_insert_form .entry_label +{ + display:block; + padding:3px 0px; +/* background:#E6E6FA; */ + width:600px; + font-weight:bold; +} +.form_entry +{ + margin:20px 0px; +} + + +div#footer{ + margin:0px; + color: #000; + height:40px; + background:#b7f18c; + clear:both; +} + +/*div#navigation li{background: url(immagini/tabella1.png) no-repeat left center;}*/ +a.link_menu +{ + font: bold 16px/1.75em sans-serif,arial; + text-decoration: none; + color:#4169E1; + margin-left:10px; +} + + +/*box contenente i link per tornare nel pannello utente e per sloggarsi*/ +.your_status_box +{ + background:#E6E6FA; + padding:5px; +} + +.login_note +{ + color:#8080a6; + margin:10px; + padding:5px 0px; + border-top:2px solid #8080a6; + border-bottom:2px solid #8080a6; + + font: normal 16px/1.3 sans-serif,arial; +} + +/*singolo box contentente un portatile in view all*/ +.notebooks_viewall +{ + clear:both; + clear:right; + margin:40px 0px; + padding:3px; +/* border:2px solid #7dafe7; */ + font: normal 14px/1.5 sans-serif,arial; + +} +.model_viewall +{ + margin:40px 10px; + margin-left:0px; +/* background-color:#F7F7F7; */ +/* border:1px solid #CECECE; */ +/* padding:10px; */ +} +.notebook_model +{ +/* background:orange; */ + padding:5px 0px; + margin:0px 5px; + overflow:hidden; + width:100%; +/* margin-bottom:10px; */ + font:normal 14px/1 sans-serif,arial; + border-bottom:1px solid #7e0000; +} +.notebook_vendor, .notebook_compatibility, .notebook_kernel, .model_tested_on +{ + margin:5px 0px; +/* background:#eaebec; */ + padding:5px; + width:654px; + overflow:hidden; +/* border-top:2px solid #a4c8f1; */ +} +.inner_label +{ + float:left; + width:320px; +} +.inner_value +{ + float:left; + width:280px; + color:#1f538e; + font-weight:bold; +} +.notebook_description_label +{ +/* background:#B7F18C; */ + padding:5px 0px; + margin:0px 5px; + margin-top:1.5em; +/* margin-bottom:10px; */ + font:bold 14px/1 sans-serif,arial; + border-bottom:1px solid #7e0000; +/* border-bottom:1px solid #228B22; */ +} +.notebook_description_value +{ +/* border-top:2px solid #a4c8f1; */ + margin:5px 0px; +/* background:#eaebec; */ + padding:5px 5px; + width:704px; + overflow:hidden; +} +.notebook_view_link +{ + margin-top:10px; + margin-left:5px; +} + + +/*alert string*/ +.alert { + clear:left; + clear:right; + font:bold 12px/1.5 sans-serif,arial; + padding:10px; + margin:5px 0px 15px 0px; +/* background:TOMATO; */ + border-top:2px solid MAROON; + border-bottom:2px solid MAROON; + color:MAROON; +} + +/*executed operation string*/ +.executed { + font:bold 12px/1.5 sans-serif,arial; + padding:5px; + margin:5px 5px 15px 5px; + background:#E0FFFF; + border-top:2px solid #ADD8E6; + border-bottom:2px solid #ADD8E6; + color:#4169E1; +} + +.view_page_top_box +{ + overflow:hidden; + width:664px; +} +/*div that contains the update form*/ +.view_page_update_button +{ + float:right; +} +/*.view_page_update_button input +{ + height:35px; +}*/ +.view_page_update_button form +{ + width:38px; + padding:0px; +} +.view_page_back_button +{ + float:left; + width:50px; +} +/*the update submit button*/ +.update_submit_class +{ + padding:2px; + width:45px; + font:normal 14px/1 sans-serif,arial; + cursor:pointer; +} +/*div that contains the link to the history page*/ +.view_page_history_button +{ + float:right; + width:30px; + padding:3px; + margin-left:17px; +/* border:1px solid #a4c8f1; */ +/* height:30px; */ +} +.view_page_history_button a +{ + text-decoration:none; + color:#000; +} + +.page_history +{ + margin:0px; + padding:0px; +} +.page_history_item +{ + list-style-type: none; + padding:5px; + margin:2px; + border-top:1px dashed #a4c8f1; +} +.page_history_current_item +{ + list-style-type: none; + padding:5px; + margin:5px 0px; +/* background:#ADD8E6; */ +} +.history_title +{ + font:normal 14px/1 sans-serif; + margin:10px; + padding:3px; +} + +.revision_alert +{ + background:#f1d8d8; + padding:8px; + margin:5px; + margin-bottom:20px; + border-bottom:1px solid #d26262; + border-top:1px solid #d26262; + clear:both; +} + +/*page list in history*/ +.history_page_list, .history_page_list_news { + text-align:left; + font:normal 14px/1 sans-serif,arial; + padding:10px; + margin-bottom:15px; +} +.history_page_list_news +{ + background:#C7DAEF; + margin:5px; +} +div.history_page_list a, div.history_page_list_news a { + padding:5px 10px; + border-left:1px outset #000; +/* border:1px outset #708090; */ +/* color:#B0E0E6; */ +/* background:#4169E1; */ +} + +div.history_page_list a.currentPage, div.history_page_list_news a.currentPage +{ + font-weight:bold; + background:#DCDCDC; +} +div.history_page_list_news a +{ + border-left:none; + color:#4169E1; + font-weight:bold; +} + +.viewall_no_items_found +{ + font:normal 14px/1 sans-serif,arial; + margin:20px 5px; + padding:5px; +/* color: #FF4500; */ + border-top:1px solid #FF4500; + border-bottom:1px solid #FF4500; +} + + + +.viewall_popup_menu_box { + width:725px; + height:30px; + margin-bottom:0px; + margin-top:10px; + margin-left:0px; + position:relative; + z-index:4; +} +.more_filters +{ + position:relative; + z-index:3; +} + +.viewall_popup_menu_status +{ + clear:left; + width:725px; +/* overflow:hidden; */ + margin-left:0px; + text-align:center; +} +.viewall_popup_menu_status_item +{ + width:139px; + float:left; + margin-left:3px; + color:#FF4500; + font-weight:bold; + font: bold 13px/1 sans-serif,arial; +} + +ul#menuBlock { +/* float:right; */ + float:left; + margin:0px; + padding:0px; + list-style:none; + height:25px; +} +ul#menuBlock li.innerItem +{ + height:22px; + padding-top:5px; + font-size:12px; +} +ul#menuBlock li { + position:relative; + display:block; + float:left; + margin-left:3px; + width:139px; +/* height:22px; */ + text-align:center; + background: url('../Img/popup_back.png') no-repeat top left; +/* background:#FFA500; */ +} + +ul#menuBlock li a { + color:#000000; + font: normal 12px/1 sans-serif,arial; +} + +ul#menuBlock li ul { + margin:0px; + padding:0px; + list-style:none; + position:absolute; + top:24px; + left:-3px; + display:none; +} +ul#menuBlock:hover li ul +{ + display:block; +} +ul#menuBlock li ul li { + background:#ffef84; + border-top:1px solid #ec8459; + padding:3px 0; +} + + +/*view files with differences*/ +.diff_ext_box +{ + margin:0px 5px 30px 5px; +} +.diff_item_label +{ +/* background:#ADD8E6; */ +/* padding:3px; */ + border-bottom:1px solid black; +} +.diff_item_text +{ + color:#7c7a7a; + background:#F0FFF0; + padding:3px; +} +del +{ + color:red; +} +ins +{ + color:green; +} + + + +/*tree navigation*/ +.position_tree_box +{ + margin:5px 5px 25px 5px; + padding:5px; + font:normal 14px/1 sans-serif,arial; + border-top:1px solid #DC143C; + border-bottom:1px solid #DC143C; +} +.position_tree_box a +{ + text-decoration:none; + color:#DC143C; +} +.last_tree_element +{ + font-weight:bold; +} + + + +.td_with_distribution_checkboxes +{ + position:relative; + display:block; +} +.dist_checkboxes_hidden_box +{ + display:none; + position:absolute; + background:#C1E3EF; + top:20px; + left:0px; + width:400px; + padding:3px; +} +.dist_checkboxes_hidden_box_inner +{ + height:150px; + overflow:auto; + z-index:400; +} +.hidden_box_item +{ + margin-bottom:10px; +} +.tables_of_contents +{ + margin:20px 0; + padding:5px; + background-color:#EAF2F4; + border:1px solid #C7DAEF; + -moz-border-radius: 15px; + -webkit-border-radius: 15px; + border-radius: 15px; +} +.tables_of_contents a +{ + font-size:14px; +} +.tables_of_contents_title +{ + margin:10px 25px; + font-weight:bold; +} +/*wiki code*/ +.code_pre +{ +/* width:650px; */ + max-height:300px; + overflow:auto; + background:#f9f4a7; + padding:5px 0 5px 5px; + font-size:12px; +/* color:#4169E1; */ + border:1px dashed #d4cb3b; +} + +.div_h1 +{ + font:bold 18px/1 sans-serif,arial; + border-bottom:1px solid gray; + padding:3px 0px; + margin:20px 0px 10px 0px; + color:gray; +} +.div_h2 +{ + font:bold 17px/1 sans-serif,arial; + color:gray; + padding:2px 0; +} +.div_h3 +{ + font:bold 16px/1 sans-serif,arial; + color:gray; + padding:2px 0; +} +.div_lang +{ + margin-top:4em; + padding:8px; + background:#cfe2ff; + /*border-top:1px solid #FFA500; + border-bottom:1px solid #FFA500;*/ +} +.div_lang a +{ + padding:0px 3px; +} +.talk_login_notice +{ + margin:5px 5px; + padding:5px; + font:bold 14px/1 sans-serif,arial; +/* border:1px solid #4169E1; */ +/* color:#4169E1; */ +/* background:#9acee3; */ +} +.talk_message_item +{ + margin:5px 0px 35px 5px; +} +.talk_message_item_title_date +{ + border-bottom:1px solid gray; + padding-bottom:5px; +/* width:300px; */ +} +.talk_message_item_title +{ + font:bold 14px/1 sans-serif,arial; + margin-bottom:5px; +} +.talk_message_item_date +{ + font:normal 12px/1 sans-serif,arial; + color:gray; +} +.talk_message_item_content +{ + padding:5px 0px; +} +.talk_form_external_box +{ + margin-bottom:20px; +} + +.model_id +{ + font:normal 12px/1 sans-serif,arial; +/* color:gray; */ + margin:5px 3px; + padding:3px; +} + +.top_left_images +{ + height:45px; + margin-top:2px; +} +.top_left_note_image +{ + height:45px; +} +.top_left_images_help +{ + height:30px; + margin-bottom:-10px; +} + +.who_you_are_and_logout, .your_panel_link +{ + margin:0px 0px 10px 0px; + padding:5px 10px; + background-color:#B7F18C; +/* font-weight:bold; */ +/* border-top:1px solid #015512; */ +/* border-bottom:1px solid #015512; */ +} +.your_panel_link +{ + background:#DC143C; + margin-bottom:0px; +/* color:#FFF; */ +} +.your_panel_link a +{ + font-weight:bold; + color:#FFF; +} + +/*form*/ +.entryLabel { + display:block; + font:bold 12px/1em sans-serif,arial; + padding:3px 0px; + margin-top:10px; +/* background:#E6E6FA; */ + width:450px; +} + +.formEntry { + margin:20px 0px; +} + +.formEntry input, .formEntry textarea { + width:450px; + padding:3px; + border: 1px solid #CECECE; +} + +.form_input_text input,.form_textarea textarea { + width:450px; + padding:3px; + border: 1px solid #CECECE; +} +.form_textarea textarea +{ + height:100px; +} +.formClass { + margin:10px; + margin-right:-40px; + width:450px; +} + +.inputEntry { + margin:10px 0px; + float:left; + width:80px; + height:30px; +} + +.panel_top_box +{ + background-color:#C1E3EF; + margin:5px 5px 35px 5px; + padding:10px; + font:bold 14px/1 sans-serif,arial; + border-bottom:1px solid #097fbc; +} +.panel_top_box a +{ + color:#097fbc; +} + +/*list of application in the panel main action*/ +.panelApplicationList +{ + padding:0px; + margin:0px; +} +.panelApplicationList li +{ + display:block; + width:450px; + height:30px; + margin:5px; + padding-top:9px; +} + +.panelApplicationList li a +{ + margin:5px; + font: bold 14px/1 sans-serif,arial; + color:#097fbc; +} + +.confirm_notice +{ + margin:10px; +/* padding:10px; */ + font:normal 14px/1.5 sans-serif,arial; +} + +.meet_item +{ + margin:20px 0px; +} +.meet_item_inner +{ + border-bottom:1px dashed #ed9f4a; + font-weight:bold; +/* color:#8f0754; */ +} +.meet_contrib_link, .contrib_explain_box +{ + margin:10px; +} +.users_contrib_item +{ + margin:10px; + padding:2px 0px; + border-bottom:1px dashed #ed9f4a; +/* color:#8f0754; */ +} +.external_users_contrib +{ + margin-bottom:40px; +} +.contrib_explain_box +{ + font-weight:bold; + margin-bottom:30px; +} +.users_meet_box +{ + margin:25px 30px; + padding:5px 20px; + background:#f6ea99; + border-bottom:1px solid #ed9f4a; + border-top:1px solid #ed9f4a; +} +.delete_account_notice_box +{ + margin:25px 10px; +} +.climb_form_ext_box +{ + margin:25px 10px; +} + +.new_account_title +{ + margin:10px; +} + +.viewall_popup_menu_box_external, .edit_form +{ + clear:left; + clear:right; + margin-bottom:30px; +/* background:#E0FFFF; */ + padding:0px 10px 10px 0px; +} + +.manage_account_link_box +{ + margin-top:5px; +} +.manage_account_link_box a +{ + color:#000; +} +.login_right_box +{ + margin-bottom:15px; +} + +.mandatory_fields_notice +{ + margin:10px 0px; +} + +.help_tables_of_contents +{ + margin:10px; + padding:10px; +} + +.bottom_licence_notice +{ + clear:left; + clear:right; + font:normal 12px/1.2 sans-serif,arial; + padding:10px; + background:#E0FFFF; + margin:25px 0px 5px 0px; +} +.top_licence_notice +{ + clear:left; + clear:right; + font:normal 12px/1.2 sans-serif,arial; + padding:10px; + background:#E0FFFF; + margin:25px 0px 5px 0px; + text-align:left; +} + +/*.copyright_notice_box +{ + text-align:right; + font: normal 12px/1 sans-serif,arial; + padding:14px; +}*/ + +.copyright_notice_box, .footer_credits_box +{ + text-align:center; + width:120px; + float:right; + font: normal 12px/1 sans-serif,arial; + padding:14px; + border-left:3px solid #FFF; +} +.footer_credits_box +{ + width:60px; + border-left:3px solid #FFF; +} +.home_objectives_description +{ + margin:5px; + overflow:hidden; + width:100%; +} +.home_objectives_description img +{ + float:left; + margin-right:5px; +} +.home_objectives_title +{ + margin:15px 5px 5px 5px; +/* background:#90EE90; */ + font-weight:bold; + padding:5px 0px; + border-bottom:1px solid #228B22; +} + +.credits_item_title +{ + margin:15px 5px 5px 5px; +/* background:#90EE90; */ + padding:5px; + border-bottom:1px solid #228B22; + font-weight:bold; +} +.credits_item_description +{ + padding:5px; + margin:5px; + overflow:hidden; + width:100%; +} + +.home_container +{ + margin:20px 0px; +} + +.issues_external_box +{ + margin:40px 5px; +} +.issues_viewall_title +{ + margin:10px 2px; + font-weight:bold; +} +.issues_viewall_table +{ + font:normal 13px/1 sans-serif,arial; +} + +.issues_viewall_table td +{ +/* background:#F0FFFF; */ + padding:5px; +/* border-bottom:1px solid #E6E6FA; */ +} +.issues_viewall_table td a +{ + color:#3E3E3E; +} +.issue_deleted_yes td +{ + background-color:#E6E6FA; +} + +.issue_deleted_yes span +{ + color:red; + padding-left:5px; + font-size:10px; +} + +.issue_deleted_no span +{ + display:none; +} + +.issue_deleted_yes, +.issue_deleted_yes td a +{ + color:#808080; +} + +.issues_viewall_table th +{ + background:#ADD8E6; +/* font-weight:normal; */ +/* border-top:1px solid #4169E1; */ +/* border-left:4px solid #4169E1; */ +/* border-bottom:1px solid #4169E1; */ + padding:5px; +} + +.issues_view_title, .issues_view_description_title +{ + font:bold 14px/1 sans-serif,arial; + padding:5px 0px; + border-bottom:1px solid black; +} +.issues_view_status_and_priority +{ + margin:20px 0px; + font:normal 12px/1 sans-serif,arial; +} +.issues_view_description +{ + margin:20px 0px; +} + +.add_issue_form_title +{ + margin:30px 5px; + font-weight:bold; +} +.add_issue_form +{ + margin:30px 5px; +} + +.contact_div +{ + margin:10px; +} + +.help_external_box +{ + margin:5px; +} +.help_wiki_table thead +{ + text-align:left; +} + +.hardware_element_image +{ + height:50px; + float:left; +} +.markItUpContainer +{ + z-index:0; +} + +.search_form +{ + clear:both; + margin:5px 5px 50px 5px; +} +.search_form_pciid +{ + clear:both; + margin:5px 5px 50px 5px; +} +.search_form_label +{ + overflow:hidden; + height:22px; + margin:15px 5px 20px 5px; +/* background:#90EE90; */ + padding:5px 0px; + border-bottom:1px solid #228B22; + font-weight:bold; +} +.input_entry_search +{ + width:250px; + border: 1px solid #CECECE; + padding:2px; +} + +.search_result_item +{ + margin:5px 5px 15px 5px; + border-top:1px solid #CECECE; + padding:5px 0px; +} +.search_result_item .first_level +{ + overflow:hidden; +} + +.search_result_item_left +{ + width:300px; + float:left; +} +.search_result_item_right +{ + width:400px; + float:left; +} +.diff_color_notice +{ + background:#f1d8d8; + padding:8px; + margin:5px; + margin-bottom:20px; + border-bottom:1px solid #d26262; + border-top:1px solid #d26262; +} + +.gray_text_notice +{ + color:#7c7a7a; +} +.credits_external_box +{ + margin-bottom:40px; +} +.notebook_model img +{ + float:left; +} +.span_model_name +{ + float:left; + margin-left:10px; + padding-top:5px; +} + +/*dialog*/ +#dialog-form, #delete_dialog +{ + display:none; +} +#suggest_dialog +{ + display:none; +} +#dialog-form table +{ + text-align:left; +} +#dialog-form input +{ + width:300px; + border:1px solid #CECECE; +} +#dialog-form textarea, #delete_dialog textarea +{ + width:300px; + height:100px; + border:1px solid #CECECE; +} +.ask_for_removal_class +{ + float:right; + padding-top:5px; +} +.deletion_motivations_title +{ + margin:15px 5px; + border-bottom:1px solid #D26262; +} + +.deletion_motivations_iternal +{ + margin:15px 5px; + padding:5px; + border:1px dashed #D26262; +} +.deletion_motivations_iternal_message +{ + +} + +.news_external_box +{ + margin:5px; + margin-bottom:40px; +} +.news_item +{ +/* background:#f8f1b2; */ +/* padding:5px; */ + margin:30px 0px; +/* border:1px solid #f99f4f; */ +} +.news_item_title +{ + font-weight:bold; + margin:0px 0px 4px 0px; + padding-bottom:5px; + border-bottom:1px solid #9d1d04; + color:#9d1d04; +} +.news_item_date +{ + font: normal 13px/1 sans-serif,arial; +/* color:#e86a17; */ + color:gray; + margin:0px 0px 10px 0px; +} + +.discover_hardware, .download_database +{ + text-align:center; + margin-bottom:5px; +} +.download_database +{ + margin-bottom:30px; +} + +.download_table +{ + margin:10px 0px; + padding:5px; +} +.download_table td +{ + padding:5px 5px; + background:#E0FFFF; +} + +.help_external_box h1 +{ + background:#FFD700; + padding:5px 10px; + color:#800000; + border-top:1px solid #800000; + border-bottom:1px solid #800000; + font:normal 20px/1 sans-serif,arial; +} + +.right_box_ext_box +{ + margin:5px; + margin-bottom:300px; +} + +.add_message_form_title +{ + margin:15px 0px; + font-weight:bold; + padding:5px 0px; + color:#4169E1; +} + +.issues_message_item, .issues_message_item_preview, .issues_message_item_hidden, .talk_message_item_hidden +{ + -moz-border-radius: 12px; + -webkit-border-radius: 12px; + border-radius: 12px; + padding:10px; + margin:20px 0px; + background:#eaf2f4; +/* border-top:1px solid #4169E1; */ +/* border-bottom:1px solid #4169E1; */ +} +.issues_message_item_hidden, .talk_message_item_hidden +{ + background:#FFF; +/* background:#b5d6e0; */ + border-top:1px dashed #bcbcbc; + border-bottom:1px dashed #bcbcbc; +} +.issues_message_item_preview +{ + margin:5px 0px 20px 0px; + background:#FFF; + border:1px dashed #f9a92b; +} +.description_preview +{ + padding:10px; + margin:0px 0px; + border:2px dashed #f9a92b; +} +.description_preview_title +{ + padding:5px 0px; + margin:0px 0px; + font-style:italic; + color:#f9a92b; + font-weight:bold; +} +.talk_message_item_hidden +{ + margin-bottom:40px; +/* background:#f1f1f1; */ +} +.message_view_description +{ + clear:both; + margin-bottom:5px; +} +.message_view_description_hidden +{ + margin-top:5px; +} +.message_preview_notice +{ + color:#f9a92b; + margin:3px 3px; + font:italic 14px/1 sans-serif,arial; +} +.useful_links_ext div +{ + margin:3px 0px; + padding:1px; + padding-left:20px; + background: url(../Img/link.png) no-repeat left center; +} +.useful_links_ext div a +{ + color:#000; + text-decoration:none; + font:normal 14px/1 sans-serif,arial; +} +.issues_message_item_user +{ + overflow:hidden; + font-weight:bold; + margin-bottom:1em; +} +.issues_message_item_user_inner +{ + float:left; + width:500px; +} + +.hide_general, .block_general +{ + clear:right; + float:right; + margin-left:10px; + font-weight:bold; + text-decoration:none; + color:#000; + font-size:13px; + padding-bottom:4px; +} +.hide_general img +{ + margin-right:5px; + margin-bottom:-2px; +} +.block_general img +{ + margin-right:5px; + margin-bottom:-5px; +} +.language_links_box ul +{ + overflow:hidden; + margin:4px 5px 20px 5px; + padding:0px; + list-style-type:none; +} +.language_links_box ul li +{ + float:left; + width:92px; +/* background:red; */ + margin-bottom:10px; +/* margin-right:10px; */ + margin-top:5px; +} +.language_links_box ul li a +{ + padding:5px; + text-decoration:none; + color:black; +} +.language_links_box ul li a span +{ + margin-left:3px; +} +.language_links_box a.current_lang +{ + border-top:1px dashed #6495ED; + border-bottom:1px dashed #6495ED; +} + +.talk_numb_ext +{ + clear:both; + text-align:left; + margin-left:10px; +} +.talk_numb_ext a, .talk_numb_ext_wiki a +{ + display:block; + width:150px; + text-align:center; + padding:10px 0px; + text-decoration:none; + color:black; + background: url(../Img/talk_messages.png) no-repeat left center; + margin-bottom:10px; + float:right; + overflow:hidden; +} + +.details_of_hidden_message +{ + display:none; +} +.details_of_hidden_message_inner, .details_of_actions_inner, .details_of_actions_inner_user +{ + margin:10px 0px; + background:#fbfbfb; + padding:5px; + border:1px solid #BCBCBC; +} +.details_of_actions_inner +{ + background:#ecfffe; + border:1px solid #7ed0cb; +} +.details_of_actions_inner_user +{ +/* background:#F6EA99; */ +/* border:1px solid #F65637; */ +} +.md_type +{ + display:none; +} +.hidden_message_view_details, .hidden_message_view_page +{ + font:normal 12px/1 sans-serif,arial; +} +.deleted_message_show +{ + margin:8px 0px 0px 0px; + font:normal 13px/1 sans-serif,arial; +} + +.noscript_dist_alert +{ + margin-bottom:5px; +} +.noscript_dist_alert span +{ + color:#6495ED; +} + +.isp_notice +{ + background:#dff1f8; + border:1px solid #6495ED; + padding:5px; + font:normal 14px/1.5 sans-serif,arial; +} + +.user_hardware_pages +{ + margin:10px 5px; + padding:10px; + background:#F1D8D8; + /*border-bottom:1px solid #DC143C; + border-top:1px solid #DC143C;*/ +} + +.moderator_box, .moderator_box_deleted +{ + -moz-border-radius: 10px; + -webkit-border-radius: 10px; + border-radius: 10px; + overflow:hidden; + padding:10px; + margin:5px 5px 25px 5px; + background:#fbd59a; +/* border:1px solid #f65637; */ +} +.moderator_box_deleted +{ + background:#C7DAEF; +/* border:1px solid #ADD8E6; */ +} + +.listTable +{ + margin:20px 5px; + width:100%; +} + +/*MODERATORS' PAGE*/ +tr.listRow td +{ + font: normal 13px/1 sans-serif,arial; + padding:5px 5px; +} +tr.listRow td.type_column +{ + width:15%; +} +tr.listHead { + font: bold 13px/1 sans-serif,arial; +} + +tr.listHead td { + padding:8px 4px; + background:#ADD8E6; +/* border-top:1px solid #4169E1; */ +/* border-bottom:1px solid #4169E1; */ +} + +.recordsBox { + margin:10px 5px; +} + +.recordsBox table { + width:100%; +} + +a.linkItem { +/* background:red; */ + font:bold 12px/1 sans-serif,arial; +} + +td.text_item_date +{ + width:25%; +} +.moderator_panel_link, .admin_panel_link +{ + margin:5px; + padding:10px; +/* border:1px solid #ED9F4A; */ +/* background:#F6EA99; */ +} +.admin_panel_link +{ +/* border:1px solid #DA70D6; */ +/* background:#F6EA99; */ +} +.noscript_notice +{ + margin:10px 5px; + padding:5px 10px; + background:#B0E0E6; + border:1px solid #4169E1; + color:#4169E1; +} +.search_img +{ + float:left; +} +.span_search_desc +{ + float:left; + margin-left:10px; + padding-top:0px; +} +.textarea_entry_search +{ + width:430px; + height:200px; + padding:3px; + border: 1px solid #CECECE; +} +.lspci_notice +{ + margin:10px 0px; + padding:5px 10px; + background:#B7F18C; + font-weight:bold; +/* border: 1px solid #CECECE; */ +} + +.lspci_item_found, .lspci_item_not_found +{ + margin:20px 5px; + background: url('../Img/search_back.png') no-repeat top left; +/* background: #C7DAEF; */ + padding:12px 15px; + border-bottom:3px solid #8eb5df; + border-right:1px solid #8eb5df; +} +.lspci_item_found_compat +{ + padding-left:37px; +} + +.search_result_model_name +{ + padding-left:10px; +} + +.search_item_found +{ + margin:5px; +} + +.lspci_item_not_found +{ + background: #ffe170; + border-bottom:3px solid #e8c224; + border-right:1px solid #e8c224; +} +.lspci_item_found_compat ul li +{ + list-style-type:none; +} +.lspci_item_found_compat ul +{ + margin:10px 20px; + padding:0px; +} +.found_ext +{ + margin-bottom:2em; +} + +.lspci_item_found_compat a +{ + text-decoration:none; + font:normal 16px/1 sans-serif; +} + +.last_modifications, .wiki_control_box +{ + margin:5px; + width:190px; + margin-bottom:2em; + background: url(../Img/back_last.png) no-repeat top left; +} +.wiki_control_box +{ + background: url(../Img/back_wiki.png) no-repeat top left; +} +.last_modifications ul, .wiki_control_box ul +{ + padding:8px; + padding-top:0px; +} +.wiki_control_box ul +{ + background: url(../Img/back_wiki.png) no-repeat bottom left; +} +.last_modifications li, .wiki_control_box li +{ + list-style-type:none; + margin:10px 5px; +} +.last_modifications_title +{ + padding-top:10px; + padding-left:14px; + font:bold 15px/1 sans-serif; +} +.last_modifications a +{ + +} +.last_modifications_model +{ + color:#3e3e3e; + text-decoration:none; +} +.last_modifications_all +{ + background: url(../Img/back_last.png) no-repeat bottom left; + padding-bottom:10px; +} +.last_modifications_all span +{ + margin-left:10px; + font:normal 14px/1 sans-serif; +} + +.wiki_external_box +{ + margin:4em 5px; + clear:both; + clear:right; +} +.wiki_page_title +{ + font:bold 18px/1 sans-serif,arial; + color:gray; + margin:20px 0px; + padding-bottom:4px; + border-bottom:1px solid #000; +} +.wiki_page_content +{ + margin:2em 0px; +} + +.talk_numb_ext_wiki +{ + float:left; + text-align:left; + margin-left:10px; +} +.blocked_notice +{ + float:right; + font:normal 12px/1 sans-serif; + color:#000; +} +.entry_label_small +{ + font-weight:normal; + font-size:12px; + color:#808080; +} + +.clear_right +{ + clear:right; +} +#admin_box, #moderator_box +{ + margin:20px 10px; +/* border-bottom:1px solid #DC143C; */ +/* border-top:1px solid #DC143C; */ + border-left:10px solid #DC143C; +/* background-color:#F0FFFF; */ + padding:10px; +} +#moderator_box +{ +/* background-color:#fffc8e; */ +/* border-bottom:1px solid #FFA500; */ + border-left:10px solid #FFA500; +} +.admin_box_title, .moderator_box_title +{ + margin-bottom:10px; + font-size:12px; + font-weight:bold; +/* color:#FFF; */ +} +#admin_box ul, #moderator_box ul +{ + margin:0px; + padding:0px; + margin-left:15px; +} +#admin_box ul li, #moderator_box ul li +{ + list-style-type:none; + padding:5px 0px; +} +#admin_box ul li a, #moderator_box ul li a +{ + color:#DC143C; + font-weight:bold; +} +#admin_box ul li a.not_bold +{ + color:#000; + font-weight:normal; +} +#moderator_box ul li a +{ + color:#FF4500; +} +.display_none +{ + display:none; +} + +.moderation_details_box +{ + clear:right; + margin-top:5px; +} + +.not_logged_license +{ + padding:10px; + background-color:#F1D8D8; + font-size:12px; +} +.rss_right_box +{ + text-align:center; + padding:5px; + margin-bottom:15px; +/* margin-bottom:25px; + padding:5px; + overflow:hidden; + height:32px; + background-color:#C7DAEF; + color:#FFF;*/ +} + +/*.rss_right_box img +{ + float:left; +} +.rss_right_box_text +{ + float:left; + margin:5px 10px; + font-weight:bold; +} +.rss_right_box_text a +{ + color:#000; +/* text-decoration:none; */ + font-weight:normal; +}*/ + +/*tabs*/ +.description_tabs +{ + margin-top:10px; +} +div#description_tabs_content +{ + clear:left; +/* width:707px; */ +/* padding-left:5px; */ + border:1px solid #DCDCDC; + position:relative; + z-index:1; +} +.description_tabs_page +{ + margin:10px; +} +.description_tabs ul.desc_menu +{ + width:700px; +/* border-bottom:1px solid #DCDCDC; */ +/* overflow:hidden; */ + margin:0px; +/* height:34px; */ + padding:0px; + position:relative; + z-index:4; +/* background-color:red; */ + top:1px; +/* padding-left:10px; */ +} +.description_tabs li.desc_tabs +{ + display:block; + float:left; + width:70px; + text-align:center; + padding:6px 8px; + border:1px solid #DCDCDC; + background-color:#E6E6FA; + position:relative; + margin-right:8px; + margin-left:0px; + z-index:5; +} +.description_tabs li.current_tab +{ + background-color:#FFF; + border-bottom:1px solid #FFF; +} +.description_tabs li.desc_tabs a +{ +/* text-decoration:none; */ + color:#000; +/* font-weight:bold; */ +} +.separation_line +{ + background-color:#DCDCDC; + padding:6px 8px; + margin:20px 0; +} +.lspci_item_not_found_inner +{ + margin:10px 0 5px 0; + font-weight:bold; +} +.insert_suggestion_list +{ + list-style-type:none; +} +.insert_suggestion_list li +{ + margin:10px 0; +} + +.issue_hidden_notice, .wiki_hidden_notice +{ + width:450px; + float:left; + margin-bottom:10px; + color:red; +} +.wiki_hidden_notice +{ + color:#000; +} +.show_hidden_box_ext +{ + clear:left; +} +.box_module_how_to_compile +{ +/* height:30px; */ + background-color:#F0E68C; +/* clear:left; */ + margin-top:5px; + padding:10px; + font-size:12px; +} +.box_module_label a +{ + color:#FF4500; + font-size:12px; +} + +.track_alert +{ + border:10px solid red; + padding:5px; +} + +.catalogue_top_notice +{ + clear:right; + margin:0 5px; +} + +.version_div +{ + margin-bottom:30px; + text-align:center; +} + +.model_string_search_form +{ + margin:5px; + padding:8px; + background-color:#C7DAEF; + border: 1px solid #6495ED; + width:685px; +} + +.model_string_search_form img +{ + vertical-align:-3px; +} + +.user_action_filter +{ + width:190px; +} +.user_action_filter img, .user_action_filter_submit +{ + vertical-align:middle; +} +.user_action_filter_text +{ + width:130px; +} + +.no_bold +{ + font-weight:normal; +} + +.languages_link_box +{ + font-size:12px; +} + +/*.version_div a +{ + display:block; + background-color: #C7DAEF; + margin: 5px 5px; + margin-bottom:20px; + padding: 5px 10px; + padding-left:5px; + color:#000; + text-decoration:none; + font-weight:bold; +} +.version_div a img +{ + vertical-align:middle; +}*/ +/*.version_div a div +{ + padding-top:14px; +}*/ +/* +Start - temporarily added due to transformation of help pages +2011-05-29 joeko +*/ +.help_external_box ul { + line-height: 1.5em; + list-style-type: square; + margin: .3em 0 0 1.5em; + padding: 0; +} +.help_external_box ol { + line-height: 1.5em; + margin: .3em 0 0 3.2em; + padding: 0; + list-style-image: none; +} +.help_external_box li { + margin-bottom: .1em; +} +.help_external_box dt { + font-weight: bold; + margin-top: .5em; + margin-bottom: .3em; + color: #3D6300; +} +.help_external_box dl { + margin-top: .4em; + margin-bottom: .2em; +} +.help_external_box dd { + line-height: 1.5em; + margin-top: .5em; + margin-left: 2em; + margin-top: .5em; + margin-bottom: .5em; +} +.help_external_box p, .help_external_box dd { + margin-top: .5em; + margin-bottom: .5em; +} +.help_external_box p.attention { + /* taken from home page */ + padding: 0.5em; + background: none repeat scroll 0% 0% rgb(255, 160, 122); + margin: 0.5em; + border-top: 1px solid rgb(220, 20, 60); + border-bottom: 1px solid rgb(220, 20, 60); + font-size: 16px; +} +.help_external_box p.example, dd.example { + border-bottom: 0; + color: #3d6300; +} +.help_external_box p.note dd.note { + margin-left: 2em; + margin-right: 0; + font-weight: bolder; + color: #3d6300; /* background: #CFC bottom right no-repeat;*/; + font-style: normal; + font-style: italic; +} +.help_external_box p.opt, dd.opt { + color: #3d6300; + font-weight: bold; + font-style: italic; +} + +.help_external_box h2,.help_external_box h3,.help_external_box h4 +{ + margin: 0 4px 0 0; + padding: 0.2em 0 0.3em 1.25em; + font-size: 1.4em; + color: #353535; + background: #D8FF9E; +} +.help_external_box h2 +{ + font-size: 1.3em; + color: #3D6300; +} +.help_external_box h3 +{ + font-size: 1.2em; + color: #3D6300; + background-color: White; +} +.help_external_box h4 +{ + font-size: 1.1em; + color: #3D6300; + background-color: White; +} +.help_external_box p.terminal,.help_external_box pre.terminal +{ + font-family: monospace; + padding: .5em 1em; + background-color: rgb(50,50,50); + border-left: 2px solid rgb(97,97,97); + color: white; +} + +/* +End +*/ diff --git a/Public/Css/mainmenu.css b/Public/Css/mainmenu.css new file mode 100755 index 0000000..615c8bf --- /dev/null +++ b/Public/Css/mainmenu.css @@ -0,0 +1,78 @@ +/*stile header di ogni view*/ +.mainMenu { + height:50px; +/* border-top:1px solid #ADD8E6; */ + border-bottom:1px solid #4169E1; + padding-top:6px; + margin-bottom:10px; + background:#d1deed; +} +.mainMenuItem { + float:left; + width:60px; + height:40px; + margin-left:5px; + border:1px outset #708090; + background:#4169E1; + text-align:center; +} + +.mainMenuItem a { +/* margin:8px 5px 1px 10px; */ + display:block; + margin-top:12px; + color:#B0E0E6; + font:bold 14px/1 Verdana,arial; +} + +.verticalMenu { + margin-bottom:30px; + margin-left:10px; +/* text-align:right;*/ +} + +ul#menuBlock { +/* float:right; */ + float:left; + margin:0px; + padding:0px; + list-style:none; + height:24px; +} + +ul#menuBlock li { + position:relative; + display:block; + float:left; + width:100px; + border:1px outset #D3D3D3; + height:21px; +# height:24px; + text-align:center; + background:#E6E6FA; + padding-top:3px; +} + +ul#menuBlock li a { + color:#696969; + font: bold 12px/1 Verdana,arial; +} + +ul#menuBlock li ul { + margin:0px; + padding:0px; + list-style:none; + position:absolute; + top:24px; +# top:25px; + left:-1px; + display:none; +} + +ul#menuBlock li ul li { +# margin-top:-3px; +} + +/*ul#menuBlock li:hover ul{ + display:block; +}*/ \ No newline at end of file diff --git a/Public/Css/mobile.css b/Public/Css/mobile.css new file mode 100644 index 0000000..4fa4c83 --- /dev/null +++ b/Public/Css/mobile.css @@ -0,0 +1,271 @@ +/*stili per il layout fisso*/ +html, body +{ + margin: 0; + padding:0; +} + +body +{ + font:normal 15px/1.3 sans-serif,arial; + text-align: left; + background:#ffffff; +} + +img +{ + border:0px; +} + +#footer +{ + /*padding-bottom:5px; + padding-top:5px;*/ +} +#footer div +{ + text-align:center; +} +#footer a +{ +/* color: #DC143C; */ +} + +.navigation-bar +{ + background-color: #015512; + height:35px; + padding-top:5px; + padding-right:5px; +} + +/*tree navigation*/ +.position_tree_box +{ + margin:5px 0px 25px 0px; + padding:5px; + font:normal 14px/1 sans-serif,arial; + border-top:1px solid #DC143C; + border-bottom:1px solid #DC143C; +} +.position_tree_box a, .position_tree_box a.ui-link:visited, .position_tree_box .ui-link +{ + text-decoration:none; + color:#DC143C; +} +/*.ui-body-d .ui-link { + color:#DC143C; + font-weight: bold; +}*/ +.last_tree_element +{ + font-weight:bold; +} + +.credits_item_title +{ + margin:15px 5px 5px 5px; + padding:5px; + padding-left:0px; + border-bottom:1px solid #228B22; + font-weight:bold; +} +.credits_item_description +{ + padding:5px; + padding-left:0px; + margin:5px; + overflow:hidden; + width:100%; +} + +#hardware_list +{ +/* padding:0 15px; */ + margin-top:20px; + margin-bottom:20px; +} +.bottom_licence_notice +{ + clear:left; + clear:right; + font:normal 12px/1.2 sans-serif,arial; + padding:10px; + background:#E0FFFF; + margin:25px 0px 5px 0px; +} +.page_list +{ + margin-top:28px; +} + +.notebook_view_title +{ + margin-bottom:28px; +} +/*jquery mobile*/ +.ui-header { + background: #B7F18C; +} + +.ui-li-thumb { + left: 5px; + max-height: 70px; + max-width: 70px; + position: absolute; + top: 5px; +} + +.ui-content .ui-listview { + margin: 15px -15px; +} + +#language-dialog .ui-header .ui-title +{ + display: block; + font-size: 16px; + margin: 0.7em 0; + margin-left:30px; + margin-top:0.8em; + text-align: left; +} +.main_content_element +{ + padding:5px 0; + border-top:1px dashed #000; +} + +.track_alert +{ + border:10px solid red; + padding:5px; +} + +.device_description +{ + background-color:#E6E6FA; + padding:5px; +} + +.viewall_no_items_found +{ + font:normal 14px/1 sans-serif,arial; + margin:20px 5px; + padding:5px; +/* color: #FF4500; */ + border-top:1px solid #FF4500; + border-bottom:1px solid #FF4500; +} + +.home_objectives_description +{ + margin:5px; + overflow:hidden; + width:100%; +} +.home_objectives_description img +{ + float:left; + margin-right:5px; +} +.home_objectives_title +{ + margin:15px 5px 5px 5px; +/* background:#90EE90; */ + font-weight:bold; + padding:5px 0px; + border-bottom:1px solid #228B22; +} + +.home_container +{ + margin:20px 0px; +} + +.tables_of_contents +{ + margin:20px 0; + padding:5px; + background-color:#EAF2F4; + border:1px solid #C7DAEF; + -moz-border-radius: 15px; + -webkit-border-radius: 15px; +} +.tables_of_contents a +{ + font-size:14px; +} +.tables_of_contents_title +{ + margin:10px 25px; + font-weight:bold; +} +/*wiki code*/ +.code_pre +{ +/* width:650px; */ + max-height:300px; + overflow:scroll; + background:#f9f4a7; + padding:5px 0 5px 5px; + font-size:12px; +/* color:#4169E1; */ + border:1px dashed #d4cb3b; +} + +.div_h1 +{ + font:bold 18px/1 sans-serif,arial; + border-bottom:1px solid gray; + padding:3px 0px; + margin:20px 0px 10px 0px; + color:gray; +} +.div_h2 +{ + font:bold 17px/1 sans-serif,arial; + color:gray; + padding:2px 0; +} +.div_h3 +{ + font:bold 16px/1 sans-serif,arial; + color:gray; + padding:2px 0; +} +.div_lang +{ + margin-top:4em; + padding:8px; + background:#cfe2ff; + /*border-top:1px solid #FFA500; + border-bottom:1px solid #FFA500;*/ +} +.div_lang a +{ + padding:0px 3px; +} + +.ui-body { + padding-top: 0.8em; + margin-top:10px; +} + +.ui-li-desc { white-space: normal; } +.ui-li-heading { white-space: normal; } +.ui-li .ui-btn-text a.ui-link-inherit { white-space: normal; } + +.devices_list .ui-li-desc +{ +/* border-bottom:1px dashed #A9A9A9; */ +} + +.ui-listview .ui-li-icon { + top: 1.3em; +} + +/*.ui-icon, .ui-icon-searchfield:after { + -moz-border-radius: 0px; + -webkit-border-radius: 0px; + background: url("images/icons-18-white.png") no-repeat scroll 0 0 rgba(0, 0, 0, 0.4); +}*/ diff --git a/Public/Css/pagelist.css b/Public/Css/pagelist.css new file mode 100644 index 0000000..93c8454 --- /dev/null +++ b/Public/Css/pagelist.css @@ -0,0 +1,29 @@ +/*page division*/ +.pageList { + text-align:left; + font:normal 14px/1 Verdana,arial; + padding:10px; +} + +div.pageList a { + padding:5px 10px; + border:1px outset #708090; + color:#B0E0E6; + background:#4169E1; + margin-right:5px; +} + +/*view footer*/ +.viewFooter { + height:50px; + border-top:1px solid #4169E1; + padding-top:6px; + margin-bottom:10px; + background:#d1deed; +} + +div.pageList a.currentPage +{ + font-weight:bold; + background:#0000CD; +} \ No newline at end of file diff --git a/Public/Css/panel.css b/Public/Css/panel.css new file mode 100644 index 0000000..8b9f9a9 --- /dev/null +++ b/Public/Css/panel.css @@ -0,0 +1,74 @@ +ul { + list-style-type: none; +} + +div.mainPanel { + +} + +/*logout button*/ +.logoutButton +{ + float:left; + width:70px; + height:40px; + margin-left:5px; + border:1px outset #708090; + background:#4169E1; + text-align:center; +} +.logoutButton a +{ + display:block; + margin-top:13px; + color:#B0E0E6; + font:bold 12px/1 Verdana,arial; +} + +/*list of application in the panel main action*/ +.panelApplicationList +{ + padding:0px; +} +.panelApplicationList li +{ + display:block; + width:200px; + height:30px; + border:1px outset #708090; + margin:5px; + background:#4169E1; + padding-top:9px; +} + +.panelApplicationList li a +{ + margin:5px; + font: bold 14px/1 Verdana,arial; + color:#B0E0E6; +} + +/*list of groups an user is inserted within*/ +.groupsList +{ + margin:20px 5px 5px 5px; + font:normal 14px/1 Verdana,arial; +} +.groupsList li +{ + margin:5px 0px; + padding:0px; + font:bold 14px/1 Verdana,arial; +} +.groupsList ul +{ + padding:10px; +} + +/*list of logged users in panel*/ +.usersLoggedList +{ + margin:5px; + text-align:right; + font:normal 14px/1 Verdana,arial; +} \ No newline at end of file diff --git a/Public/Css/popupmenu.css b/Public/Css/popupmenu.css new file mode 100755 index 0000000..66a202e --- /dev/null +++ b/Public/Css/popupmenu.css @@ -0,0 +1,49 @@ +.verticalMenu { + margin-bottom:50px; + margin-left:10px; +/* text-align:right;*/ +} + +ul#menuBlock { +/* float:right; */ + float:left; + margin:0px; + padding:0px; + list-style:none; + height:24px; +} + +ul#menuBlock li { + position:relative; + display:block; + float:left; + width:150px; + border:1px outset #D3D3D3; + height:21px; + text-align:center; + background:#E6E6FA; + padding-top:5px; + padding-bottom:-2px; +} + +ul#menuBlock li a { + color:#696969; + font: bold 12px/1 Verdana,arial; +} + +ul#menuBlock li ul { + margin:0px; + padding:0px; + list-style:none; + position:absolute; + top:24px; + left:-1px; + display:none; +} + +ul#menuBlock li ul li { +} + +/*ul#menuBlock li:hover ul{ + display:block; +}*/ \ No newline at end of file diff --git a/Public/Css/scaffold.css b/Public/Css/scaffold.css new file mode 100755 index 0000000..8cc7529 --- /dev/null +++ b/Public/Css/scaffold.css @@ -0,0 +1,105 @@ +html, body{margin: 0;padding:0} + +body{ + font-family: Verdana,arial,sans-serif; + font-size: 11px; + text-align: center; +/* background: #93045a; */ +} + +td { + font-size: 12px; +} + +img { + border:none; +} + +td.editForm, td.delForm, td.associateForm, td.moveupForm, td.movedownForm { + width:3%; +} + +td.editForm input, td.delForm input, td.associateForm input, td.moveupForm input, td.movedownForm input +{ + height:30px; +} + +/*alert string*/ +.alert { + font:bold 12px/1.5 Verdana,arial; + padding:5px; + margin:5px 5px 15px 5px; + background:TOMATO; + border-top:2px solid MAROON; + border-bottom:2px solid MAROON; + color:MAROON; +} + +/*executed operation string*/ +.executed { + font:bold 12px/1.5 Verdana,arial; + padding:5px; + margin:5px 5px 15px 5px; + background:#E0FFFF; + border-top:2px solid #ADD8E6; + border-bottom:2px solid #ADD8E6; + color:#4169E1; +} + +/*action:main*/ +tr.listRow { + background:#E6E6FA; +} + +tr.listHead { + font-weight: bold; + background:#d1deed; + border:1px solid #4169E1; + border-bottom:1px solid #4169E1; +} + +tr.listHead td { +/* font-weight: bold; */ +/* background:#d1deed; */ + border-top:1px solid #4169E1; + border-bottom:1px solid #4169E1; +} + +.recordsBox { + margin:10px 0px; +} + +.recordsBox table { + width:100%; +} + +.listItemForm { + margin:0px; +} + +a.linkItem { +/* background:red; */ + font:bold 12px/1 Verdana,arial; +} + +/*controller:panel +/*action:main*/ +.main_box { + padding:50px 20px; + width:700px; + height:250px; +} +.top_color { + text-align:center; + width:160px; + height:35px; + margin:0; + padding:0; +} +.bottom_color { + background:lavender; + text-align:center; + width:160px; + margin:0; + padding:5px 0; +} \ No newline at end of file diff --git a/Public/Img/Acun/book.png b/Public/Img/Acun/book.png new file mode 100755 index 0000000..0245944 Binary files /dev/null and b/Public/Img/Acun/book.png differ diff --git a/Public/Img/Acun/document_properties.png b/Public/Img/Acun/document_properties.png new file mode 100755 index 0000000..bf4686f Binary files /dev/null and b/Public/Img/Acun/document_properties.png differ diff --git a/Public/Img/Acun/filenew.png b/Public/Img/Acun/filenew.png new file mode 100755 index 0000000..66d34b3 Binary files /dev/null and b/Public/Img/Acun/filenew.png differ diff --git a/Public/Img/Acun/go_previous.png b/Public/Img/Acun/go_previous.png new file mode 100755 index 0000000..39685ad Binary files /dev/null and b/Public/Img/Acun/go_previous.png differ diff --git a/Public/Img/Acun/help_hint.png b/Public/Img/Acun/help_hint.png new file mode 100644 index 0000000..aed2f70 Binary files /dev/null and b/Public/Img/Acun/help_hint.png differ diff --git a/Public/Img/Acun/note.png b/Public/Img/Acun/note.png new file mode 100755 index 0000000..5b4b248 Binary files /dev/null and b/Public/Img/Acun/note.png differ diff --git a/Public/Img/Crystal/1282042718_hardware.png b/Public/Img/Crystal/1282042718_hardware.png new file mode 100644 index 0000000..b971732 Binary files /dev/null and b/Public/Img/Crystal/1282042718_hardware.png differ diff --git a/Public/Img/Crystal/1282042976_hardware.png b/Public/Img/Crystal/1282042976_hardware.png new file mode 100644 index 0000000..efffd46 Binary files /dev/null and b/Public/Img/Crystal/1282042976_hardware.png differ diff --git a/Public/Img/Crystal/agt_forward.png b/Public/Img/Crystal/agt_forward.png new file mode 100755 index 0000000..13a59ad Binary files /dev/null and b/Public/Img/Crystal/agt_forward.png differ diff --git a/Public/Img/Crystal/button_cancel.png b/Public/Img/Crystal/button_cancel.png new file mode 100755 index 0000000..e2db55f Binary files /dev/null and b/Public/Img/Crystal/button_cancel.png differ diff --git a/Public/Img/Crystal/button_ok.png b/Public/Img/Crystal/button_ok.png new file mode 100755 index 0000000..2f86f0a Binary files /dev/null and b/Public/Img/Crystal/button_ok.png differ diff --git a/Public/Img/Crystal/cam_mount-22.png b/Public/Img/Crystal/cam_mount-22.png new file mode 100755 index 0000000..d4d2595 Binary files /dev/null and b/Public/Img/Crystal/cam_mount-22.png differ diff --git a/Public/Img/Crystal/cam_mount.png b/Public/Img/Crystal/cam_mount.png new file mode 100755 index 0000000..2da5732 Binary files /dev/null and b/Public/Img/Crystal/cam_mount.png differ diff --git a/Public/Img/Crystal/clear.png b/Public/Img/Crystal/clear.png new file mode 100755 index 0000000..4ad6a58 Binary files /dev/null and b/Public/Img/Crystal/clear.png differ diff --git a/Public/Img/Crystal/hardware.png b/Public/Img/Crystal/hardware.png new file mode 100755 index 0000000..7e90419 Binary files /dev/null and b/Public/Img/Crystal/hardware.png differ diff --git a/Public/Img/Crystal/home.png b/Public/Img/Crystal/home.png new file mode 100755 index 0000000..816a0c3 Binary files /dev/null and b/Public/Img/Crystal/home.png differ diff --git a/Public/Img/Crystal/lock.png b/Public/Img/Crystal/lock.png new file mode 100755 index 0000000..d1d0706 Binary files /dev/null and b/Public/Img/Crystal/lock.png differ diff --git a/Public/Img/Crystal/modem.png b/Public/Img/Crystal/modem.png new file mode 100755 index 0000000..f2f9c5b Binary files /dev/null and b/Public/Img/Crystal/modem.png differ diff --git a/Public/Img/Crystal/modem_22.png b/Public/Img/Crystal/modem_22.png new file mode 100755 index 0000000..da7e61d Binary files /dev/null and b/Public/Img/Crystal/modem_22.png differ diff --git a/Public/Img/Crystal/rss.png b/Public/Img/Crystal/rss.png new file mode 100755 index 0000000..3214cb6 Binary files /dev/null and b/Public/Img/Crystal/rss.png differ diff --git a/Public/Img/Crystal/unlock.png b/Public/Img/Crystal/unlock.png new file mode 100755 index 0000000..13b1090 Binary files /dev/null and b/Public/Img/Crystal/unlock.png differ diff --git a/Public/Img/Crystal/usb.png b/Public/Img/Crystal/usb.png new file mode 100755 index 0000000..88c7c80 Binary files /dev/null and b/Public/Img/Crystal/usb.png differ diff --git a/Public/Img/Crystal/usb_22.png b/Public/Img/Crystal/usb_22.png new file mode 100755 index 0000000..97da84a Binary files /dev/null and b/Public/Img/Crystal/usb_22.png differ diff --git a/Public/Img/Famfamfam/de.png b/Public/Img/Famfamfam/de.png new file mode 100755 index 0000000..ac4a977 Binary files /dev/null and b/Public/Img/Famfamfam/de.png differ diff --git a/Public/Img/Famfamfam/es.png b/Public/Img/Famfamfam/es.png new file mode 100755 index 0000000..c2de2d7 Binary files /dev/null and b/Public/Img/Famfamfam/es.png differ diff --git a/Public/Img/Famfamfam/fr.png b/Public/Img/Famfamfam/fr.png new file mode 100755 index 0000000..8332c4e Binary files /dev/null and b/Public/Img/Famfamfam/fr.png differ diff --git a/Public/Img/Famfamfam/gb.png b/Public/Img/Famfamfam/gb.png new file mode 100644 index 0000000..ff701e1 Binary files /dev/null and b/Public/Img/Famfamfam/gb.png differ diff --git a/Public/Img/Famfamfam/gr.png b/Public/Img/Famfamfam/gr.png new file mode 100755 index 0000000..8651ade Binary files /dev/null and b/Public/Img/Famfamfam/gr.png differ diff --git a/Public/Img/Famfamfam/it.png b/Public/Img/Famfamfam/it.png new file mode 100755 index 0000000..89692f7 Binary files /dev/null and b/Public/Img/Famfamfam/it.png differ diff --git a/Public/Img/Famfamfam/pt.png b/Public/Img/Famfamfam/pt.png new file mode 100644 index 0000000..ece7980 Binary files /dev/null and b/Public/Img/Famfamfam/pt.png differ diff --git a/Public/Img/Glaze/folder_blue.png b/Public/Img/Glaze/folder_blue.png new file mode 100755 index 0000000..98eadea Binary files /dev/null and b/Public/Img/Glaze/folder_blue.png differ diff --git a/Public/Img/Glaze/folder_blue_open.png b/Public/Img/Glaze/folder_blue_open.png new file mode 100755 index 0000000..4938afc Binary files /dev/null and b/Public/Img/Glaze/folder_blue_open.png differ diff --git a/Public/Img/Glaze/viewmag.png b/Public/Img/Glaze/viewmag.png new file mode 100755 index 0000000..c3976ee Binary files /dev/null and b/Public/Img/Glaze/viewmag.png differ diff --git a/Public/Img/H2O/applications-internet.png b/Public/Img/H2O/applications-internet.png new file mode 100755 index 0000000..193c46f Binary files /dev/null and b/Public/Img/H2O/applications-internet.png differ diff --git a/Public/Img/H2O/audio-card.png b/Public/Img/H2O/audio-card.png new file mode 100755 index 0000000..bf7445d Binary files /dev/null and b/Public/Img/H2O/audio-card.png differ diff --git a/Public/Img/H2O/audio-card_22.png b/Public/Img/H2O/audio-card_22.png new file mode 100755 index 0000000..d5a7ad4 Binary files /dev/null and b/Public/Img/H2O/audio-card_22.png differ diff --git a/Public/Img/H2O/camera-web.png b/Public/Img/H2O/camera-web.png new file mode 100755 index 0000000..c95f65c Binary files /dev/null and b/Public/Img/H2O/camera-web.png differ diff --git a/Public/Img/H2O/camera-web_22.png b/Public/Img/H2O/camera-web_22.png new file mode 100755 index 0000000..8a0b339 Binary files /dev/null and b/Public/Img/H2O/camera-web_22.png differ diff --git a/Public/Img/H2O/computer-laptop.png b/Public/Img/H2O/computer-laptop.png new file mode 100755 index 0000000..b5d8bde Binary files /dev/null and b/Public/Img/H2O/computer-laptop.png differ diff --git a/Public/Img/H2O/computer-laptop_22.png b/Public/Img/H2O/computer-laptop_22.png new file mode 100755 index 0000000..f33ca30 Binary files /dev/null and b/Public/Img/H2O/computer-laptop_22.png differ diff --git a/Public/Img/H2O/download.png b/Public/Img/H2O/download.png new file mode 100755 index 0000000..ec888b8 Binary files /dev/null and b/Public/Img/H2O/download.png differ diff --git a/Public/Img/H2O/download_48.png b/Public/Img/H2O/download_48.png new file mode 100755 index 0000000..e81619b Binary files /dev/null and b/Public/Img/H2O/download_48.png differ diff --git a/Public/Img/H2O/im-ban-user.png b/Public/Img/H2O/im-ban-user.png new file mode 100755 index 0000000..3771291 Binary files /dev/null and b/Public/Img/H2O/im-ban-user.png differ diff --git a/Public/Img/H2O/im-user.png b/Public/Img/H2O/im-user.png new file mode 100755 index 0000000..69de2e4 Binary files /dev/null and b/Public/Img/H2O/im-user.png differ diff --git a/Public/Img/H2O/media-flash-sd-mmc.png b/Public/Img/H2O/media-flash-sd-mmc.png new file mode 100755 index 0000000..ff41fd8 Binary files /dev/null and b/Public/Img/H2O/media-flash-sd-mmc.png differ diff --git a/Public/Img/H2O/media-flash-sd-mmc_22.png b/Public/Img/H2O/media-flash-sd-mmc_22.png new file mode 100755 index 0000000..cd97b66 Binary files /dev/null and b/Public/Img/H2O/media-flash-sd-mmc_22.png differ diff --git a/Public/Img/H2O/network-wired.png b/Public/Img/H2O/network-wired.png new file mode 100755 index 0000000..2981c5b Binary files /dev/null and b/Public/Img/H2O/network-wired.png differ diff --git a/Public/Img/H2O/network-wired_22.png b/Public/Img/H2O/network-wired_22.png new file mode 100755 index 0000000..7e22be7 Binary files /dev/null and b/Public/Img/H2O/network-wired_22.png differ diff --git a/Public/Img/H2O/network-wireless.png b/Public/Img/H2O/network-wireless.png new file mode 100755 index 0000000..747edc9 Binary files /dev/null and b/Public/Img/H2O/network-wireless.png differ diff --git a/Public/Img/H2O/network-wireless_22.png b/Public/Img/H2O/network-wireless_22.png new file mode 100755 index 0000000..94c4058 Binary files /dev/null and b/Public/Img/H2O/network-wireless_22.png differ diff --git a/Public/Img/H2O/preferences-system-bluetooth-22.png b/Public/Img/H2O/preferences-system-bluetooth-22.png new file mode 100755 index 0000000..c0b3f06 Binary files /dev/null and b/Public/Img/H2O/preferences-system-bluetooth-22.png differ diff --git a/Public/Img/H2O/preferences-system-bluetooth.png b/Public/Img/H2O/preferences-system-bluetooth.png new file mode 100755 index 0000000..f64ecb0 Binary files /dev/null and b/Public/Img/H2O/preferences-system-bluetooth.png differ diff --git a/Public/Img/H2O/printer.png b/Public/Img/H2O/printer.png new file mode 100755 index 0000000..fd48f9f Binary files /dev/null and b/Public/Img/H2O/printer.png differ diff --git a/Public/Img/H2O/printer_22.png b/Public/Img/H2O/printer_22.png new file mode 100755 index 0000000..6e110de Binary files /dev/null and b/Public/Img/H2O/printer_22.png differ diff --git a/Public/Img/H2O/scanner.png b/Public/Img/H2O/scanner.png new file mode 100755 index 0000000..7a50365 Binary files /dev/null and b/Public/Img/H2O/scanner.png differ diff --git a/Public/Img/H2O/scanner_22.png b/Public/Img/H2O/scanner_22.png new file mode 100755 index 0000000..d7b57e0 Binary files /dev/null and b/Public/Img/H2O/scanner_22.png differ diff --git a/Public/Img/Icons/back.png b/Public/Img/Icons/back.png new file mode 100644 index 0000000..6ceb852 Binary files /dev/null and b/Public/Img/Icons/back.png differ diff --git a/Public/Img/Icons/delete.png b/Public/Img/Icons/delete.png new file mode 100644 index 0000000..9b192fe Binary files /dev/null and b/Public/Img/Icons/delete.png differ diff --git a/Public/Img/Icons/elementary_2_5/AUTHORS b/Public/Img/Icons/elementary_2_5/AUTHORS new file mode 100755 index 0000000..dd652c4 --- /dev/null +++ b/Public/Img/Icons/elementary_2_5/AUTHORS @@ -0,0 +1,28 @@ +#################### +ABOUT: # +#################### +These icons are taken from the elementary theme. The delete.png file has been modified by Antonio Gallo (tonicucoz@yahoo.com) + +elementary is designed and developed by Daniel Foré + +GNOME icons, Humanity icons, and elementary icons are all licensed under the GPL. + +This package is licensed under GNU General Public License version 2. + +Icons based on GNOME and other GNOME projects are licensed GPL. + You can visit the GNOME website here: + http://www.gnome.org/ + +Icons based on Tango sources or taken from the Tango project are public domain. + You can visit the Tango project website here: + http://tango.freedesktop.org/Tango_Desktop_Project + +Icons based on Humanity sources or taken from the elementary project are licensed GPL. + You can visit the Humanity website here: + http://launchpad.net/humanity + +#################### +Special Thanks: # +#################### + +The awesome Humanity team for their hard work! diff --git a/Public/Img/Icons/elementary_2_5/CONTRIBUTORS b/Public/Img/Icons/elementary_2_5/CONTRIBUTORS new file mode 100755 index 0000000..801c4cc --- /dev/null +++ b/Public/Img/Icons/elementary_2_5/CONTRIBUTORS @@ -0,0 +1,3 @@ +Sebastian Porta +Oliver Scholtz +Dennis Fisher, for his amazing work with emblems to make them look beautiful. diff --git a/Public/Img/Icons/elementary_2_5/COPYING b/Public/Img/Icons/elementary_2_5/COPYING new file mode 100755 index 0000000..d60c31a --- /dev/null +++ b/Public/Img/Icons/elementary_2_5/COPYING @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/Public/Img/Icons/elementary_2_5/ChangeLog b/Public/Img/Icons/elementary_2_5/ChangeLog new file mode 100755 index 0000000..2ba7169 --- /dev/null +++ b/Public/Img/Icons/elementary_2_5/ChangeLog @@ -0,0 +1,6 @@ +Elementary icons 2.5 kde port - by jetpack, changelog: + +0.1 +=== +* Initial Version. +* Elementary icons by Dan Rabbit v2.5 \ No newline at end of file diff --git a/Public/Img/Icons/elementary_2_5/add.png b/Public/Img/Icons/elementary_2_5/add.png new file mode 100755 index 0000000..e6c9c9c Binary files /dev/null and b/Public/Img/Icons/elementary_2_5/add.png differ diff --git a/Public/Img/Icons/elementary_2_5/clear_filter.png b/Public/Img/Icons/elementary_2_5/clear_filter.png new file mode 100755 index 0000000..c4b47db Binary files /dev/null and b/Public/Img/Icons/elementary_2_5/clear_filter.png differ diff --git a/Public/Img/Icons/elementary_2_5/delete.png b/Public/Img/Icons/elementary_2_5/delete.png new file mode 100755 index 0000000..c4b47db Binary files /dev/null and b/Public/Img/Icons/elementary_2_5/delete.png differ diff --git a/Public/Img/Icons/elementary_2_5/down.png b/Public/Img/Icons/elementary_2_5/down.png new file mode 100755 index 0000000..21c6d58 Binary files /dev/null and b/Public/Img/Icons/elementary_2_5/down.png differ diff --git a/Public/Img/Icons/elementary_2_5/edit.png b/Public/Img/Icons/elementary_2_5/edit.png new file mode 100755 index 0000000..ed0d0ef Binary files /dev/null and b/Public/Img/Icons/elementary_2_5/edit.png differ diff --git a/Public/Img/Icons/elementary_2_5/find.png b/Public/Img/Icons/elementary_2_5/find.png new file mode 100755 index 0000000..382cc98 Binary files /dev/null and b/Public/Img/Icons/elementary_2_5/find.png differ diff --git a/Public/Img/Icons/elementary_2_5/left.png b/Public/Img/Icons/elementary_2_5/left.png new file mode 100755 index 0000000..316d4c1 Binary files /dev/null and b/Public/Img/Icons/elementary_2_5/left.png differ diff --git a/Public/Img/Icons/elementary_2_5/link.png b/Public/Img/Icons/elementary_2_5/link.png new file mode 100755 index 0000000..625a1fb Binary files /dev/null and b/Public/Img/Icons/elementary_2_5/link.png differ diff --git a/Public/Img/Icons/elementary_2_5/panel.png b/Public/Img/Icons/elementary_2_5/panel.png new file mode 100755 index 0000000..464149f Binary files /dev/null and b/Public/Img/Icons/elementary_2_5/panel.png differ diff --git a/Public/Img/Icons/elementary_2_5/up.png b/Public/Img/Icons/elementary_2_5/up.png new file mode 100755 index 0000000..14d3603 Binary files /dev/null and b/Public/Img/Icons/elementary_2_5/up.png differ diff --git a/Public/Img/Icons/file.png b/Public/Img/Icons/file.png new file mode 100644 index 0000000..443765f Binary files /dev/null and b/Public/Img/Icons/file.png differ diff --git a/Public/Img/Icons/folder.png b/Public/Img/Icons/folder.png new file mode 100644 index 0000000..89fb6d5 Binary files /dev/null and b/Public/Img/Icons/folder.png differ diff --git a/Public/Img/Icons/image.png b/Public/Img/Icons/image.png new file mode 100644 index 0000000..bbc8c82 Binary files /dev/null and b/Public/Img/Icons/image.png differ diff --git a/Public/Img/Icons/index.html b/Public/Img/Icons/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Public/Img/Icons/index.html @@ -0,0 +1 @@ + diff --git a/Public/Img/back-60.png b/Public/Img/back-60.png new file mode 100644 index 0000000..225df8e Binary files /dev/null and b/Public/Img/back-60.png differ diff --git a/Public/Img/back_last.png b/Public/Img/back_last.png new file mode 100644 index 0000000..6411e49 Binary files /dev/null and b/Public/Img/back_last.png differ diff --git a/Public/Img/back_wiki.png b/Public/Img/back_wiki.png new file mode 100644 index 0000000..b34a9b9 Binary files /dev/null and b/Public/Img/back_wiki.png differ diff --git a/Public/Img/discover.png b/Public/Img/discover.png new file mode 100644 index 0000000..28c799a Binary files /dev/null and b/Public/Img/discover.png differ diff --git a/Public/Img/download.png b/Public/Img/download.png new file mode 100644 index 0000000..d2f81dc Binary files /dev/null and b/Public/Img/download.png differ diff --git a/Public/Img/download_code.png b/Public/Img/download_code.png new file mode 100755 index 0000000..f40fc74 Binary files /dev/null and b/Public/Img/download_code.png differ diff --git a/Public/Img/download_code_gpl3.png b/Public/Img/download_code_gpl3.png new file mode 100644 index 0000000..7349d11 Binary files /dev/null and b/Public/Img/download_code_gpl3.png differ diff --git a/Public/Img/edit-60.png b/Public/Img/edit-60.png new file mode 100644 index 0000000..254ce23 Binary files /dev/null and b/Public/Img/edit-60.png differ diff --git a/Public/Img/fingerprint_icon-22.png b/Public/Img/fingerprint_icon-22.png new file mode 100644 index 0000000..5593419 Binary files /dev/null and b/Public/Img/fingerprint_icon-22.png differ diff --git a/Public/Img/fingerprint_icon.png b/Public/Img/fingerprint_icon.png new file mode 100644 index 0000000..989ba28 Binary files /dev/null and b/Public/Img/fingerprint_icon.png differ diff --git a/Public/Img/fsf_logo.png b/Public/Img/fsf_logo.png new file mode 100755 index 0000000..90ac03d Binary files /dev/null and b/Public/Img/fsf_logo.png differ diff --git a/Public/Img/history-60.png b/Public/Img/history-60.png new file mode 100644 index 0000000..c726964 Binary files /dev/null and b/Public/Img/history-60.png differ diff --git a/Public/Img/link.png b/Public/Img/link.png new file mode 100644 index 0000000..12f9bce Binary files /dev/null and b/Public/Img/link.png differ diff --git a/Public/Img/mailing.png b/Public/Img/mailing.png new file mode 100644 index 0000000..dbb2207 Binary files /dev/null and b/Public/Img/mailing.png differ diff --git a/Public/Img/mobile.png b/Public/Img/mobile.png new file mode 100644 index 0000000..4fbf1de Binary files /dev/null and b/Public/Img/mobile.png differ diff --git a/Public/Img/new-60.png b/Public/Img/new-60.png new file mode 100644 index 0000000..d484867 Binary files /dev/null and b/Public/Img/new-60.png differ diff --git a/Public/Img/popup_back.png b/Public/Img/popup_back.png new file mode 100644 index 0000000..4cb7139 Binary files /dev/null and b/Public/Img/popup_back.png differ diff --git a/Public/Img/rss.png b/Public/Img/rss.png new file mode 100644 index 0000000..f744669 Binary files /dev/null and b/Public/Img/rss.png differ diff --git a/Public/Img/search_back.png b/Public/Img/search_back.png new file mode 100644 index 0000000..6fd3b01 Binary files /dev/null and b/Public/Img/search_back.png differ diff --git a/Public/Img/tab_icon_2.ico b/Public/Img/tab_icon_2.ico new file mode 100644 index 0000000..1adece3 Binary files /dev/null and b/Public/Img/tab_icon_2.ico differ diff --git a/Public/Img/talk-60.png b/Public/Img/talk-60.png new file mode 100644 index 0000000..d892a8d Binary files /dev/null and b/Public/Img/talk-60.png differ diff --git a/Public/Img/talk_messages.png b/Public/Img/talk_messages.png new file mode 100644 index 0000000..6a753d5 Binary files /dev/null and b/Public/Img/talk_messages.png differ diff --git a/Public/Img/title.png b/Public/Img/title.png new file mode 100644 index 0000000..4a912bd Binary files /dev/null and b/Public/Img/title.png differ diff --git a/Public/Js/DisplayTag.js b/Public/Js/DisplayTag.js new file mode 100755 index 0000000..1ba1fb7 --- /dev/null +++ b/Public/Js/DisplayTag.js @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/Public/Js/TinyMCE.js b/Public/Js/TinyMCE.js new file mode 100755 index 0000000..b0f994e --- /dev/null +++ b/Public/Js/TinyMCE.js @@ -0,0 +1,34 @@ +tinyMCE.init({ + // General options + mode : "textareas", + theme : "advanced", + editor_selector : "contentArea", +// editor_deselector : "mceNoEditor", + plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template", + + // Theme options + theme_advanced_buttons1 : "justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect", + theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,code", + theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media", + theme_advanced_buttons4 : "styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,template,|,forecolor,backcolor,bold,italic,underline,strikethrough,|,insertdate,inserttime,preview", + theme_advanced_toolbar_location : "top", + theme_advanced_toolbar_align : "left", + theme_advanced_statusbar_location : "bottom", + theme_advanced_resizing : true, + + // Example content CSS (should be your site CSS) + content_css : "../stili_editor.css", + + // Drop lists for link/image/media/template dialogs + template_external_list_url : "lists/template_list.js", + external_link_list_url : "lists/link_list.js", + external_image_list_url : "lists/image_list.js", + media_external_list_url : "lists/media_list.js", + + // Replace values for the template plugin + template_replace_values : { + username : "Some User", + staffid : "991234" + } + }); + diff --git a/Public/Js/functions.js b/Public/Js/functions.js new file mode 100644 index 0000000..5b426d2 --- /dev/null +++ b/Public/Js/functions.js @@ -0,0 +1,189 @@ + \ No newline at end of file diff --git a/Public/Js/index.html b/Public/Js/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Public/Js/index.html @@ -0,0 +1 @@ + diff --git a/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png b/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png new file mode 100755 index 0000000..82524ab Binary files /dev/null and b/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png differ diff --git a/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png b/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png new file mode 100755 index 0000000..6aed97a Binary files /dev/null and b/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png differ diff --git a/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png b/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png new file mode 100755 index 0000000..f11ca67 Binary files /dev/null and b/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png differ diff --git a/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png b/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png new file mode 100755 index 0000000..68306d1 Binary files /dev/null and b/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png differ diff --git a/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png b/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png new file mode 100755 index 0000000..f567c28 Binary files /dev/null and b/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png differ diff --git a/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png b/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png new file mode 100755 index 0000000..29e9965 Binary files /dev/null and b/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png differ diff --git a/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png b/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png new file mode 100755 index 0000000..9a46d19 Binary files /dev/null and b/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png differ diff --git a/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png b/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png new file mode 100755 index 0000000..f811f30 Binary files /dev/null and b/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png differ diff --git a/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png b/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png new file mode 100755 index 0000000..755fe99 Binary files /dev/null and b/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png differ diff --git a/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png b/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png new file mode 100755 index 0000000..98705f9 Binary files /dev/null and b/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png differ diff --git a/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png b/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png new file mode 100755 index 0000000..2179078 Binary files /dev/null and b/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png differ diff --git a/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png b/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png new file mode 100755 index 0000000..de76ce2 Binary files /dev/null and b/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png differ diff --git a/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png b/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png new file mode 100755 index 0000000..42f8f99 Binary files /dev/null and b/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png differ diff --git a/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css b/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css new file mode 100755 index 0000000..c4ed3ea --- /dev/null +++ b/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css @@ -0,0 +1,315 @@ +/* + * jQuery UI CSS Framework @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/* + * jQuery UI CSS Framework @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=segoe%20ui,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=3px&bgColorHeader=f9f9f9&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=100&borderColorHeader=cccccc&fcHeader=e69700&iconColorHeader=5fa5e3&bgColorContent=eeeeee&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=0a82eb&bgColorDefault=1484e6&bgTextureDefault=08_diagonals_thick.png&bgImgOpacityDefault=22&borderColorDefault=ffffff&fcDefault=ffffff&iconColorDefault=fcdd4a&bgColorHover=2293f7&bgTextureHover=08_diagonals_thick.png&bgImgOpacityHover=26&borderColorHover=2293f7&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=e69700&bgTextureActive=08_diagonals_thick.png&bgImgOpacityActive=20&borderColorActive=e69700&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=c5ddfc&bgTextureHighlight=07_diagonals_small.png&bgImgOpacityHighlight=25&borderColorHighlight=ffffff&fcHighlight=333333&iconColorHighlight=0b54d5&bgColorError=e69700&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=20&borderColorError=e69700&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=e6b900&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=e69700&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=20&thicknessShadow=0px&offsetTopShadow=6px&offsetLeftShadow=6px&cornerRadiusShadow=3px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: segoe ui, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: segoe ui, Arial, sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #aaaaaa; background: #eeeeee url(images/ui-bg_inset-hard_100_eeeeee_1x100.png) 50% bottom repeat-x; color: #222222; } +.ui-widget-content a { color: #222222; } +.ui-widget-header { border: 1px solid #cccccc; background: #f9f9f9 url(images/ui-bg_highlight-soft_100_f9f9f9_1x100.png) 50% 50% repeat-x; color: #e69700; font-weight: bold; } +.ui-widget-header a { color: #e69700; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #ffffff; background: #1484e6 url(images/ui-bg_diagonals-thick_22_1484e6_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #ffffff; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #2293f7; background: #2293f7 url(images/ui-bg_diagonals-thick_26_2293f7_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } +.ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #e69700; background: #e69700 url(images/ui-bg_diagonals-thick_20_e69700_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #ffffff; background: #c5ddfc url(images/ui-bg_diagonals-small_25_c5ddfc_40x40.png) 50% 50% repeat; color: #333333; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #333333; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #e69700; background: #e69700 url(images/ui-bg_diagonals-thick_20_e69700_40x40.png) 50% 50% repeat; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_0a82eb_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_0a82eb_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_5fa5e3_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_fcdd4a_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_0b54d5_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; } +.ui-corner-tr { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; } +.ui-corner-bl { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; } +.ui-corner-br { -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } +.ui-corner-top { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } +.ui-corner-right { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } +.ui-corner-left { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; } +.ui-corner-all { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } + +/* Overlays */ +.ui-widget-overlay { background: #e6b900 url(images/ui-bg_flat_0_e6b900_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } +.ui-widget-shadow { margin: 6px 0 0 6px; padding: 0px; background: #e69700 url(images/ui-bg_flat_0_e69700_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; }/* + * jQuery UI Dialog @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } diff --git a/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js b/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js new file mode 100755 index 0000000..7469ef3 --- /dev/null +++ b/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js @@ -0,0 +1,87 @@ +/*! + * jQuery UI 1.8.4 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.4",plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=0)&&c(a).is(":focusable")}})}})(jQuery); +;/*! + * jQuery UI Widget 1.8.4 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,j){var k=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return k.call(b(this),a,c)})};b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options); +b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}): +this.each(function(){var g=b.data(this,a);if(g){d&&g.option(d);g._init()}else b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}); +this._create();this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}b.each(d,function(f, +h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a= +b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery); +;/* + * jQuery UI Position 1.8.4 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Position + */ +(function(c){c.ui=c.ui||{};var m=/left|center|right/,n=/top|center|bottom/,p=c.fn.position,q=c.fn.offset;c.fn.position=function(a){if(!a||!a.of)return p.apply(this,arguments);a=c.extend({},a);var b=c(a.of),d=(a.collision||"flip").split(" "),e=a.offset?a.offset.split(" "):[0,0],g,h,i;if(a.of.nodeType===9){g=b.width();h=b.height();i={top:0,left:0}}else if(a.of.scrollTo&&a.of.document){g=b.width();h=b.height();i={top:b.scrollTop(),left:b.scrollLeft()}}else if(a.of.preventDefault){a.at="left top";g=h= +0;i={top:a.of.pageY,left:a.of.pageX}}else{g=b.outerWidth();h=b.outerHeight();i=b.offset()}c.each(["my","at"],function(){var f=(a[this]||"").split(" ");if(f.length===1)f=m.test(f[0])?f.concat(["center"]):n.test(f[0])?["center"].concat(f):["center","center"];f[0]=m.test(f[0])?f[0]:"center";f[1]=n.test(f[1])?f[1]:"center";a[this]=f});if(d.length===1)d[1]=d[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(a.at[0]==="right")i.left+=g;else if(a.at[0]==="center")i.left+= +g/2;if(a.at[1]==="bottom")i.top+=h;else if(a.at[1]==="center")i.top+=h/2;i.left+=e[0];i.top+=e[1];return this.each(function(){var f=c(this),k=f.outerWidth(),l=f.outerHeight(),j=c.extend({},i);if(a.my[0]==="right")j.left-=k;else if(a.my[0]==="center")j.left-=k/2;if(a.my[1]==="bottom")j.top-=l;else if(a.my[1]==="center")j.top-=l/2;j.left=parseInt(j.left);j.top=parseInt(j.top);c.each(["left","top"],function(o,r){c.ui.position[d[o]]&&c.ui.position[d[o]][r](j,{targetWidth:g,targetHeight:h,elemWidth:k, +elemHeight:l,offset:e,my:a.my,at:a.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(j,{using:a.using}))})};c.ui.position={fit:{left:function(a,b){var d=c(window);b=a.left+b.elemWidth-d.width()-d.scrollLeft();a.left=b>0?a.left-b:Math.max(0,a.left)},top:function(a,b){var d=c(window);b=a.top+b.elemHeight-d.height()-d.scrollTop();a.top=b>0?a.top-b:Math.max(0,a.top)}},flip:{left:function(a,b){if(b.at[0]!=="center"){var d=c(window);d=a.left+b.elemWidth-d.width()-d.scrollLeft();var e=b.my[0]==="left"? +-b.elemWidth:b.my[0]==="right"?b.elemWidth:0,g=-2*b.offset[0];a.left+=a.left<0?e+b.targetWidth+g:d>0?e-b.targetWidth+g:0}},top:function(a,b){if(b.at[1]!=="center"){var d=c(window);d=a.top+b.elemHeight-d.height()-d.scrollTop();var e=b.my[1]==="top"?-b.elemHeight:b.my[1]==="bottom"?b.elemHeight:0,g=b.at[1]==="top"?b.targetHeight:-b.targetHeight,h=-2*b.offset[1];a.top+=a.top<0?e+b.targetHeight+h:d>0?e+g+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(a,b){if(/static/.test(c.curCSS(a,"position")))a.style.position= +"relative";var d=c(a),e=d.offset(),g=parseInt(c.curCSS(a,"top",true),10)||0,h=parseInt(c.curCSS(a,"left",true),10)||0;e={top:b.top-e.top+g,left:b.left-e.left+h};"using"in b?b.using.call(a,e):d.css(e)};c.fn.offset=function(a){var b=this[0];if(!b||!b.ownerDocument)return null;if(a)return this.each(function(){c.offset.setOffset(this,a)});return q.call(this)}}})(jQuery); +;/* + * jQuery UI Dialog 1.8.4 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.button.js + * jquery.ui.draggable.js + * jquery.ui.mouse.js + * jquery.ui.position.js + * jquery.ui.resizable.js + */ +(function(c,j){c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",of:window,collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title"); +if(typeof this.originalTitle!=="string")this.originalTitle="";var a=this,b=a.options,d=b.title||a.originalTitle||" ",f=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
        ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(i){a.moveToTop(false, +i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var e=(a.uiDialogTitlebar=c("
        ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i); +return false}).appendTo(e);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id",f).html(d).prependTo(e);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;e.find("*").add(e).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&& +g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog"); +b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,f=d.options;if(f.modal&&!a||!f.stack&&!f.modal)return d._trigger("focus",b);if(f.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ= +f.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show); +a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(f){if(f.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),e=g.filter(":first");g=g.filter(":last");if(f.target===g[0]&&!f.shiftKey){e.focus(1);return false}else if(f.target===e[0]&&f.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._trigger("open");a._isOpen=true;return a}},_createButtons:function(a){var b=this,d=false, +f=c("
        ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("
        ").addClass("ui-dialog-buttonset").appendTo(f);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(e,h){e=c('').text(e).click(function(){h.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&e.button()});f.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(e){return{position:e.position, +offset:e.offset}}var b=this,d=b.options,f=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(e,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",e,a(h))},drag:function(e,h){b._trigger("drag",e,a(h))},stop:function(e,h){d.position=[h.position.left-f.scrollLeft(),h.position.top-f.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g); +b._trigger("dragStop",e,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}a=a===j?this.options.resizable:a;var d=this,f=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:d._minHeight(), +handles:a,start:function(e,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",e,b(h))},resize:function(e,h){d._trigger("resize",e,b(h))},stop:function(e,h){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();d._trigger("resizeStop",e,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight, +a.height)},_position:function(a){var b=[],d=[0,0],f;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,e){if(+b[g]===b[g]){d[g]=b[g];b[g]=e}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a); +f||this.uiDialog.hide()},_setOption:function(a,b){var d=this,f=d.uiDialog,g=f.is(":data(resizable)"),e=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);e=true;break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":f.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case "draggable":b? +d._makeDraggable():f.draggable("destroy");break;case "height":e=true;break;case "maxHeight":g&&f.resizable("option","maxHeight",b);e=true;break;case "maxWidth":g&&f.resizable("option","maxWidth",b);e=true;break;case "minHeight":g&&f.resizable("option","minHeight",b);e=true;break;case "minWidth":g&&f.resizable("option","minWidth",b);e=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&f.resizable("destroy");g&&typeof b==="string"&&f.resizable("option","handles",b);!g&&b!==false&& +d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break;case "width":e=true;break}c.Widget.prototype._setOption.apply(d,arguments);e&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:"auto"}:{minHeight:0,height:Math.max(a.height- +b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.4",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "), +create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){return c(d.target).zIndex()>=c.ui.dialog.overlay.maxZ})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("
        ").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(), +height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight); +b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
        a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
        "+""+"
        ",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
        t
        ",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
        ",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; +f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

        ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
        ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
        ","
        "],thead:[1,"","
        "],tr:[2,"","
        "],td:[3,"","
        "],col:[2,"","
        "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
        ","
        "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() +{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
        ").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/Public/Js/jquery/jquery.mobile-1.1.0.css b/Public/Js/jquery/jquery.mobile-1.1.0.css new file mode 100644 index 0000000..06dbf8f --- /dev/null +++ b/Public/Js/jquery/jquery.mobile-1.1.0.css @@ -0,0 +1,2053 @@ +/* +* jQuery Mobile Framework 1.1.0 db342b1f315c282692791aa870455901fdb46a55 +* http://jquerymobile.com +* +* Copyright 2011 (c) jQuery Project +* Dual licensed under the MIT or GPL Version 2 licenses. +* http://jquery.org/license +* +*/ +/* Swatches */ +/* A +-----------------------------------------------------------------------------------------------------------*/ +.ui-bar-a { + border: 1px solid #333 /*{a-bar-border}*/; + background: #111111 /*{a-bar-background-color}*/; + color: #ffffff /*{a-bar-color}*/; + font-weight: bold; + text-shadow: 0 /*{a-bar-shadow-x}*/ -1px /*{a-bar-shadow-y}*/ 1px /*{a-bar-shadow-radius}*/ #000000 /*{a-bar-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #3c3c3c /*{a-bar-background-start}*/), to( #111 /*{a-bar-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); +} +.ui-bar-a, +.ui-bar-a input, +.ui-bar-a select, +.ui-bar-a textarea, +.ui-bar-a button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-bar-a .ui-link-inherit { + color: #fff /*{a-bar-color}*/; +} +.ui-bar-a .ui-link { + color: #7cc4e7 /*{a-bar-link-color}*/; + font-weight: bold; +} +.ui-bar-a .ui-link:hover { + color: #2489CE /*{a-bar-link-hover}*/; +} +.ui-bar-a .ui-link:active { + color: #2489CE /*{a-bar-link-active}*/; +} +.ui-bar-a .ui-link:visited { + color: #2489CE /*{a-bar-link-visited}*/; +} +.ui-body-a, +.ui-overlay-a { + border: 1px solid #444 /*{a-body-border}*/; + background: #222 /*{a-body-background-color}*/; + color: #fff /*{a-body-color}*/; + text-shadow: 0 /*{a-body-shadow-x}*/ 1px /*{a-body-shadow-y}*/ 1px /*{a-body-shadow-radius}*/ #111 /*{a-body-shadow-color}*/; + font-weight: normal; + background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-body-background-start}*/), to( #222 /*{a-body-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); +} +.ui-overlay-a { + background-image: none; + border-width: 0; +} +.ui-body-a, +.ui-body-a input, +.ui-body-a select, +.ui-body-a textarea, +.ui-body-a button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-body-a .ui-link-inherit { + color: #fff /*{a-body-color}*/; +} +.ui-body-a .ui-link { + color: #2489CE /*{a-body-link-color}*/; + font-weight: bold; +} +.ui-body-a .ui-link:hover { + color: #2489CE /*{a-body-link-hover}*/; +} +.ui-body-a .ui-link:active { + color: #2489CE /*{a-body-link-active}*/; +} +.ui-body-a .ui-link:visited { + color: #2489CE /*{a-body-link-visited}*/; +} +.ui-btn-up-a { + border: 1px solid #111 /*{a-bup-border}*/; + background: #333 /*{a-bup-background-color}*/; + font-weight: bold; + color: #fff /*{a-bup-color}*/; + text-shadow: 0 /*{a-bup-shadow-x}*/ 1px /*{a-bup-shadow-y}*/ 1px /*{a-bup-shadow-radius}*/ #111 /*{a-bup-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #444444 /*{a-bup-background-start}*/), to( #2d2d2d /*{a-bup-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); +} +.ui-btn-up-a a.ui-link-inherit { + color: #fff /*{a-bup-color}*/; +} +.ui-btn-hover-a { + border: 1px solid #000 /*{a-bhover-border}*/; + background: #444444 /*{a-bhover-background-color}*/; + font-weight: bold; + color: #fff /*{a-bhover-color}*/; + text-shadow: 0 /*{a-bhover-shadow-x}*/ 1px /*{a-bhover-shadow-y}*/ 1px /*{a-bhover-shadow-radius}*/ #111 /*{a-bhover-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #555555 /*{a-bhover-background-start}*/), to( #383838 /*{a-bhover-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); +} +.ui-btn-hover-a a.ui-link-inherit { + color: #fff /*{a-bhover-color}*/; +} +.ui-btn-down-a { + border: 1px solid #000 /*{a-bdown-border}*/; + background: #222 /*{a-bdown-background-color}*/; + font-weight: bold; + color: #fff /*{a-bdown-color}*/; + text-shadow: 0 /*{a-bdown-shadow-x}*/ 1px /*{a-bdown-shadow-y}*/ 1px /*{a-bdown-shadow-radius}*/ #111 /*{a-bdown-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #202020 /*{a-bdown-background-start}*/), to( #2c2c2c /*{a-bdown-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); +} +.ui-btn-down-a a.ui-link-inherit { + color: #fff /*{a-bdown-color}*/; +} +.ui-btn-up-a, +.ui-btn-hover-a, +.ui-btn-down-a { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; + text-decoration: none; +} +/* B +-----------------------------------------------------------------------------------------------------------*/ +.ui-bar-b { + border: 1px solid #456f9a /*{b-bar-border}*/; + background: #5e87b0 /*{b-bar-background-color}*/; + color: #fff /*{b-bar-color}*/; + font-weight: bold; + text-shadow: 0 /*{b-bar-shadow-x}*/ 1px /*{b-bar-shadow-y}*/ 1px /*{b-bar-shadow-radius}*/ #3e6790 /*{b-bar-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bar-background-start}*/), to( #497bae /*{b-bar-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); +} +.ui-bar-b, +.ui-bar-b input, +.ui-bar-b select, +.ui-bar-b textarea, +.ui-bar-b button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-bar-b .ui-link-inherit { + color: #fff /*{b-bar-color}*/; +} +.ui-bar-b .ui-link { + color: #ddf0f8 /*{b-bar-link-color}*/; + font-weight: bold; +} +.ui-bar-b .ui-link:hover { + color: #ddf0f8 /*{b-bar-link-hover}*/; +} +.ui-bar-b .ui-link:active { + color: #ddf0f8 /*{b-bar-link-active}*/; +} +.ui-bar-b .ui-link:visited { + color: #ddf0f8 /*{b-bar-link-visited}*/; +} +.ui-body-b, +.ui-overlay-b { + border: 1px solid #999 /*{b-body-border}*/; + background: #f3f3f3 /*{b-body-background-color}*/; + color: #222222 /*{b-body-color}*/; + text-shadow: 0 /*{b-body-shadow-x}*/ 1px /*{b-body-shadow-y}*/ 0 /*{b-body-shadow-radius}*/ #fff /*{b-body-shadow-color}*/; + font-weight: normal; + background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{b-body-background-start}*/), to( #ccc /*{b-body-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); +} +.ui-overlay-b { + background-image: none; + border-width: 0; +} +.ui-body-b, +.ui-body-b input, +.ui-body-b select, +.ui-body-b textarea, +.ui-body-b button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-body-b .ui-link-inherit { + color: #333333 /*{b-body-color}*/; +} +.ui-body-b .ui-link { + color: #2489CE /*{b-body-link-color}*/; + font-weight: bold; +} +.ui-body-b .ui-link:hover { + color: #2489CE /*{b-body-link-hover}*/; +} +.ui-body-b .ui-link:active { + color: #2489CE /*{b-body-link-active}*/; +} +.ui-body-b .ui-link:visited { + color: #2489CE /*{b-body-link-visited}*/; +} +.ui-btn-up-b { + border: 1px solid #044062 /*{b-bup-border}*/; + background: #396b9e /*{b-bup-background-color}*/; + font-weight: bold; + color: #fff /*{b-bup-color}*/; + text-shadow: 0 /*{b-bup-shadow-x}*/ 1px /*{b-bup-shadow-y}*/ 1px /*{b-bup-shadow-radius}*/ #194b7e /*{b-bup-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #5f9cc5 /*{b-bup-background-start}*/), to( #396b9e /*{b-bup-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); +} +.ui-btn-up-b a.ui-link-inherit { + color: #fff /*{b-bup-color}*/; +} +.ui-btn-hover-b { + border: 1px solid #00415e /*{b-bhover-border}*/; + background: #4b88b6 /*{b-bhover-background-color}*/; + font-weight: bold; + color: #fff /*{b-bhover-color}*/; + text-shadow: 0 /*{b-bhover-shadow-x}*/ 1px /*{b-bhover-shadow-y}*/ 1px /*{b-bhover-shadow-radius}*/ #194b7e /*{b-bhover-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bhover-background-start}*/), to( #4272a4 /*{b-bhover-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); +} +.ui-btn-hover-b a.ui-link-inherit { + color: #fff /*{b-bhover-color}*/; +} +.ui-btn-down-b { + border: 1px solid #225377 /*{b-bdown-border}*/; + background: #4e89c5 /*{b-bdown-background-color}*/; + font-weight: bold; + color: #fff /*{b-bdown-color}*/; + text-shadow: 0 /*{b-bdown-shadow-x}*/ 1px /*{b-bdown-shadow-y}*/ 1px /*{b-bdown-shadow-radius}*/ #194b7e /*{b-bdown-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #295b8e /*{b-bdown-background-start}*/), to( #3e79b5 /*{b-bdown-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); +} +.ui-btn-down-b a.ui-link-inherit { + color: #fff /*{b-bdown-color}*/; +} +.ui-btn-up-b, +.ui-btn-hover-b, +.ui-btn-down-b { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; + text-decoration: none; +} +/* C +-----------------------------------------------------------------------------------------------------------*/ +.ui-bar-c { + border: 1px solid #B3B3B3 /*{c-bar-border}*/; + background: #eeeeee /*{c-bar-background-color}*/; + color: #3E3E3E /*{c-bar-color}*/; + font-weight: bold; + text-shadow: 0 /*{c-bar-shadow-x}*/ 1px /*{c-bar-shadow-y}*/ 1px /*{c-bar-shadow-radius}*/ #fff /*{c-bar-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #f0f0f0 /*{c-bar-background-start}*/), to( #ddd /*{c-bar-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); +} +.ui-bar-c .ui-link-inherit { + color: #3E3E3E /*{c-bar-color}*/; +} +.ui-bar-c .ui-link { + color: #7cc4e7 /*{c-bar-link-color}*/; + font-weight: bold; +} +.ui-bar-c .ui-link:hover { + color: #2489CE /*{c-bar-link-hover}*/; +} +.ui-bar-c .ui-link:active { + color: #2489CE /*{c-bar-link-active}*/; +} +.ui-bar-c .ui-link:visited { + color: #2489CE /*{c-bar-link-visited}*/; +} +.ui-bar-c, +.ui-bar-c input, +.ui-bar-c select, +.ui-bar-c textarea, +.ui-bar-c button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-body-c, +.ui-overlay-c { + border: 1px solid #aaa /*{c-body-border}*/; + color: #333333 /*{c-body-color}*/; + text-shadow: 0 /*{c-body-shadow-x}*/ 1px /*{c-body-shadow-y}*/ 0 /*{c-body-shadow-radius}*/ #fff /*{c-body-shadow-color}*/; + background: #f9f9f9 /*{c-body-background-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #f9f9f9 /*{c-body-background-start}*/), to( #eeeeee /*{c-body-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); +} +.ui-overlay-c { + background-image: none; + border-width: 0; +} +.ui-body-c, +.ui-body-c input, +.ui-body-c select, +.ui-body-c textarea, +.ui-body-c button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-body-c .ui-link-inherit { + color: #333333 /*{c-body-color}*/; +} +.ui-body-c .ui-link { + color: #2489CE /*{c-body-link-color}*/; + font-weight: bold; +} +.ui-body-c .ui-link:hover { + color: #2489CE /*{c-body-link-hover}*/; +} +.ui-body-c .ui-link:active { + color: #2489CE /*{c-body-link-active}*/; +} +.ui-body-c .ui-link:visited { + color: #2489CE /*{c-body-link-visited}*/; +} +.ui-btn-up-c { + border: 1px solid #ccc /*{c-bup-border}*/; + background: #eee /*{c-bup-background-color}*/; + font-weight: bold; + color: #222 /*{c-bup-color}*/; + text-shadow: 0 /*{c-bup-shadow-x}*/ 1px /*{c-bup-shadow-y}*/ 0 /*{c-bup-shadow-radius}*/ #ffffff /*{c-bup-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #ffffff /*{c-bup-background-start}*/), to( #f1f1f1 /*{c-bup-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); +} +.ui-btn-up-c a.ui-link-inherit { + color: #2F3E46 /*{c-bup-color}*/; +} +.ui-btn-hover-c { + border: 1px solid #bbb /*{c-bhover-border}*/; + background: #dfdfdf /*{c-bhover-background-color}*/; + font-weight: bold; + color: #222 /*{c-bhover-color}*/; + text-shadow: 0 /*{c-bhover-shadow-x}*/ 1px /*{c-bhover-shadow-y}*/ 0 /*{c-bhover-shadow-radius}*/ #ffffff /*{c-bhover-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #f6f6f6 /*{c-bhover-background-start}*/), to( #e0e0e0 /*{c-bhover-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #f9f9f9 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); +} +.ui-btn-hover-c a.ui-link-inherit { + color: #2F3E46 /*{c-bhover-color}*/; +} +.ui-btn-down-c { + border: 1px solid #bbb /*{c-bdown-border}*/; + background: #d6d6d6 /*{c-bdown-background-color}*/; + font-weight: bold; + color: #222 /*{c-bdown-color}*/; + text-shadow: 0 /*{c-bdown-shadow-x}*/ 1px /*{c-bdown-shadow-y}*/ 0 /*{c-bdown-shadow-radius}*/ #ffffff /*{c-bdown-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #d0d0d0 /*{c-bdown-background-start}*/), to( #dfdfdf /*{c-bdown-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); +} +.ui-btn-down-c a.ui-link-inherit { + color: #2F3E46 /*{c-bdown-color}*/; +} +.ui-btn-up-c, +.ui-btn-hover-c, +.ui-btn-down-c { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; + text-decoration: none; +} +/* D +-----------------------------------------------------------------------------------------------------------*/ +.ui-bar-d { + border: 1px solid #bbb /*{d-bar-border}*/; + background: #bbb /*{d-bar-background-color}*/; + color: #333 /*{d-bar-color}*/; + text-shadow: 0 /*{d-bar-shadow-x}*/ 1px /*{d-bar-shadow-y}*/ 0 /*{d-bar-shadow-radius}*/ #eee /*{d-bar-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{d-bar-background-start}*/), to( #bbb /*{d-bar-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); +} +.ui-bar-d, +.ui-bar-d input, +.ui-bar-d select, +.ui-bar-d textarea, +.ui-bar-d button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-bar-d .ui-link-inherit { + color: #333333 /*{d-bar-color}*/; +} +.ui-bar-d .ui-link { + color: #2489CE /*{d-bar-link-color}*/; + font-weight: bold; +} +.ui-bar-d .ui-link:hover { + color: #2489CE /*{d-bar-link-hover}*/; +} +.ui-bar-d .ui-link:active { + color: #2489CE /*{d-bar-link-active}*/; +} +.ui-bar-d .ui-link:visited { + color: #2489CE /*{d-bar-link-visited}*/; +} +.ui-body-d, +.ui-overlay-d { + border: 1px solid #bbb /*{d-body-border}*/; + color: #333333 /*{d-body-color}*/; + text-shadow: 0 /*{d-body-shadow-x}*/ 1px /*{d-body-shadow-y}*/ 0 /*{d-body-shadow-radius}*/ #fff /*{d-body-shadow-color}*/; + background: #ffffff /*{d-body-background-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #fff), to( #fff /*{d-body-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); +} +.ui-overlay-d { + background-image: none; + border-width: 0; +} +.ui-body-d, +.ui-body-d input, +.ui-body-d select, +.ui-body-d textarea, +.ui-body-d button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-body-d .ui-link-inherit { + color: #333333 /*{d-body-color}*/; +} +.ui-body-d .ui-link { + color: #2489CE /*{d-body-link-color}*/; + font-weight: bold; +} +.ui-body-d .ui-link:hover { + color: #2489CE /*{d-body-link-hover}*/; +} +.ui-body-d .ui-link:active { + color: #2489CE /*{d-body-link-active}*/; +} +.ui-body-d .ui-link:visited { + color: #2489CE /*{d-body-link-visited}*/; +} +.ui-btn-up-d { + border: 1px solid #bbb /*{d-bup-border}*/; + background: #fff /*{d-bup-background-color}*/; + font-weight: bold; + color: #333 /*{d-bup-color}*/; + text-shadow: 0 /*{d-bup-shadow-x}*/ 1px /*{d-bup-shadow-y}*/ 0 /*{d-bup-shadow-radius}*/ #fff /*{d-bup-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #fafafa), to( #f6f6f6 /*{d-bup-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); +} +.ui-btn-up-d a.ui-link-inherit { + color: #333 /*{d-bup-color}*/; +} +.ui-btn-hover-d { + border: 1px solid #aaa /*{d-bhover-border}*/; + background: #eeeeee /*{d-bhover-background-color}*/; + font-weight: bold; + color: #333 /*{d-bhover-color}*/; + cursor: pointer; + text-shadow: 0 /*{d-bhover-shadow-x}*/ 1px /*{d-bhover-shadow-y}*/ 0 /*{d-bhover-shadow-radius}*/ #fff /*{d-bhover-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #eee), to( #fff /*{d-bhover-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); +} +.ui-btn-hover-d a.ui-link-inherit { + color: #333 /*{d-bhover-color}*/; +} +.ui-btn-down-d { + border: 1px solid #aaa /*{d-bdown-border}*/; + background: #eee /*{d-bdown-background-color}*/; + font-weight: bold; + color: #333 /*{d-bdown-color}*/; + text-shadow: 0 /*{d-bdown-shadow-x}*/ 1px /*{d-bdown-shadow-y}*/ 0 /*{d-bdown-shadow-radius}*/ #ffffff /*{d-bdown-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #e5e5e5 /*{d-bdown-background-start}*/), to( #f2f2f2 /*{d-bdown-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); +} +.ui-btn-down-d a.ui-link-inherit { + color: #333 /*{d-bdown-color}*/; +} +.ui-btn-up-d, +.ui-btn-hover-d, +.ui-btn-down-d { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; + text-decoration: none; +} +/* E +-----------------------------------------------------------------------------------------------------------*/ +.ui-bar-e { + border: 1px solid #F7C942 /*{e-bar-border}*/; + background: #fadb4e /*{e-bar-background-color}*/; + color: #333 /*{e-bar-color}*/; + text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/ #fff /*{e-bar-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); +} +.ui-bar-e, +.ui-bar-e input, +.ui-bar-e select, +.ui-bar-e textarea, +.ui-bar-e button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-bar-e .ui-link-inherit { + color: #333333 /*{e-bar-color}*/; +} +.ui-bar-e .ui-link { + color: #2489CE /*{e-bar-link-color}*/; + font-weight: bold; +} +.ui-bar-e .ui-link:hover { + color: #2489CE /*{e-bar-link-hover}*/; +} +.ui-bar-e .ui-link:active { + color: #2489CE /*{e-bar-link-active}*/; +} +.ui-bar-e .ui-link:visited { + color: #2489CE /*{e-bar-link-visited}*/; +} +.ui-body-e, +.ui-overlay-e { + border: 1px solid #F7C942 /*{e-body-border}*/; + color: #222222 /*{e-body-color}*/; + text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/ #fff /*{e-body-shadow-color}*/; + background: #fff9df /*{e-body-background-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); +} +.ui-overlay-e { + background-image: none; + border-width: 0; +} +.ui-body-e, +.ui-body-e input, +.ui-body-e select, +.ui-body-e textarea, +.ui-body-e button { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-body-e .ui-link-inherit { + color: #333333 /*{e-body-color}*/; +} +.ui-body-e .ui-link { + color: #2489CE /*{e-body-link-color}*/; + font-weight: bold; +} +.ui-body-e .ui-link:hover { + color: #2489CE /*{e-body-link-hover}*/; +} +.ui-body-e .ui-link:active { + color: #2489CE /*{e-body-link-active}*/; +} +.ui-body-e .ui-link:visited { + color: #2489CE /*{e-body-link-visited}*/; +} +.ui-btn-up-e { + border: 1px solid #F4C63f /*{e-bup-border}*/; + background: #fadb4e /*{e-bup-background-color}*/; + font-weight: bold; + color: #222 /*{e-bup-color}*/; + text-shadow: 0 /*{e-bup-shadow-x}*/ 1px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/ #fff /*{e-bup-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #ffefaa /*{e-bup-background-start}*/), to( #ffe155 /*{e-bup-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); +} +.ui-btn-up-e a.ui-link-inherit { + color: #222 /*{e-bup-color}*/; +} +.ui-btn-hover-e { + border: 1px solid #F2C43d /*{e-bhover-border}*/; + background: #fbe26f /*{e-bhover-background-color}*/; + font-weight: bold; + color: #111 /*{e-bhover-color}*/; + text-shadow: 0 /*{e-bhover-shadow-x}*/ 1px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/ #fff /*{e-bhover-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #fff5ba /*{e-bhover-background-start}*/), to( #fbdd52 /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); +} +.ui-btn-hover-e a.ui-link-inherit { + color: #333 /*{e-bhover-color}*/; +} +.ui-btn-down-e { + border: 1px solid #F2C43d /*{e-bdown-border}*/; + background: #fceda7 /*{e-bdown-background-color}*/; + font-weight: bold; + color: #111 /*{e-bdown-color}*/; + text-shadow: 0 /*{e-bdown-shadow-x}*/ 1px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/ #ffffff /*{e-bdown-shadow-color}*/; + background-image: -webkit-gradient(linear, left top, left bottom, from( #f8d94c /*{e-bdown-background-start}*/), to( #fadb4e /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); +} +.ui-btn-down-e a.ui-link-inherit { + color: #333 /*{e-bdown-color}*/; +} +.ui-btn-up-e, +.ui-btn-hover-e, +.ui-btn-down-e { + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; + text-decoration: none; +} +/* Structure */ +/* links within "buttons" +-----------------------------------------------------------------------------------------------------------*/ +a.ui-link-inherit { + text-decoration: none !important; +} +/* Active class used as the "on" state across all themes +-----------------------------------------------------------------------------------------------------------*/ +.ui-btn-active { + border: 1px solid #2373a5 /*{global-active-border}*/; + background: #5393c5 /*{global-active-background-color}*/; + font-weight: bold; + color: #fff /*{global-active-color}*/; + cursor: pointer; + text-shadow: 0 /*{global-active-shadow-x}*/ 1px /*{global-active-shadow-y}*/ 1px /*{global-active-shadow-radius}*/ #3373a5 /*{global-active-shadow-color}*/; + text-decoration: none; + background-image: -webkit-gradient(linear, left top, left bottom, from( #5393c5 /*{global-active-background-start}*/), to( #6facd5 /*{global-active-background-end}*/)); /* Saf4+, Chrome */ + background-image: -webkit-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Chrome 10+, Saf5.1+ */ + background-image: -moz-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* FF3.6 */ + background-image: -ms-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* IE10 */ + background-image: -o-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Opera 11.10+ */ + background-image: linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); + font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; +} +.ui-btn-active a.ui-link-inherit { + color: #fff /*{global-active-color}*/; +} +/* button inner top highlight +-----------------------------------------------------------------------------------------------------------*/ +.ui-btn-inner { + border-top: 1px solid #fff; + border-color: rgba(255,255,255,.3); +} +/* corner rounding classes +-----------------------------------------------------------------------------------------------------------*/ +.ui-corner-tl { + -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; + -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; + border-top-left-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-tr { + -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; + -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; + border-top-right-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-bl { + -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; + -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; + border-bottom-left-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-br { + -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; + -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; + border-bottom-right-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-top { + -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; + -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; + border-top-left-radius: .6em /*{global-radii-blocks}*/; + -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; + -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; + border-top-right-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-bottom { + -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; + -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; + border-bottom-left-radius: .6em /*{global-radii-blocks}*/; + -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; + -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; + border-bottom-right-radius: .6em /*{global-radii-blocks}*/; + } +.ui-corner-right { + -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; + -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; + border-top-right-radius: .6em /*{global-radii-blocks}*/; + -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; + -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; + border-bottom-right-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-left { + -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; + -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; + border-top-left-radius: .6em /*{global-radii-blocks}*/; + -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; + -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; + border-bottom-left-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-all { + -moz-border-radius: .6em /*{global-radii-blocks}*/; + -webkit-border-radius: .6em /*{global-radii-blocks}*/; + border-radius: .6em /*{global-radii-blocks}*/; +} +.ui-corner-none { + -moz-border-radius: 0; + -webkit-border-radius: 0; + border-radius: 0; +} +/* Form field separator +-----------------------------------------------------------------------------------------------------------*/ +.ui-br { + border-bottom: rgb(130,130,130); + border-bottom: rgba(130,130,130,.3); + border-bottom-width: 1px; + border-bottom-style: solid; +} +/* Interaction cues +-----------------------------------------------------------------------------------------------------------*/ +.ui-disabled { + opacity: .3; +} +.ui-disabled, +.ui-disabled a { + cursor: default !important; + pointer-events: none; +} +.ui-disabled .ui-btn-text { + -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=30)"; + filter: alpha(opacity=30); + zoom: 1; +} +/* Icons +-----------------------------------------------------------------------------------------------------------*/ +.ui-icon, +.ui-icon-searchfield:after { + background: #666 /*{global-icon-color}*/; + background: rgba(0,0,0,.4) /*{global-icon-disc}*/; + background-image: url(images/icons-18-white.png) /*{global-icon-set}*/; + background-repeat: no-repeat; + -moz-border-radius: 9px; + -webkit-border-radius: 9px; + border-radius: 9px; +} +/* Alt icon color +-----------------------------------------------------------------------------------------------------------*/ +.ui-icon-alt { + background: #fff; + background: rgba(255,255,255,.3); + background-image: url(images/icons-18-black.png); + background-repeat: no-repeat; +} +/* HD/"retina" sprite +-----------------------------------------------------------------------------------------------------------*/ +@media only screen and (-webkit-min-device-pixel-ratio: 1.5), + only screen and (min--moz-device-pixel-ratio: 1.5), + only screen and (min-resolution: 240dpi) { + + .ui-icon-plus, .ui-icon-minus, .ui-icon-delete, .ui-icon-arrow-r, + .ui-icon-arrow-l, .ui-icon-arrow-u, .ui-icon-arrow-d, .ui-icon-check, + .ui-icon-gear, .ui-icon-refresh, .ui-icon-forward, .ui-icon-back, + .ui-icon-grid, .ui-icon-star, .ui-icon-alert, .ui-icon-info, .ui-icon-home, .ui-icon-search, .ui-icon-searchfield:after, + .ui-icon-checkbox-off, .ui-icon-checkbox-on, .ui-icon-radio-off, .ui-icon-radio-on { + background-image: url(images/icons-36-white.png); + -moz-background-size: 776px 18px; + -o-background-size: 776px 18px; + -webkit-background-size: 776px 18px; + background-size: 776px 18px; + } + .ui-icon-alt { + background-image: url(images/icons-36-black.png); + } +} +/* plus minus */ +.ui-icon-plus { + background-position: -0 50%; +} +.ui-icon-minus { + background-position: -36px 50%; +} +/* delete/close */ +.ui-icon-delete { + background-position: -72px 50%; +} +/* arrows */ +.ui-icon-arrow-r { + background-position: -108px 50%; +} +.ui-icon-arrow-l { + background-position: -144px 50%; +} +.ui-icon-arrow-u { + background-position: -180px 50%; +} +.ui-icon-arrow-d { + background-position: -216px 50%; +} +/* misc */ +.ui-icon-check { + background-position: -252px 50%; +} +.ui-icon-gear { + background-position: -288px 50%; +} +.ui-icon-refresh { + background-position: -324px 50%; +} +.ui-icon-forward { + background-position: -360px 50%; +} +.ui-icon-back { + background-position: -396px 50%; +} +.ui-icon-grid { + background-position: -432px 50%; +} +.ui-icon-star { + background-position: -468px 50%; +} +.ui-icon-alert { + background-position: -504px 50%; +} +.ui-icon-info { + background-position: -540px 50%; +} +.ui-icon-home { + background-position: -576px 50%; +} +.ui-icon-search, +.ui-icon-searchfield:after { + background-position: -612px 50%; +} +.ui-icon-checkbox-off { + background-position: -684px 50%; +} +.ui-icon-checkbox-on { + background-position: -648px 50%; +} +.ui-icon-radio-off { + background-position: -756px 50%; +} +.ui-icon-radio-on { + background-position: -720px 50%; +} +/* checks,radios */ +.ui-checkbox .ui-icon { + -moz-border-radius: 3px; + -webkit-border-radius: 3px; + border-radius: 3px; +} +.ui-icon-checkbox-off, +.ui-icon-radio-off { + background-color: transparent; +} +.ui-checkbox-on .ui-icon, +.ui-radio-on .ui-icon { + background-color: #4596ce /*{global-active-background-color}*/; /* NOTE: this hex should match the active state color. It's repeated here for cascade */ +} +/* loading icon */ +.ui-icon-loading { + background: url(images/ajax-loader.gif); + background-size: 46px 46px; +} +/* Button corner classes +-----------------------------------------------------------------------------------------------------------*/ +.ui-btn-corner-tl { + -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; + -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; + border-top-left-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-tr { + -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; + -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; + border-top-right-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-bl { + -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; + -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; + border-bottom-left-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-br { + -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; + -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; + border-bottom-right-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-top { + -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; + -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; + border-top-left-radius: 1em /*{global-radii-buttons}*/; + -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; + -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; + border-top-right-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-bottom { + -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; + -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; + border-bottom-left-radius: 1em /*{global-radii-buttons}*/; + -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; + -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; + border-bottom-right-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-right { + -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; + -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; + border-top-right-radius: 1em /*{global-radii-buttons}*/; + -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; + -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; + border-bottom-right-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-left { + -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; + -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; + border-top-left-radius: 1em /*{global-radii-buttons}*/; + -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; + -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; + border-bottom-left-radius: 1em /*{global-radii-buttons}*/; +} +.ui-btn-corner-all { + -moz-border-radius: 1em /*{global-radii-buttons}*/; + -webkit-border-radius: 1em /*{global-radii-buttons}*/; + border-radius: 1em /*{global-radii-buttons}*/; +} +/* radius clip workaround for cleaning up corner trapping */ +.ui-corner-tl, +.ui-corner-tr, +.ui-corner-bl, +.ui-corner-br, +.ui-corner-top, +.ui-corner-bottom, +.ui-corner-right, +.ui-corner-left, +.ui-corner-all, +.ui-btn-corner-tl, +.ui-btn-corner-tr, +.ui-btn-corner-bl, +.ui-btn-corner-br, +.ui-btn-corner-top, +.ui-btn-corner-bottom, +.ui-btn-corner-right, +.ui-btn-corner-left, +.ui-btn-corner-all { + -webkit-background-clip: padding-box; + -moz-background-clip: padding; + background-clip: padding-box; +} +/* Overlay / modal +-----------------------------------------------------------------------------------------------------------*/ +.ui-overlay { + background: #666; + opacity: .5; + filter: Alpha(Opacity=50); + position: absolute; + width: 100%; + height: 100%; +} +.ui-overlay-shadow { + -moz-box-shadow: 0px 0px 12px rgba(0,0,0,.6); + -webkit-box-shadow: 0px 0px 12px rgba(0,0,0,.6); + box-shadow: 0px 0px 12px rgba(0,0,0,.6); +} +.ui-shadow { + -moz-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; + -webkit-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; + box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; +} +.ui-bar-a .ui-shadow, +.ui-bar-b .ui-shadow , +.ui-bar-c .ui-shadow { + -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.3); + -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.3); + box-shadow: 0px 1px 0 rgba(255,255,255,.3); +} +.ui-shadow-inset { + -moz-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); + -webkit-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); + box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); +} +.ui-icon-shadow { + -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; + -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; + box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; +} +/* Focus state - set here for specificity (note: these classes are added by JavaScript) +-----------------------------------------------------------------------------------------------------------*/ +.ui-btn:focus { + outline: 0; +} +.ui-focus, +.ui-btn:focus { + -moz-box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; + -webkit-box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; + box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; +} +/* unset box shadow in browsers that don't do it right +-----------------------------------------------------------------------------------------------------------*/ +.ui-mobile-nosupport-boxshadow * { + -moz-box-shadow: none !important; + -webkit-box-shadow: none !important; + box-shadow: none !important; +} +/* ...and bring back focus */ +.ui-mobile-nosupport-boxshadow .ui-focus, +.ui-mobile-nosupport-boxshadow .ui-btn:focus { + outline-width: 1px; + outline-style: dotted; +} +/* some unsets - more probably needed */ +.ui-mobile, .ui-mobile body { height: 99.9%; } +.ui-mobile fieldset, .ui-page { padding: 0; margin: 0; } +.ui-mobile a img, .ui-mobile fieldset { border-width: 0; } +/* responsive page widths */ +.ui-mobile-viewport { margin: 0; overflow-x: visible; -webkit-text-size-adjust: none; -ms-text-size-adjust:none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } +/* Issue #2066 */ +body.ui-mobile-viewport, +div.ui-mobile-viewport { overflow-x: hidden; } +/* "page" containers - full-screen views, one should always be in view post-pageload */ +.ui-mobile [data-role=page], .ui-mobile [data-role=dialog], .ui-page { top: 0; left: 0; width: 100%; min-height: 100%; position: absolute; display: none; border: 0; } +.ui-mobile .ui-page-active { display: block; overflow: visible; } +/* on ios4, setting focus on the page element causes flashing during transitions when there is an outline, so we turn off outlines */ +.ui-page { outline: none; } +/*orientations from js are available */ +@media screen and (orientation: portrait){ +.ui-mobile, .ui-mobile .ui-page { min-height: 420px; } +} +@media screen and (orientation: landscape){ +.ui-mobile, .ui-mobile .ui-page { min-height: 300px; } +} +/* loading screen */ +.ui-loading .ui-loader { display: block; } +.ui-loader { display: none; z-index: 9999999; position: fixed; top: 50%; box-shadow: 0 1px 1px -1px #fff; left: 50%; border:0; } +.ui-loader-default { background: none; opacity: .18; width: 46px; height: 46px; margin-left: -23px; margin-top: -23px; } +.ui-loader-verbose { width: 200px; opacity: .88; height: auto; margin-left: -110px; margin-top: -43px; padding: 10px; } +.ui-loader-default h1 { font-size: 0; width: 0; height: 0; overflow: hidden; } +.ui-loader-verbose h1 { font-size: 16px; margin: 0; text-align: center; } +.ui-loader .ui-icon { background-color: #000; display: block; margin: 0; width: 44px; height: 44px; padding: 1px; -webkit-border-radius: 36px; -moz-border-radius: 36px; border-radius: 36px; } +.ui-loader-verbose .ui-icon { margin: 0 auto 10px; opacity: .75; } +.ui-loader-textonly { padding: 15px; margin-left: -115px; } +.ui-loader-textonly .ui-icon { display: none; } +.ui-loader-fakefix { position: absolute; } +/*fouc*/ +.ui-mobile-rendering > * { visibility: hidden; } +/*headers, content panels*/ +.ui-bar, .ui-body { position: relative; padding: .4em 15px; overflow: hidden; display: block; clear:both; } +.ui-bar { font-size: 16px; margin: 0; } +.ui-bar h1, .ui-bar h2, .ui-bar h3, .ui-bar h4, .ui-bar h5, .ui-bar h6 { margin: 0; padding: 0; font-size: 16px; display: inline-block; } +.ui-header, .ui-footer { position: relative; border-left-width: 0; border-right-width: 0; } +.ui-header .ui-btn-left, +.ui-header .ui-btn-right, +.ui-footer .ui-btn-left, +.ui-footer .ui-btn-right { position: absolute; top: 3px; } +.ui-header .ui-btn-left, +.ui-footer .ui-btn-left { left: 5px; } +.ui-header .ui-btn-right, +.ui-footer .ui-btn-right { right: 5px; } +.ui-footer .ui-btn-icon-notext, +.ui-header .ui-btn-icon-notext { top: 6px; } +.ui-header .ui-title, .ui-footer .ui-title { min-height: 1.1em; text-align: center; font-size: 16px; display: block; margin: .6em 30% .8em; padding: 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; outline: 0 !important; } +.ui-footer .ui-title { margin: .6em 15px .8em; } +/*content area*/ +.ui-content { border-width: 0; overflow: visible; overflow-x: hidden; padding: 15px; } +/* icons sizing */ +.ui-icon { width: 18px; height: 18px; } +/* non-js content hiding */ +.ui-nojs { position: absolute; left: -9999px; } +/* accessible content hiding */ +.ui-hide-label label, +.ui-hidden-accessible { position: absolute !important; left: -9999px; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +/* Transitions originally inspired by those from jQtouch, nice work, folks */ +.ui-mobile-viewport-transitioning, +.ui-mobile-viewport-transitioning .ui-page { + width: 100%; + height: 100%; + overflow: hidden; +} +.in { + -webkit-animation-timing-function: ease-out; + -webkit-animation-duration: 350ms; + -moz-animation-timing-function: ease-out; + -moz-animation-duration: 350ms; +} +.out { + -webkit-animation-timing-function: ease-in; + -webkit-animation-duration: 225ms; + -moz-animation-timing-function: ease-in; + -moz-animation-duration: 225; +} +@-webkit-keyframes fadein { + from { opacity: 0; } + to { opacity: 1; } +} +@-moz-keyframes fadein { + from { opacity: 0; } + to { opacity: 1; } +} +@-webkit-keyframes fadeout { + from { opacity: 1; } + to { opacity: 0; } +} +@-moz-keyframes fadeout { + from { opacity: 1; } + to { opacity: 0; } +} +.fade.out { + opacity: 0; + -webkit-animation-duration: 125ms; + -webkit-animation-name: fadeout; + -moz-animation-duration: 125ms; + -moz-animation-name: fadeout; +} +.fade.in { + opacity: 1; + -webkit-animation-duration: 225ms; + -webkit-animation-name: fadein; + -moz-animation-duration: 225ms; + -moz-animation-name: fadein; +} +.pop { + -webkit-transform-origin: 50% 50%; + -moz-transform-origin: 50% 50%; +} +.pop.in { + -webkit-transform: scale(1); + -moz-transform: scale(1); + opacity: 1; + -webkit-animation-name: popin; + -moz-animation-name: popin; + -webkit-animation-duration: 350ms; + -moz-animation-duration: 350ms; +} +.pop.out { + -webkit-animation-name: fadeout; + -moz-animation-name: fadeout; + opacity: 0; + -webkit-animation-duration: 100ms; + -moz-animation-duration: 100ms; +} +.pop.in.reverse { + -webkit-animation-name: fadein; + -moz-animation-name: fadein; +} +.pop.out.reverse { + -webkit-transform: scale(.8); + -moz-transform: scale(.8); + -webkit-animation-name: popout; + -moz-animation-name: popout; +} +@-webkit-keyframes popin { + from { + -webkit-transform: scale(.8); + opacity: 0; + } + to { + -webkit-transform: scale(1); + opacity: 1; + } +} +@-moz-keyframes popin { + from { + -moz-transform: scale(.8); + opacity: 0; + } + to { + -moz-transform: scale(1); + opacity: 1; + } +} +@-webkit-keyframes popout { + from { + -webkit-transform: scale(1); + opacity: 1; + } + to { + -webkit-transform: scale(.8); + opacity: 0; + } +} +@-moz-keyframes popout { + from { + -moz-transform: scale(1); + opacity: 1; + } + to { + -moz-transform: scale(.8); + opacity: 0; + } +} +/* keyframes for slidein from sides */ +@-webkit-keyframes slideinfromright { + from { -webkit-transform: translateX(100%); } + to { -webkit-transform: translateX(0); } +} +@-moz-keyframes slideinfromright { + from { -moz-transform: translateX(100%); } + to { -moz-transform: translateX(0); } +} +@-webkit-keyframes slideinfromleft { + from { -webkit-transform: translateX(-100%); } + to { -webkit-transform: translateX(0); } +} +@-moz-keyframes slideinfromleft { + from { -moz-transform: translateX(-100%); } + to { -moz-transform: translateX(0); } +} +/* keyframes for slideout to sides */ +@-webkit-keyframes slideouttoleft { + from { -webkit-transform: translateX(0); } + to { -webkit-transform: translateX(-100%); } +} +@-moz-keyframes slideouttoleft { + from { -moz-transform: translateX(0); } + to { -moz-transform: translateX(-100%); } +} +@-webkit-keyframes slideouttoright { + from { -webkit-transform: translateX(0); } + to { -webkit-transform: translateX(100%); } +} +@-moz-keyframes slideouttoright { + from { -moz-transform: translateX(0); } + to { -moz-transform: translateX(100%); } +} +.slide.out, .slide.in { + -webkit-animation-timing-function: ease-out; + -webkit-animation-duration: 350ms; + -moz-animation-timing-function: ease-out; + -moz-animation-duration: 350ms; +} +.slide.out { + -webkit-transform: translateX(-100%); + -webkit-animation-name: slideouttoleft; + -moz-transform: translateX(-100%); + -moz-animation-name: slideouttoleft; +} +.slide.in { + -webkit-transform: translateX(0); + -webkit-animation-name: slideinfromright; + -moz-transform: translateX(0); + -moz-animation-name: slideinfromright; +} +.slide.out.reverse { + -webkit-transform: translateX(100%); + -webkit-animation-name: slideouttoright; + -moz-transform: translateX(100%); + -moz-animation-name: slideouttoright; +} +.slide.in.reverse { + -webkit-transform: translateX(0); + -webkit-animation-name: slideinfromleft; + -moz-transform: translateX(0); + -moz-animation-name: slideinfromleft; +} +.slidefade.out { + -webkit-transform: translateX(-100%); + -webkit-animation-name: slideouttoleft; + -moz-transform: translateX(-100%); + -moz-animation-name: slideouttoleft; + -webkit-animation-duration: 225ms; + -moz-animation-duration: 225ms; +} +.slidefade.in { + -webkit-transform: translateX(0); + -webkit-animation-name: fadein; + -moz-transform: translateX(0); + -moz-animation-name: fadein; + -webkit-animation-duration: 200ms; + -moz-animation-duration: 200ms; +} +.slidefade.out.reverse { + -webkit-transform: translateX(100%); + -webkit-animation-name: slideouttoright; + -moz-transform: translateX(100%); + -moz-animation-name: slideouttoright; + -webkit-animation-duration: 200ms; + -moz-animation-duration: 200ms; +} +.slidefade.in.reverse { + -webkit-transform: translateX(0); + -webkit-animation-name: fadein; + -moz-transform: translateX(0); + -moz-animation-name: fadein; + -webkit-animation-duration: 200ms; + -moz-animation-duration: 200ms; +} +/* slide down */ +.slidedown.out { + -webkit-animation-name: fadeout; + -moz-animation-name: fadeout; + -webkit-animation-duration: 100ms; + -moz-animation-duration: 100ms; +} +.slidedown.in { + -webkit-transform: translateY(0); + -webkit-animation-name: slideinfromtop; + -moz-transform: translateY(0); + -moz-animation-name: slideinfromtop; + -webkit-animation-duration: 250ms; + -moz-animation-duration: 250ms; +} +.slidedown.in.reverse { + -webkit-animation-name: fadein; + -moz-animation-name: fadein; + -webkit-animation-duration: 150ms; + -moz-animation-duration: 150ms; +} +.slidedown.out.reverse { + -webkit-transform: translateY(-100%); + -moz-transform: translateY(-100%); + -webkit-animation-name: slideouttotop; + -moz-animation-name: slideouttotop; + -webkit-animation-duration: 200ms; + -moz-animation-duration: 200ms; +} +@-webkit-keyframes slideinfromtop { + from { -webkit-transform: translateY(-100%); } + to { -webkit-transform: translateY(0); } +} +@-moz-keyframes slideinfromtop { + from { -moz-transform: translateY(-100%); } + to { -moz-transform: translateY(0); } +} +@-webkit-keyframes slideouttotop { + from { -webkit-transform: translateY(0); } + to { -webkit-transform: translateY(-100%); } +} +@-moz-keyframes slideouttotop { + from { -moz-transform: translateY(0); } + to { -moz-transform: translateY(-100%); } +} +/* slide up */ +.slideup.out { + -webkit-animation-name: fadeout; + -moz-animation-name: fadeout; + -webkit-animation-duration: 100ms; + -moz-animation-duration: 100ms; +} +.slideup.in { + -webkit-transform: translateY(0); + -webkit-animation-name: slideinfrombottom; + -moz-transform: translateY(0); + -moz-animation-name: slideinfrombottom; + -webkit-animation-duration: 250ms; + -moz-animation-duration: 250ms; +} +.slideup.in.reverse { + -webkit-animation-name: fadein; + -moz-animation-name: fadein; + -webkit-animation-duration: 150ms; + -moz-animation-duration: 150ms; +} +.slideup.out.reverse { + -webkit-transform: translateY(100%); + -moz-transform: translateY(100%); + -webkit-animation-name: slideouttobottom; + -moz-animation-name: slideouttobottom; + -webkit-animation-duration: 200ms; + -moz-animation-duration: 200ms; +} +@-webkit-keyframes slideinfrombottom { + from { -webkit-transform: translateY(100%); } + to { -webkit-transform: translateY(0); } +} +@-moz-keyframes slideinfrombottom { + from { -moz-transform: translateY(100%); } + to { -moz-transform: translateY(0); } +} +@-webkit-keyframes slideouttobottom { + from { -webkit-transform: translateY(0); } + to { -webkit-transform: translateY(100%); } +} +@-moz-keyframes slideouttobottom { + from { -moz-transform: translateY(0); } + to { -moz-transform: translateY(100%); } +} +/* The properties in this rule are only necessary for the 'flip' transition. + * We need specify the perspective to create a projection matrix. This will add + * some depth as the element flips. The depth number represents the distance of + * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate + * value. + */ +.viewport-flip { + -webkit-perspective: 1000; + -moz-perspective: 1000; + position: absolute; +} +.flip { + -webkit-backface-visibility:hidden; + -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ + -moz-backface-visibility:hidden; + -moz-transform:translateX(0); +} +.flip.out { + -webkit-transform: rotateY(-90deg) scale(.9); + -webkit-animation-name: flipouttoleft; + -webkit-animation-duration: 175ms; + -moz-transform: rotateY(-90deg) scale(.9); + -moz-animation-name: flipouttoleft; + -moz-animation-duration: 175ms; +} +.flip.in { + -webkit-animation-name: flipintoright; + -webkit-animation-duration: 225ms; + -moz-animation-name: flipintoright; + -moz-animation-duration: 225ms; +} +.flip.out.reverse { + -webkit-transform: rotateY(90deg) scale(.9); + -webkit-animation-name: flipouttoright; + -moz-transform: rotateY(90deg) scale(.9); + -moz-animation-name: flipouttoright; +} +.flip.in.reverse { + -webkit-animation-name: flipintoleft; + -moz-animation-name: flipintoleft; +} +@-webkit-keyframes flipouttoleft { + from { -webkit-transform: rotateY(0); } + to { -webkit-transform: rotateY(-90deg) scale(.9); } +} +@-moz-keyframes flipouttoleft { + from { -moz-transform: rotateY(0); } + to { -moz-transform: rotateY(-90deg) scale(.9); } +} +@-webkit-keyframes flipouttoright { + from { -webkit-transform: rotateY(0) ; } + to { -webkit-transform: rotateY(90deg) scale(.9); } +} +@-moz-keyframes flipouttoright { + from { -moz-transform: rotateY(0); } + to { -moz-transform: rotateY(90deg) scale(.9); } +} +@-webkit-keyframes flipintoleft { + from { -webkit-transform: rotateY(-90deg) scale(.9); } + to { -webkit-transform: rotateY(0); } +} +@-moz-keyframes flipintoleft { + from { -moz-transform: rotateY(-90deg) scale(.9); } + to { -moz-transform: rotateY(0); } +} +@-webkit-keyframes flipintoright { + from { -webkit-transform: rotateY(90deg) scale(.9); } + to { -webkit-transform: rotateY(0); } +} +@-moz-keyframes flipintoright { + from { -moz-transform: rotateY(90deg) scale(.9); } + to { -moz-transform: rotateY(0); } +} +/* The properties in this rule are only necessary for the 'flip' transition. + * We need specify the perspective to create a projection matrix. This will add + * some depth as the element flips. The depth number represents the distance of + * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate + * value. + */ +.viewport-turn { + -webkit-perspective: 1000; + -moz-perspective: 1000; + position: absolute; +} +.turn { + -webkit-backface-visibility:hidden; + -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ + -webkit-transform-origin: 0; + + -moz-backface-visibility:hidden; + -moz-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ + -moz-transform-origin: 0; +} +.turn.out { + -webkit-transform: rotateY(-90deg) scale(.9); + -webkit-animation-name: flipouttoleft; + -moz-transform: rotateY(-90deg) scale(.9); + -moz-animation-name: flipouttoleft; + -webkit-animation-duration: 125ms; + -moz-animation-duration: 125ms; +} +.turn.in { + -webkit-animation-name: flipintoright; + -moz-animation-name: flipintoright; + -webkit-animation-duration: 250ms; + -moz-animation-duration: 250ms; + +} +.turn.out.reverse { + -webkit-transform: rotateY(90deg) scale(.9); + -webkit-animation-name: flipouttoright; + -moz-transform: rotateY(90deg) scale(.9); + -moz-animation-name: flipouttoright; +} +.turn.in.reverse { + -webkit-animation-name: flipintoleft; + -moz-animation-name: flipintoleft; +} +@-webkit-keyframes flipouttoleft { + from { -webkit-transform: rotateY(0); } + to { -webkit-transform: rotateY(-90deg) scale(.9); } +} +@-moz-keyframes flipouttoleft { + from { -moz-transform: rotateY(0); } + to { -moz-transform: rotateY(-90deg) scale(.9); } +} +@-webkit-keyframes flipouttoright { + from { -webkit-transform: rotateY(0) ; } + to { -webkit-transform: rotateY(90deg) scale(.9); } +} +@-moz-keyframes flipouttoright { + from { -moz-transform: rotateY(0); } + to { -moz-transform: rotateY(90deg) scale(.9); } +} +@-webkit-keyframes flipintoleft { + from { -webkit-transform: rotateY(-90deg) scale(.9); } + to { -webkit-transform: rotateY(0); } +} +@-moz-keyframes flipintoleft { + from { -moz-transform: rotateY(-90deg) scale(.9); } + to { -moz-transform: rotateY(0); } +} +@-webkit-keyframes flipintoright { + from { -webkit-transform: rotateY(90deg) scale(.9); } + to { -webkit-transform: rotateY(0); } +} +@-moz-keyframes flipintoright { + from { -moz-transform: rotateY(90deg) scale(.9); } + to { -moz-transform: rotateY(0); } +} +/* flow transition */ +.flow { + -webkit-transform-origin: 50% 30%; + -moz-transform-origin: 50% 30%; + -webkit-box-shadow: 0 0 20px rgba(0,0,0,.4); + -moz-box-shadow: 0 0 20px rgba(0,0,0,.4); +} +.ui-dialog.flow { + -webkit-transform-origin: none; + -moz-transform-origin: none; + -webkit-box-shadow: none; + -moz-box-shadow: none; +} +.flow.out { + -webkit-transform: translateX(-100%) scale(.7); + -webkit-animation-name: flowouttoleft; + -webkit-animation-timing-function: ease; + -webkit-animation-duration: 350ms; + -moz-transform: translateX(-100%) scale(.7); + -moz-animation-name: flowouttoleft; + -moz-animation-timing-function: ease; + -moz-animation-duration: 350ms; +} +.flow.in { + -webkit-transform: translateX(0) scale(1); + -webkit-animation-name: flowinfromright; + -webkit-animation-timing-function: ease; + -webkit-animation-duration: 350ms; + -moz-transform: translateX(0) scale(1); + -moz-animation-name: flowinfromright; + -moz-animation-timing-function: ease; + -moz-animation-duration: 350ms; +} +.flow.out.reverse { + -webkit-transform: translateX(100%); + -webkit-animation-name: flowouttoright; + -moz-transform: translateX(100%); + -moz-animation-name: flowouttoright; +} +.flow.in.reverse { + -webkit-animation-name: flowinfromleft; + -moz-animation-name: flowinfromleft; +} +@-webkit-keyframes flowouttoleft { + 0% { -webkit-transform: translateX(0) scale(1); } + 60%, 70% { -webkit-transform: translateX(0) scale(.7); } + 100% { -webkit-transform: translateX(-100%) scale(.7); } +} +@-moz-keyframes flowouttoleft { + 0% { -moz-transform: translateX(0) scale(1); } + 60%, 70% { -moz-transform: translateX(0) scale(.7); } + 100% { -moz-transform: translateX(-100%) scale(.7); } +} +@-webkit-keyframes flowouttoright { + 0% { -webkit-transform: translateX(0) scale(1); } + 60%, 70% { -webkit-transform: translateX(0) scale(.7); } + 100% { -webkit-transform: translateX(100%) scale(.7); } +} +@-moz-keyframes flowouttoright { + 0% { -moz-transform: translateX(0) scale(1); } + 60%, 70% { -moz-transform: translateX(0) scale(.7); } + 100% { -moz-transform: translateX(100%) scale(.7); } +} +@-webkit-keyframes flowinfromleft { + 0% { -webkit-transform: translateX(-100%) scale(.7); } + 30%, 40% { -webkit-transform: translateX(0) scale(.7); } + 100% { -webkit-transform: translateX(0) scale(1); } +} +@-moz-keyframes flowinfromleft { + 0% { -moz-transform: translateX(-100%) scale(.7); } + 30%, 40% { -moz-transform: translateX(0) scale(.7); } + 100% { -moz-transform: translateX(0) scale(1); } +} +@-webkit-keyframes flowinfromright { + 0% { -webkit-transform: translateX(100%) scale(.7); } + 30%, 40% { -webkit-transform: translateX(0) scale(.7); } + 100% { -webkit-transform: translateX(0) scale(1); } +} +@-moz-keyframes flowinfromright { + 0% { -moz-transform: translateX(100%) scale(.7); } + 30%, 40% { -moz-transform: translateX(0) scale(.7); } + 100% { -moz-transform: translateX(0) scale(1); } +} +/* content configurations. */ +.ui-grid-a, .ui-grid-b, .ui-grid-c, .ui-grid-d { overflow: hidden; } +.ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d, .ui-block-e { margin: 0; padding: 0; border: 0; float: left; min-height:1px;} +/* grid solo: 100 - single item fallback */ +.ui-grid-solo .ui-block-a { width: 100%; float: none; } +/* grid a: 50/50 */ +.ui-grid-a .ui-block-a, .ui-grid-a .ui-block-b { width: 50%; } +.ui-grid-a .ui-block-a { clear: left; } +/* grid b: 33/33/33 */ +.ui-grid-b .ui-block-a, .ui-grid-b .ui-block-b, .ui-grid-b .ui-block-c { width: 33.333%; } +.ui-grid-b .ui-block-a { clear: left; } +/* grid c: 25/25/25/25 */ +.ui-grid-c .ui-block-a, .ui-grid-c .ui-block-b, .ui-grid-c .ui-block-c, .ui-grid-c .ui-block-d { width: 25%; } +.ui-grid-c .ui-block-a { clear: left; } +/* grid d: 20/20/20/20/20 */ +.ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e { width: 20%; } +.ui-grid-d .ui-block-a { clear: left; } +/* fixed page header & footer configuration */ +.ui-header-fixed, +.ui-footer-fixed { + left: 0; + right: 0; + width: 100%; + position: fixed; + z-index: 1000; +} +.ui-header-fixed { + top: 0; +} +.ui-footer-fixed { + bottom: 0; +} +.ui-header-fullscreen, +.ui-footer-fullscreen { + opacity: .9; +} +.ui-page-header-fixed { + padding-top: 2.5em; +} +.ui-page-footer-fixed { + padding-bottom: 3em; +} +.ui-page-header-fullscreen .ui-content, +.ui-page-footer-fullscreen .ui-content { + padding: 0; +} +.ui-fixed-hidden { + position: absolute; +} +.ui-page-header-fullscreen .ui-fixed-hidden, +.ui-page-footer-fullscreen .ui-fixed-hidden { + left: -99999em; +} +.ui-header-fixed .ui-btn, +.ui-footer-fixed .ui-btn { + z-index: 10; +} +.ui-navbar { overflow: hidden; } +.ui-navbar ul, .ui-navbar-expanded ul { list-style:none; padding: 0; margin: 0; position: relative; display: block; border: 0;} +.ui-navbar-collapsed ul { float: left; width: 75%; margin-right: -2px; } +.ui-navbar-collapsed .ui-navbar-toggle { float: left; width: 25%; } +.ui-navbar li.ui-navbar-truncate { position: absolute; left: -9999px; top: -9999px; } +.ui-navbar li .ui-btn, .ui-navbar .ui-navbar-toggle .ui-btn { display: block; font-size: 12px; text-align: center; margin: 0; border-right-width: 0; max-width: 100%; } +.ui-navbar li .ui-btn { margin-right: -1px; } +.ui-navbar li .ui-btn:last-child { margin-right: 0; } +.ui-header .ui-navbar li .ui-btn, .ui-header .ui-navbar .ui-navbar-toggle .ui-btn, +.ui-footer .ui-navbar li .ui-btn, .ui-footer .ui-navbar .ui-navbar-toggle .ui-btn { border-top-width: 0; border-bottom-width: 0; } +.ui-navbar .ui-btn-inner { padding-left: 2px; padding-right: 2px; } +.ui-navbar-noicons li .ui-btn .ui-btn-inner, .ui-navbar-noicons .ui-navbar-toggle .ui-btn-inner { padding-top: .8em; padding-bottom: .9em; } +/*expanded page styles*/ +.ui-navbar-expanded .ui-btn { margin: 0; font-size: 14px; } +.ui-navbar-expanded .ui-btn-inner { padding-left: 5px; padding-right: 5px; } +.ui-navbar-expanded .ui-btn-icon-top .ui-btn-inner { padding: 45px 5px 15px; text-align: center; } +.ui-navbar-expanded .ui-btn-icon-top .ui-icon { top: 15px; } +.ui-navbar-expanded .ui-btn-icon-bottom .ui-btn-inner { padding: 15px 5px 45px; text-align: center; } +.ui-navbar-expanded .ui-btn-icon-bottom .ui-icon { bottom: 15px; } +.ui-navbar-expanded li .ui-btn .ui-btn-inner { min-height: 2.5em; } +.ui-navbar-expanded .ui-navbar-noicons .ui-btn .ui-btn-inner { padding-top: 1.8em; padding-bottom: 1.9em; } +.ui-btn { display: block; text-align: center; cursor:pointer; position: relative; margin: .5em 5px; padding: 0; } +.ui-mini { margin: .25em 5px; } +.ui-btn-inner { padding: .6em 20px; min-width: .75em; display: block; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; position: relative; zoom: 1; } +.ui-btn input, .ui-btn button { z-index: 2; } +.ui-btn-left, .ui-btn-right, .ui-btn-inline { display: inline-block; } +.ui-btn-block { display: block; } +.ui-header .ui-btn, +.ui-footer .ui-btn { display: inline-block; margin: 0; } +.ui-header .ui-btn-inner, +.ui-footer .ui-btn-inner, +.ui-mini .ui-btn-inner { font-size: 12.5px; padding: .55em 11px .5em; } +.ui-header .ui-fullsize .ui-btn-inner, +.ui-footer .ui-fullsize .ui-btn-inner { font-size: 16px; padding: .6em 25px; } +.ui-btn-icon-notext { width: 24px; height: 24px; } +.ui-btn-icon-notext .ui-btn-inner { padding: 0; height: 100%; } +.ui-btn-icon-notext .ui-btn-inner .ui-icon { margin: 2px 1px 2px 3px; } +.ui-btn-text { position: relative; z-index: 1; width: 100%; } +.ui-btn-icon-notext .ui-btn-text { position: absolute; left: -9999px; } +.ui-btn-icon-left .ui-btn-inner { padding-left: 40px; } +.ui-btn-icon-right .ui-btn-inner { padding-right: 40px; } +.ui-btn-icon-top .ui-btn-inner { padding-top: 40px; } +.ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 40px; } +.ui-header .ui-btn-icon-left .ui-btn-inner, +.ui-footer .ui-btn-icon-left .ui-btn-inner, +.ui-mini .ui-btn-icon-left .ui-btn-inner { padding-left: 30px; } +.ui-header .ui-btn-icon-right .ui-btn-inner, +.ui-footer .ui-btn-icon-right .ui-btn-inner, +.ui-mini .ui-btn-icon-right .ui-btn-inner { padding-right: 30px; } +.ui-header .ui-btn-icon-top .ui-btn-inner, +.ui-footer .ui-btn-icon-top .ui-btn-inner, +.ui-mini .ui-btn-icon-top .ui-btn-inner { padding: 30px 3px .5em 3px; } +.ui-header .ui-btn-icon-bottom .ui-btn-inner, +.ui-footer .ui-btn-icon-bottom .ui-btn-inner, +.ui-mini .ui-btn-icon-bottom .ui-btn-inner { padding: .55em 3px 30px 3px; } +/*btn icon positioning*/ +.ui-btn-icon-notext .ui-icon { display: block; z-index: 0;} +.ui-btn-icon-left .ui-btn-inner .ui-icon, .ui-btn-icon-right .ui-btn-inner .ui-icon { position: absolute; top: 50%; margin-top: -9px; } +.ui-btn-icon-top .ui-btn-inner .ui-icon, .ui-btn-icon-bottom .ui-btn-inner .ui-icon { position: absolute; left: 50%; margin-left: -9px; } +.ui-btn-icon-left .ui-icon { left: 10px; } +.ui-btn-icon-right .ui-icon { right: 10px; } +.ui-btn-icon-top .ui-icon { top: 10px; } +.ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; } +.ui-header .ui-btn-icon-left .ui-icon, +.ui-footer .ui-btn-icon-left .ui-icon, +.ui-mini.ui-btn-icon-left .ui-icon, +.ui-mini .ui-btn-icon-left .ui-icon { left: 5px; } +.ui-header .ui-btn-icon-right .ui-icon, +.ui-footer .ui-btn-icon-right .ui-icon, +.ui-mini.ui-btn-icon-right .ui-icon, +.ui-mini .ui-btn-icon-right .ui-icon { right: 5px; } +.ui-header .ui-btn-icon-top .ui-icon, +.ui-footer .ui-btn-icon-top .ui-icon, +.ui-mini.ui-btn-icon-top .ui-icon, +.ui-mini .ui-btn-icon-top .ui-icon { top: 5px; } +.ui-header .ui-btn-icon-bottom .ui-icon, +.ui-footer .ui-btn-icon-bottom .ui-icon, +.ui-mini.ui-btn-icon-bottom .ui-icon, +.ui-mini .ui-btn-icon-bottom .ui-icon { bottom: 5px; } +/*hiding native button,inputs */ +.ui-btn-hidden { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-appearance: button; opacity: .1; cursor: pointer; background: #fff; background: rgba(255,255,255,0); filter: Alpha(Opacity=.0001); font-size: 1px; border: none; text-indent: -9999px; } +.ui-collapsible { margin: .5em 0; } +.ui-collapsible-heading { font-size: 16px; display: block; margin: 0 -8px; padding: 0; border-width: 0 0 1px 0; position: relative; } +.ui-collapsible-heading a { text-align: left; margin: 0; } +.ui-collapsible-heading .ui-btn-inner, +.ui-collapsible-heading .ui-btn-icon-left .ui-btn-inner { padding-left: 40px; } +.ui-collapsible-heading .ui-btn-icon-right .ui-btn-inner { padding-left: 12px; padding-right: 40px; } +.ui-collapsible-heading .ui-btn-icon-top .ui-btn-inner, +.ui-collapsible-heading .ui-btn-icon-bottom .ui-btn-inner { padding-right: 40px; text-align: center; } +.ui-collapsible-heading a span.ui-btn { position: absolute; left: 6px; top: 50%; margin: -12px 0 0 0; width: 20px; height: 20px; padding: 1px 0px 1px 2px; text-indent: -9999px; } +.ui-collapsible-heading a span.ui-btn .ui-btn-inner { padding: 10px 0; } +.ui-collapsible-heading a span.ui-btn .ui-icon { left: 0; margin-top: -10px; } +.ui-collapsible-heading-status { position: absolute; top: -9999px; left:0px; } +.ui-collapsible-content { + display: block; + margin: 0 -8px; + padding: 10px 16px; + border-top: none; /* Overrides ui-btn-up-* */ + background-image: none; /* Overrides ui-btn-up-* */ + font-weight: normal; /* Overrides ui-btn-up-* */ +} +.ui-collapsible-content-collapsed { display: none; } +.ui-collapsible-set { margin: .5em 0; } +.ui-collapsible-set .ui-collapsible { margin: -1px 0 0; } +.ui-controlgroup, fieldset.ui-controlgroup { padding: 0; margin: 0em 0 .5em; zoom: 1; } +.ui-bar .ui-controlgroup { margin: 0 .3em; } +.ui-controlgroup-label { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .4em; } +.ui-controlgroup-controls { display: block; width: 100%;} +.ui-controlgroup li { list-style: none; } +.ui-controlgroup-vertical .ui-btn, +.ui-controlgroup-vertical .ui-checkbox, .ui-controlgroup-vertical .ui-radio { margin: 0; border-bottom-width: 0; } +.ui-controlgroup-controls label.ui-select { position: absolute; left: -9999px; } +.ui-controlgroup-vertical .ui-controlgroup-last { border-bottom-width: 1px; } +.ui-controlgroup-horizontal { padding: 0; } +.ui-controlgroup-horizontal .ui-btn-inner { text-align:center; } +.ui-controlgroup-horizontal .ui-btn, .ui-controlgroup-horizontal .ui-select { display: inline-block; margin: 0 -6px 0 0; } +.ui-controlgroup-horizontal .ui-checkbox, .ui-controlgroup-horizontal .ui-radio { float: left; clear: none; margin: 0 -1px 0 0; } +.ui-controlgroup-horizontal .ui-checkbox .ui-btn, .ui-controlgroup-horizontal .ui-radio .ui-btn, +.ui-controlgroup-horizontal .ui-checkbox:last-child, .ui-controlgroup-horizontal .ui-radio:last-child { margin-right: 0; } +.ui-controlgroup-horizontal .ui-controlgroup-last { margin-right: 0; } +.ui-controlgroup .ui-checkbox label, .ui-controlgroup .ui-radio label { font-size: 16px; } +/* conflicts with listview.. +.ui-controlgroup .ui-btn-icon-notext { width: 30px; height: 30px; text-indent: -9999px; } +.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { padding: 5px 6px 5px 5px; } +*/ +@media all and (min-width: 450px){ + .ui-field-contain .ui-controlgroup-label { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } + .ui-field-contain .ui-controlgroup-controls { width: 60%; display: inline-block; } + .ui-field-contain .ui-controlgroup .ui-select { width: 100%; } + .ui-field-contain .ui-controlgroup-horizontal .ui-select { width: auto; } +} +.ui-dialog { + background: none !important; /* this is to ensure that dialog theming does not apply (by default at least) on the page div */ +} +.ui-dialog-contain { width: 92.5%; max-width: 500px; margin: 10% auto 15px auto; padding: 0; } +.ui-dialog .ui-header { + margin-top: 15%; + border: none; + overflow: hidden; +} +.ui-dialog .ui-header, +.ui-dialog .ui-content, +.ui-dialog .ui-footer { + display: block; + position: relative; + width: auto; +} +.ui-dialog .ui-header, +.ui-dialog .ui-footer { + z-index: 10; + padding: 0; +} +.ui-dialog .ui-footer { + padding: 0 15px; +} +.ui-dialog .ui-content { + padding: 15px; +} +.ui-dialog { + margin-top: -15px; +} +.ui-checkbox, .ui-radio { position: relative; clear: both; margin: .2em 0 .5em; z-index: 1; } +.ui-checkbox .ui-btn, .ui-radio .ui-btn { margin: 0; text-align: left; z-index: 2; } +.ui-checkbox .ui-btn-inner, .ui-radio .ui-btn-inner { white-space: normal; } +.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner { padding-left: 45px; } +.ui-checkbox .ui-mini.ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-mini.ui-btn-icon-left .ui-btn-inner { padding-left: 36px; } +.ui-checkbox .ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; } +.ui-checkbox .ui-mini.ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 36px; } +.ui-checkbox .ui-btn-icon-top .ui-btn-inner,.ui-radio .ui-btn-icon-top .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; } +.ui-checkbox .ui-btn-icon-bottom .ui-btn-inner, .ui-radio .ui-btn-icon-bottom .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; } +.ui-checkbox .ui-icon, .ui-radio .ui-icon { top: 1.1em; } +.ui-checkbox .ui-btn-icon-left .ui-icon, .ui-radio .ui-btn-icon-left .ui-icon { left: 15px; } +.ui-checkbox .ui-mini.ui-btn-icon-left .ui-icon, .ui-radio .ui-mini.ui-btn-icon-left .ui-icon { left: 9px; } +.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; } +.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; } +.ui-checkbox .ui-btn-icon-top .ui-icon, .ui-radio .ui-btn-icon-top .ui-icon { top: 10px; } +.ui-checkbox .ui-btn-icon-bottom .ui-icon, .ui-radio .ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; } +.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; } +.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; } +/* input, label positioning */ +.ui-checkbox input,.ui-radio input { position:absolute; left:20px; top:50%; width: 10px; height: 10px; margin:-5px 0 0 0; outline: 0 !important; z-index: 1; } +.ui-field-contain, fieldset.ui-field-contain { padding: .8em 0; margin: 0; border-width: 0 0 1px 0; overflow: visible; } +.ui-field-contain:first-child { border-top-width: 0; } +.ui-header .ui-field-contain-left, +.ui-header .ui-field-contain-right { + position: absolute; + top: 0; + width: 25%; +} +.ui-header .ui-field-contain-left { + left: 1em; +} +.ui-header .ui-field-contain-right { + right: 1em; +} +@media all and (min-width: 450px){ + .ui-field-contain, .ui-mobile fieldset.ui-field-contain { border-width: 0; padding: 0; margin: 1em 0; } +} +.ui-select { display: block; position: relative; } +.ui-select select { position: absolute; left: -9999px; top: -9999px; } +.ui-select .ui-btn { overflow: hidden; opacity: 1; margin: 0; } +/* Fixes #2588 — When Windows Phone 7.5 (Mango) tries to calculate a numeric opacity for a select—including “inherit”—without explicitly specifying an opacity on the parent to give it context, a bug appears where clicking elsewhere on the page after opening the select will open the select again. */ +.ui-select .ui-btn select { cursor: pointer; -webkit-appearance: button; left: 0; top:0; width: 100%; min-height: 1.5em; min-height: 100%; height: 3em; max-height: 100%; opacity: 0; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter: alpha(opacity=0); z-index: 2; } +.ui-select .ui-disabled { opacity: .3; } +@-moz-document url-prefix() {.ui-select .ui-btn select { opacity: 0.0001; }} +.ui-select .ui-btn select.ui-select-nativeonly { opacity: 1; text-indent: 0; } +.ui-select .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; } +.ui-select .ui-btn-icon-right .ui-icon { right: 15px; } +.ui-select .ui-mini.ui-btn-icon-right .ui-icon { right: 7px; } +/* labels */ +label.ui-select { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; } +/*listbox*/ +.ui-select .ui-btn-text, .ui-selectmenu .ui-btn-text { display: block; min-height: 1em; overflow: hidden !important; +/* This !important is required for iPad Safari specifically. See https://github.com/jquery/jquery-mobile/issues/2647 */ } +.ui-select .ui-btn-text { text-overflow: ellipsis; } +.ui-selectmenu { position: absolute; padding: 0; z-index: 1100 !important; width: 80%; max-width: 350px; padding: 6px; } +.ui-selectmenu .ui-listview { margin: 0; } +.ui-selectmenu .ui-btn.ui-li-divider { cursor: default; } +.ui-selectmenu-hidden { top: -9999px; left: -9999px; } +.ui-selectmenu-screen { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 99; } +.ui-screen-hidden, .ui-selectmenu-list .ui-li .ui-icon { display: none; } +.ui-selectmenu-list .ui-li .ui-icon { display: block; } +.ui-li.ui-selectmenu-placeholder { display: none; } +.ui-selectmenu .ui-header .ui-title { margin: 0.6em 46px 0.8em; } +@media all and (min-width: 450px){ + .ui-field-contain label.ui-select { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } + .ui-field-contain .ui-select { width: 60%; display: inline-block; } +} +/* when no placeholder is defined in a multiple select, the header height doesn't even extend past the close button. this shim's content in there */ +.ui-selectmenu .ui-header h1:after { content: '.'; visibility: hidden; } +label.ui-input-text { font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em; } +input.ui-input-text, textarea.ui-input-text { background-image: none; padding: .4em; line-height: 1.4; font-size: 16px; display: block; width: 97%; outline: 0; } +.ui-header input.ui-input-text, +.ui-footer input.ui-input-text { margin-left: 1.25%; padding: .4em 1%; width: 95.5% } /* Note that padding left/right on text inputs is factored into how the element is displayed in Firefox, but does not actually pad the text inside it. */ + input.ui-input-text { -webkit-appearance: none; } +textarea.ui-input-text { height: 50px; -webkit-transition: height 200ms linear; -moz-transition: height 200ms linear; -o-transition: height 200ms linear; transition: height 200ms linear; } +.ui-input-search { padding: 0 30px; background-image: none; position: relative; } +.ui-icon-searchfield:after { position: absolute; left: 7px; top: 50%; margin-top: -9px; content: ""; width: 18px; height: 18px; opacity: .5; } +.ui-input-search input.ui-input-text { border: none; width: 98%; padding: .4em 0; margin: 0; display: block; background: transparent none; outline: 0 !important; } +.ui-input-search .ui-input-clear { position: absolute; right: 0; top: 50%; margin-top: -13px; } +.ui-mini .ui-input-clear { right: -3px; } +.ui-input-search .ui-input-clear-hidden { display: none; } +input.ui-mini, .ui-mini input, textarea.ui-mini { font-size: 14px; } +textarea.ui-mini { height: 45px; } +/* orientation adjustments - incomplete!*/ +@media all and (min-width: 450px){ + .ui-field-contain label.ui-input-text { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0 } + .ui-field-contain input.ui-input-text, + .ui-field-contain textarea.ui-input-text, + .ui-field-contain .ui-input-search { width: 60%; display: inline-block; } + .ui-field-contain .ui-input-search { width: 50%; } + .ui-hide-label input.ui-input-text, + .ui-hide-label textarea.ui-input-text, + .ui-hide-label .ui-input-search { padding: .4em; width: 97%; } + .ui-input-search input.ui-input-text { width: 98%; /*echos rule from above*/ } +} +.ui-listview { margin: 0; counter-reset: listnumbering; } +.ui-content .ui-listview { margin: -15px; } +.ui-content .ui-listview-inset { margin: 1em 0; } +.ui-listview, .ui-li { list-style:none; padding:0; } +.ui-li, .ui-li.ui-field-contain { display: block; margin:0; position: relative; overflow: visible; text-align: left; border-width: 0; border-top-width: 1px; } +.ui-li .ui-btn-text a.ui-link-inherit { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } +.ui-li-divider, .ui-li-static { padding: .5em 15px; font-size: 14px; font-weight: bold; } +.ui-li-divider { counter-reset: listnumbering; } +ol.ui-listview .ui-link-inherit:before, ol.ui-listview .ui-li-static:before, .ui-li-dec { font-size: .8em; display: inline-block; padding-right: .3em; font-weight: normal;counter-increment: listnumbering; content: counter(listnumbering) ". "; } +ol.ui-listview .ui-li-jsnumbering:before { content: "" !important; } /* to avoid chance of duplication */ +.ui-listview-inset .ui-li { border-right-width: 1px; border-left-width: 1px; } +.ui-li:last-child, .ui-li.ui-field-contain:last-child { border-bottom-width: 1px; } +.ui-li>.ui-btn-inner { display: block; position: relative; padding: 0; } +.ui-li .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li { padding: .7em 15px .7em 15px; display: block; } +.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-thumb { min-height: 60px; padding-left: 100px; } +.ui-li-has-icon .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-icon { min-height: 20px; padding-left: 40px; } +.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-count { padding-right: 45px; } +.ui-li-has-arrow .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow { padding-right: 30px; } +.ui-li-has-arrow.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow.ui-li-has-count { padding-right: 75px; } +.ui-li-has-count .ui-btn-text { padding-right: 15px; } +.ui-li-heading { font-size: 16px; font-weight: bold; display: block; margin: .6em 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } +.ui-li-desc { font-size: 12px; font-weight: normal; display: block; margin: -.5em 0 .6em; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } +.ui-li-thumb, .ui-listview .ui-li-icon { position: absolute; left: 1px; top: 0; max-height: 80px; max-width: 80px; } +.ui-listview .ui-li-icon { max-height: 40px; max-width: 40px; left: 10px; top: .9em; } +.ui-li-thumb, .ui-listview .ui-li-icon, .ui-li-content { float: left; margin-right: 10px; } +.ui-li-aside { float: right; width: 50%; text-align: right; margin: .3em 0; } +@media all and (min-width: 480px){ + .ui-li-aside { width: 45%; } +} +.ui-li-divider { cursor: default; } +.ui-li-has-alt .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt { padding-right: 95px; } +.ui-li-has-count .ui-li-count { position: absolute; font-size: 11px; font-weight: bold; padding: .2em .5em; top: 50%; margin-top: -.9em; right: 48px; } +.ui-li-divider .ui-li-count, .ui-li-static .ui-li-count { right: 10px; } +.ui-li-has-alt .ui-li-count { right: 55px; } +.ui-li-link-alt { position: absolute; width: 40px; height: 100%; border-width: 0; border-left-width: 1px; top: 0; right: 0; margin: 0; padding: 0; z-index: 2; } +.ui-li-link-alt .ui-btn { overflow: hidden; position: absolute; right: 8px; top: 50%; margin: -11px 0 0 0; border-bottom-width: 1px; z-index: -1;} +.ui-li-link-alt .ui-btn-inner { padding: 0; height: 100%; position: absolute; width: 100%; top: 0; left: 0;} +.ui-li-link-alt .ui-btn .ui-icon { right: 50%; margin-right: -9px; } +.ui-listview * .ui-btn-inner > .ui-btn > .ui-btn-inner { border-top: 0px; } +.ui-listview-filter { border-width: 0; overflow: hidden; margin: -15px -15px 15px -15px } +.ui-listview-filter .ui-input-search { margin: 5px; width: auto; display: block; } +.ui-listview-filter-inset { margin: -15px -5px -15px -5px; background: transparent; } +.ui-li.ui-screen-hidden{display:none;} +/* Odd iPad positioning issue. */ +@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) { + .ui-li .ui-btn-text { overflow: visible; } +} +label.ui-slider { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; } +input.ui-slider-input, +.ui-field-contain input.ui-slider-input { display: inline-block; width: 50px; } +select.ui-slider-switch { display: none; } +div.ui-slider { position: relative; display: inline-block; overflow: visible; height: 15px; padding: 0; margin: 0 2% 0 20px; top: 4px; width: 65%; } +div.ui-slider-mini { height: 12px; margin-left: 10px; } +div.ui-slider-bg { border: none; height: 100%; padding-right: 8px; } +.ui-controlgroup a.ui-slider-handle, a.ui-slider-handle { position: absolute; z-index: 1; top: 50%; width: 28px; height: 28px; margin-top: -15px; margin-left: -15px; outline: 0; } +a.ui-slider-handle .ui-btn-inner { padding: 0; height: 100%; } +div.ui-slider-mini a.ui-slider-handle { height: 14px; width: 14px; margin: -8px 0 0 -7px; } +div.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: -9px 0 0 -9px; } +@media all and (min-width: 450px){ + .ui-field-contain label.ui-slider { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } + .ui-field-contain div.ui-slider { width: 43%; } + .ui-field-contain div.ui-slider-switch { width: 5.5em; } +} +div.ui-slider-switch { height: 32px; margin-left: 0; width: 5.8em; } +a.ui-slider-handle-snapping { -webkit-transition: left 70ms linear; -moz-transition: left 70ms linear; } +div.ui-slider-switch .ui-slider-handle { margin-top: 1px; } +.ui-slider-inneroffset { margin: 0 16px; position: relative; z-index: 1; } +div.ui-slider-switch.ui-slider-mini { width: 5em; height: 29px; } +div.ui-slider-switch.ui-slider-mini .ui-slider-inneroffset { margin: 0 15px 0 14px; } +div.ui-slider-switch.ui-slider-mini .ui-slider-handle { width: 25px; height: 25px; margin: 1px 0 0 -13px; } +div.ui-slider-switch.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: 0; } +span.ui-slider-label { position: absolute; text-align: center; width: 100%; overflow: hidden; font-size: 16px; top: 0; line-height: 2; min-height: 100%; border-width: 0; white-space: nowrap; } +.ui-slider-mini span.ui-slider-label { font-size: 14px; } +span.ui-slider-label-a { z-index: 1; left: 0; text-indent: -1.5em; } +span.ui-slider-label-b { z-index: 0; right: 0; text-indent: 1.5em;} +.ui-slider-inline { width: 120px; display: inline-block; } diff --git a/Public/Js/jquery/jquery.mobile-1.1.0.js b/Public/Js/jquery/jquery.mobile-1.1.0.js new file mode 100644 index 0000000..c12426c --- /dev/null +++ b/Public/Js/jquery/jquery.mobile-1.1.0.js @@ -0,0 +1,7551 @@ +/* +* jQuery Mobile Framework 1.1.0 db342b1f315c282692791aa870455901fdb46a55 +* http://jquerymobile.com +* +* Copyright 2011 (c) jQuery Project +* Dual licensed under the MIT or GPL Version 2 licenses. +* http://jquery.org/license +* +*/ +(function ( root, doc, factory ) { + if ( typeof define === "function" && define.amd ) { + // AMD. Register as an anonymous module. + define( [ "jquery" ], function ( $ ) { + factory( $, root, doc ); + return $.mobile; + }); + } else { + // Browser globals + factory( root.jQuery, root, doc ); + } +}( this, document, function ( $, window, document, undefined ) { + + +// This plugin is an experiment for abstracting away the touch and mouse +// events so that developers don't have to worry about which method of input +// the device their document is loaded on supports. +// +// The idea here is to allow the developer to register listeners for the +// basic mouse events, such as mousedown, mousemove, mouseup, and click, +// and the plugin will take care of registering the correct listeners +// behind the scenes to invoke the listener at the fastest possible time +// for that device, while still retaining the order of event firing in +// the traditional mouse environment, should multiple handlers be registered +// on the same element for different events. +// +// The current version exposes the following virtual events to jQuery bind methods: +// "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel" + +(function( $, window, document, undefined ) { + +var dataPropertyName = "virtualMouseBindings", + touchTargetPropertyName = "virtualTouchID", + virtualEventNames = "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split( " " ), + touchEventProps = "clientX clientY pageX pageY screenX screenY".split( " " ), + mouseHookProps = $.event.mouseHooks ? $.event.mouseHooks.props : [], + mouseEventProps = $.event.props.concat( mouseHookProps ), + activeDocHandlers = {}, + resetTimerID = 0, + startX = 0, + startY = 0, + didScroll = false, + clickBlockList = [], + blockMouseTriggers = false, + blockTouchTriggers = false, + eventCaptureSupported = "addEventListener" in document, + $document = $( document ), + nextTouchID = 1, + lastTouchID = 0; + +$.vmouse = { + moveDistanceThreshold: 10, + clickDistanceThreshold: 10, + resetTimerDuration: 1500 +}; + +function getNativeEvent( event ) { + + while ( event && typeof event.originalEvent !== "undefined" ) { + event = event.originalEvent; + } + return event; +} + +function createVirtualEvent( event, eventType ) { + + var t = event.type, + oe, props, ne, prop, ct, touch, i, j; + + event = $.Event(event); + event.type = eventType; + + oe = event.originalEvent; + props = $.event.props; + + // addresses separation of $.event.props in to $.event.mouseHook.props and Issue 3280 + // https://github.com/jquery/jquery-mobile/issues/3280 + if ( t.search( /^(mouse|click)/ ) > -1 ) { + props = mouseEventProps; + } + + // copy original event properties over to the new event + // this would happen if we could call $.event.fix instead of $.Event + // but we don't have a way to force an event to be fixed multiple times + if ( oe ) { + for ( i = props.length, prop; i; ) { + prop = props[ --i ]; + event[ prop ] = oe[ prop ]; + } + } + + // make sure that if the mouse and click virtual events are generated + // without a .which one is defined + if ( t.search(/mouse(down|up)|click/) > -1 && !event.which ){ + event.which = 1; + } + + if ( t.search(/^touch/) !== -1 ) { + ne = getNativeEvent( oe ); + t = ne.touches; + ct = ne.changedTouches; + touch = ( t && t.length ) ? t[0] : ( (ct && ct.length) ? ct[ 0 ] : undefined ); + + if ( touch ) { + for ( j = 0, len = touchEventProps.length; j < len; j++){ + prop = touchEventProps[ j ]; + event[ prop ] = touch[ prop ]; + } + } + } + + return event; +} + +function getVirtualBindingFlags( element ) { + + var flags = {}, + b, k; + + while ( element ) { + + b = $.data( element, dataPropertyName ); + + for ( k in b ) { + if ( b[ k ] ) { + flags[ k ] = flags.hasVirtualBinding = true; + } + } + element = element.parentNode; + } + return flags; +} + +function getClosestElementWithVirtualBinding( element, eventType ) { + var b; + while ( element ) { + + b = $.data( element, dataPropertyName ); + + if ( b && ( !eventType || b[ eventType ] ) ) { + return element; + } + element = element.parentNode; + } + return null; +} + +function enableTouchBindings() { + blockTouchTriggers = false; +} + +function disableTouchBindings() { + blockTouchTriggers = true; +} + +function enableMouseBindings() { + lastTouchID = 0; + clickBlockList.length = 0; + blockMouseTriggers = false; + + // When mouse bindings are enabled, our + // touch bindings are disabled. + disableTouchBindings(); +} + +function disableMouseBindings() { + // When mouse bindings are disabled, our + // touch bindings are enabled. + enableTouchBindings(); +} + +function startResetTimer() { + clearResetTimer(); + resetTimerID = setTimeout(function(){ + resetTimerID = 0; + enableMouseBindings(); + }, $.vmouse.resetTimerDuration ); +} + +function clearResetTimer() { + if ( resetTimerID ){ + clearTimeout( resetTimerID ); + resetTimerID = 0; + } +} + +function triggerVirtualEvent( eventType, event, flags ) { + var ve; + + if ( ( flags && flags[ eventType ] ) || + ( !flags && getClosestElementWithVirtualBinding( event.target, eventType ) ) ) { + + ve = createVirtualEvent( event, eventType ); + + $( event.target).trigger( ve ); + } + + return ve; +} + +function mouseEventCallback( event ) { + var touchID = $.data(event.target, touchTargetPropertyName); + + if ( !blockMouseTriggers && ( !lastTouchID || lastTouchID !== touchID ) ){ + var ve = triggerVirtualEvent( "v" + event.type, event ); + if ( ve ) { + if ( ve.isDefaultPrevented() ) { + event.preventDefault(); + } + if ( ve.isPropagationStopped() ) { + event.stopPropagation(); + } + if ( ve.isImmediatePropagationStopped() ) { + event.stopImmediatePropagation(); + } + } + } +} + +function handleTouchStart( event ) { + + var touches = getNativeEvent( event ).touches, + target, flags; + + if ( touches && touches.length === 1 ) { + + target = event.target; + flags = getVirtualBindingFlags( target ); + + if ( flags.hasVirtualBinding ) { + + lastTouchID = nextTouchID++; + $.data( target, touchTargetPropertyName, lastTouchID ); + + clearResetTimer(); + + disableMouseBindings(); + didScroll = false; + + var t = getNativeEvent( event ).touches[ 0 ]; + startX = t.pageX; + startY = t.pageY; + + triggerVirtualEvent( "vmouseover", event, flags ); + triggerVirtualEvent( "vmousedown", event, flags ); + } + } +} + +function handleScroll( event ) { + if ( blockTouchTriggers ) { + return; + } + + if ( !didScroll ) { + triggerVirtualEvent( "vmousecancel", event, getVirtualBindingFlags( event.target ) ); + } + + didScroll = true; + startResetTimer(); +} + +function handleTouchMove( event ) { + if ( blockTouchTriggers ) { + return; + } + + var t = getNativeEvent( event ).touches[ 0 ], + didCancel = didScroll, + moveThreshold = $.vmouse.moveDistanceThreshold; + didScroll = didScroll || + ( Math.abs(t.pageX - startX) > moveThreshold || + Math.abs(t.pageY - startY) > moveThreshold ), + flags = getVirtualBindingFlags( event.target ); + + if ( didScroll && !didCancel ) { + triggerVirtualEvent( "vmousecancel", event, flags ); + } + + triggerVirtualEvent( "vmousemove", event, flags ); + startResetTimer(); +} + +function handleTouchEnd( event ) { + if ( blockTouchTriggers ) { + return; + } + + disableTouchBindings(); + + var flags = getVirtualBindingFlags( event.target ), + t; + triggerVirtualEvent( "vmouseup", event, flags ); + + if ( !didScroll ) { + var ve = triggerVirtualEvent( "vclick", event, flags ); + if ( ve && ve.isDefaultPrevented() ) { + // The target of the mouse events that follow the touchend + // event don't necessarily match the target used during the + // touch. This means we need to rely on coordinates for blocking + // any click that is generated. + t = getNativeEvent( event ).changedTouches[ 0 ]; + clickBlockList.push({ + touchID: lastTouchID, + x: t.clientX, + y: t.clientY + }); + + // Prevent any mouse events that follow from triggering + // virtual event notifications. + blockMouseTriggers = true; + } + } + triggerVirtualEvent( "vmouseout", event, flags); + didScroll = false; + + startResetTimer(); +} + +function hasVirtualBindings( ele ) { + var bindings = $.data( ele, dataPropertyName ), + k; + + if ( bindings ) { + for ( k in bindings ) { + if ( bindings[ k ] ) { + return true; + } + } + } + return false; +} + +function dummyMouseHandler(){} + +function getSpecialEventObject( eventType ) { + var realType = eventType.substr( 1 ); + + return { + setup: function( data, namespace ) { + // If this is the first virtual mouse binding for this element, + // add a bindings object to its data. + + if ( !hasVirtualBindings( this ) ) { + $.data( this, dataPropertyName, {}); + } + + // If setup is called, we know it is the first binding for this + // eventType, so initialize the count for the eventType to zero. + var bindings = $.data( this, dataPropertyName ); + bindings[ eventType ] = true; + + // If this is the first virtual mouse event for this type, + // register a global handler on the document. + + activeDocHandlers[ eventType ] = ( activeDocHandlers[ eventType ] || 0 ) + 1; + + if ( activeDocHandlers[ eventType ] === 1 ) { + $document.bind( realType, mouseEventCallback ); + } + + // Some browsers, like Opera Mini, won't dispatch mouse/click events + // for elements unless they actually have handlers registered on them. + // To get around this, we register dummy handlers on the elements. + + $( this ).bind( realType, dummyMouseHandler ); + + // For now, if event capture is not supported, we rely on mouse handlers. + if ( eventCaptureSupported ) { + // If this is the first virtual mouse binding for the document, + // register our touchstart handler on the document. + + activeDocHandlers[ "touchstart" ] = ( activeDocHandlers[ "touchstart" ] || 0) + 1; + + if (activeDocHandlers[ "touchstart" ] === 1) { + $document.bind( "touchstart", handleTouchStart ) + .bind( "touchend", handleTouchEnd ) + + // On touch platforms, touching the screen and then dragging your finger + // causes the window content to scroll after some distance threshold is + // exceeded. On these platforms, a scroll prevents a click event from being + // dispatched, and on some platforms, even the touchend is suppressed. To + // mimic the suppression of the click event, we need to watch for a scroll + // event. Unfortunately, some platforms like iOS don't dispatch scroll + // events until *AFTER* the user lifts their finger (touchend). This means + // we need to watch both scroll and touchmove events to figure out whether + // or not a scroll happenens before the touchend event is fired. + + .bind( "touchmove", handleTouchMove ) + .bind( "scroll", handleScroll ); + } + } + }, + + teardown: function( data, namespace ) { + // If this is the last virtual binding for this eventType, + // remove its global handler from the document. + + --activeDocHandlers[ eventType ]; + + if ( !activeDocHandlers[ eventType ] ) { + $document.unbind( realType, mouseEventCallback ); + } + + if ( eventCaptureSupported ) { + // If this is the last virtual mouse binding in existence, + // remove our document touchstart listener. + + --activeDocHandlers[ "touchstart" ]; + + if ( !activeDocHandlers[ "touchstart" ] ) { + $document.unbind( "touchstart", handleTouchStart ) + .unbind( "touchmove", handleTouchMove ) + .unbind( "touchend", handleTouchEnd ) + .unbind( "scroll", handleScroll ); + } + } + + var $this = $( this ), + bindings = $.data( this, dataPropertyName ); + + // teardown may be called when an element was + // removed from the DOM. If this is the case, + // jQuery core may have already stripped the element + // of any data bindings so we need to check it before + // using it. + if ( bindings ) { + bindings[ eventType ] = false; + } + + // Unregister the dummy event handler. + + $this.unbind( realType, dummyMouseHandler ); + + // If this is the last virtual mouse binding on the + // element, remove the binding data from the element. + + if ( !hasVirtualBindings( this ) ) { + $this.removeData( dataPropertyName ); + } + } + }; +} + +// Expose our custom events to the jQuery bind/unbind mechanism. + +for ( var i = 0; i < virtualEventNames.length; i++ ){ + $.event.special[ virtualEventNames[ i ] ] = getSpecialEventObject( virtualEventNames[ i ] ); +} + +// Add a capture click handler to block clicks. +// Note that we require event capture support for this so if the device +// doesn't support it, we punt for now and rely solely on mouse events. +if ( eventCaptureSupported ) { + document.addEventListener( "click", function( e ){ + var cnt = clickBlockList.length, + target = e.target, + x, y, ele, i, o, touchID; + + if ( cnt ) { + x = e.clientX; + y = e.clientY; + threshold = $.vmouse.clickDistanceThreshold; + + // The idea here is to run through the clickBlockList to see if + // the current click event is in the proximity of one of our + // vclick events that had preventDefault() called on it. If we find + // one, then we block the click. + // + // Why do we have to rely on proximity? + // + // Because the target of the touch event that triggered the vclick + // can be different from the target of the click event synthesized + // by the browser. The target of a mouse/click event that is syntehsized + // from a touch event seems to be implementation specific. For example, + // some browsers will fire mouse/click events for a link that is near + // a touch event, even though the target of the touchstart/touchend event + // says the user touched outside the link. Also, it seems that with most + // browsers, the target of the mouse/click event is not calculated until the + // time it is dispatched, so if you replace an element that you touched + // with another element, the target of the mouse/click will be the new + // element underneath that point. + // + // Aside from proximity, we also check to see if the target and any + // of its ancestors were the ones that blocked a click. This is necessary + // because of the strange mouse/click target calculation done in the + // Android 2.1 browser, where if you click on an element, and there is a + // mouse/click handler on one of its ancestors, the target will be the + // innermost child of the touched element, even if that child is no where + // near the point of touch. + + ele = target; + + while ( ele ) { + for ( i = 0; i < cnt; i++ ) { + o = clickBlockList[ i ]; + touchID = 0; + + if ( ( ele === target && Math.abs( o.x - x ) < threshold && Math.abs( o.y - y ) < threshold ) || + $.data( ele, touchTargetPropertyName ) === o.touchID ) { + // XXX: We may want to consider removing matches from the block list + // instead of waiting for the reset timer to fire. + e.preventDefault(); + e.stopPropagation(); + return; + } + } + ele = ele.parentNode; + } + } + }, true); +} +})( jQuery, window, document ); + + + +// Script: jQuery hashchange event +// +// *Version: 1.3, Last updated: 7/21/2010* +// +// Project Home - http://benalman.com/projects/jquery-hashchange-plugin/ +// GitHub - http://github.com/cowboy/jquery-hashchange/ +// Source - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js +// (Minified) - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (0.8kb gzipped) +// +// About: License +// +// Copyright (c) 2010 "Cowboy" Ben Alman, +// Dual licensed under the MIT and GPL licenses. +// http://benalman.com/about/license/ +// +// About: Examples +// +// These working examples, complete with fully commented code, illustrate a few +// ways in which this plugin can be used. +// +// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/ +// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/ +// +// About: Support and Testing +// +// Information about what version or versions of jQuery this plugin has been +// tested with, what browsers it has been tested in, and where the unit tests +// reside (so you can test it yourself). +// +// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2 +// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5, +// Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5. +// Unit Tests - http://benalman.com/code/projects/jquery-hashchange/unit/ +// +// About: Known issues +// +// While this jQuery hashchange event implementation is quite stable and +// robust, there are a few unfortunate browser bugs surrounding expected +// hashchange event-based behaviors, independent of any JavaScript +// window.onhashchange abstraction. See the following examples for more +// information: +// +// Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/ +// Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/ +// WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/ +// Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/ +// +// Also note that should a browser natively support the window.onhashchange +// event, but not report that it does, the fallback polling loop will be used. +// +// About: Release History +// +// 1.3 - (7/21/2010) Reorganized IE6/7 Iframe code to make it more +// "removable" for mobile-only development. Added IE6/7 document.title +// support. Attempted to make Iframe as hidden as possible by using +// techniques from http://www.paciellogroup.com/blog/?p=604. Added +// support for the "shortcut" format $(window).hashchange( fn ) and +// $(window).hashchange() like jQuery provides for built-in events. +// Renamed jQuery.hashchangeDelay to and +// lowered its default value to 50. Added +// and properties plus document-domain.html +// file to address access denied issues when setting document.domain in +// IE6/7. +// 1.2 - (2/11/2010) Fixed a bug where coming back to a page using this plugin +// from a page on another domain would cause an error in Safari 4. Also, +// IE6/7 Iframe is now inserted after the body (this actually works), +// which prevents the page from scrolling when the event is first bound. +// Event can also now be bound before DOM ready, but it won't be usable +// before then in IE6/7. +// 1.1 - (1/21/2010) Incorporated document.documentMode test to fix IE8 bug +// where browser version is incorrectly reported as 8.0, despite +// inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag. +// 1.0 - (1/9/2010) Initial Release. Broke out the jQuery BBQ event.special +// window.onhashchange functionality into a separate plugin for users +// who want just the basic event & back button support, without all the +// extra awesomeness that BBQ provides. This plugin will be included as +// part of jQuery BBQ, but also be available separately. + +(function($,window,undefined){ + // Reused string. + var str_hashchange = 'hashchange', + + // Method / object references. + doc = document, + fake_onhashchange, + special = $.event.special, + + // Does the browser support window.onhashchange? Note that IE8 running in + // IE7 compatibility mode reports true for 'onhashchange' in window, even + // though the event isn't supported, so also test document.documentMode. + doc_mode = doc.documentMode, + supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 ); + + // Get location.hash (or what you'd expect location.hash to be) sans any + // leading #. Thanks for making this necessary, Firefox! + function get_fragment( url ) { + url = url || location.href; + return '#' + url.replace( /^[^#]*#?(.*)$/, '$1' ); + }; + + // Method: jQuery.fn.hashchange + // + // Bind a handler to the window.onhashchange event or trigger all bound + // window.onhashchange event handlers. This behavior is consistent with + // jQuery's built-in event handlers. + // + // Usage: + // + // > jQuery(window).hashchange( [ handler ] ); + // + // Arguments: + // + // handler - (Function) Optional handler to be bound to the hashchange + // event. This is a "shortcut" for the more verbose form: + // jQuery(window).bind( 'hashchange', handler ). If handler is omitted, + // all bound window.onhashchange event handlers will be triggered. This + // is a shortcut for the more verbose + // jQuery(window).trigger( 'hashchange' ). These forms are described in + // the section. + // + // Returns: + // + // (jQuery) The initial jQuery collection of elements. + + // Allow the "shortcut" format $(elem).hashchange( fn ) for binding and + // $(elem).hashchange() for triggering, like jQuery does for built-in events. + $.fn[ str_hashchange ] = function( fn ) { + return fn ? this.bind( str_hashchange, fn ) : this.trigger( str_hashchange ); + }; + + // Property: jQuery.fn.hashchange.delay + // + // The numeric interval (in milliseconds) at which the + // polling loop executes. Defaults to 50. + + // Property: jQuery.fn.hashchange.domain + // + // If you're setting document.domain in your JavaScript, and you want hash + // history to work in IE6/7, not only must this property be set, but you must + // also set document.domain BEFORE jQuery is loaded into the page. This + // property is only applicable if you are supporting IE6/7 (or IE8 operating + // in "IE7 compatibility" mode). + // + // In addition, the property must be set to the + // path of the included "document-domain.html" file, which can be renamed or + // modified if necessary (note that the document.domain specified must be the + // same in both your main JavaScript as well as in this file). + // + // Usage: + // + // jQuery.fn.hashchange.domain = document.domain; + + // Property: jQuery.fn.hashchange.src + // + // If, for some reason, you need to specify an Iframe src file (for example, + // when setting document.domain as in ), you can + // do so using this property. Note that when using this property, history + // won't be recorded in IE6/7 until the Iframe src file loads. This property + // is only applicable if you are supporting IE6/7 (or IE8 operating in "IE7 + // compatibility" mode). + // + // Usage: + // + // jQuery.fn.hashchange.src = 'path/to/file.html'; + + $.fn[ str_hashchange ].delay = 50; + /* + $.fn[ str_hashchange ].domain = null; + $.fn[ str_hashchange ].src = null; + */ + + // Event: hashchange event + // + // Fired when location.hash changes. In browsers that support it, the native + // HTML5 window.onhashchange event is used, otherwise a polling loop is + // initialized, running every milliseconds to + // see if the hash has changed. In IE6/7 (and IE8 operating in "IE7 + // compatibility" mode), a hidden Iframe is created to allow the back button + // and hash-based history to work. + // + // Usage as described in : + // + // > // Bind an event handler. + // > jQuery(window).hashchange( function(e) { + // > var hash = location.hash; + // > ... + // > }); + // > + // > // Manually trigger the event handler. + // > jQuery(window).hashchange(); + // + // A more verbose usage that allows for event namespacing: + // + // > // Bind an event handler. + // > jQuery(window).bind( 'hashchange', function(e) { + // > var hash = location.hash; + // > ... + // > }); + // > + // > // Manually trigger the event handler. + // > jQuery(window).trigger( 'hashchange' ); + // + // Additional Notes: + // + // * The polling loop and Iframe are not created until at least one handler + // is actually bound to the 'hashchange' event. + // * If you need the bound handler(s) to execute immediately, in cases where + // a location.hash exists on page load, via bookmark or page refresh for + // example, use jQuery(window).hashchange() or the more verbose + // jQuery(window).trigger( 'hashchange' ). + // * The event can be bound before DOM ready, but since it won't be usable + // before then in IE6/7 (due to the necessary Iframe), recommended usage is + // to bind it inside a DOM ready handler. + + // Override existing $.event.special.hashchange methods (allowing this plugin + // to be defined after jQuery BBQ in BBQ's source code). + special[ str_hashchange ] = $.extend( special[ str_hashchange ], { + + // Called only when the first 'hashchange' event is bound to window. + setup: function() { + // If window.onhashchange is supported natively, there's nothing to do.. + if ( supports_onhashchange ) { return false; } + + // Otherwise, we need to create our own. And we don't want to call this + // until the user binds to the event, just in case they never do, since it + // will create a polling loop and possibly even a hidden Iframe. + $( fake_onhashchange.start ); + }, + + // Called only when the last 'hashchange' event is unbound from window. + teardown: function() { + // If window.onhashchange is supported natively, there's nothing to do.. + if ( supports_onhashchange ) { return false; } + + // Otherwise, we need to stop ours (if possible). + $( fake_onhashchange.stop ); + } + + }); + + // fake_onhashchange does all the work of triggering the window.onhashchange + // event for browsers that don't natively support it, including creating a + // polling loop to watch for hash changes and in IE 6/7 creating a hidden + // Iframe to enable back and forward. + fake_onhashchange = (function(){ + var self = {}, + timeout_id, + + // Remember the initial hash so it doesn't get triggered immediately. + last_hash = get_fragment(), + + fn_retval = function(val){ return val; }, + history_set = fn_retval, + history_get = fn_retval; + + // Start the polling loop. + self.start = function() { + timeout_id || poll(); + }; + + // Stop the polling loop. + self.stop = function() { + timeout_id && clearTimeout( timeout_id ); + timeout_id = undefined; + }; + + // This polling loop checks every $.fn.hashchange.delay milliseconds to see + // if location.hash has changed, and triggers the 'hashchange' event on + // window when necessary. + function poll() { + var hash = get_fragment(), + history_hash = history_get( last_hash ); + + if ( hash !== last_hash ) { + history_set( last_hash = hash, history_hash ); + + $(window).trigger( str_hashchange ); + + } else if ( history_hash !== last_hash ) { + location.href = location.href.replace( /#.*/, '' ) + history_hash; + } + + timeout_id = setTimeout( poll, $.fn[ str_hashchange ].delay ); + }; + + // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + // vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv + // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv + $.browser.msie && !supports_onhashchange && (function(){ + // Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8 + // when running in "IE7 compatibility" mode. + + var iframe, + iframe_src; + + // When the event is bound and polling starts in IE 6/7, create a hidden + // Iframe for history handling. + self.start = function(){ + if ( !iframe ) { + iframe_src = $.fn[ str_hashchange ].src; + iframe_src = iframe_src && iframe_src + get_fragment(); + + // Create hidden Iframe. Attempt to make Iframe as hidden as possible + // by using techniques from http://www.paciellogroup.com/blog/?p=604. + iframe = $(''); + if (options.previewPosition == 'after') { + iFrame.insertAfter(footer); + } else { + iFrame.insertBefore(header); + } + previewWindow = iFrame[iFrame.length - 1].contentWindow || frame[iFrame.length - 1]; + } + } else if (altKey === true) { + // Thx Stephen M. Redd for the IE8 fix + if (iFrame) { + iFrame.remove(); + } else { + previewWindow.close(); + } + previewWindow = iFrame = false; + } + if (!options.previewAutoRefresh) { + refreshPreview(); + } + } + + // refresh Preview window + function refreshPreview() { + renderPreview(); + } + + function renderPreview() { + var phtml; + if (options.previewParserPath !== '') { + $.ajax( { + type: 'POST', + url: options.previewParserPath, + data: options.previewParserVar+'='+encodeURIComponent($$.val()), + success: function(data) { + writeInPreview( localize(data, 1) ); + } + } ); + } else { + if (!template) { + $.ajax( { + url: options.previewTemplatePath, + success: function(data) { + writeInPreview( localize(data, 1).replace(//g, $$.val()) ); + } + } ); + } + } + return false; + } + + function writeInPreview(data) { + if (previewWindow.document) { + try { + sp = previewWindow.document.documentElement.scrollTop + } catch(e) { + sp = 0; + } + previewWindow.document.open(); + previewWindow.document.write(data); + previewWindow.document.close(); + previewWindow.document.documentElement.scrollTop = sp; + } + if (options.previewInWindow) { + previewWindow.focus(); + } + } + + // set keys pressed + function keyPressed(e) { + shiftKey = e.shiftKey; + altKey = e.altKey; + ctrlKey = (!(e.altKey && e.ctrlKey)) ? e.ctrlKey : false; + + if (e.type === 'keydown') { + if (ctrlKey === true) { + li = $("a[accesskey="+String.fromCharCode(e.keyCode)+"]", header).parent('li'); + if (li.length !== 0) { + ctrlKey = false; + setTimeout(function() { + li.triggerHandler('mousedown'); + },1); + return false; + } + } + if (e.keyCode === 13 || e.keyCode === 10) { // Enter key + if (ctrlKey === true) { // Enter + Ctrl + ctrlKey = false; + markup(options.onCtrlEnter); + return options.onCtrlEnter.keepDefault; + } else if (shiftKey === true) { // Enter + Shift + shiftKey = false; + markup(options.onShiftEnter); + return options.onShiftEnter.keepDefault; + } else { // only Enter + markup(options.onEnter); + return options.onEnter.keepDefault; + } + } + if (e.keyCode === 9) { // Tab key + if (shiftKey == true || ctrlKey == true || altKey == true) { // Thx Dr Floob. + return false; + } + if (caretOffset !== -1) { + get(); + caretOffset = $$.val().length - caretOffset; + set(caretOffset, 0); + caretOffset = -1; + return false; + } else { + markup(options.onTab); + return options.onTab.keepDefault; + } + } + } + } + + init(); + }); + }; + + $.fn.markItUpRemove = function() { + return this.each(function() { + var $$ = $(this).unbind().removeClass('markItUpEditor'); + $$.parent('div').parent('div.markItUp').parent('div').replaceWith($$); + } + ); + }; + + $.markItUp = function(settings) { + var options = { target:false }; + $.extend(options, settings); + if (options.target) { + return $(options.target).each(function() { + $(this).focus(); + $(this).trigger('insertion', [options]); + }); + } else { + $('textarea').trigger('insertion', [options]); + } + }; +})(jQuery); diff --git a/Public/Js/markitup/sets/bbcode/images/bold.png b/Public/Js/markitup/sets/bbcode/images/bold.png new file mode 100644 index 0000000..889ae80 Binary files /dev/null and b/Public/Js/markitup/sets/bbcode/images/bold.png differ diff --git a/Public/Js/markitup/sets/bbcode/images/clean.png b/Public/Js/markitup/sets/bbcode/images/clean.png new file mode 100644 index 0000000..7e7cefb Binary files /dev/null and b/Public/Js/markitup/sets/bbcode/images/clean.png differ diff --git a/Public/Js/markitup/sets/bbcode/images/code.png b/Public/Js/markitup/sets/bbcode/images/code.png new file mode 100644 index 0000000..63fe6ce Binary files /dev/null and b/Public/Js/markitup/sets/bbcode/images/code.png differ diff --git a/Public/Js/markitup/sets/bbcode/images/fonts.png b/Public/Js/markitup/sets/bbcode/images/fonts.png new file mode 100644 index 0000000..b7960db Binary files /dev/null and b/Public/Js/markitup/sets/bbcode/images/fonts.png differ diff --git a/Public/Js/markitup/sets/bbcode/images/h1.png b/Public/Js/markitup/sets/bbcode/images/h1.png new file mode 100644 index 0000000..9c122e9 Binary files /dev/null and b/Public/Js/markitup/sets/bbcode/images/h1.png differ diff --git a/Public/Js/markitup/sets/bbcode/images/h2.png b/Public/Js/markitup/sets/bbcode/images/h2.png new file mode 100644 index 0000000..fbd8765 Binary files /dev/null and b/Public/Js/markitup/sets/bbcode/images/h2.png differ diff --git a/Public/Js/markitup/sets/bbcode/images/h3.png b/Public/Js/markitup/sets/bbcode/images/h3.png new file mode 100644 index 0000000..c7836cf Binary files /dev/null and b/Public/Js/markitup/sets/bbcode/images/h3.png differ diff --git a/Public/Js/markitup/sets/bbcode/images/italic.png b/Public/Js/markitup/sets/bbcode/images/italic.png new file mode 100644 index 0000000..8482ac8 Binary files /dev/null and b/Public/Js/markitup/sets/bbcode/images/italic.png differ diff --git a/Public/Js/markitup/sets/bbcode/images/link.png b/Public/Js/markitup/sets/bbcode/images/link.png new file mode 100644 index 0000000..25eacb7 Binary files /dev/null and b/Public/Js/markitup/sets/bbcode/images/link.png differ diff --git a/Public/Js/markitup/sets/bbcode/images/list-bullet.png b/Public/Js/markitup/sets/bbcode/images/list-bullet.png new file mode 100644 index 0000000..4a8672b Binary files /dev/null and b/Public/Js/markitup/sets/bbcode/images/list-bullet.png differ diff --git a/Public/Js/markitup/sets/bbcode/images/list-item.png b/Public/Js/markitup/sets/bbcode/images/list-item.png new file mode 100644 index 0000000..8cb4d69 Binary files /dev/null and b/Public/Js/markitup/sets/bbcode/images/list-item.png differ diff --git a/Public/Js/markitup/sets/bbcode/images/list-numeric.png b/Public/Js/markitup/sets/bbcode/images/list-numeric.png new file mode 100644 index 0000000..33b0b8d Binary files /dev/null and b/Public/Js/markitup/sets/bbcode/images/list-numeric.png differ diff --git a/Public/Js/markitup/sets/bbcode/images/paragraph.png b/Public/Js/markitup/sets/bbcode/images/paragraph.png new file mode 100644 index 0000000..95704fb Binary files /dev/null and b/Public/Js/markitup/sets/bbcode/images/paragraph.png differ diff --git a/Public/Js/markitup/sets/bbcode/images/picture.png b/Public/Js/markitup/sets/bbcode/images/picture.png new file mode 100644 index 0000000..4a158fe Binary files /dev/null and b/Public/Js/markitup/sets/bbcode/images/picture.png differ diff --git a/Public/Js/markitup/sets/bbcode/images/preview.png b/Public/Js/markitup/sets/bbcode/images/preview.png new file mode 100644 index 0000000..a9925a0 Binary files /dev/null and b/Public/Js/markitup/sets/bbcode/images/preview.png differ diff --git a/Public/Js/markitup/sets/bbcode/images/quotes.png b/Public/Js/markitup/sets/bbcode/images/quotes.png new file mode 100644 index 0000000..e54ebeb Binary files /dev/null and b/Public/Js/markitup/sets/bbcode/images/quotes.png differ diff --git a/Public/Js/markitup/sets/bbcode/images/stroke.png b/Public/Js/markitup/sets/bbcode/images/stroke.png new file mode 100644 index 0000000..612058a Binary files /dev/null and b/Public/Js/markitup/sets/bbcode/images/stroke.png differ diff --git a/Public/Js/markitup/sets/bbcode/images/underline.png b/Public/Js/markitup/sets/bbcode/images/underline.png new file mode 100644 index 0000000..90d0df2 Binary files /dev/null and b/Public/Js/markitup/sets/bbcode/images/underline.png differ diff --git a/Public/Js/markitup/sets/bbcode/readme.txt b/Public/Js/markitup/sets/bbcode/readme.txt new file mode 100644 index 0000000..745d5dd --- /dev/null +++ b/Public/Js/markitup/sets/bbcode/readme.txt @@ -0,0 +1,11 @@ +Markup language: +BBCode + +Description: +A basic BBCode markup set with Bold, Italic, Underline, Picture, Link, Size, List, Quotes, Code, Clean button, Preview button. + +Install: +- Download the zip file +- Unzip it in your markItUp! sets folder +- Modify your JS link to point at this set.js +- Modify your CSS link to point at this style.css \ No newline at end of file diff --git a/Public/Js/markitup/sets/bbcode/set.js b/Public/Js/markitup/sets/bbcode/set.js new file mode 100644 index 0000000..3d16ea5 --- /dev/null +++ b/Public/Js/markitup/sets/bbcode/set.js @@ -0,0 +1,32 @@ +// ---------------------------------------------------------------------------- +// markItUp! +// ---------------------------------------------------------------------------- +// Copyright (C) 2008 Jay Salvat +// http://markitup.jaysalvat.com/ +// ---------------------------------------------------------------------------- +// BBCode tags example +// http://en.wikipedia.org/wiki/Bbcode +// ---------------------------------------------------------------------------- +// Feel free to add more tags +// ---------------------------------------------------------------------------- +mySettings = { + previewParserPath: '', // path to your BBCode parser + markupSet: [ + {name:'Heading 1', key:'1', openWith:'[h1]', closeWith:'[/h1]' }, + {name:'Heading 2', key:'2', openWith:'[h2]', closeWith:'[/h2]' }, + {name:'Heading 3', key:'3', openWith:'[h3]', closeWith:'[/h3]' }, + {name:'Paragraph', openWith:'[p]', closeWith:'[/p]' }, + {separator:'---------------' }, + {name:'Bold', key:'B', openWith:'[b]', closeWith:'[/b]'}, + {name:'Italic', key:'I', openWith:'[i]', closeWith:'[/i]'}, + {name:'Underline', key:'U', openWith:'[u]', closeWith:'[/u]'}, + {name:'Stroke through', key:'S', openWith:'[del]', closeWith:'[/del]' }, + {separator:'---------------' }, + {name:'Bulleted list', openWith:'[list]\n', closeWith:'\n[/list]'}, + {name:'Numeric list', openWith:'[enum]\n', closeWith:'\n[/enum]'}, + {name:'List item', openWith:'[*] ', closeWith:'[/*]'}, + {separator:'---------------' }, + {name:'Code', openWith:'[code]', closeWith:'[/code]'}, + {name:'Link', key: 'L', openWith:'[a]', closeWith:'[/a]',placeHolder:'http://the_url | the_text'}, + ] +} \ No newline at end of file diff --git a/Public/Js/markitup/sets/bbcode/style.css b/Public/Js/markitup/sets/bbcode/style.css new file mode 100644 index 0000000..4ab6031 --- /dev/null +++ b/Public/Js/markitup/sets/bbcode/style.css @@ -0,0 +1,72 @@ +/* ------------------------------------------------------------------- +// markItUp! +// By Jay Salvat - http://markitup.jaysalvat.com/ +// ------------------------------------------------------------------*/ +.markItUp .markItUpButton1 a { + background-image:url(images/h1.png); +} +.markItUp .markItUpButton2 a { + background-image:url(images/h2.png); +} +.markItUp .markItUpButton3 a { + background-image:url(images/h3.png); +} +.markItUp .markItUpButton4 a { + background-image:url(images/paragraph.png); +} +.markItUp .markItUpButton5 a { + background-image:url(images/bold.png); +} +.markItUp .markItUpButton6 a { + background-image:url(images/italic.png); +} +.markItUp .markItUpButton7 a { + background-image:url(images/underline.png); +} +.markItUp .markItUpButton8 a { + background-image:url(images/stroke.png); +} +.markItUp .markItUpButton9 a { + background-image:url(images/list-bullet.png); +} +.markItUp .markItUpButton10 a { + background-image:url(images/list-numeric.png); +} +.markItUp .markItUpButton11 a { + background-image:url(images/list-item.png); +} +.markItUp .markItUpButton12 a { + background-image:url(images/code.png); +} +.markItUp .markItUpButton13 a { + background-image:url(images/link.png); +} +/*.markItUp .markItUpButton4 a { + background-image:url(images/stroke.png); +}*/ + +/*.markItUp .markItUpButton4 a { + background-image:url(images/picture.png); +}*/ +/*.markItUp .markItUpButton5 a { + background-image:url(images/link.png); +} + +.markItUp .markItUpButton6 a { + background-image:url(images/fonts.png); +} + + +.markItUp .markItUpButton10 a { + background-image:url(images/quotes.png); +} +.markItUp .markItUpButton11 a { + background-image:url(images/code.png); +} + +.markItUp .clean a { + background-image:url(images/clean.png); +} +.markItUp .preview a { + background-image:url(images/preview.png); +}*/ \ No newline at end of file diff --git a/Public/Js/markitup/skins/simple/images/handle.png b/Public/Js/markitup/skins/simple/images/handle.png new file mode 100644 index 0000000..3993b20 Binary files /dev/null and b/Public/Js/markitup/skins/simple/images/handle.png differ diff --git a/Public/Js/markitup/skins/simple/images/menu.png b/Public/Js/markitup/skins/simple/images/menu.png new file mode 100644 index 0000000..44a07af Binary files /dev/null and b/Public/Js/markitup/skins/simple/images/menu.png differ diff --git a/Public/Js/markitup/skins/simple/images/submenu.png b/Public/Js/markitup/skins/simple/images/submenu.png new file mode 100644 index 0000000..03d1977 Binary files /dev/null and b/Public/Js/markitup/skins/simple/images/submenu.png differ diff --git a/Public/Js/markitup/skins/simple/style.css b/Public/Js/markitup/skins/simple/style.css new file mode 100644 index 0000000..4ff830f --- /dev/null +++ b/Public/Js/markitup/skins/simple/style.css @@ -0,0 +1,118 @@ +/* ------------------------------------------------------------------- +// markItUp! Universal MarkUp Engine, JQuery plugin +// By Jay Salvat - http://markitup.jaysalvat.com/ +// ------------------------------------------------------------------*/ +.markItUp * { + margin:0px; padding:0px; + outline:none; +} +.markItUp a:link, +.markItUp a:visited { + color:#000; + text-decoration:none; +} +.markItUp { + width:700px; + margin:5px 0 5px 0; +} +.markItUpContainer { + font:11px Verdana, Arial, Helvetica, sans-serif; +} +.markItUpEditor { + font:12px 'Courier New', Courier, monospace; + padding:5px; + width:640px; + height:300px; + clear:both; display:block; + line-height:18px; + overflow:auto; +} +.markItUpPreviewFrame { + overflow:auto; + background-color:#FFF; + width:99.9%; + height:300px; + margin:5px 0; +} +.markItUpFooter { + width:100%; +} +.markItUpResizeHandle { + overflow:hidden; + width:22px; height:5px; + margin-left:auto; + margin-right:auto; + background-image:url(images/handle.png); + cursor:n-resize; +} +/***************************************************************************************/ +/* first row of buttons */ +.markItUpHeader ul li { + list-style:none; + float:left; + position:relative; +} +.markItUpHeader ul li:hover > ul{ + display:block; +} +.markItUpHeader ul .markItUpDropMenu { + background:transparent url(images/menu.png) no-repeat 115% 50%; + margin-right:5px; +} +.markItUpHeader ul .markItUpDropMenu li { + margin-right:0px; +} +/* next rows of buttons */ +.markItUpHeader ul ul { + display:none; + position:absolute; + top:18px; left:0px; + background:#FFF; + border:1px solid #000; +} +.markItUpHeader ul ul li { + float:none; + border-bottom:1px solid #000; +} +.markItUpHeader ul ul .markItUpDropMenu { + background:#FFF url(images/submenu.png) no-repeat 100% 50%; +} +.markItUpHeader ul .markItUpSeparator { + margin:0 10px; + width:1px; + height:16px; + overflow:hidden; + background-color:#CCC; +} +.markItUpHeader ul ul .markItUpSeparator { + width:auto; height:1px; + margin:0px; +} +/* next rows of buttons */ +.markItUpHeader ul ul ul { + position:absolute; + top:-1px; left:150px; +} +.markItUpHeader ul ul ul li { + float:none; +} +.markItUpHeader ul a { + display:block; + width:16px; height:16px; + text-indent:-10000px; + background-repeat:no-repeat; + padding:3px; + margin:0px; +} +.markItUpHeader ul ul a { + display:block; + padding-left:0px; + text-indent:0; + width:120px; + padding:5px 5px 5px 25px; + background-position:2px 50%; +} +.markItUpHeader ul ul a:hover { + color:#FFF; + background-color:#000; +} diff --git a/Public/Js/stats.js b/Public/Js/stats.js new file mode 100644 index 0000000..7d6be08 --- /dev/null +++ b/Public/Js/stats.js @@ -0,0 +1,35 @@ + +/*************************************************************************** + phpTrafficA @soft.ZoneO.net + Copyright (C) 2004-2008 ZoneO-soft, Butchu (email: "butchu" with the domain "zoneo.net") + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + More Info About The Licence At http://www.gnu.org/copyleft/gpl.html +****************************************************************************/ + +function encode64(inp){ +var key="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; +var chr1,chr2,chr3,enc3,enc4,i=0,out=""; +while(i127) chr1=88; +chr2=inp.charCodeAt(i++);if(chr2>127) chr2=88; +chr3=inp.charCodeAt(i++);if(chr3>127) chr3=88; +if(isNaN(chr3)) {enc4=64;chr3=0;} else enc4=chr3&63; +if(isNaN(chr2)) {enc3=64;chr2=0;} else enc3=((chr2<<2)|(chr3>>6))&63; +out+=key.charAt((chr1>>2)&63)+key.charAt(((chr1<<4)|(chr2>>4))&63)+key.charAt(enc3)+key.charAt(enc4); +} +return encodeURIComponent(out); +} + +function stats(sid){ +var referer=encode64(document.referrer); +var thispage=encode64(window.location.pathname+location.search); +var date=new Date(); +var time=date.getTime(); +var resolution= screen.width + "x" + screen.height; +document.writeln("\"\"\n"); +} diff --git a/Public/index.html b/Public/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Public/index.html @@ -0,0 +1 @@ + diff --git a/README.org b/README.org new file mode 100644 index 0000000..d3b2821 --- /dev/null +++ b/README.org @@ -0,0 +1,18 @@ +* Php module dependencies + +It is not clear what are the exact php modules required for the site to run. On a Trisquel 9 VM typically it is sufficient to have the following extra modules installed on top of a standard php 7 installation: + +- php-gd +- php-mbstring +- php-mysql +- php-xml + +Help with formalizing the module dependencies is appreciated. + +* Staging deployment patch + +When deploying to staging, run + +#+begin_src sh + patch -p2 +# Options +FollowSymlinks + RewriteEngine on + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] +# + + diff --git a/admin/Application/Controllers/AdminboxesController.php b/admin/Application/Controllers/AdminboxesController.php new file mode 100644 index 0000000..65ba18c --- /dev/null +++ b/admin/Application/Controllers/AdminboxesController.php @@ -0,0 +1,78 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class AdminboxesController extends Controller { + + function __construct($model, $controller, $queryString) { + parent::__construct($model, $controller, $queryString); + + $this->load('header_back'); + $this->load('footer_back','last'); + + $this->session('admin'); + $this->model('BoxesModel'); + + $this->modelName = 'BoxesModel'; + + $this->m['BoxesModel']->setFields('title,message','sanitizeAll'); + + $this->setArgKeys(array('page:forceNat'=>1,'token:sanitizeAll'=>'token')); + } + + public function main() + { + $this->shift(); + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $this->loadScaffold('main'); + + $this->scaffold->loadMain('boxes:id_box,boxes:title,smartDate|boxes:creation_date','boxes:id_box','edit,del'); + $this->scaffold->setHead('NEWS ID,TITLE,DATE'); + $this->scaffold->update('del'); + $data['scaffold'] = $this->scaffold->render(); + $this->append($data); + $this->load('main'); + } + + public function form($queryType = 'insert') + { + $this->shift(1); + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $this->m['BoxesModel']->updateTable('insert,update'); + + $this->loadScaffold('form'); + $this->scaffold->loadForm($queryType,"adminboxes/form/$queryType"); + $this->scaffold->getFormValues('sanitizeHtml'); + $data['scaffold'] = $this->scaffold->render(); + + $this->append($data); + $this->load('main'); + } + +} \ No newline at end of file diff --git a/admin/Application/Controllers/AdmindeletionController.php b/admin/Application/Controllers/AdmindeletionController.php new file mode 100644 index 0000000..d5ee6fc --- /dev/null +++ b/admin/Application/Controllers/AdmindeletionController.php @@ -0,0 +1,66 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class AdmindeletionController extends Controller { + + function __construct($model, $controller, $queryString) { + parent::__construct($model, $controller, $queryString); + + $this->load('header_back'); + $this->load('footer_back','last'); + + $this->session('admin'); + $this->model('DeletionModel'); + + $this->modelName = 'DeletionModel'; + +// $this->m['DeletionModel']->setFields('object,topic,status,priority,message,notice','sanitizeAll'); + + $this->setArgKeys(array('page:forceNat'=>1,'object:sanitizeAll'=>'undef','token:sanitizeAll'=>'token')); + } + + public function main() + { + $this->shift(); + + Params::$nullQueryValue = 'undef'; + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive','mainMenu'=>'panel','recordPerPage'=>30)); + + $whereClauseArray = array( + 'object' => $this->viewArgs['object'], + ); + $this->scaffold->setWhereQueryClause($whereClauseArray); + + $this->scaffold->loadMain('deletion:id_del,deletion:object,deletion:id_duplicate,deletion:id_hard,getUserName|deletion:created_by,smartDate|deletion:creation_date','deletion:id_del',''); + $this->scaffold->setHead('DEL ID,OBJECT,DUPLICATED,HARDWARE ID,CREATED BY,DATE'); + $this->scaffold->update('del'); + $data['scaffold'] = $this->scaffold->render(); + $this->append($data); + $this->load('main'); + } + +} \ No newline at end of file diff --git a/admin/Application/Controllers/AdminhardwareController.php b/admin/Application/Controllers/AdminhardwareController.php new file mode 100644 index 0000000..c02a4c2 --- /dev/null +++ b/admin/Application/Controllers/AdminhardwareController.php @@ -0,0 +1,121 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class AdminhardwareController extends Controller +{ + + function __construct($model, $controller, $queryString) + { + parent::__construct($model, $controller, $queryString); + + $this->load('header_back'); + $this->load('footer_back','last'); + + $this->session('admin'); + $this->model('HardwareModel'); + $this->model('DeletionModel'); + + $this->modelName = 'HardwareModel'; + + $this->m['HardwareModel']->setFields('deleted','sanitizeAll'); + + $this->setArgKeys(array('page:forceNat'=>1,'type:sanitizeAll'=>'undef','ask_for_del:sanitizeAll'=>'undef','-deleted:sanitizeAll'=>'undef','token:sanitizeAll'=>'token')); + } + + public function main() + { + $this->shift(); + + Params::$nullQueryValue = 'undef'; + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive','mainMenu'=>'panel','recordPerPage'=>30)); + + $whereClauseArray = array( + 'type' => $this->viewArgs['type'], + 'ask_for_del' => $this->viewArgs['ask_for_del'], + '-deleted' => $this->viewArgs['-deleted'], + ); + $this->scaffold->setWhereQueryClause($whereClauseArray); + + $this->scaffold->loadMain('hardware:id_hard,hardware:model,hardware:type,getUserName|hardware:created_by,getUserName|hardware:updated_by,smartDate|hardware:creation_date,smartDate|hardware:update_date,hardware:ask_for_del,hardware:deleted','hardware:id_hard','edit'); + + $this->scaffold->addItem('simpleLink','adminhardware/ask/;hardware:id_hard;',null,'who asked for deletion'); + $this->scaffold->setHead('HARD ID,MODEL,TYPE,CREATED BY,UPDATED BY,CREATION DATE,UPDATE DATE,ASK FOR DEL?,DELETED?,EDIT,VIEW'); + $data['scaffold'] = $this->scaffold->render(); + $this->append($data); + $this->load('main'); + } + + public function ask($id_hard = 0) + { + $this->shift(1); + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $clean['id_hard'] = (int)$id_hard; + + $this->helper('Menu','adminhardware','panel'); + $this->h['Menu']->links['back']['text'] = 'Back'; + $this->h['Menu']->links['back']['url'] = 'main'; + + $data["table"] = $this->m['DeletionModel']->select()->where(array("id_hard"=>$clean['id_hard']))->orderBy("id_del desc")->send(); + + $data['menu'] = $this->h['Menu']->render('panel,back'); + + $this->append($data); + $this->load('ask'); + + } + + public function form($queryType = 'update') + { + $this->shift(1); + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + if (isset($_POST['updateAction'])) + { + $clean['id_hard'] = $this->request->post('id_hard',0,'forceInt'); + $clean['deleted'] = $this->request->post('deleted',0,'sanitizeAll'); + + $this->m['HardwareModel']->db->update('hardware','deleted',array($clean['deleted']),'id_hard='.$clean['id_hard']); + + } + + $this->loadScaffold('form'); + $this->scaffold->loadForm($queryType,"adminhardware/form/$queryType"); + $this->scaffold->getFormValues('sanitizeHtml'); + $data['scaffold'] = $this->scaffold->render(); + + $this->append($data); + $this->load('main'); + } + +} \ No newline at end of file diff --git a/admin/Application/Controllers/AdminhistoryController.php b/admin/Application/Controllers/AdminhistoryController.php new file mode 100644 index 0000000..849e432 --- /dev/null +++ b/admin/Application/Controllers/AdminhistoryController.php @@ -0,0 +1,68 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class AdminhistoryController extends Controller +{ + + function __construct($model, $controller, $queryString) + { + parent::__construct($model, $controller, $queryString); + + $this->load('header_back'); + $this->load('footer_back','last'); + + $this->session('admin'); + $this->model('HistoryModel'); + + $this->modelName = 'HistoryModel'; + + $this->setArgKeys(array('page:forceNat'=>1,'type:sanitizeAll'=>'undef','action:sanitizeAll'=>'undef','created_by:sanitizeAll'=>'undef','token:sanitizeAll'=>'token')); + } + + public function main() + { + $this->shift(); + + Params::$nullQueryValue = 'undef'; + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive','mainMenu'=>'panel','recordPerPage'=>30)); + + $whereClauseArray = array( + 'type' => $this->viewArgs['type'], + 'action' => $this->viewArgs['action'], + 'created_by'=> $this->viewArgs['created_by'], + 'gr' => '!="registered"', + ); + $this->scaffold->setWhereQueryClause($whereClauseArray); + $this->scaffold->model->orderBy('id_history desc'); + $this->scaffold->loadMain('history:id_history,history:type,history:action,getUserName|history:created_by,history:id,smartDate|history:creation_date,history:gr,history:message','history:id_history',''); + $this->scaffold->setHead('HISTORY ID,TYPE,ACTION,CREATED BY,OBJECT ID,CREATION DATE,GROUP,MESSAGE'); + $data['scaffold'] = $this->scaffold->render(); + $this->append($data); + $this->load('main'); + } + +} \ No newline at end of file diff --git a/admin/Application/Controllers/AdminissuesController.php b/admin/Application/Controllers/AdminissuesController.php new file mode 100644 index 0000000..476b69c --- /dev/null +++ b/admin/Application/Controllers/AdminissuesController.php @@ -0,0 +1,88 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class AdminissuesController extends Controller { + + function __construct($model, $controller, $queryString) { + parent::__construct($model, $controller, $queryString); + + $this->load('header_back'); + $this->load('footer_back','last'); + + $this->session('admin'); + $this->model('IssuesModel'); + + $this->modelName = 'IssuesModel'; + + $this->m['IssuesModel']->setFields('deleted,status','sanitizeAll'); + + $this->setArgKeys(array('page:forceNat'=>1,'priority:sanitizeAll'=>'undef','status:sanitizeAll'=>'undef','topic:sanitizeAll'=>'undef','deleted:sanitizeAll'=>'undef','token:sanitizeAll'=>'token')); + } + + public function main() + { + $this->shift(); + + Params::$nullQueryValue = 'undef'; + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive')); + + $whereClauseArray = array( + 'priority' => $this->viewArgs['priority'], + 'status' => $this->viewArgs['status'], + 'topic' => $this->viewArgs['topic'], + 'deleted' => $this->viewArgs['deleted'], + ); + $this->scaffold->setWhereQueryClause($whereClauseArray); + + $this->scaffold->loadMain('issues:id_issue,issues:title,issues:topic,getUserName|issues:created_by,issues:priority,issues:status,smartDate|issues:creation_date,issues:deleted','issues:id_issue','edit,del'); + $this->scaffold->setHead('ISSUE ID,TITLE,TOPIC,CREATED BY,PRIORITY,STATUS,DATE'); + $this->scaffold->update('del'); + $data['scaffold'] = $this->scaffold->render(); + $this->append($data); + $this->load('main'); + } + + public function form($queryType = 'insert') + { + $this->shift(1); + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $this->m['IssuesModel']->updateTable('insert,update'); + + $this->loadScaffold('form'); + $this->scaffold->loadForm($queryType,"adminissues/form/$queryType"); + $this->scaffold->getFormValues('sanitizeHtml'); + $data['scaffold'] = $this->scaffold->render(); + + $this->append($data); + $this->load('main'); + } + +} \ No newline at end of file diff --git a/admin/Application/Controllers/AdminmessagesController.php b/admin/Application/Controllers/AdminmessagesController.php new file mode 100644 index 0000000..5a979c4 --- /dev/null +++ b/admin/Application/Controllers/AdminmessagesController.php @@ -0,0 +1,86 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class AdminmessagesController extends Controller { + + function __construct($model, $controller, $queryString) { + parent::__construct($model, $controller, $queryString); + + $this->load('header_back'); + $this->load('footer_back','last'); + + $this->session('admin'); + $this->model('MessagesModel'); + + $this->modelName = 'MessagesModel'; + + $this->m['MessagesModel']->setFields('deleted,has_read','sanitizeAll'); + + $this->setArgKeys(array('page:forceNat'=>1,'deleted:sanitizeAll'=>'undef','has_read:sanitizeAll'=>'undef','token:sanitizeAll'=>'token')); + } + + public function main() + { + $this->shift(); + + Params::$nullQueryValue = 'undef'; + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive','recordPerPage'=>20)); + + $whereClauseArray = array( + 'deleted' => $this->viewArgs['deleted'], + 'has_read' => $this->viewArgs['has_read'], + ); + $this->scaffold->setWhereQueryClause($whereClauseArray); + $this->scaffold->model->orderBy = "id_mes desc"; + + $this->scaffold->loadMain('messages:id_mes,messages:id_issue,getUserName|messages:created_by,smartDate|messages:creation_date,messages:deleted,messages:has_read','messages:id_mes','edit'); + $this->scaffold->setHead('MESSAGE ID,ISSUE ID,CREATED BY,DATE,DELETED?,ALREADY READ?'); + $data['scaffold'] = $this->scaffold->render(); + $this->append($data); + $this->load('main'); + } + + public function form($queryType = 'insert') + { + $this->shift(1); + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $this->m['MessagesModel']->updateTable('insert,update'); + + $this->loadScaffold('form'); + $this->scaffold->loadForm($queryType,"adminmessages/form/$queryType"); + $this->scaffold->getFormValues('sanitizeHtml'); + $data['scaffold'] = $this->scaffold->render(); + + $this->append($data); + $this->load('main'); + } + +} \ No newline at end of file diff --git a/admin/Application/Controllers/AdminnewsController.php b/admin/Application/Controllers/AdminnewsController.php new file mode 100644 index 0000000..d722ffe --- /dev/null +++ b/admin/Application/Controllers/AdminnewsController.php @@ -0,0 +1,78 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class AdminnewsController extends Controller { + + function __construct($model, $controller, $queryString) { + parent::__construct($model, $controller, $queryString); + + $this->load('header_back'); + $this->load('footer_back','last'); + + $this->session('admin'); + $this->model('NewsModel'); + + $this->modelName = 'NewsModel'; + + $this->m['NewsModel']->setFields('title,message','sanitizeAll'); + + $this->setArgKeys(array('page:forceNat'=>1,'token:sanitizeAll'=>'token')); + } + + public function main() + { + $this->shift(); + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $this->loadScaffold('main'); + + $this->scaffold->loadMain('news:id_news,news:title,smartDate|news:creation_date','news:id_news','edit,del'); + $this->scaffold->setHead('NEWS ID,TITLE,DATE'); + $this->scaffold->update('del'); + $data['scaffold'] = $this->scaffold->render(); + $this->append($data); + $this->load('main'); + } + + public function form($queryType = 'insert') + { + $this->shift(1); + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $this->m['NewsModel']->updateTable('insert,update'); + + $this->loadScaffold('form'); + $this->scaffold->loadForm($queryType,"adminnews/form/$queryType"); + $this->scaffold->getFormValues('sanitizeHtml'); + $data['scaffold'] = $this->scaffold->render(); + + $this->append($data); + $this->load('main'); + } + +} \ No newline at end of file diff --git a/admin/Application/Controllers/AdminparamsController.php b/admin/Application/Controllers/AdminparamsController.php new file mode 100644 index 0000000..62e58b6 --- /dev/null +++ b/admin/Application/Controllers/AdminparamsController.php @@ -0,0 +1,68 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class AdminparamsController extends Controller { + + function __construct($model, $controller, $queryString) { + parent::__construct($model, $controller, $queryString); + + $this->load('header_back'); + $this->load('footer_back','last'); + + $this->session('admin'); + $this->model('ParamsModel'); + + $this->modelName = 'ParamsModel'; + + $this->m['ParamsModel']->setFields('updating,boxes_xml','sanitizeAll'); + + $this->setArgKeys(array('token:sanitizeAll'=>'token')); + } + + public function form() + { + $this->shift(); + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $this->m['ParamsModel']->updateTable('update',1); + if ($this->m['ParamsModel']->queryResult) + { + if (strcmp($this->m['ParamsModel']->values['updating'],'yes') === 0) + { + $this->m['ParamsModel']->query("delete from regsessions;"); + } + } +// echo $this->m['ParamsModel']->getQuery(); + + $this->loadScaffold('form',array('formMenu'=>'panel')); + $this->scaffold->loadForm('update',"adminparams/form"); + $this->scaffold->getFormValues('sanitizeHtml',1); + $data['scaffold'] = $this->scaffold->render(); + + $this->append($data); + $this->load('form'); + } + +} \ No newline at end of file diff --git a/admin/Application/Controllers/AdminpasswordController.php b/admin/Application/Controllers/AdminpasswordController.php new file mode 100644 index 0000000..bcaca95 --- /dev/null +++ b/admin/Application/Controllers/AdminpasswordController.php @@ -0,0 +1,88 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class AdminpasswordController extends Controller +{ + + function __construct($model, $controller, $queryString) + { + parent::__construct($model, $controller, $queryString); + + $this->load('header_back'); + $this->load('footer_back','last'); + + $this->helper('Menu','users','panel/main'); + $this->helper('Array'); + + $this->session('admin'); + $this->model('AdminusersModel'); + + $this->m['AdminusersModel']->setFields('password:sha1','none'); + + $this->m['AdminusersModel']->strongConditions['update'] = array('checkEqual'=>'password,confirmation'); + $this->m['AdminusersModel']->strongConditions['insert'] = array('checkEqual'=>'password,confirmation'); + + $this->m['AdminusersModel']->identifierName = 'id_user'; + + $this->setArgKeys(array('token:sanitizeAll'=>'token')); + } + + public function form() + { + $this->shift(0); + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $data['notice'] = null; + + $id = (int)$this->s['admin']->status['id_user']; + if (isset($_POST['updateAction'])) { + $pass = $this->s['admin']->getPassword(); + if (sha1($_POST['old']) === $pass) + { + $this->m['AdminusersModel']->updateTable('update',$id); + $data['notice'] = $this->m['AdminusersModel']->notice; + } + else + { + $data['notice'] = "
        Vecchia password sbagliata
        \n"; + } + } + $data['menù'] = $this->h['Menu']->render('panel'); + + $values = $this->m['AdminusersModel']->selectId($id); + + $action = array('updateAction'=>'save'); + $form = new Form_Form('adminpassword/form'.$this->viewStatus,$action); + $form->setEntry('old','Password'); + $form->entry['old']->labelString = 'old password:'; + $form->setEntry('password','Password'); + $form->setEntry('confirmation','Password'); + $data['form'] = $form->render($values,'old,password,confirmation'); + + $this->append($data); + $this->load('form'); + } + +} \ No newline at end of file diff --git a/admin/Application/Controllers/AdminregusersController.php b/admin/Application/Controllers/AdminregusersController.php new file mode 100644 index 0000000..b4ed6ed --- /dev/null +++ b/admin/Application/Controllers/AdminregusersController.php @@ -0,0 +1,101 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class AdminregusersController extends Controller { + + function __construct($model, $controller, $queryString) { + parent::__construct($model, $controller, $queryString); + + $this->load('header_back'); + $this->load('footer_back','last'); + + $this->session('admin'); + $this->model('UsersModel'); + + $this->modelName = 'UsersModel'; + + $this->helper('Menu','adminregusers','panel/main'); + +// $this->m['UsersModel']->setFields('username,e_mail,has_confirmed,deleted,creation_date','sanitizeAll'); + + $this->setArgKeys(array('page:forceNat'=>1,'has_confirmed:sanitizeAll'=>'undef','deleted:sanitizeAll'=>'undef','id_group:sanitizeAll'=>'undef','token:sanitizeAll'=>'token')); + } + + public function main() + { + $this->shift(); + + Params::$nullQueryValue = 'undef'; + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive','mainMenu'=>'panel','recordPerPage'=>30)); + + $whereClauseArray = array( + 'has_confirmed' => $this->viewArgs['has_confirmed'], + 'deleted' => $this->viewArgs['deleted'], + 'id_group' => $this->viewArgs['id_group'], + ); + $this->scaffold->setWhereQueryClause($whereClauseArray); + + $this->scaffold->loadMain('regusers:id_user,regusers:username,regusers:e_mail,regusers:has_confirmed,regusers:deleted,smartDate|regusers:creation_date','regusers:id_user','link'); + $this->scaffold->setHead('USER ID,USERNAME,E-MAIL,HAS CONFIRMED?,DELETED?,DATE'); + $data['scaffold'] = $this->scaffold->render(); + $this->append($data); + $this->load('main'); + } + + public function associate() + { + $this->shift(0); + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $this->m['UsersModel']->printAssError = 'yes'; + $this->m['UsersModel']->updateTable('associate,dissociate'); + + $data['notice'] = $this->m['UsersModel']->notice; + + $data['menu'] = $this->h['Menu']->render('back'); + + $data['action'] = $this->baseUrl.'/adminregusers/associate'.$this->viewStatus; + + $data['groups'] = $this->m['UsersModel']->getFieldArray('reggroups:id_group','reggroups:name'); + + //get the name of the user whose id is $_POST['id_user'] + $users = $this->m['UsersModel']->db->select('regusers','username','id_user='.(int)$_POST['id_user']); + $data['user'] = $users[0]['regusers']['username']; + + //get the groups inside which the user is inserted + $this->m['UsersModel']->setWhereQueryClause(array('id_user'=>(int)$_POST['id_user'])); + $this->m['UsersModel']->orderBy = 'reggroups.id_group desc'; + $data['groupsUser'] = $this->m['UsersModel']->getAll('Boxes'); +// echo $this->m['UsersModel']->getQuery(); + + $this->set($data); + $this->load('associate'); + } +} \ No newline at end of file diff --git a/admin/Application/Controllers/AdmintalkController.php b/admin/Application/Controllers/AdmintalkController.php new file mode 100644 index 0000000..b91912a --- /dev/null +++ b/admin/Application/Controllers/AdmintalkController.php @@ -0,0 +1,59 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class AdmintalkController extends Controller { + + function __construct($model, $controller, $queryString) { + parent::__construct($model, $controller, $queryString); + + $this->load('header_back'); + $this->load('footer_back','last'); + + $this->session('admin'); + $this->model('TalkModel'); + + $this->modelName = 'TalkModel'; + + $this->m['TalkModel']->setFields('title,message','sanitizeAll'); + + $this->setArgKeys(array('page:forceNat'=>1,'token:sanitizeAll'=>'token')); + } + + public function main() + { + $this->shift(); + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $this->loadScaffold('main',array('mainMenu'=>'panel')); + + $this->scaffold->loadMain('talk:id_talk,talk:id_hard,talk:title,getUserName|talk:created_by,smartDate|talk:creation_date','talk:id_talk','del'); + $this->scaffold->setHead('TALK ID,HARDWARE ID,TITLE,CREATED BY,DATE'); + $this->scaffold->update('del'); + $data['scaffold'] = $this->scaffold->render(); + $this->append($data); + $this->load('main'); + } + +} \ No newline at end of file diff --git a/admin/Application/Controllers/AdminusersController.php b/admin/Application/Controllers/AdminusersController.php new file mode 100644 index 0000000..0154c0c --- /dev/null +++ b/admin/Application/Controllers/AdminusersController.php @@ -0,0 +1,200 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class AdminusersController extends Controller +{ + + function __construct($model, $controller, $queryString) + { + parent::__construct($model, $controller, $queryString); + + $this->load('header_back'); + $this->load('footer_back','last'); + + $this->helper('Menu','adminusers','panel/main'); + $this->helper('Array'); + + $this->session('admin'); + $this->model(); + + $this->m['AdminusersModel']->setFields('username:sanitizeAll,password:sha1','none'); + + $this->m['AdminusersModel']->strongConditions['update'] = array('checkAlphaNum'=>'username','checkEqual'=>'password,confirmation'); + $this->m['AdminusersModel']->strongConditions['insert'] = array('checkAlphaNum'=>'username','checkEqual'=>'password,confirmation'); + + $this->m['AdminusersModel']->databaseConditions['insert'] = array('checkUnique'=>'username'); + $this->m['AdminusersModel']->databaseConditions['update'] = array('checkUniqueCompl'=>'username'); + + $this->setArgKeys(array('page:forceNat'=>1,'id_group:forceInt'=>'0','token:sanitizeAll'=>'token')); + Params::$nullQueryValue = '0'; + } + + public function login() + { + $data['action'] = Url::getRoot('adminusers/login'); + $data['notice'] = null; + + $this->s['admin']->checkStatus(); + if ($this->s['admin']->status['status']=='logged') + { + $this->s['admin']->redirect('logged'); + } + if (isset($_POST['username']) and isset($_POST['password'])) + { + $username = ctype_alnum($_POST['username']) ? sanitizeAll($_POST['username']) : ''; + $choice = $this->s['admin']->login($username,$_POST['password']); + + switch($choice) + { + case 'logged': + $this->redirect('panel/main',3,'You are already logged...'); + break; + case 'accepted': + $this->redirect('panel/main',3,'Hi '.$this->s['admin']->status['user'].'...'); + break; + case 'login-error': + $data['notice'] = '
        Wrong username or password
        '; + break; + case 'wait': + $data['notice'] = '
        You have to wait 5 seconds before you can try to login another time
        '; + break; + } + } + $this->set($data); + $this->load('login'); + } + + public function logout() + { + $res = $this->s['admin']->logout(); + if ($res == 'not-logged') { + $data['notice'] = "
        You can't logout because you are not logged..
        \n"; + + } else if ($res == 'was-logged') { + $data['notice'] = "
        Logout executed successfully!
        \n"; + + } else if ($res == 'error') { + + } + + $data['login'] = Url::getRoot('adminusers/login'); + $this->set($data); + $this->load('logout'); + } + + public function forceout($id) + { + $this->shift(1); + + $this->s['admin']->check(); + $data['menù'] = $this->h['Menu']->render('back'); + $data['notice'] = null; + $id = (int)$id; + if (strcmp($this->s['admin']->status['id_user'],$id) !== 0) + { + if ($this->s['admin']->forceOut($id)) + { + $data['notice'] = "
        User has been forced out..
        \n"; + } + else + { + $data['notice'] = "
        Error..
        \n"; + } + } + + $this->set($data); + $this->load('forceout'); + } + + public function main() + { + $this->shift(); + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $this->loadScaffold('main',array('popup'=>false)); + $this->scaffold->setWhereQueryClause(array('id_group'=>$this->viewArgs['id_group'])); + $this->scaffold->loadMain('adminusers:id_user,adminusers:username','adminusers:id_user','edit,del'); + $this->scaffold->addItem('simpleLink','adminusers/forceout/;adminusers:id_user;',null,'ForceOut'); + $this->scaffold->update('del'); + $data['scaffold'] = $this->scaffold->render(); + $this->set($data); + $this->load('main'); + } + + public function form($queryType = 'insert') + { + $this->shift(1); + + $this->s['admin']->check(); + + if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); + + $this->m['AdminusersModel']->updateTable('insert,update'); + + $this->loadScaffold('form'); + $this->scaffold->loadForm($queryType,"adminusers/form/$queryType"); + $this->scaffold->getFormValues('sanitizeHtml'); + $this->scaffold->setFormEntries('model',array('password'=>'Password')); + $this->scaffold->form->setEntry('confirmation','Password'); + $data['scaffold'] = $this->scaffold->render(null,'username,password,confirmation,id_user'); + + $this->set($data); + $this->load('main'); + } + +// public function associate() +// { +// $this->shift(0); +// +// $this->s['admin']->check(); +// +// if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); +// +// $this->m['AdminusersModel']->printAssError = 'yes'; +// $this->m['AdminusersModel']->updateTable('associate,dissociate'); +// +// $data['notice'] = $this->m['AdminusersModel']->notice; +// +// $data['menu'] = $this->h['Menu']->render('back'); +// +// $data['action'] = $this->baseUrl.'/adminusers/associate'.$this->viewStatus; +// +// $data['groups'] = $this->m['AdminusersModel']->getFieldArray('admingroups:id_group','admingroups:name'); +// +// //get the name of the user whose id is $_POST['id_user'] +// $users = $this->m['AdminusersModel']->db->select('adminusers','username','id_user='.(int)$_POST['id_user']); +// $data['user'] = $users[0]['adminusers']['username']; +// +// //get the groups inside which the user is inserted +// $this->m['AdminusersModel']->setWhereQueryClause(array('id_user'=>(int)$_POST['id_user'])); +// $this->m['AdminusersModel']->orderBy = 'admingroups.id_group desc'; +// $data['groupsUser'] = $this->m['AdminusersModel']->getAll('Boxes'); +// // echo $this->m['AdminusersModel']->getQuery(); +// +// $this->set($data); +// $this->load('associate'); +// } + +} \ No newline at end of file diff --git a/admin/Application/Controllers/PanelController.php b/admin/Application/Controllers/PanelController.php new file mode 100755 index 0000000..27eeacf --- /dev/null +++ b/admin/Application/Controllers/PanelController.php @@ -0,0 +1,43 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class PanelController extends Controller { + + public function __construct($model, $controller, $queryString) { + parent::__construct($model, $controller, $queryString); + $this->session('admin'); + $this->load('header_back'); + $this->load('footer_back','last'); + } + + public function main() + { + $this->s['admin']->check(); + $data['logged'] = $this->s['admin']->getUsersLogged(); + + $data['token'] = $this->s['admin']->status['token']; + + $this->set($data); + $this->load('panel'); + } + +} \ No newline at end of file diff --git a/admin/Application/Hooks/AfterInitialization.php b/admin/Application/Hooks/AfterInitialization.php new file mode 100644 index 0000000..a369309 --- /dev/null +++ b/admin/Application/Hooks/AfterInitialization.php @@ -0,0 +1,10 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Distributions +{ + + public static $allowed = array( + 'blag_90001' => 'BLAG 90001', + 'blag_120000' => 'BLAG 120000', + 'dragora_1_1' => 'Dragora 1.1', + 'dynebolic_2_5_2' => 'Dynebolic 2.5.2 DHORUBA', + 'gnewsense_2_3' => 'gNewSense 2.3 Deltah', + 'gnewsense_3_0' => 'gNewSense 3.0 Metad', + 'musix_2_0' => 'Musix GNU+Linux 2.0 R0', + 'trisquel_3_5' => 'Trisquel 3.5 Awen', + 'trisquel_4_0' => 'Trisquel 4.0 Taranis', + 'ututo_xs_2009' => 'UTUTO XS 2009', + 'ututo_xs_2010' => 'UTUTO XS 2010', + 'venenux_0_8' => 'VENENUX 0.8', + ); + + public static function getName($distList = '') + { + $returnString = null; + $returnArray = array(); + $distArray = explode(',',$distList); + foreach ($distArray as $dist) + { + $dist = trim($dist); + if (array_key_exists($dist,self::$allowed)) + { + $returnArray[] = self::$allowed[$dist]; + } + } + return implode("
        ",$returnArray); + } + + public static function check($distString) + { + $distArray = explode(',',$distString); + + $allowedArray = array_keys(self::$allowed); + + foreach ($distArray as $dist) + { + $dist = trim($dist); + if (!in_array($dist,$allowedArray)) return false; + } + + return true; + } + + public static function getFormHtml() + { + $str = "
        "; + $str .= "
        "; + foreach (self::$allowed as $value => $label) + { + $str .= "
        $label
        "; + } + $str .= "
        "; + $str .= ""; + $str .= ""; + $str .= "
        "; + + return $str; + } + +} \ No newline at end of file diff --git a/admin/Application/Include/hardware.php b/admin/Application/Include/hardware.php new file mode 100644 index 0000000..62dfa37 --- /dev/null +++ b/admin/Application/Include/hardware.php @@ -0,0 +1,216 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + + +class Hardware +{ + + public static $controllers = array('notebooks','wifi','videocards','printers','scanners'); //used by UsersController::login() + + public static $commYear = 'not-specified,2010,2009,2008,2007,2006,2005,2004,2003,2002,2001,2000,1999,1998,1997,1996,1995,1994,1993,1992'; + +} + +class Printer extends hardware +{ + public static $vendors = array( + "brother" => "brother", + "Canon" => "Canon", + "EPSON" => "EPSON", + "Lexmark" => "Lexmark", + "KONICA-MINOLTA" => "KONICA-MINOLTA", + "Hewlett-Packard" => "Hewlett-Packard", + "Panasonic" => "Panasonic", + "RICOH" => "RICOH", + "SAMSUNG" => "SAMSUNG", + "SHARP" => "SHARP", + "TOSHIBA" => "TOSHIBA", + "XEROX" => "XEROX", + ); + + public static $compatibility = array( + "A Full" => "A-Full", + "B Partial" => "B-Partial", + "C None" => "C-None", + ); + + public static $interface = "not-specified,USB,Serial,Parallel,Firewire,SCSI,Ethernet"; + + public static function vendorsList() + { + return implode(',',array_values(self::$vendors)); + } + + public static function compatibilityList() + { + return implode(',',array_values(self::$compatibility)); + } + +} + +class Wifi extends hardware +{ + public static $vendors = array( + "A-LINK" => "A-LINK", + "Airlink101" => "Airlink101", + "Belkin" => "Belkin", + "Broadcom" => "Broadcom", + "CANYON" => "CANYON", + "D-Link" => "D-Link", + "Hawking" => "Hawking", + "LevelOne" => "LevelOne", + "Linksys" => "Linksys", + "NEC" => "NEC", + "Netgear" => "Netgear", + "Ralink" => "Ralink", + "TOSHIBA" => "TOSHIBA", + "TP-LINK" => "TP-LINK", + ); + + public static $interface = "not-specified,USB,PCI,PCI-E,mini-PCI,mini-PCI-E,ExpressCard,PC-Card"; + + public static $wifiSelect = 'yes,no'; + + public static function vendorsList() + { + return implode(',',array_values(self::$vendors)); + } +} + +class Videocard extends hardware +{ + public static $vendors = array( + "ATI" => "ATI", + "NVIDIA" => "NVIDIA", + "Intel" => "Intel", + ); + + public static $videoSelect = array( + "works with 3D acceleration" => "works_with_3D", + "works, but without 3D acceleration" => "works_without_3D", + ); + + public static $videoReverse = array( + "works_with_3D" => "works with 3D acceleration", + "works_without_3D" => "works, but without 3D acceleration", + ); + + public static $interface = "not-specified,PCI,AGP,PCI-E,ISA"; + + public static function vendorsList() + { + return implode(',',array_values(self::$vendors)); + } + + public static function videoList() + { + return implode(',',array_values(self::$videoSelect)); + } +} + + +class Notebooks extends Hardware +{ + + public static $vendors = array( + "Acer" => "Acer", + "Apple" => "Apple", + "Asus" => "Asus", + "Compal Electronics" => "Compal-Electronics", + "COMPAQ" => "COMPAQ", + "Dell" => "Dell", + "emachines" => "emachines", + "FUJITSU" => "FUJITSU", + "Gateway" => "Gateway", + "Hewlett Packard" => "Hewlett-Packard", + "IBM" => "IBM", + "Lenovo" => "Lenovo", + "LG" => "LG", + "Philips" => "Philips", + "Panasonic" => "Panasonic", + "Sony" => "Sony", + "SAMSUNG" => "SAMSUNG", + "Thomson" => "Thomson", + "TOSHIBA" => "TOSHIBA", + ); + + public static $compatibility = array( + "A Platinum" => "A-platinum", + "B Gold" => "B-gold", + "C Silver" => "C-silver", + "D Bronze" => "D-bronze", + "E Garbage" => "E-garbage" + ); + + public static $subtypeSelect = 'notebook,netbook,not-specified'; + + public static $videoSelect = array( + "not specified" => 'not-specified', + "yes, with 3D acceleration" => "yes_with_3D", + "yes, but without 3D acceleration" => "yes_without_3D", + "it does not work" => "no", + ); + + public static $videoReverse = array( + "yes_with_3D" => "works with 3D acceleration", + "yes_without_3D" => "works but without 3D acceleration", + "no" => "it does not work", + 'not-specified' => "not specified how it works", + "" => "" + ); + + public static $wifiSelect = array( + "not specified" => 'not-specified', + 'yes' => 'yes', + 'no' => 'no', + 'there is no wifi card' => 'no-wifi-card', + ); + + public static $wifiReverse = array( + "yes" => "it works", + "no" => "it does not work", + 'not-specified' => "not specified how it works", + 'no-wifi-card' => 'there is no wifi card', + "" => "" + ); + + public static function videoList() + { + return implode(',',array_values(self::$videoSelect)); + } + + public static function wifiList() + { + return implode(',',array_values(self::$wifiSelect)); + } + + public static function vendorsList() + { + return implode(',',array_values(self::$vendors)); + } + + public static function compatibilityList() + { + return implode(',',array_values(self::$compatibility)); + } + +} \ No newline at end of file diff --git a/admin/Application/Include/languages.php b/admin/Application/Include/languages.php new file mode 100644 index 0000000..6262c3e --- /dev/null +++ b/admin/Application/Include/languages.php @@ -0,0 +1,192 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Lang +{ + public static $allowed = array('en','es','it'); + public static $current = 'en'; + + public static $complete = array( + 'en' => 'gb.png,English', + 'es' => 'es.png,Spanish', + 'it' => 'it.png,Italian', + ); + + public static function sanitize($lang = 'en') + { + return (in_array($lang,self::$allowed)) ? sanitizeAll($lang) : 'en'; + } +} + +class MyStrings +{ + + public static $view = array( + + 'en' => array( + + 'notebooks' => array( + + 'element' => 'notebook' + + ), + + 'wifi' => array( + + 'element' => 'wifi card' + + ), + + 'videocards'=> array( + + 'element' => 'video card' + + ), + + 'printers'=> array( + + 'element' => 'printer' + + ), + + 'scanners'=> array( + + 'element' => 'scanner' + + ), + ), + + 'fr' => array( + + 'notebooks' => array( + + 'element' => 'notebook' + + ), + + 'wifi' => array( + + 'element' => 'wifi card' + + ), + + 'videocards'=> array( + + 'element' => 'video card' + + ), + + 'printers'=> array( + + 'element' => 'printer' + + ), + + 'scanners'=> array( + + 'element' => 'scanner' + + ), + ), + + 'it' => array( + + 'notebooks' => array( + + 'element' => 'notebook' + + ), + + 'wifi' => array( + + 'element' => 'wifi card' + + ), + + 'videocards'=> array( + + 'element' => 'video card' + + ), + + 'printers'=> array( + + 'element' => 'printer' + + ), + + 'scanners'=> array( + + 'element' => 'scanner' + + ), + ), + + 'es' => array( + + 'notebooks' => array( + + 'element' => 'notebook' + + ), + + 'wifi' => array( + + 'element' => 'wifi card' + + ), + + 'videocards'=> array( + + 'element' => 'video card' + + ), + + 'printers'=> array( + + 'element' => 'printer' + + ), + + 'scanners'=> array( + + 'element' => 'scanner' + + ), + ), + ); + + //type => controller + public static $reverse = array( + 'notebook' => 'notebooks', + 'wifi' => 'wifi', + 'videocard' => 'videocards', + 'printer' => 'printers', + 'scanner' => 'scanners', + ); + + public static function getTypes() + { + return implode(',',array_keys(self::$reverse)); + } + +} \ No newline at end of file diff --git a/admin/Application/Include/myFunctions.php b/admin/Application/Include/myFunctions.php new file mode 100644 index 0000000..355c181 --- /dev/null +++ b/admin/Application/Include/myFunctions.php @@ -0,0 +1,318 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +function encodeUrl($url) +{ + $url = str_replace(' ','-',$url); + $url = urlencode($url); +// $url = html_entity_decode($url, ENT_QUOTES); +// $url = xml_encode($url); + return $url; +} + + +function smartDate($uglyDate = null, $lang = 'en') +{ + switch ($lang) + { + case 'en': + $smDate = date('H:i, d F Y',strtotime($uglyDate)); + break; + default: + $smDate = date('H:i, d F Y',strtotime($uglyDate)); + } + return $smDate; +} + +function sanitizeString($string) +{ + $string = preg_match('/^[a-zA-Z0-9\-\_\.\+\s]+$/',$string) ? sanitizeAll($string) : 'undef'; + return $string; +} + +function sanitizeAlphanum($string) +{ + $string = ctype_alnum($string) ? sanitizeAll($string) : 'undef'; + return $string; +} + + +function getOrderByClause($string) +{ + switch ($string) + { + case 'last-inserted': + $orderBy = 'hardware.id_hard desc'; + break; + case 'alphabetically': + $orderBy = 'model'; + break; + case 'alphabetically-desc': + $orderBy = 'model desc'; + break; + case 'compatibility': + $orderBy = 'compatibility'; + break; + case 'undef': + $orderBy = 'hardware.id_hard desc'; + break; + default: + $orderBy = 'hardware.id_hard desc'; + } + + return $orderBy; +} + + +// function isEqual($str1, $str2) +// { +// // $str1 = str_replace("\n",'',$str1); +// // $str1 = str_replace("\r",null,$str1); +// // $str2 = str_replace("\n",'',$str1); +// // $str2 = str_replace("\r",null,$str1); +// +// return (strcmp($str1,$str2) === 0) ? true : false; +// } +// +// function getNewKeys($array,$ovalue) +// { +// $res = array(); +// for ($i = 0; $i < count($array); $i++) +// { +// if (isEqual($array[$i],$ovalue)) $res[] = $i; +// // if (strcmp($keys[$i],$ovalue) === 0) $res[] = $i; +// } +// return $res; +// } + +function diff($old, $new){ + $maxlen = 0; + foreach($old as $oindex => $ovalue){ +// $nkeys = getNewKeys($new,$ovalue); + $nkeys = array_keys($new, $ovalue); + foreach($nkeys as $nindex){ + $matrix[$oindex][$nindex] = isset($matrix[$oindex - 1][$nindex - 1]) ? + $matrix[$oindex - 1][$nindex - 1] + 1 : 1; + if($matrix[$oindex][$nindex] > $maxlen){ + $maxlen = $matrix[$oindex][$nindex]; + $omax = $oindex + 1 - $maxlen; + $nmax = $nindex + 1 - $maxlen; + } + } + } + if($maxlen == 0) return array(array('d'=>$old, 'i'=>$new)); + return array_merge( + diff(array_slice($old, 0, $omax), array_slice($new, 0, $nmax)), + array_slice($new, $nmax, $maxlen), + diff(array_slice($old, $omax + $maxlen), array_slice($new, $nmax + $maxlen))); +} + +function htmlDiff($old, $new){ + $old = str_replace("\r\n"," \r\n ",$old); + $new = str_replace("\r\n"," \r\n ",$new); + + $ret = null; + $diff = diff(explode(' ', $old), explode(' ', $new)); + foreach($diff as $k){ + if(is_array($k)) + $ret .= (!empty($k['d'])?"".implode(' ',$k['d'])." ":''). + (!empty($k['i'])?"".implode(' ',$k['i'])." ":''); + else $ret .= $k . ' '; + } + return $ret; +} + + +//a cosa serve? +function applyBreaks($values,$fields) +{ + $fieldsArray = explode(',',$fields); + + foreach ($fieldsArray as $field) + { + if (array_key_exists($field,$values)) + { + $values[$field] = nl2br($values[$field]); + } + } + return $values; +} + + +function getLinkToUser($user) +{ + if (strstr($user,'__')) + { + return str_replace('__',null,$user); + } + else + { + return "$user"; + } +} + + + +//decode the text of the wiki +function decodeWikiText($string) +{ + + $string = preg_replace('/(\[hr\])/', '
        ',$string); + + $string = preg_replace_callback('/(\[a\])(.*?)(\[\/a\])/', 'linkTo',$string); + + $string = preg_replace_callback('/(\[a\])(.*?)\|(.*?)(\[\/a\])/', 'linkToWithText',$string); + + $string = preg_replace_callback('/(\[notebook\])([0-9]*?)(\[\/notebook\])/s', 'linkToNotebook',$string); + + $string = preg_replace_callback('/(\[wifi\])([0-9]*?)(\[\/wifi\])/s', 'linkToWifi',$string); + + $string = preg_replace_callback('/(\[videocard\])([0-9]*?)(\[\/videocard\])/s', 'linkToVideocard',$string); + + $string = preg_replace('/(\[b\])(.*?)(\[\/b\])/s', '${2}',$string); + + $string = preg_replace('/(\[u\])(.*?)(\[\/u\])/s', '${2}',$string); + + $string = preg_replace('/(\[i\])(.*?)(\[\/i\])/s', '${2}',$string); + + $string = preg_replace('/(\[del\])(.*?)(\[\/del\])/s', '${2}',$string); + + $string = preg_replace('/(\[\*\])(.*?)(\[\/\*\])/s', '
      3. ${2}
      4. ',$string); + + $string = preg_replace('/(\[list\])(.*?)(\[\/list\])/s', '
          ${2}
        ',$string); + + $string = preg_replace('/(\[enum\])(.*?)(\[\/enum\])/s', '
          ${2}
        ',$string); + + $string = preg_replace('/(\[code\])(.*?)(\[\/code\])/s', '
        ${2}
        ',$string); + + $string = preg_replace('/(\[p\])(.*?)(\[\/p\])/s', '

        ${2}

        ',$string); + + $string = preg_replace('/(\[h1\])(.*?)(\[\/h1\])/s', '
        ${2}
        ',$string); + + $string = preg_replace('/(\[h2\])(.*?)(\[\/h2\])/s', '
        ${2}
        ',$string); + + $string = preg_replace('/(\[h3\])(.*?)(\[\/h3\])/s', '
        ${2}
        ',$string); + + return $string; +} + +function checkUrl($url) +{ +// $match = '/^http\:\/\/(www\.)?[a-zA-Z0-9\-\_]+(\.[a-zA-Z0-9\-\_]+)?\.(com|net|it|info|org|eu|uk)((\/[a-zA-Z0-9\_\-\+]+)+[\/]?)?(\?([a-zA-Z0-9\_\-\+\s]+\=[a-zA-Z0-9\_\-\s\+\&]+)+)?(#[a-zA-Z0-9\_\-\+\s]+)?([\s]*)?$/'; + + $match = '/^http\:\/\/(www\.)?[a-zA-Z0-9\-\_]+(\.[a-zA-Z0-9\-\_]+)?\.(com|net|it|info|org|eu|uk|ca)((\/[a-zA-Z0-9\_\-\+]+)*(\/([a-zA-Z0-9\_\-\.\+]+\.(php|html|htm|asp|aspx|jsp|cgi))?)?)?(\?([a-zA-Z0-9\_\-\+\s]+\=[a-zA-Z0-9\_\-\s\+\&]+)+)?(#[a-zA-Z0-9\_\-\+\s]+)?([\s]*)?$/'; + + if (preg_match($match,$url)) + { + return true; + } + else + { + return false; + } +} + +function vitalizeUrl($string) +{ + if (checkUrl($string)) + { + return "".$string.""; + } + return $string; +} + +function linkTo($match) +{ + if (checkUrl($match[2])) + { + return "".$match[2].""; + } + else + { + return $match[0]; + } +} + +function linkToWithText($match) +{ + if (checkUrl($match[2])) + { + + return "".$match[3].""; + } + else + { + return $match[0]; + } +} + +//create the link to the wiki page of the notebook +function linkToNotebook($match) +{ + $hardware = new HardwareModel(); + $clean['id_hard'] = (int)$match[2]; + $name = encodeUrl($hardware->getTheModelName($clean['id_hard'])); + $href = "/notebooks/view/".Lang::$current."/".$clean['id_hard']."/$name"; + return (strcmp($name,'') !== 0) ? "".$name."" : $match[0]; +} + +//create the link to the wiki page of the wifi +function linkToWifi($match) +{ + $hardware = new HardwareModel(); + $clean['id_hard'] = (int)$match[2]; + $name = encodeUrl($hardware->getTheModelName($clean['id_hard'])); + $href = "/wifi/view/".Lang::$current."/".$clean['id_hard']."/$name"; + return (strcmp($name,'') !== 0) ? "".$name."" : $match[0]; +} + +//create the link to the wiki page of the videocard +function linkToVideocard($match) +{ + $hardware = new HardwareModel(); + $clean['id_hard'] = (int)$match[2]; + $name = encodeUrl($hardware->getTheModelName($clean['id_hard'])); + $href = "/videocards/view/".Lang::$current."/".$clean['id_hard']."/$name"; + return (strcmp($name,'') !== 0) ? "".$name."" : $match[0]; +} + +function getUserName($id_user = 0) +{ + $clean['id_user'] = (int)$id_user; + $u = new UsersModel(); + return $u->getUser($clean['id_user']); +} + +function getMotivation($row,$controller) +{ + if (strcmp($row['deletion']['object'],'duplication') === 0) + { + $clean['id_hard'] = (int)$row['deletion']['id_duplicate']; + $hardware = new HardwareModel(); + $name = encodeUrl($hardware->getTheModelName($clean['id_hard'])); + return "duplication of the model having id ".$clean['id_hard'].""; + } + else + { + return "".$row['deletion']['object'].""; + } +} diff --git a/admin/Application/Include/params.php b/admin/Application/Include/params.php new file mode 100644 index 0000000..43181bf --- /dev/null +++ b/admin/Application/Include/params.php @@ -0,0 +1,145 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class Website +{ + static public $generalMail = ""; + + static public $generalName = "h-admin"; + + static public $projectName = "h-admin"; + + static public $mailServer = ""; + + static public $mailPassword = ""; +} + +class Account +{ + + static public $confirmTime = 3600; + + static public function confirm($username,$e_mail,$id_user,$token) + { + require_once (ROOT.'/External/swiftmailer/lib/swift_required.php'); + + $clean['username'] = sanitizeAll($username); + $clean['id_user'] = (int)$id_user; + $clean['token'] = sanitizeAll($token); + + $siteName = Website::$generalName; + $siteMail = Website::$generalMail; + + $mess = "Hello,\n\nyou have registered an account to $siteName with the following data:\nusername: ".$clean['username']."\n\nin order to confirm the registration of the new account follow the link below\nhttp://".DOMAIN_NAME."/users/confirm/".Lang::$current."/".$clean['id_user']."/".$clean['token']."\n\nIf you don't want to confirm the account registration\nthen wait one hour and your username and e-mail will be deleted from the database\n\nIf you received this e-mail for error, please simply disregard this message"; + + $message = Swift_Message::newInstance()->setSubject('account registration to '.$siteName)->setFrom(array($siteMail => $siteName))->setTo(array($e_mail))->setBody($mess); + + //Create the Transport + $transport = Swift_SmtpTransport::newInstance(Website::$mailServer, 25)->setUsername(Website::$generalMail)->setPassword(Website::$mailPassword); + + //Create the Mailer using your created Transport + $mailer = Swift_Mailer::newInstance($transport); + + //Send the message + $result = $mailer->send($message); + + if ($result) + { + return true; + } + else + { + return false; + } + + } + + static public function sendnew($username,$e_mail,$id_user,$token) + { + require_once (ROOT.'/External/swiftmailer/lib/swift_required.php'); + + $clean['username'] = sanitizeAll($username); + $clean['id_user'] = (int)$id_user; + $clean['token'] = sanitizeAll($token); + + $siteName = Website::$generalName; + $siteMail = Website::$generalMail; + + $mess = "Hello,\n\nyou have requested a new password for your account at $siteName.\nYour username is:\n".$clean['username']."\n\nin order to obtain a new password for your account follow the link below\nhttp://".DOMAIN_NAME."/users/change/".Lang::$current."/".$clean['id_user']."/".$clean['token']."\n\nIf you don't want to change the password then disregard this mail\n"; + + $message = Swift_Message::newInstance()->setSubject('request a new password at '.$siteName)->setFrom(array($siteMail => $siteName))->setTo(array($e_mail))->setBody($mess); + + //Create the Transport + $transport = Swift_SmtpTransport::newInstance(Website::$mailServer, 25)->setUsername(Website::$generalMail)->setPassword(Website::$mailPassword); + + //Create the Mailer using your created Transport + $mailer = Swift_Mailer::newInstance($transport); + + //Send the message + $result = $mailer->send($message); + + if ($result) + { + return true; + } + else + { + return false; + } + + } + + static public function sendpassword($username,$e_mail,$password) + { + require_once (ROOT.'/External/swiftmailer/lib/swift_required.php'); + + $clean['username'] = sanitizeAll($username); + $clean['password'] = sanitizeAll($password); + + $siteName = Website::$generalName; + $siteMail = Website::$generalMail; + + $mess = "Hello,\n\nyou have requested a new password for your account to $siteName.\nYour username is:\n".$clean['username']."\n\nYour new password is:\n".$clean['password']."\n"; + + $message = Swift_Message::newInstance()->setSubject('get your new h-node.com account password ')->setFrom(array($siteMail => $siteName))->setTo(array($e_mail))->setBody($mess); + + //Create the Transport + $transport = Swift_SmtpTransport::newInstance(Website::$mailServer, 25)->setUsername(Website::$generalMail)->setPassword(Website::$mailPassword); + + //Create the Mailer using your created Transport + $mailer = Swift_Mailer::newInstance($transport); + + //Send the message + $result = $mailer->send($message); + + if ($result) + { + return true; + } + else + { + return false; + } + + } + +} \ No newline at end of file diff --git a/admin/Application/Models/AdminusersModel.php b/admin/Application/Models/AdminusersModel.php new file mode 100755 index 0000000..498a1a7 --- /dev/null +++ b/admin/Application/Models/AdminusersModel.php @@ -0,0 +1,37 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class AdminusersModel extends Model_Map { + + public function __construct() { + $this->_tables='adminusers,admingroups,adminusers_groups'; + $this->_idFields='id_user,id_group'; + $this->_where=array('id_group'=>'admingroups','id_user'=>'adminusers','name'=>'admingroups'); + $this->_popupItemNames = array('id_group'=>'name'); + $this->orderBy = 'adminusers.id_user desc'; + +// $this->on = "adminusers.id_user=adminusers_groups.id_user and admingroups.id_group=adminusers_groups.id_group"; + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/admin/Application/Models/BaseModel.php b/admin/Application/Models/BaseModel.php new file mode 100644 index 0000000..374be72 --- /dev/null +++ b/admin/Application/Models/BaseModel.php @@ -0,0 +1,68 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class BaseModel extends Model_Tree { + + public $type = ''; //device type + public $diffFields = array(); + + public function __construct() { + $this->_tables = 'hardware'; + $this->_idFields = 'id_hard'; + + $this->_where=array( + 'type' => 'hardware', + 'vendor' => 'hardware', + 'compatibility' => 'hardware', + 'comm_year' => 'hardware', + ); + + $this->orderBy = 'hardware.id_hard desc'; + parent::__construct(); + } + + public function checkType($id_hard = 0) + { + $clean['id_hard'] = (int)$id_hard; + $res = $this->db->select('hardware','type','id_hard='.$clean['id_hard']); + if (count($res) > 0) + { + return (strcmp($this->type,$res[0]['hardware']['type']) === 0 ) ? true : false; + } + return false; + } + + public function getDiffArray($oldArray, $newArray) + { + $diffArray = array(); + foreach ($this->diffFields as $field => $label) + { + if (array_key_exists($field,$oldArray) and array_key_exists($field,$newArray)) + { +// echo htmlDiff($oldArray[$field], $newArray[$field]); +// echo $oldArray[$field].$newArray[$field]; + $diffArray[$label] = htmlDiff($oldArray[$field], $newArray[$field]); + } + } + return $diffArray; + } +} \ No newline at end of file diff --git a/admin/Application/Models/BoxesModel.php b/admin/Application/Models/BoxesModel.php new file mode 100644 index 0000000..1f1a51a --- /dev/null +++ b/admin/Application/Models/BoxesModel.php @@ -0,0 +1,42 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class BoxesModel extends Model_Tree { + + public function __construct() { + $this->_tables = 'boxes'; + $this->_idFields = 'id_box'; + + parent::__construct(); + } + + public $formStruct = array( + 'entries' => array( + 'title' => array(), + 'message' => array('type'=>'Textarea'), + 'id_box' => array( + 'type' => 'Hidden' + ) + ), + ); + +} \ No newline at end of file diff --git a/admin/Application/Models/DeletionModel.php b/admin/Application/Models/DeletionModel.php new file mode 100644 index 0000000..0e67904 --- /dev/null +++ b/admin/Application/Models/DeletionModel.php @@ -0,0 +1,53 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class DeletionModel extends Model_Tree +{ + + public function __construct() + { + $this->_tables = 'deletion'; + $this->_idFields = 'id_del'; + +// $this->_where=array( +// 'id_hard' => 'talk' +// ); +// + $this->_popupItemNames = array( + 'object' => 'object', + ); + + $this->_popupLabels = array( + 'object' => 'OBJECT', + ); +// + $this->orderBy = 'deletion.id_del desc'; + + $this->strongConditions['insert'] = array( + "checkIsStrings|duplication,other" => 'object', + "+checkLength|500" => 'message' + ); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/admin/Application/Models/HardwareModel.php b/admin/Application/Models/HardwareModel.php new file mode 100644 index 0000000..48cab7e --- /dev/null +++ b/admin/Application/Models/HardwareModel.php @@ -0,0 +1,200 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class HardwareModel extends Model_Map { + + public $id_user = 0; + public $type = ''; //device type + public $lastId = 0; //the id of the last record inserted + + public $formStruct = array( + 'entries' => array( + 'deleted'=> array('type'=>'Select','options'=>'no,yes'), + 'id_hard' => array( + 'type' => 'Hidden' + ) + ), + ); + + public function __construct() { + $this->_tables='hardware,regusers,hardware_users'; + $this->_idFields='id_hard,id_user'; + $this->_where=array( + 'type' => 'hardware', + 'username' => 'regusers', + 'has_confirmed' => 'regusers', + 'deleted' => 'regusers', + '-deleted' => 'hardware' + ); + $this->orderBy = 'hardware.id_hard desc'; + $this->printAssError = "no"; + + $this->_popupItemNames = array( + 'type'=>'type', + 'ask_for_del'=>'ask_for_del', + '-deleted'=>'deleted', + ); + + $this->_popupLabels = array( + 'type'=>'TYPE', + 'ask_for_del'=>'ASK FOR DEL?', + '-deleted'=>'DELETED?', + ); + + $this->databaseConditions['insert'] = array( + 'checkUnique' => 'model', + ); + + $this->databaseConditions['update'] = array( + 'checkUniqueCompl' => 'model', + ); + + parent::__construct(); + } + + public function insert() + { + $this->values['created_by'] = (int)$this->id_user; + $this->values['updated_by'] = (int)$this->id_user; + $this->values['update_date'] = date('Y-m-d H:i:s'); + + //random ID + $randomId = md5(uniqid(mt_rand(),true)); + $this->values["type"] = $randomId; + + parent::insert(); + + //associate the user to the record + if ($this->queryResult) + { + $resId = $this->db->select("hardware","id_hard","type='$randomId'"); + $clean['id'] = $resId[0]['hardware']['id_hard']; + $this->lastId = $clean['id']; + $this->db->update('hardware','type',array($this->type),'id_hard='.$clean['id']); + + $this->associate($clean['id']); + } + + } + + public function update($id) + { + $clean['id'] = (int)$id; + + $this->values['updated_by'] = (int)$this->id_user; + $this->values['update_date'] = date('Y-m-d H:i:s'); + + //save the old fields in the revisions table + $this->setWhereQueryClause(array('id_hard' => $clean['id'])); + $oldStruct = $this->getFields($this->fields.',created_by,updated_by,update_date,type,id_hard'); + + if (count($oldStruct > 0)) + { + if (strcmp($oldStruct[0]['hardware']['type'],$this->type) === 0) + { + $oldValues = $oldStruct[0]['hardware']; + + $revisions = new RevisionsModel(); + $revisions->values = $oldValues; + if ($revisions->insert()) + { + parent::update($clean['id']); + if ($this->queryResult) + { + $this->lastId = $clean['id']; + if (!$this->checkAssociation($clean['id'],(int)$this->id_user)) + { + $this->associate($clean['id']); + } + } + } + } + } + } + + public function makeCurrent($id_rev) + { + $clean['id_rev'] = (int)$id_rev; + + $revisions = new RevisionsModel(); + + $clean['id_hard'] = (int)$revisions->getIdHard($clean['id_rev']); + + //save the old fields in the revisions table + $this->setWhereQueryClause(array('id_hard'=>$clean['id_hard'])); + $oldStruct = $this->getFields($this->fields.',created_by,updated_by,update_date,type,id_hard'); + + if (count($oldStruct > 0)) + { + if (strcmp($oldStruct[0]['hardware']['type'],$this->type) === 0) + { + //get the values of the revision + $revisions->setWhereQueryClause(array('id_rev'=>$clean['id_rev'])); + $newStruct = $revisions->getFields($this->fields.',created_by,updated_by,update_date,type,id_hard'); + + if (count($newStruct > 0)) + { + $revisions->values = $oldStruct[0]['hardware']; + + $this->values = $newStruct[0]['revisions']; + $this->values['updated_by'] = (int)$this->id_user; + $this->values['update_date'] = date('Y-m-d H:i:s'); + + if ($revisions->insert()) + { + if (parent::update($clean['id_hard'])) + { + $this->lastId = $clean['id_hard']; + if (!$this->checkAssociation($clean['id_hard'],(int)$this->id_user)) + { + $this->associate($clean['id_hard']); + } + } + } + } + } + else + { + $this->notice = "
        Wrong type..
        \n"; + } + } + + } + + public function associate($id_record) + { + return parent::associate((int)$id_record,(int)$this->id_user); + } + + //get the model name + public function getTheModelName($id) + { + $clean['id'] = (int)$id; + $this->setWhereQueryClause(array('id_hard' => $clean['id'])); + $res = $this->getFields('model'); + $name = count($res) > 0 ? $res[0]['hardware']['model'] : ''; + return $name; + } + + + +} \ No newline at end of file diff --git a/admin/Application/Models/HistoryModel.php b/admin/Application/Models/HistoryModel.php new file mode 100644 index 0000000..5f35d6b --- /dev/null +++ b/admin/Application/Models/HistoryModel.php @@ -0,0 +1,55 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class HistoryModel extends Model_Tree { + + public function __construct() { + $this->_tables = 'history'; + $this->_idFields = 'id_history'; + + $this->orderBy = 'history.id_history'; + + $this->_popupFunctions = array( + 'created_by'=> 'getUserName', + ); + + $this->_popupItemNames = array( + 'type' => 'type', + 'action' => 'action', + 'created_by'=> 'created_by', + ); + + $this->_popupLabels = array( + 'type' => 'TYPE', + 'action' => 'ACTION', + 'created_by'=> 'MODERATOR', + ); + + $this->_popupWhere = array( + 'created_by' => 'gr != "registered"', + ); + + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/admin/Application/Models/IssuesModel.php b/admin/Application/Models/IssuesModel.php new file mode 100644 index 0000000..3ad3a5c --- /dev/null +++ b/admin/Application/Models/IssuesModel.php @@ -0,0 +1,96 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class IssuesModel extends Model_Tree { + + public function __construct() { + $this->_tables = 'issues'; + $this->_idFields = 'id_issue'; + + $this->_onDelete = 'nocheck'; + + $this->_where = array( + 'priority' => 'issues', + 'status' => 'issues', + 'topic' => 'issues', + ); + + $this->_popupItemNames = array( + 'priority' => 'priority', + 'status' => 'status', + 'topic' => 'topic', + 'deleted' => 'deleted', + ); + + $this->_popupLabels = array( + 'priority' => 'PRIORITY', + 'status' => 'STATUS', + 'topic' => 'TOPIC', + 'deleted' => 'DELETED?', + ); + + $this->orderBy = 'issues.id_issue desc'; + + $this->strongConditions['insert'] = array( + "checkLength|99" => 'title', + "+checkLength|34" => 'topic', + "++checkLength|15" => 'priority', + "+++checkLength|5000" => 'message', + "checkisStrings|low,medium,high" => 'priority', + "+checkisStrings|maybe-a-bug,new-categories-of-hardware,add-a-vendor-name,other" => 'topic', + ); + + parent::__construct(); + } + + public $formStruct = array( + 'entries' => array( + 'title' => array(), + 'topic' => array( + 'type'=>'Select', + 'options'=>array( + 'Add a vendor name' => 'add-a-vendor-name', + 'Maybe a bug' => 'maybe-a-bug', + 'Add new categories of hardware' => 'new-categories-of-hardware', + 'Other' => 'other' + ), + ), + 'deleted'=> array( + 'type' => 'Select', + 'options' => 'no,yes', + ), + 'priority' => array('type'=>'Select','options'=>'low,medium,high'), + 'message' => array('type'=>'Textarea','idName'=>'bb_code'), + 'status' => array( + 'type' => 'Select', + 'options' => 'opened,closed' + ), + 'notice' => array( + 'type' => 'Textarea', + 'idName' => 'bb_code_notice', + ), + 'id_issue' => array( + 'type' => 'Hidden' + ) + ), + ); +} \ No newline at end of file diff --git a/admin/Application/Models/MessagesModel.php b/admin/Application/Models/MessagesModel.php new file mode 100644 index 0000000..2022b4a --- /dev/null +++ b/admin/Application/Models/MessagesModel.php @@ -0,0 +1,58 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class MessagesModel extends Model_Tree { + + public function __construct() { + $this->_tables = 'messages'; + $this->_idFields = 'id_mes'; + + $this->orderBy = 'messages.id_mes'; + + $this->_popupItemNames = array( + 'deleted' => 'deleted', + 'has_read' => 'has_read', + ); + + $this->_popupLabels = array( + 'deleted' => 'DELETED?', + 'has_read' => 'ALREADY READ?', + ); + + $this->strongConditions['insert'] = array( + "checkLength|5000" => 'message', + ); + + parent::__construct(); + } + + public $formStruct = array( + 'entries' => array( + 'deleted' => array('type'=>'Select','options'=>'no,yes'), + 'has_read' => array('type'=>'Select','options'=>'no,yes'), + 'message' => array('type'=>'Textarea','idName'=>'bb_code'), + 'id_mes' => array( + 'type' => 'Hidden' + ) + ), + ); +} \ No newline at end of file diff --git a/admin/Application/Models/NewsModel.php b/admin/Application/Models/NewsModel.php new file mode 100644 index 0000000..2f47800 --- /dev/null +++ b/admin/Application/Models/NewsModel.php @@ -0,0 +1,44 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class NewsModel extends Model_Tree { + + public function __construct() { + $this->_tables = 'news'; + $this->_idFields = 'id_news'; + + $this->orderBy = 'news.id_news desc'; + + parent::__construct(); + } + + public $formStruct = array( + 'entries' => array( + 'title' => array(), + 'message' => array('type'=>'Textarea','idName'=>'bb_code'), + 'id_news' => array( + 'type' => 'Hidden' + ) + ), + ); + +} \ No newline at end of file diff --git a/admin/Application/Models/NotebooksModel.php b/admin/Application/Models/NotebooksModel.php new file mode 100644 index 0000000..fda2c42 --- /dev/null +++ b/admin/Application/Models/NotebooksModel.php @@ -0,0 +1,71 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class NotebooksModel extends BaseModel { + + public $type = 'notebook'; //device type + + public $diffFields = array( + 'vendor' => 'vendor', + 'model' => 'model name', + 'subtype' => 'subtype (notebook or netbook) ?', + 'comm_year' => 'year of commercialization', + 'distribution' => 'distribution used', + 'compatibility' => 'compatibility level', + 'kernel' => 'kernel libre version', + 'video_card_type' => 'video card model', + 'video_card_works' => 'does the video card work?', + 'wifi_type' => 'wifi model', + 'wifi_works' => 'does the wifi card works?', + 'description' => 'model description', + ); + + public $fieldsWithBreaks = array('model description'); + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'compatibility' => 'compatibility', + 'comm_year' => 'comm_year', + 'subtype' => 'subtype', + ); + + $this->_popupLabels = array( + 'vendor' => 'vendor', + 'compatibility' => 'compatibility', + 'comm_year' => 'year', + 'subtype' => 'subtype', + ); + + $this->_popupWhere = array( + 'vendor' => 'type="notebook" and deleted="no"', + 'compatibility' => 'type="notebook" and deleted="no"', + 'comm_year' => 'type="notebook" and deleted="no"', + 'subtype' => 'type="notebook" and deleted="no"', + ); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/admin/Application/Models/ParamsModel.php b/admin/Application/Models/ParamsModel.php new file mode 100644 index 0000000..f30bca1 --- /dev/null +++ b/admin/Application/Models/ParamsModel.php @@ -0,0 +1,48 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ParamsModel extends Model_Tree { + + public function __construct() { + $this->_tables = 'params'; + $this->_idFields = 'id_par'; + + parent::__construct(); + } + + public $formStruct = array( + 'entries' => array( + 'updating' => array( + 'type'=>'Select', + 'options'=>'no,yes', + ), + 'boxes_xml' => array( + 'type'=>'Textarea', + 'labelString'=> 'Configuration xml', + ), + 'id_par' => array( + 'type' => 'Hidden' + ) + ), + ); + +} \ No newline at end of file diff --git a/admin/Application/Models/PrintersModel.php b/admin/Application/Models/PrintersModel.php new file mode 100644 index 0000000..104e214 --- /dev/null +++ b/admin/Application/Models/PrintersModel.php @@ -0,0 +1,70 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class PrintersModel extends BaseModel +{ + + public $type = 'printer'; //device type + + public $diffFields = array( + 'vendor' => 'vendor', + 'model' => 'model name', + 'pci_id' => 'VendorID:ProductID', + 'comm_year' => 'year of commercialization', + 'interface' => 'interface', + 'distribution' => 'distribution used', + 'compatibility' => 'compatibility', + 'kernel' => 'kernel libre version', + 'driver' => 'driver used', + 'description' => 'model description', + ); + + public $fieldsWithBreaks = array('model description'); + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'compatibility' => 'compatibility', + 'comm_year' => 'comm_year', + 'interface' => 'interface', + ); + + $this->_popupLabels = array( + 'vendor' => 'vendor', + 'compatibility' => 'compatibility', + 'comm_year' => 'year', + 'interface' => 'interface', + ); + + $this->_popupWhere = array( + 'vendor' => 'type="printer" and deleted="no"', + 'compatibility' => 'type="printer" and deleted="no"', + 'comm_year' => 'type="printer" and deleted="no"', + 'interface' => 'type="printer" and deleted="no"', + ); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/admin/Application/Models/ProfileModel.php b/admin/Application/Models/ProfileModel.php new file mode 100644 index 0000000..626e652 --- /dev/null +++ b/admin/Application/Models/ProfileModel.php @@ -0,0 +1,72 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ProfileModel extends Model_Tree { + + public function __construct() { + $this->_tables = 'profile'; + $this->_idFields = 'id_prof'; + + $this->_where=array( + 'username' => 'regusers', + 'has_confirmed' => 'regusers', + 'deleted' => 'regusers' + ); + + $this->softConditions['update'] = array( + "checkLength|90" => "real_name,where_you_are,fav_distro,birth_date,website|the fields 'real name', 'where_you_are', 'favorite distro', 'website' and 'birthdate' don't have to have more than 90 characters", + "checkLength|1000" => "projects,description|the fields 'projects' and 'description' don't have to have more than 1000 characters", + "checkIsStrings|no,yes" => "publish_mail" + ); + + parent::__construct(); + } + + public $formStruct = array( + + 'entries' => array( + 'real_name' => array('labelString'=>'Your real name'), + 'website' => array('labelString'=>'Your website address (add http://)'), + 'where_you_are' => array('labelString'=>'I\'m from...'), + 'birth_date' => array('labelString'=>'My birthdate'), + 'fav_distro' => array('labelString'=>'My favourite distribution'), + 'projects' => array( + 'type' => 'Textarea', + 'labelString'=>'Free software projects I\'m working on' + ), + 'publish_mail' => array( + 'type' => 'Select', + 'options' => 'no,yes', + 'labelString'=> 'Would you like to publish your e-mail address?' + ), + 'description' => array( + 'type' => 'Textarea', + 'labelString'=> 'Your description' + ), + 'id_prof' => array( + 'type' => 'Hidden' + ) + ), + + ); + +} \ No newline at end of file diff --git a/admin/Application/Models/RevisionsModel.php b/admin/Application/Models/RevisionsModel.php new file mode 100644 index 0000000..bbfa939 --- /dev/null +++ b/admin/Application/Models/RevisionsModel.php @@ -0,0 +1,50 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class RevisionsModel extends Model_Tree { + + public $id_user = 0; + public $type = ''; //device type + + public function __construct() { + $this->_tables='revisions'; + $this->_idFields='id_rev'; + + $this->_where=array( + 'id_hard'=>'revisions' + ); + + $this->orderBy = 'id_rev desc'; + + parent::__construct(); + } + + public function getIdHard($id_rev = 0) + { + $clean['id_rev'] = (int)$id_rev; + + $res = $this->db->select('revisions','id_hard','id_rev='.$clean['id_rev']); + + return (count($res) > 0) ? $res[0]['revisions']['id_hard'] : 0; + } + +} \ No newline at end of file diff --git a/admin/Application/Models/ScannersModel.php b/admin/Application/Models/ScannersModel.php new file mode 100644 index 0000000..978a26b --- /dev/null +++ b/admin/Application/Models/ScannersModel.php @@ -0,0 +1,70 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class ScannersModel extends BaseModel +{ + + public $type = 'scanner'; //device type + + public $diffFields = array( + 'vendor' => 'vendor', + 'model' => 'model name', + 'pci_id' => 'VendorID:ProductID', + 'comm_year' => 'year of commercialization', + 'interface' => 'interface', + 'distribution' => 'distribution used', + 'compatibility' => 'compatibility', + 'kernel' => 'kernel libre version', + 'driver' => 'driver used', + 'description' => 'model description', + ); + + public $fieldsWithBreaks = array('model description'); + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'compatibility' => 'compatibility', + 'comm_year' => 'comm_year', + 'interface' => 'interface', + ); + + $this->_popupLabels = array( + 'vendor' => 'vendor', + 'compatibility' => 'compatibility', + 'comm_year' => 'year', + 'interface' => 'interface', + ); + + $this->_popupWhere = array( + 'vendor' => 'type="scanner" and deleted="no"', + 'compatibility' => 'type="scanner" and deleted="no"', + 'comm_year' => 'type="scanner" and deleted="no"', + 'interface' => 'type="scanner" and deleted="no"', + ); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/admin/Application/Models/TalkModel.php b/admin/Application/Models/TalkModel.php new file mode 100644 index 0000000..cdf2fc6 --- /dev/null +++ b/admin/Application/Models/TalkModel.php @@ -0,0 +1,54 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class TalkModel extends Model_Tree { + + public function __construct() { + $this->_tables = 'talk'; + $this->_idFields = 'id_talk'; + + $this->_where=array( + 'id_hard' => 'talk' + ); + + $this->orderBy = 'talk.id_talk desc'; + + $this->strongConditions['insert'] = array( + "checkLength|99" => 'title', + "+checkNotEmpty" => 'message', + "++checkLength|5000" => 'message', + ); + + parent::__construct(); + } + + public $formStruct = array( + 'entries' => array( + 'title' => array(), + 'message' => array('type'=>'Textarea'), + 'id_talk' => array( + 'type' => 'Hidden' + ) + ), + ); + +} \ No newline at end of file diff --git a/admin/Application/Models/UsersModel.php b/admin/Application/Models/UsersModel.php new file mode 100755 index 0000000..3f55cfe --- /dev/null +++ b/admin/Application/Models/UsersModel.php @@ -0,0 +1,223 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class UsersModel extends Model_Map +{ + + public static $usersList = array(); + + public function __construct() + { + $this->_tables='regusers,reggroups,regusers_groups'; + $this->_idFields='id_user,id_group'; + + $this->_where=array( + 'id_group' => 'reggroups', + 'id_user' => 'regusers', + 'name' => 'reggroups', + 'confirmation_token'=> 'regusers', + 'has_confirmed' => 'regusers', + 'deleted' => 'regusers', + 'forgot_token' => 'regusers' + ); + + $this->_popupItemNames = array( + 'has_confirmed'=>'has_confirmed', + 'deleted'=>'deleted', + 'id_group'=>'name', + ); + + $this->_popupLabels = array( + 'has_confirmed'=>'HAS CONFIRMED?', + 'deleted'=>'DELETED?', + 'id_group'=>'GROUP' + ); + + $this->orderBy = 'regusers.id_user desc'; + + parent::__construct(); + + $this->deleteNotRegistered(); + } + + public function deleteNotRegistered() + { + $limit = time() - Account::$confirmTime; + $this->db->del('regusers','has_confirmed = 1 and deleted = "no" and creation_time < '.$limit); + } + + public function getUser($id_user = 0) + { + $clean['id_user'] = (int)$id_user; + if (array_key_exists($clean['id_user'],self::$usersList)) + { + return self::$usersList[$clean['id_user']]; + } + else + { + $user = $this->db->select('regusers','username,has_confirmed','id_user='.$clean['id_user']); + if (count($user) > 0) + { + $fuser = (strcmp($user[0]['regusers']['has_confirmed'],0) === 0) ? $user[0]['regusers']['username'] : "__".$user[0]['regusers']['username']; + self::$usersList[$clean['id_user']] = $fuser; + return $fuser; + } + else + { + return "__"; + } + } + } + + public function insert() + { + //create the token + $confirmation_token = md5(randString(20)); + $this->values['confirmation_token'] = $confirmation_token; + //has_confirmed flag + $this->values['has_confirmed'] = 1; + $this->values['creation_time'] = time(); + + //random ID + $randomId = md5(randString(5).uniqid(mt_rand(),true)); + $this->values["temp_field"] = $randomId; + + if (isset($_POST['captcha'])) + { + if ( strcmp($_SESSION['captchaString'],$_POST['captcha']) === 0 ) + { + + parent::insert(); + + if ($this->queryResult) + { + $resId = $this->db->select("regusers","id_user","temp_field='$randomId'"); + $clean['id_user'] = $resId[0]['regusers']['id_user']; + $this->db->update("regusers",'temp_field',array(''),'id_user='.$clean['id_user']); + + $result = Account::confirm($this->values['username'],$this->values['e_mail'],$clean['id_user'],$confirmation_token); + + if ($result) + { + $_SESSION['status'] = 'sent'; + } + else + { + $_SESSION['status'] = 'regerror'; + } + + $hed = new HeaderObj(DOMAIN_NAME); + $hed->redirect('users/notice/'.Lang::$current); + } + + } + else + { + $this->result = false; + $this->queryResult = false; + $this->notice = "
        Wrong captcha code...
        \n"; + } + } + } + + public function close($id_user) + { + $clean['id_user'] = (int)$id_user; + + $this->values = array( + 'has_confirmed' => 1, + 'deleted' => 'yes', + 'e_mail' => '' + ); + + if ($this->update($clean['id_user'])) + { + $_SESSION['status'] = 'deleted'; + + $profile = new ProfileModel(); + $res = $profile->db->select('profile','id_prof','created_by='.$clean['id_user']); + + if (count($res) > 0) + { + $clean['id_prof'] = (int)$res[0]['profile']['id_prof']; + $profile->values = array( + 'real_name' => '', + 'where_you_are' => '', + 'birth_date' => '', + 'fav_distro' => '', + 'projects' => '', + 'description' => '' + ); + $profile->update($clean['id_prof']); + } + } + + } + + public function forgot($username) + { + $clean['username'] = ctype_alnum($username) ? sanitizeAll($username) : ''; + + if (isset($_POST['captcha'])) + { + if ( strcmp($_SESSION['captchaString'],$_POST['captcha']) === 0 ) + { + $res = $this->db->select('regusers','e_mail,id_user','username="'.$clean['username'].'" and has_confirmed = 0 and deleted = "no"'); + if (count($res) > 0) + { + $e_mail = $res[0]['regusers']['e_mail']; + $id_user = (int)$res[0]['regusers']['id_user']; + $forgot_token = md5(randString(20)); + $forgot_time = time(); + $updateArray = array($forgot_token, $forgot_time); + $this->db->update('regusers','forgot_token,forgot_time',$updateArray,'username="'.$clean['username'].'"'); + + $result = Account::sendnew($clean['username'],$e_mail,$id_user,$forgot_token); + + if ($result) + { + $_SESSION['status'] = 'sent_new'; + } + else + { + $_SESSION['status'] = 'sent_new_error'; + } + + $hed = new HeaderObj(DOMAIN_NAME); + $hed->redirect('users/notice/'.Lang::$current,1); + + } + else + { + $this->notice = "
        the user does not exist
        \n"; + } + } + else + { + $this->result = false; + $this->queryResult = false; + $this->notice = "
        Wrong captcha code...
        \n"; + } + } + } + +} \ No newline at end of file diff --git a/admin/Application/Models/VideocardsModel.php b/admin/Application/Models/VideocardsModel.php new file mode 100644 index 0000000..3b96091 --- /dev/null +++ b/admin/Application/Models/VideocardsModel.php @@ -0,0 +1,66 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class VideocardsModel extends BaseModel +{ + + public $type = 'videocard'; //device type + + public $diffFields = array( + 'vendor' => 'vendor', + 'model' => 'model name', + 'pci_id' => 'VendorID:ProductID', + 'comm_year' => 'year of commercialization', + 'interface' => 'interface', + 'distribution' => 'distribution used', + 'kernel' => 'kernel libre version', + 'video_card_works' => 'how does it work with free software?', + 'description' => 'model description', + ); + + public $fieldsWithBreaks = array('model description'); + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'comm_year' => 'comm_year', + 'interface' => 'interface', + ); + + $this->_popupLabels = array( + 'vendor' => 'vendor', + 'comm_year' => 'year', + 'interface' => 'interface', + ); + + $this->_popupWhere = array( + 'vendor' => 'type="videocard" and deleted="no"', + 'comm_year' => 'type="videocard" and deleted="no"', + 'interface' => 'type="videocard" and deleted="no"', + ); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/admin/Application/Models/WifiModel.php b/admin/Application/Models/WifiModel.php new file mode 100644 index 0000000..d8c84aa --- /dev/null +++ b/admin/Application/Models/WifiModel.php @@ -0,0 +1,69 @@ +. + +if (!defined('EG')) die('Direct access not allowed!'); + +class WifiModel extends BaseModel +{ + + public $type = 'wifi'; //device type + + public $diffFields = array( + 'vendor' => 'vendor', + 'model' => 'model name', + 'pci_id' => 'VendorID:ProductID', + 'comm_year' => 'year of commercialization', + 'interface' => 'interface', + 'distribution' => 'distribution used', + 'kernel' => 'kernel libre version', + 'wifi_works' => 'does it work with free software?', + 'description' => 'model description', + ); + + public $fieldsWithBreaks = array('model description'); + + public function __construct() + { + + $this->_popupItemNames = array( + 'vendor' => 'vendor', + 'comm_year' => 'comm_year', + 'wifi_works' => 'wifi_works', + 'interface' => 'interface', + ); + + $this->_popupLabels = array( + 'vendor' => 'vendor', + 'comm_year' => 'year', + 'wifi_works' => 'does it work?', + 'interface' => 'interface', + ); + + $this->_popupWhere = array( + 'vendor' => 'type="wifi" and deleted="no"', + 'comm_year' => 'type="wifi" and deleted="no"', + 'wifi_works' => 'type="wifi" and deleted="no"', + 'interface' => 'type="wifi" and deleted="no"', + ); + + parent::__construct(); + } + +} \ No newline at end of file diff --git a/admin/Application/Modules/ModBase.php b/admin/Application/Modules/ModBase.php new file mode 100644 index 0000000..44d25a2 --- /dev/null +++ b/admin/Application/Modules/ModBase.php @@ -0,0 +1,41 @@ +simpleXmlObj->classname)) + { + return " class='".$this->simpleXmlObj->classname[0]."' "; + } + return null; + } + + //wrap the html with a
        + //look for the
        tag in the xml in order to set the class of the div + public function wrapDiv($string) + { + $divOpen = "
        "; + $divClose = "
        "; + + if (isset($this->simpleXmlObj->div)) + { + $divOpen = "
        "; + } + + return $divOpen . $string . $divClose; + } + +} \ No newline at end of file diff --git a/admin/Application/Modules/ModImage.php b/admin/Application/Modules/ModImage.php new file mode 100644 index 0000000..5a116b1 --- /dev/null +++ b/admin/Application/Modules/ModImage.php @@ -0,0 +1,45 @@ +simpleXmlObj->width)) + { + return " width = '" . $this->simpleXmlObj->width ."' "; + } + return null; + } + + public function heightPropertyString() + { + if (isset($this->simpleXmlObj->height)) + { + return " height = '" . $this->simpleXmlObj->height ."' "; + } + return null; + } + + public function titlePropertyString() + { + if (isset($this->simpleXmlObj->title)) + { + return " title = '" . $this->simpleXmlObj->title ."' "; + } + return null; + } + + public function render() + { + $link = "getHtmlClass().$this->widthPropertyString().$this->heightPropertyString().$this->titlePropertyString()." src='".$this->simpleXmlObj->src[0]."'>"; + return $this->wrapDiv($link)."\n"; + } + +} \ No newline at end of file diff --git a/admin/Application/Modules/ModLink.php b/admin/Application/Modules/ModLink.php new file mode 100644 index 0000000..011bc78 --- /dev/null +++ b/admin/Application/Modules/ModLink.php @@ -0,0 +1,18 @@ +getHtmlClass()." href='".$this->simpleXmlObj->href[0]."'>".$this->simpleXmlObj->text[0].""; + return $this->wrapDiv($link)."\n"; + } + +} \ No newline at end of file diff --git a/admin/Application/Modules/ModLinkimage.php b/admin/Application/Modules/ModLinkimage.php new file mode 100644 index 0000000..8e49bbf --- /dev/null +++ b/admin/Application/Modules/ModLinkimage.php @@ -0,0 +1,18 @@ +getHtmlClass()." href='".$this->simpleXmlObj->href[0]."'>widthPropertyString().$this->heightPropertyString().$this->titlePropertyString()." src='".$this->simpleXmlObj->src[0]."'>"; + return $this->wrapDiv($link)."\n"; + } + +} \ No newline at end of file diff --git a/admin/Application/Modules/ModRaw.php b/admin/Application/Modules/ModRaw.php new file mode 100644 index 0000000..4ed3226 --- /dev/null +++ b/admin/Application/Modules/ModRaw.php @@ -0,0 +1,18 @@ +simpleXmlObj->text[0]; + return $this->wrapDiv($link)."\n"; + } + +} \ No newline at end of file diff --git a/admin/Application/Modules/index.html b/admin/Application/Modules/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Application/Modules/index.html @@ -0,0 +1 @@ + diff --git a/admin/Application/Strings/Lang/It/DbCondStrings.php b/admin/Application/Strings/Lang/It/DbCondStrings.php new file mode 100644 index 0000000..4c985cd --- /dev/null +++ b/admin/Application/Strings/Lang/It/DbCondStrings.php @@ -0,0 +1,17 @@ +Il valore del campo ". $field ." è già presente. Per favore scegline un altro.
        \n"; + } + +} diff --git a/admin/Application/Strings/Lang/It/ModelStrings.php b/admin/Application/Strings/Lang/It/ModelStrings.php new file mode 100644 index 0000000..e02013b --- /dev/null +++ b/admin/Application/Strings/Lang/It/ModelStrings.php @@ -0,0 +1,19 @@ + "
        Errore nella query: contatta l'amministratore!
        \n", + "executed" => "
        operazione eseguita!
        \n", + "associate" => "
        Problema di integrità referenziale: il record è associato ad un record di una tabella figlia. Devi prima rompere l'associazione.
        \n", + "no-id" => "
        Non è definito alcun id della query
        \n", + "not-linked" => "
        Il record non è associato, non puoi dissociarlo
        ", + "linked" => "
        Il record è già associato, non puoi associarlo un'altra volta
        " + ); + +} diff --git a/admin/Application/Strings/Lang/It/UploadStrings.php b/admin/Application/Strings/Lang/It/UploadStrings.php new file mode 100644 index 0000000..57bcda6 --- /dev/null +++ b/admin/Application/Strings/Lang/It/UploadStrings.php @@ -0,0 +1,26 @@ + "
        Errore: verificare i permessi del file/directory
        \n", + "executed" => "
        Operazione eseguita!
        \n", + "not-child" => "
        La cartella selezionata non è una sotto directory della directory base
        \n", + "not-dir" => "
        La cartella selezionata non è una directory
        \n", + "not-empty" => "
        La cartella selezionata non è vuota
        \n", + "no-folder-specified" => "
        Non è stata specificata alcuna cartella
        \n", + "not-writable" => "
        La cartella non è scrivibile
        \n", + "not-writable-file" => "
        Il file non è scrivibile
        \n", + "dir-exists" => "
        Esiste già una directory con lo stesso nome
        \n", + "no-upload-file" => "
        Non c'è alcun file di cui fare l'upload
        \n", + "size-over" => "
        La dimensione del file è troppo grande
        \n", + "not-allowed-ext" => "
        L'estensione del file che vuoi caricare non è consentita
        \n", + "file-exists" => "
        Esiste già un file con lo stesso nome
        \n", + ); + +} diff --git a/admin/Application/Strings/Lang/It/ValCondStrings.php b/admin/Application/Strings/Lang/It/ValCondStrings.php new file mode 100644 index 0000000..a54c650 --- /dev/null +++ b/admin/Application/Strings/Lang/It/ValCondStrings.php @@ -0,0 +1,69 @@ +". $element ." non è stato definito
        \n"; + } + + //if the elements are not equal + public function getNotEqualResultString($element) + { + return "
        Differenti valori: $element
        \n"; + } + + //if the element is not alphabetic + public function getNotAlphabeticResultString($element) + { + return "
        ".$element." deve essere una stringa di soli caratteri alfabetici
        \n"; + } + + //if the element is not alphanumeric + public function getNotAlphanumericResultString($element) + { + return "
        ".$element." deve essere una stringa di soli caratteri alfanumerici
        \n"; + } + + //if the element is not a decimal digit + public function getNotDecimalDigitResultString($element) + { + return "
        ".$element." deve essere una stringa di soli numeri decimali
        \n"; + } + + //if the element has the mail format + public function getNotMailFormatResultString($element) + { + return "
        ".$element." non sembra un indirizzo e-mail
        \n"; + } + + //if the element is numeric + public function getNotNumericResultString($element) + { + return "
        ".$element." deve essere un numero
        \n"; + } + + //if the element (string) length exceeds the value of characters (defined by $maxLength) + public function getLengthExceedsResultString($element,$maxLength) + { + return "
        ".$element." non deve essere composto da più di $maxLength caratteri
        \n"; + } + + //if the element is one of the strings indicated by $stringList (a comma-separated list of strings) + public function getIsForbiddenStringResultString($element,$stringList) + { + return "
        ".$element." non può assumere uno dei seguenti valori: $stringList
        \n"; + } + + //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings) + public function getIsNotStringResultString($element,$stringList) + { + return "
        ".$element." deve assumere uno dei seguenti valori: $stringList
        \n"; + } +} diff --git a/admin/Application/Strings/Lang/It/index.html b/admin/Application/Strings/Lang/It/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Application/Strings/Lang/It/index.html @@ -0,0 +1 @@ + diff --git a/admin/Application/Strings/Lang/index.html b/admin/Application/Strings/Lang/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Application/Strings/Lang/index.html @@ -0,0 +1 @@ + diff --git a/admin/Application/Strings/index.html b/admin/Application/Strings/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Application/Strings/index.html @@ -0,0 +1 @@ + diff --git a/admin/Application/Views/Adminboxes/main.php b/admin/Application/Views/Adminboxes/main.php new file mode 100644 index 0000000..7d71709 --- /dev/null +++ b/admin/Application/Views/Adminboxes/main.php @@ -0,0 +1,25 @@ + + +. + +?> + + \ No newline at end of file diff --git a/admin/Application/Views/Admindeletion/main.php b/admin/Application/Views/Admindeletion/main.php new file mode 100644 index 0000000..7d71709 --- /dev/null +++ b/admin/Application/Views/Admindeletion/main.php @@ -0,0 +1,25 @@ + + +. + +?> + + \ No newline at end of file diff --git a/admin/Application/Views/Adminhardware/ask.php b/admin/Application/Views/Adminhardware/ask.php new file mode 100644 index 0000000..1368dca --- /dev/null +++ b/admin/Application/Views/Adminhardware/ask.php @@ -0,0 +1,53 @@ + + +. + +?> + + + +
        + + +
        +
        + id hardware to delete: +
        +
        + requested by: +
        +
        + at: +
        +
        + why: +
        +
        + hardware duplicated: +
        +
        + message: +
        +
        + +
        \ No newline at end of file diff --git a/admin/Application/Views/Adminhardware/main.php b/admin/Application/Views/Adminhardware/main.php new file mode 100644 index 0000000..7d71709 --- /dev/null +++ b/admin/Application/Views/Adminhardware/main.php @@ -0,0 +1,25 @@ + + +. + +?> + + \ No newline at end of file diff --git a/admin/Application/Views/Adminhistory/main.php b/admin/Application/Views/Adminhistory/main.php new file mode 100644 index 0000000..7d71709 --- /dev/null +++ b/admin/Application/Views/Adminhistory/main.php @@ -0,0 +1,25 @@ + + +. + +?> + + \ No newline at end of file diff --git a/admin/Application/Views/Adminissues/main.php b/admin/Application/Views/Adminissues/main.php new file mode 100644 index 0000000..1df2110 --- /dev/null +++ b/admin/Application/Views/Adminissues/main.php @@ -0,0 +1,36 @@ + + +. + +?> + + + + \ No newline at end of file diff --git a/admin/Application/Views/Adminmessages/main.php b/admin/Application/Views/Adminmessages/main.php new file mode 100644 index 0000000..0ce6983 --- /dev/null +++ b/admin/Application/Views/Adminmessages/main.php @@ -0,0 +1,35 @@ + + +. + +?> + + + + \ No newline at end of file diff --git a/admin/Application/Views/Adminnews/main.php b/admin/Application/Views/Adminnews/main.php new file mode 100644 index 0000000..5b603f2 --- /dev/null +++ b/admin/Application/Views/Adminnews/main.php @@ -0,0 +1,35 @@ + + +. + +?> + + + + \ No newline at end of file diff --git a/admin/Application/Views/Adminparams/form.php b/admin/Application/Views/Adminparams/form.php new file mode 100755 index 0000000..7d71709 --- /dev/null +++ b/admin/Application/Views/Adminparams/form.php @@ -0,0 +1,25 @@ + + +. + +?> + + \ No newline at end of file diff --git a/admin/Application/Views/Adminpassword/form.php b/admin/Application/Views/Adminpassword/form.php new file mode 100755 index 0000000..640b6e5 --- /dev/null +++ b/admin/Application/Views/Adminpassword/form.php @@ -0,0 +1,9 @@ + + + + + + + \ No newline at end of file diff --git a/admin/Application/Views/Adminregusers/associate.php b/admin/Application/Views/Adminregusers/associate.php new file mode 100644 index 0000000..9350d3a --- /dev/null +++ b/admin/Application/Views/Adminregusers/associate.php @@ -0,0 +1,54 @@ + + +. + +?> + + + + + +
        + Associate the user to some groups:

        +
        + + + + + '> + +
        + +

        +
        + The user is inserted inside the following Groups: +
          + +
        • + +
        +
        \ No newline at end of file diff --git a/admin/Application/Views/Adminregusers/main.php b/admin/Application/Views/Adminregusers/main.php new file mode 100644 index 0000000..7d71709 --- /dev/null +++ b/admin/Application/Views/Adminregusers/main.php @@ -0,0 +1,25 @@ + + +. + +?> + + \ No newline at end of file diff --git a/admin/Application/Views/Admintalk/main.php b/admin/Application/Views/Admintalk/main.php new file mode 100644 index 0000000..7d71709 --- /dev/null +++ b/admin/Application/Views/Admintalk/main.php @@ -0,0 +1,25 @@ + + +. + +?> + + \ No newline at end of file diff --git a/admin/Application/Views/Adminusers/associate.php b/admin/Application/Views/Adminusers/associate.php new file mode 100644 index 0000000..b0f6672 --- /dev/null +++ b/admin/Application/Views/Adminusers/associate.php @@ -0,0 +1,54 @@ + + +. + +?> + + + + + +
        + Associate the user to some groups:

        +
        + + + + + '> + +
        + +

        +
        + The user is inserted inside the following Groups: +
          + +
        • + +
        +
        \ No newline at end of file diff --git a/admin/Application/Views/Adminusers/forceout.php b/admin/Application/Views/Adminusers/forceout.php new file mode 100755 index 0000000..f4b901d --- /dev/null +++ b/admin/Application/Views/Adminusers/forceout.php @@ -0,0 +1,29 @@ + + +. + +?> + + + + diff --git a/admin/Application/Views/Adminusers/login.php b/admin/Application/Views/Adminusers/login.php new file mode 100755 index 0000000..c005f35 --- /dev/null +++ b/admin/Application/Views/Adminusers/login.php @@ -0,0 +1,45 @@ + + +. + +?> + + + +
        + + + + + + + + + + + +
        Username
        Password
        + + +
        diff --git a/admin/Application/Views/Adminusers/logout.php b/admin/Application/Views/Adminusers/logout.php new file mode 100755 index 0000000..81ec4db --- /dev/null +++ b/admin/Application/Views/Adminusers/logout.php @@ -0,0 +1,29 @@ + + +. + +?> + +
        +
        + + +
        \ No newline at end of file diff --git a/admin/Application/Views/Adminusers/main.php b/admin/Application/Views/Adminusers/main.php new file mode 100644 index 0000000..7d71709 --- /dev/null +++ b/admin/Application/Views/Adminusers/main.php @@ -0,0 +1,25 @@ + + +. + +?> + + \ No newline at end of file diff --git a/admin/Application/Views/footer_back.php b/admin/Application/Views/footer_back.php new file mode 100755 index 0000000..fa9269c --- /dev/null +++ b/admin/Application/Views/footer_back.php @@ -0,0 +1,27 @@ + + +. + +?> + +
        + + diff --git a/admin/Application/Views/header_back.php b/admin/Application/Views/header_back.php new file mode 100755 index 0000000..862847d --- /dev/null +++ b/admin/Application/Views/header_back.php @@ -0,0 +1,94 @@ + + + +. + +?> + + + Admin + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
        + diff --git a/admin/Application/Views/panel.php b/admin/Application/Views/panel.php new file mode 100755 index 0000000..1fff0b6 --- /dev/null +++ b/admin/Application/Views/panel.php @@ -0,0 +1,55 @@ + + +. + +?> + + \ No newline at end of file diff --git a/admin/Application/index.html b/admin/Application/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Application/index.html @@ -0,0 +1 @@ + diff --git a/admin/COPYRIGHT.txt b/admin/COPYRIGHT.txt new file mode 100755 index 0000000..63dbdc9 --- /dev/null +++ b/admin/COPYRIGHT.txt @@ -0,0 +1,24 @@ +EasyGiant is a PHP framework for creating and managing dynamic content +Copyright (C) 2009 - 2010 Antonio Gallo + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + + +EasyGiant includes works distributed under the licenses listed below. + +FreeFont +------- +License: GNU GPL version 3 or later +Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +link: http://savannah.gnu.org/projects/freefont/ diff --git a/admin/Config/Autoload.php b/admin/Config/Autoload.php new file mode 100644 index 0000000..56bb9f6 --- /dev/null +++ b/admin/Config/Autoload.php @@ -0,0 +1,23 @@ + +The folowing list cites the other contributors that contributed to +particular ISO 10646 blocks. + +* URW++ Design & Development GmbH + + Basic Latin (U+0041-U+007A) + Latin-1 Supplement (U+00C0-U+00FF) (most) + Latin Extended-A (U+0100-U+017F) + Spacing Modifier Letters (U+02B0-U+02FF) + Mathematical Operators (U+2200-U+22FF) (parts) + Block Elements (U+2580-U+259F) + Dingbats (U+2700-U+27BF) + +* Yannis Haralambous and John + Plaice + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + Greek (U+0370-U+03FF) + Armenian (U+0530-U+058F) + Hebrew (U+0590-U+05FF) + Arabic (U+0600-U+06FF) + Currency Symbols (U+20A0-U+20CF) + Arabic Presentation Forms-A (U+FB50-U+FDFF) + Arabic Presentation Forms-B (U+FE70-U+FEFF) + +* Young U. Ryu + + Arrows (U+2190-U+21FF) + Mathematical Symbols (U+2200-U+22FF) + Mathematical Alphanumeric Symbols (U+1D400-U+1D7FF) + +* Valek Filippov + + Cyrillic (U+0400-U+04FF) + +* Wadalab Kanji Comittee + + Hiragana (U+3040-U+309F) + Katakana (U+30A0-U+30FF) + +* Angelo Haritsis + + Greek (U+0370-U+03FF) + +* Yannis Haralambous and Virach Sornlertlamvanich + + Thai (U+0E00-U+0E7F) + +* Shaheed R. Haque + + Bengali (U+0980-U+09FF) + +* Sam Stepanyan + + Armenian (U+0530-U+058F) + +* Mohamed Ishan + + Thaana (U+0780-U+07BF) + +* Sushant Kumar Dash + + Oriya (U+0B00-U+0B7F) + +* Harsh Kumar + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + +* Prasad A. Chodavarapu + + Telugu (U+0C00-U+0C7F) + +* Frans Velthuis and Anshuman Pandey + + + Devanagari (U+0900-U+097F) + +* Hardip Singh Pannu + + Gurmukhi (U+0A00-U+0A7F) + +* Jeroen Hellingman + + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + +* Thomas Ridgeway + + Tamil (U+0B80-U+0BFF) + +* Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>, + Prof. Dr. Manfred Kudlek , Olaf + Kummer , and Jochen Metzinger + + Ethiopic (U+1200-U+137F) + +* Maxim Iorsh + + Hebrew (U+0590-U+05FF) + +* Vyacheslav Dikonov + + Syriac (U+0700-U+074A) + Braille (U+2800-U+28FF) + +* Panayotis Katsaloulis + + Greek Extended (U+1F00-U+1FFF) + +* M.S. Sridhar + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Tamil (U+0B80-U+0BFF) + Telugu (U+0C00-U+0C7F) + Kannada (U+0C80-U+0CFF) + Malayalam (U+0D00-U+0D7F) + +* DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt + + + Sinhala (U+0D80-U+0DFF) + +* Dan Shurovich Chirkov + + Cyrillic (U+0400-U+04FF) + +* Abbas Izad + + Arabic (U+0600-U+06FF) + Arabic Presentation Forms-A (U+FB50-U+FDFF) + Arabic Presentation Forms-B (U+FE70-U+FEFF) + +* Denis Jacquerye + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + +* K.H. Hussain and R. Chitrajan + + Malayalam (U+0D00-U+0D7F) + +* Solaiman Karim and Omi Azad + + Bengali (U+0980-U+09FF) + +* Sonali Sonania and Monika Shah + + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + +* Pravin Satpute , Bageshri Salvi + , Rahul Bhalerao and Sandeep Shedmake + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + Tamil (U+0B80-U+0BFF) + +* Kulbir Singh Thind + + Gurmukhi (U+0A00-U+0A7F) + +* Gia Shervashidze + + Georgian (U+10A0-U+10FF) + +* Daniel Johnson + + Cherokee (U+13A0-U+13FF) + +* George Douros + + Gothic (U+10330-U+1034F) + Phoenecian (U+10900-U+1091F) + Byzantine Musical Symbols (U+1D000-U+1D0FF) + Western Musical Symbols (U+1D100-U+1D1DF) + Mathematical Alphanumeric Symbols (U+1D400-U+1D7FF) + Mah Jong Tiles (U+1F000-U+1F02B) + Dominoes (U+1F030-U+1F093) + +* Steve White + Coptic (U+2C80-U+2CFF) + +* Primož Peterlin + maintained FreeFont for several years, and is thanked for all his work. + +Please see the CREDITS file for details on who contributed particular +subsets of the glyphs in font files. + +-------------------------------------------------------------------------- +$Id: AUTHORS,v 1.18 2009/01/04 15:57:54 Stevan_White Exp $ diff --git a/admin/External/Fonts/FreeFont/COPYING b/admin/External/Fonts/FreeFont/COPYING new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/admin/External/Fonts/FreeFont/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/admin/External/Fonts/FreeFont/CREDITS b/admin/External/Fonts/FreeFont/CREDITS new file mode 100644 index 0000000..0f47440 --- /dev/null +++ b/admin/External/Fonts/FreeFont/CREDITS @@ -0,0 +1,528 @@ +-*- mode:text; coding:utf-8; -*- + GNU FreeFont Credits + ==================== + +This file lists contributors and contributions to the GNU FreeFont project. + + +* URW++ Design & Development GmbH + +URW++ donated a set of 35 core PostScript Type 1 fonts to the +Ghostscript project , to be available +under the terms of GNU General Public License (GPL). + + Basic Latin (U+0041-U+007A) + Latin-1 Supplement (U+00C0-U+00FF) + Latin Extended-A (U+0100-U+017F) + Spacing Modifier Letters (U+02B0-U+02FF) + Mathematical Operators (U+2200-U+22FF) + Block Elements (U+2580-U+259F) + Dingbats (U+2700-U+27BF) + + +* Yannis Haralambous and John + Plaice + +Yannis Haralambous and John Plaice are the authors of Omega typesetting +system, . Omega is an extension of TeX. +Its first release, aims primarily at improving TeX's multilingual abilities. +In Omega all characters and pointers into data-structures are 16-bit wide, +instead of 8-bit, thereby eliminating many of the trivial limitations of TeX. +Omega also allows multiple input and output character sets, and uses +programmable filters to translate from one encoding to another, to perform +contextual analysis, etc. Internally, Omega uses the universal 16-bit Unicode +standard character set, based on ISO-10646. These improvements not only make +it a lot easier for TeX users to cope with multiple or complex languages, +like Arabic, Indic, Khmer, Chinese, Japanese or Korean, in one document, but +will also form the basis for future developments in other areas, such as +native color support and hypertext features. ... Fonts for UT1 (omlgc family) +and UT2 (omah family) are under development: these fonts are in PostScript +format and visually close to Times and Helvetica font families. +Omega fonts are available subject to GPL + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + Greek (U+0370-U+03FF) + Armenian (U+0530-U+058F) + Hebrew (U+0590-U+05FF) + Arabic (U+0600-U+06FF) + Currency Symbols (U+20A0-U+20CF) + Arabic Presentation Forms-A (U+FB50-U+FDFF) + Arabic Presentation Forms-B (U+FE70-U+FEFF) + +Current info: + +* Valek Filippov + +Valek Filippov added Cyrillic glyphs and composite Latin Extended A to +the whole set of the abovementioned URW set of 35 PostScript core fonts, +. The fonts are available under GPL. + + Latin Extended-A (U+0100-U+017F) + Cyrillic (U+0400-U+04FF) + + +* Wadalab Kanji Comittee + +Between April 1990 and March 1992, Wadalab Kanji Comittee put together +a series of scalable font files with Japanese scripts, in four forms: +Sai Micho, Chu Mincho, Cho Kaku and Saimaru. The font files are +written in custom file format, while tools for conversion into +Metafont and PostScript Type 1 are also supplied. The Wadalab Kanji +Comittee has later been dismissed, and the resulting files can be now +found on the FTP server of the Depertment of Mathematical Engineering +and Information Physics, Faculty of Engineering, University of Tokyo +. + + Hiragana (U+3040-U+309F) + Katakana (U+30A0-U+30FF) + + +* Young U. Ryu + +Young Ryu is the author of Txfonts, a set of mathematical symbols +designed to accompany text typeset in Times or its variants. In the +documentation, Young adresses the design of mathematical symbols: "The +Adobe Times fonts are thicker than the CM fonts. Designing math fonts +for Times based on the rule thickness of Times = , , + , / , < , +etc. would result in too thick math symbols, in my opinion. In the TX +fonts, these glyphs are thinner than those of original Times +fonts. That is, the rule thickness of these glyphs is around 85% of +that of the Times fonts, but still thicker than that of the CM fonts." +TX fonts are are distributed under the GNU public license (GPL). +. + + Arrows (U+2190-U+21FF) + Mathematical Symbols (U+2200-U+22FF) + + +* Angelo Haritsis + +Angelo Haritsis has compiled a set of Greek Type 1 fonts, available on +. +The glyphs from this source has been used to compose Greek glyphs in +FreeSans and FreeMono. + +Angelo's licence says: "You can enjoy free use of these fonts for +educational or commercial purposes. All derived works should include +this paragraph. If you want to change something please let me have +your changes (via email) so that they can go into the next +version. You can also send comments etc to the above address." + + Greek (U+0370-U+03FF) + + +* Yannis Haralambous and Virach Sornlertlamvanich + +In 1999, Yannis Haralambous and Virach Sornlertlamvanich made a set of +glyphs covering the Thai national standard Nf3, in both upright and +slanted shape. The collection of glyphs have been made part of GNU +intlfonts 1.2 package and is available under the GPL at +. + + Thai (U+0E00-U+0E7F) + + +* Shaheed R. Haque + +Shaheed Haque has developed a basic set of basic Bengali glyphs +(without ligatures), using ISO10646 encoding. They are available under +the XFree86 license at . + +Copyright (C) 2001 S.R.Haque . All Rights Reserved. + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL S.R.HAQUE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of S.R.Haque shall not be +used in advertising or otherwise to promote the sale, use or other +dealings in this Software without prior written authorization from +S.R.Haque. + + Bengali (U+0980-U+09FF) + + +* Sam Stepanyan + +Sam Stepanyan created a set of Armenian sans serif glyphs visually +compatible with Helvetica or Arial. Available on +. On +2002-01-24, Sam writes: "Arial Armenian font is free for +non-commercial use, so it is OK to use under GPL license." + + Armenian (U+0530-U+058F) + + +* Mohamed Ishan + +Mohamed Ishan has started a Thaana Unicode Project + and among other things created a +couple of Thaana fonts, available under FDL or BDF license. + + Thaana (U+0780-U+07BF) + + +* Sushant Kumar Dash (*) + +Sushant Dash has created a font in his mother tongue, Oriya. As he +states on his web page : +"Please feel free to foreword this mail to your Oriya friends. No +copyright law is applied for this font. It is totally free!!! Feel +free to modify this using any font editing tools. This is designed for +people like me, who are away from Orissa and want to write letters +home using Computers, but suffer due to unavailability of Oriya +fonts.(Or the cost of the available packages are too much)." + + Oriya (U+0B00-U+0B7F) + + +* Harsh Kumar + +Harsh Kumar has started BharatBhasha - +an effort to provide "FREE software, Tutorial, Source Codes +etc. available for working in Hindi, Marathi, Gujarati, Gurmukhi and +Bangla. You can type text, write Web pages or develop Indian Languages +Applications on Windows and on Linux. We also offer FREE help to +users, enthusiasts and software developers for their work in Indian +languages." + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + + +* Prasad A. Chodavarapu + +Prasad A. Chodavarapu created Tikkana, a Telugu font available in Type +1 and TrueType format on . +Tikkana exceeds the Unicode Telugu range with some composite glyphs. +Available under the GNU General Public License. + + Telugu (U+0C00-U+0C7F) + + +* Frans Velthuis and Anshuman Pandey + + +In 1991, Frans Velthuis from the Groningen University, The +Netherlands, released a Devanagari font as Metafont source, available +under the terms of GNU GPL. Later, Anshuman Pandey from the Washington +University, Seattle, USA, took over the maintenance of font. Fonts can +be found on CTAN, . I +converted the font to Type 1 format using Péter Szabó's TeXtrace +program and removed some +redundant control points with PfaEdit. + + Devanagari (U+0900-U+097F) + + +* Hardip Singh Pannu + +In 1991, Hardip Singh Pannu has created a free Gurmukhi TrueType font, +available as regular, bold, oblique and bold oblique form. Its license +says "Please remember that these fonts are copyrighted (by me) and are +for non-profit use only." + + Gurmukhi (U+0A00-U+0A7F) + + +* Jeroen Hellingman + +Jeroen Hellingman created a set of Malayalam metafonts in 1994, and a +set of Oriya metafonts in 1996. Malayalam fonts were created as +uniform stroke only, while Oriya metafonts exist in both uniform and +modulated stroke. From private communication: "It is my intention to +release the fonts under GPL, but not all copies around have this +notice on them." Metafonts can be found on CTAN, + and +. + + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + + +* Thomas Ridgeway <> (*) + +Thomas Ridgeway, then at the Humanities And Arts Computing Center, +Washington University, Seattle, USA, (now defunct), created a Tamil +metafont in 1990. Anshuman Pandey from the same university took over +the maintenance of font. Fonts can be found at CTAN, +. + + Tamil (U+0B80-U+0BFF) + + +* Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>, + Prof. Dr. Manfred Kudlek , Olaf + Kummer , and Jochen Metzinger + +Beyene, Kudlek, Kummer and Metzinger from the Theoretical Foundations +of Computer Science, University of Hamburg, prepared a set of Ethiopic +metafonts, found on +. They also +maintain home page on the Ethiopic font project, +, +and can be reached at . The current +version of fonts is 0.7 (1998), and they are released under GNU GPL. I +converted the fonts to Type 1 format using Péter Szabó's TeXtrace-A +program and removed some +redundant control points with PfaEdit. + + Ethiopic (U+1200-U+137F) + + +* Maxim Iorsh + +In 2002, Maxim Iorsh started the Culmus project, aiming at providing +Hebrew-speaking Linux and Unix community with a basic collection of +Hebrew fonts for X Windows. The fonts are visually compatible with +URW++ Century Schoolbook L, URW++ Nimbus Sans L and URW++ Nimbus Mono +L families, respectively, and are released under GNU GPL license. See +also . + + Hebrew (U+0590-U+05FF) + + +* Panayotis Katsaloulis + +Panayotis Katsaloulis helped fixing Greek accents in the Greek +Extended area. + + Greek Extended (U+1F00-U+1FFF) + + +* Vyacheslav Dikonov + +Vyacheslav Dikonov made a Braille unicode font that could be merged +with the UCS fonts to fill the 2800-28FF range completely. (uniform +scaling is possible to adapt it to any cell size). He also contributed +a free syriac font, whose glyphs (about half of them) are borrowed +from the "Carlo Ator" font freely downloadable from +. Vyacheslav also filled in a few missing +spots in the U+2000-U+27FF area, e.g. the box drawing section, sets of +subscript and superscript digits and capital Roman numbers. + + Syriac (U+0700-U+074A) + Box Drawing (U+2500-U+257F) + Braille (U+2800-U+28FF) + + +* M.S. Sridhar + +M/S Cyberscape Multimedia Limited, Mumbai, developers of Akruti +Software for Indian Languages (http://www.akruti.com/), have released +a set of TTF fonts for nine Indian scripts (Devanagari, Gujarati, +Telugu, Tamil, Malayalam, Kannada, Bengali, Oriya, and Gurumukhi) +under the GNU General Public License (GPL). You can download the fonts +from the Free Software Foundation of India WWW site +(http://www.gnu.org.in/akruti-fonts/) or from the Akruti website. + +For any further information or assistance regarding these fonts, +please contact mssridhar AT vsnl.com. + + Devanagari (U+0900-U+097F) + Bengali (U+0980-U+09FF) + Gurmukhi (U+0A00-U+0A7F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Tamil (U+0B80-U+0BFF) + Telugu (U+0C00-U+0C7F) + Kannada (U+0C80-U+0CFF) + Malayalam (U+0D00-U+0D7F) + + +* DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt + + +Noah Levitt found out that the Sinhalese fonts available on the site + are released under GNU GPL, or, +precisely, "Public Domain under GNU Licence Produced by DMS +Electronics for The Sri Lanka Tipitaka Project" (taken from the font +comment), and took the effort of recoding the font to Unicode. + + Sinhala (U+0D80-U+0DFF) + + +* Daniel Shurovich Chirkov + +Dan Chirkov updated the FreeSerif font with the missing Cyrillic +glyphs needed for conformance to Unicode 3.2. The effort is part of +the Slavjanskij package for Mac OS X, +. + + Cyrillic (U+0400-U+04FF) + + +* Denis Jacquerye + +Denis Jacquerye added new glyphs and corrected existing ones in the +Latin Extended-B and IPA Extensions ranges. + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + + +* K.H. Hussain and R. Chitrajan + +`Rachana' in Malayalam means `to write', `to create'. Rachana Akshara Vedi, +a team of socially committed information technology professionals and +philologists, has applied developments in computer technology and desktop +publishing to resurrect the Malayalam language from the disorder, +fragmentation and degeneration it had suffered since the attempt to adapt +the Malayalam script for using with a regular mechanical typewriter, which +took place in 1967-69. K.H. Hussein at the Kerala Forest Research Institute +has released "Rachana Normal" fonts with approximately 900 glyphs required +to typeset traditional Malayalam. R. Chitrajan apparently encoded the +glyphs in the OpenType table. + +In 2008, the Malayalam ranges in FreeSerif were updated under the advise +and supervision of Hiran Venugopalan of Swathanthra Malayalam Computing, +to reflect the revised edition Rachana_04. + + Malayalam (U+0D00-U+0D7F) + + +* Solaiman Karim + + Bengali (U+0980-U+09FF) + +Solaiman Karim has developed several OpenType Bangla fonts and +released them under GNU GPL on . + + +* Sonali Sonania and Monika Shah + + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + +Glyphs were drawn by Cyberscape Multimedia Ltd., #101,Mahalakshmi +Mansion 21st Main 22nd "A" Cross Banashankari 2nd stage Banglore +560070, India. Converted to OTF by IndicTrans Team, Powai, Mumbai, +lead by Prof. Jitendra Shah. Maintained by Monika Shah and Sonali +Sonania of janabhaaratii Team, C-DAC, Mumbai. This font is released +under GPL by Dr. Alka Irani and Prof Jitendra Shah, janabhaaratii +Team, C-DAC, Mumabi. janabhaaratii is localisation project at C-DAC +Mumbai (formerly National Centre for Software Technology); funded by +TDIL, Govt. of India. Contact:monika_shah AT lycos.com, +sonalisonania AT yahoo.com, jitendras AT vsnl.com, alka AT ncst.ernet.in. +website: www.janabhaaratii.org.in. + + +* Pravin Satpute , Bageshri Salvi + , Rahul Bhalerao and Sandeep Shedmake + + Devanagari (U+0900-U+097F) + Gujarati (U+0A80-U+0AFF) + Oriya (U+0B00-U+0B7F) + Malayalam (U+0D00-U+0D7F) + Tamil (U+0B80-U+0BFF) + +In December 2005 the team at www.gnowledge.org released a set of two +Unicode pan-Indic fonts: "Samyak" and "Samyak Sans". "Samyak" font +belongs to serif style and is an original work of the team; "Samyak +Sans" font belongs to sans serif style and is actually a compilation +of already released Indic fonts (Gargi, Padma, Mukti, Utkal, Akruti +and ThendralUni). Both fonts are based on Unicode standard. You can +download the font files (released under GNU/GPL License) from +http://www.gnowledge.org/Gnoware/localization/font.htm + + +* Kulbir Singh Thind + + Gurmukhi (U+0A00-U+0A7F) + +Dr. Kulbir Singh Thind designed a set of Gurmukhi Unicode fonts, +AnmolUni and AnmolUni-Bold, which are available under the terms of GNU +Generel Public Licens from the Punjabu Computing Resource Center, +http://guca.sourceforge.net/typography/fonts/anmoluni/. + + +* Gia Shervashidze + + Georgian (U+10A0-U+10FF) + +Starting in mid-1990s, Gia Shervashidze designed many +Unicode-compliant Georgian fonts: Times New Roman Georgian, Arial +Georgian, Courier New Georgian. His work on Georgian localization can +be reached at http://www.gia.ge/. + + +* Primož Peterlin + +Primož Peterlin filled in missing glyphs here and there (e.g. Latin +Extended-B and IPA Extensions ranges in the FreeMono familiy), and +created the following UCS blocks: + + Latin Extended-B (U+0180-U+024F) + IPA Extensions (U+0250-U+02AF) + Arrows (U+2190-U+21FF) + Box Drawing (U+2500-U+257F) + Block Elements (U+2580-U+259F) + Geometrical Shapes (U+25A0-U+25FF) + +* Mark Williamson + +Made the MPH 2 Damase font, from which + Hanunóo (U+1720-U+173F) + Buginese (U+1A00-U+1A1F) + Tai Le (U+1950-U+197F) + Ugaritic (U+10380-U+1039F) + Old Persian (U+103A0-U+103DF) + +* Jacob Poon + +Submitted a very thorough survey of glyph problems and other suggestions. + +* Alexey Kryukov + +Made the TemporaLCGUni fonts, based on the URW++ fonts, from which at one +point FreeSerif Cyrillic, and some of the Greek, was drawn. He also provided +valuable direction about Cyrillic and Greek typesetting. + +* George Douros + +The creator of several fonts focusing on ancient scripts and symbols. +Many of the glyphs are created by making outlines from scanned images +of ancient sources. + + Aegean: Phoenecian + Analecta: Gothic (U+10330-U+1034F) + Musical: Byzantine & Western + Unicode: many Miscellaneous Symbols, Miscellaneous Technical, + supplemental Symbols, and Mathematical Alphanumeric symbols, + Mah Jong, and the outline of the Domino. + +* Daniel Johnson + +Created by hand a Cherokee range specially for FreeFont to be "in line with +the classic Cherokee typefaces used in 19th century printing", but also to +fit well with ranges previously in FreeFont. + Cherokee (U+13A0-U+13FF) + +Notes: + +*: The glyph collection looks license-compatible, but its author has + not yet replied and agreed on their work being used in part of + this glyph collection. + +-------------------------------------------------------------------------- +$Id: CREDITS,v 1.23 2009/01/04 15:57:54 Stevan_White Exp $ diff --git a/admin/External/Fonts/FreeFont/ChangeLog b/admin/External/Fonts/FreeFont/ChangeLog new file mode 100644 index 0000000..d5345d0 --- /dev/null +++ b/admin/External/Fonts/FreeFont/ChangeLog @@ -0,0 +1,4525 @@ +$Id: ChangeLog,v 1.254 2009/01/04 16:12:59 Stevan_White Exp $ +2009-01-04 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added 2009 to copyright dates + + * AUTHORS, CREDITS: + + Removed Glagolitic range author + + * FreeSans.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added some TrueType names + +2009-01-01 Stevan_White + * FreeSerif.sfd: + + Removde Glagolitic range, since have not (yet) received OK from author. + + Added some TrueType Names + +2008-12-31 Stevan_White + * COPYING: + + Updated license to GPL v3 + +2008-12-30 Stevan_White + * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Oblique versions of Daniel Johnson's Cherokee. + + * FreeSerifBold.sfd: + + Cherokee Bold range from Daniel Johnson. + +2008-12-27 Stevan_White + * isMonoMono.py: + + 900 EM -> 800 + + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd: + + Made glyphs to lie between -200 and 800 EM + + * isMonoMono.py: + + check that glyphs lie in vertical bounding boxes + + * FreeMono.sfd, FreeSerif.sfd: + + Extensible bracket characters didn't exactly line up. Fixed. + Mono: a couple of glyphs had gotten out of their bounding boxes again. + +2008-12-26 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Final pre-release cleanup + + * FreeSerif.sfd: + + Buginese vowel u was misnamed + + * FreeMono.sfd: + + Yatcyrillic somehow was a mark character ... fixed + + * FreeSans.sfd, FreeSansOblique.sfd: + + Had to un-link references in + Sans: uni02B2, uni02B5 + SansOblique: uni0363 + because validation of the TTF file said the glyph + "is drawn in wrong direction" + I would have preferred to have understand this... + + * Makefile: + + Added quick test for FontForge version. + + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd: + + Removed kerning tables (?? what were they doing here anyway??) + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Kerning tables for Thai. + Handles one common case: short letter followed by a tall one with + an overhang to the left. + +2008-12-25 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + More putzing with kerning tables + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Copied kerning classes + Serif -> SerifBold + SerifItalic -> SerifBoldItalic + Sans -> SansOblique SansBold SansBoldOblique + Some associated naming of characters, etc + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Additions and correction in Spacing Modifier letters and IPA Extensions + +2008-12-23 Stevan_White + * FreeSerif.sfd: + + Applied patch to Cherokee range + +2008-12-20 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Fixed kern classes that end in space (crashes FontForge) + + * FreeSerifItalic.sfd, FreeSerif.sfd: + + kerning + +2008-12-19 Stevan_White + * FreeSerifItalic.sfd: + + kerning + + * FreeSerif.sfd: + + kerning + Some adjustments to Glagolitc spacing, mark positioning + +2008-12-18 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + +2008-12-17 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + +2008-12-11 Stevan_White + * FreeSans.sfd, FreeSerif.sfd: + + kerning + +2008-12-10 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd: + + kerning + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd: + + kerning + +2008-12-09 Stevan_White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + +2008-12-08 Stevan_White + * FreeSansOblique.sfd: + + Slanted small final sigma. Remedies + bug #24993: U+03C2 "Greek small letter final sigma" not slanted in + Free Sans Oblique + https://savannah.gnu.org/bugs/index.php?24993 + +2008-12-07 Stevan_White + * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + kerning, etc + +2008-12-06 Stevan_White + * FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: + + kerning + Tweek in Sans having to do with addition of Latin Extended + +2008-12-05 Stevan_White + * FreeSansBold.sfd, FreeSansBoldOblique.sfd: + + Tweeks to Latin Extended Additional + + * FreeSansBoldOblique.sfd: + + Added Latin Extended Additional range + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Extra space at end of kern class names has bad effect on FornForge + script that try to run through kern classes. Some FontForge call + corrupts memory. + Got rid of extra space. + +2008-12-02 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Replaced U+0387 GREEK ANO TELEIA with top dot of colon. + See bug #24987: U+0387 GREEK ANO TELEIA too low + https://savannah.gnu.org/bugs/index.php?24987 + + * FreeSerif.sfd: + + more kerning in Cyrillic (broke into two tables of classes) + +2008-12-01 Stevan_White + * FreeSerif.sfd: + + tweeks to kernin + + * FreeSerifBoldItalic.sfd: + + kerning + +2008-11-30 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Kerning for Latin and Cyrillic fairly complete in Serif faces. + Complete in sense that it looks pretty good under Pango for + English French German Spanish Polish Czech Latvian + But have not done Vietnamese (will require many more entries). + I adjust roman and italic, then copy tables by hand to bold and + bolditalic. + Misgiving: bolditalic is much too crammed + Overall, I may have over-kerned. (A difficult temptation to master.) + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + + * FreeSans.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + kerning + In Serif, modified widths of some extended latin glyphs + +2008-11-29 Stevan_White + * FreeSerif.sfd: + + Broke Latin kerning subtable into four, hoping it will be easier to + understand and maintain. + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, + FreeSerifItalic.sfd, FreeSerifBold.sfd, FreeSansOblique.sfd, + FreeSans.sfd: + + kerninig + +2008-11-28 Stevan_White + * FreeSans.sfd, FreeSerif.sfd: + + more kerning; + made guillemot narrower + + * FreeSansOblique.sfd, FreeSerif.sfd: + + previous commit was incomplete + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Adjusted width of single quotes (and apostrophe) to be "punctuation width" + More fiddling with kerning. + +2008-11-27 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: + + much fiddling with kerning + +2008-11-26 Stevan_White + * FreeSerifBold.sfd: + + Basic kerning, named main Cyrillic letters + + * FreeSerifItalic.sfd: + + Basic Cyrillic kerning + + * FreeSerif.sfd: + + Tweeks to Cyrillic kerning + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd, Makefile: + + Much fiddling with kerning, tables, and generating fonts whose kerning + tables work with OpenOffice. + +2008-11-24 Stevan_White + * FreeSerif.sfd: + + regularized padding in Miscellaneous symbols. + At least within related ranges tried to make similar. + Made to validate + +2008-11-23 Stevan_White + * FreeSerif.sfd: + + Filled out Miscellaneous Symbols. Used George Douros' Unicode font. + Completed Miscellaneous Symbols, with some drawings from George Douros' + Unicode Symbols, and some of mine. + + * FreeMono.sfd, FreeMonoOblique.sfd: + + Replaced Greek Exteded psili and dasia with scaled versions of the + "bent quote" mark. I think it's distinctive enough, but not so silly. + + Remedies bug #22997: Mono: Greek Extended psili is ugly + https://savannah.gnu.org/bugs/?22997 + + * FreeSerif.sfd: + + Made some recycling symbols + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Finished with Hebrew Pointed letters in all faces. + +2008-11-22 Stevan_White + * FreeSans.sfd: + + Fiddled with Hebrew Pointed letters + + * FreeSerifItalic.sfd: + + Marks for Vietnamese + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Letter pe had strange thick middle ear that looked awful. lamed had ben + bumped at some point. Fixed. Adjusted some of the points. + +2008-11-21 Stevan_White + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + repairs to Pointed Hebrew + + * FreeSerif.sfd: + + Numeral line positioning marks for Gothic + + * FreeSerifItalic.sfd: + + Added Combining Marks for Symbols (some question about obliqueness of + some symbols) + Cleaned up some empty glyphs in Pointed Hebrew. + +2008-11-20 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Provided Hebrew pointed letters, with lookups, for all Serif faces. + +2008-11-19 Stevan_White + * FreeSerifBoldItalic.sfd: + + renamed Hebrew lookups + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Completed Hebrew in Bold faces. + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + More tweeks to Hebrew points + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Adjustments corrections and additions to Hebrew points + +2008-11-18 Stevan_White + * FreeSansBold.sfd: + + Cleaned out a lot of ridiculous kernings + +2008-11-17 Stevan_White + * FreeSansBoldOblique.sfd: + + fiddled with Armenian ligatures + + * FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Added Armenian (with ligatures) to BoldOblique + Fiddled with character spacing + +2008-11-16 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added U+01f9 and paragraph end marker to Georgian + Fiddled with Armenian ligatures + +2008-11-15 Stevan_White + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Another pass at letter spacing in Cyrillic. + Also went through ancient letters. + + Added Georgian paragraph separator 10FB + Added Georgian turned gan 10F9 (because it was easy) + + Re-worked letter spacing through modern Cyrillic range. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd: + + Letter spacing + +2008-11-14 Stevan_White + * FreeSerif.sfd: + + Added several characters to Cyrillic Extended-B + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd: + + Made Cyrillic hooked e U+04BC-F to look less goofy. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Based on assertion on Pechatnyj Dvor's web site, Cyrillic Fita + U+0472-3 and "Barred O" U+04E8-9 are different styles the same letter, + and the fact that the tilde in the O never looked good in Sans, I + made them all barred O's. + + * FreeSerif.sfd: + + Added Cyrillic Yn, yn (U+a65e-f) + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Synced up Cyrillic and Combining Diacritics ranges, + Couple of tweeks in Gujarati to make TT validate + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Changes to older Cyrillic letters, in response to further information. + Made omegas, omegas with titlo, and OT to all be of the same size and + shape in Serif. + Un-linked Cyrillic Psi and psi from Greek, made squarer versions. + + Some more Cyrillic diacritical marks in Sans. Re-worked U+04bc-f . + Experimenting with mark positioning for Cyrillic + +2008-11-12 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Strove to make Euro look more like the EC logo design, while making + glyph fit better with the design of its face. Bug #3576: Euro design + https://savannah.gnu.org/bugs/?23576 + + * FreeSans.sfd, FreeSerif.sfd: + + Adjustments mostly to GPOS tables having to do with Vietnamese marks. + The WAZU Vietnamese test page looks pretty good in Sans now. + Still not thrilled with below-dot when it appears with a mark over + e.g. U+0102. Pango positions one or the other but not both. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Extensive modification of GPOS lookup tables for mark positioning. + I think they're now all functional (except styled Mono faces have none). + Also added lots of marks to faces that didn't have them, and also + fiddled with Combining Diacritical Marks. + +2008-11-10 Stevan_White + * FreeSerif.sfd: + + Made one combining mark really combining + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made a few combining characters to be zero-width in Mono, + Added them to other styles. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Figured out why below marks in Thai weren't working in the lowest + letters. I think Pango and other font renderers ignore 'blwm'. + However, 'mark' works. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Tweeks to Thai marks + +2008-11-09 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Several bugfixes in Thai, mostly having to do with mark placement and + ligatures. Implemented ru-saraaa and lu-saraaa with ligatures. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + added and named dottedcircle (used by Pango to render + combining mark base) + + * FreeSerif.sfd: + + Tweeks to Coptic, after viewing more papyrus samples and web pages. + + * FreeSerif.sfd: + + Weight of Coptic small letters made to match that of Latin and Greek ones. + +2008-11-08 Stevan_White + * FreeSerif.sfd: + + Made Coptic to comply better with + http://www.wazu.jp/gallery/Test_Coptic.html + Made a flourish at foot of letters with long diagonal. + + More tweeks to Coptic; put in a mark lookup table. + + Note: for small letters I made scaled references to captials. + Results in those letters looking quite light next to the capitals and + next to small Latin letters. Also, there are a few variant forms for + capitals (Unicode samples don't show this). It would be good to + re-work + + Added Coptic alphabet in u+2C80-2CB1 and u+03E2-u+03EF, drawn/built by + me, based on Unicode samples, TeX font copte, and scans at WikiPedia. + +2008-11-07 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Further tweeks to dieresis in Greek and Cyrillic + + * FreeSerif.sfd: + + replaced Greek I dieresis with references, tweeked height of dieresis. + +2008-11-04 Stevan_White + * FreeSerif.sfd: + + Added a few Cyrillic Extended-B letters seen in web pages while looking + for Glagolitic text. + + * FreeMono.sfd, FreeMonoOblique.sfd: + + Added a few old Cyrillic characters. + + * FreeSerif.sfd: + + Several corrections and tweeks to Glagolitic. + Still missing six slots from Unicode, but don't see them in the TeX + fonts. + On the other hand, several on-line Glagolitic pages (bibles etc) don't + seem to use these. Maybe it's OK as-is. + +2008-11-03 Stevan_White + * FreeSerif.sfd: + + Added lowercase range to Glagolitic, as a facile scaling of the + uppercase. + + Added letter to Glagolitic, scaled range. + +2008-11-02 Stevan_White + * FreeSerif.sfd: + + Replaced fraktur bold from Mathematical Alphanumeric Symbols with that + from TX Fonts by Young Ryu. + One concern: letter k is damaged (in both medium and bold). I just + hacked something up. + + Added Glagolitic "round type" font (Croation capitols only) from the + collection of Croatian fonts for LaTeX by Darko Zubrinić + ftp://ftp.dante.de/tex-archive/languages/croatian/ + http://www.tug.org/TUGboat/Articles/tb17-1/tb50zubr.pdf + + Several letters are missing besides the small letters. + + * FreeSerifBoldItalic.sfd: + + A couple of Thai references got obliqued twice. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + By popular demand, removed 'ears' from Greek Upsilon and Psi. + Copied resulting glyphs to Serif Mathematical Alphanumeric Symbols. + + * FreeSerif.sfd: + + Some pointwise cleanup of main Tamil range + + Tried some things with lookups. Didn't make much headway. + +2008-11-01 Stevan_White + * FreeMono.sfd: + + somehow made a letter with wrong width + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added similar lookups and ligatures to Thai ranges. + + * FreeSerif.sfd: + + Lookups now work no worse than those for other Thai fonts, at least + in Pango. Still perplexed by behaviour of "Required" lookups. + + For Thai, made ligatures and lookups for yoying and thothan combined + with a lower vowel. These work well. + Attempted looksups for saraaa with ru and lu, and for saraam. + Not working. + + Cleaned up a few of the Bengali ligatures + + * FreeSerifBold.sfd: + + Tweek Thai + +2008-10-31 Stevan_White + * FreeSerif.sfd: + + Fixed ligatures and mark positioning for Hanunóo. + Problem with ligatures: Gnome pango doesn't do 'rlig', only 'liga' + + * FreeSerifItalic.sfd: + + Changed lookup table scripts for Devanagari and Bengali. + Find Problems -> ATT found several problems showing lookups acting on + glyphs that weren't listed in the script ranges, including dev2, bng2 + (why not deva and beng, I don't know). + + danda and doubledanda of Devanagari I understand are to be shared among + Indic scripts. So included bng2 and dev2 in the 'aalt' table for those. + + The 'init' and 'half' tables for Bengali made active for bng2. + + The 'locl' table for Bengali didn't do anything I could see: It mapped + the Devanagari danda to itself, and the doubledanda to itself. Deleted. + + Cleaned up some kern tables. + adjustments of under 5 EM are invisible. Some others I just didn't like. + Some were putting a letter beneath another, with is wrong. + + * FreeSerifBoldItalic.sfd: + + Added Thai + + * FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Changes to mark positioning lookups, esp. in Italic. + Widened numerals in Bold + +2008-10-27 Stevan_White + * FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Tweeks regarding Armenian and lookups + + * FreeSansBold.sfd: + + Added Armenian ligatures FB13-FB17 with lookups + Also made a historical ligature ('hlig') table for u+0587. + + Toward bug #15183: missing characters from Armenian range + https://savannah.gnu.org/bugs/index.php?15183 + + * FreeSansOblique.sfd: + + Added Armenian ligatures, lookups. Cleaned up contours. + + * FreeSans.sfd: + + Added 5 Armenian ligatures to U+FB13 – FB17, and made corresponding + 'liga' lookup. Found there one ligature u+0587 that according to + http://en.wikipedia.org/wiki/Armenian_alphabet + + "in new orthography the և character is not a typographical ligature anymore, and must never be treated as such. It is a distinct letter and has its place in the new alphabetic sequence." + So moved this out of the 'liga' lookup and into a new 'hlig' lookup. + +2008-10-26 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Lots of improvements to Thai. + Completely revised letter spacing in Italic, and fiddled with combining + marks in all. + Still aren't working quite right, especially in Italic. + Still need to work over digits (in Bold they aren't even bold yet) + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Bold Thai : added (painstakingly) constructed glyphs, lookups + roman Thai: tweeks + Italic Thai: tweeks (Note this still has multiple problems) + +2008-10-25 Stevan_White + * FreeSerif.sfd: + + WAZU says + http://www.wazu.jp/gallery/Fonts_Hanunoo.html + + MPH 2B Damase doesn't support the consonant-vowel ligatures necessary + to render Buhid writing. + + OK, so I made 'mark' lookups for combining marks and a bunch of + ligatures in an 'rlig' lookup. The latter still not working: + don't know why. + + Made page to match the example of the combining forms at + http://www.omniglot.com/writing/hanunoo.htm + +2008-10-24 Stevan_White + * FreeSerif.sfd: + + Removed some marks from Mathematical Alphanumeric Symbols + + * FreeSerif.sfd: + + Tweeked combining marks for Vietnamese. Made to satisfy + WAZU JAPAN Comprehensive Unicode Test Page for Vietnamese + http://www.wazu.jp/gallery/Test_Vietnamese.html + Could still use some tweeking... + + * FreeSerif.sfd: + + Added marks for composition of Vietnamese + + * FreeMono.sfd, FreeSerif.sfd: + + Put "below" combining mark on lots of vowels and derivatives, + for Vietnamese. + Named a bunch of composit Latin, expecting to make substitutions. + +2008-10-23 Stevan_White + * FreeSerif.sfd: + + Thai spacing alterations based on advice of a native speaker. + +2008-10-22 Stevan_White + * FreeSerif.sfd: + + re-named Thai lookups according to order + +2008-10-21 Stevan_White + * FreeSans.sfd: + + Cleanup of glyphs in Gujarati, Devanagari. + + Note: Serious problem with Sans GPOS abvm in Devanagari + "'abvm' Above Base Mark in Devanagari subtable" "gujr-0" + But all the characters that list gujr-0 are in Gujarati. + Not sure how this got broken or how to fix it. + + * FreeSerif.sfd: + + Fiddled with Thai mark positioning: passes my tests now OK. + Made a few more references in Math Symbols; more regularization of + stroke. + + * FreeSerif.sfd: + + Added mark class for Vietnamese "horn" + Several references made in General Punctuation, Arrows + + * FreeMono.sfd: + + added some Combining Diacritical Marks + +2008-10-20 Stevan_White + * FreeSerif.sfd: + + Made some references from serifed Latin capitals to Greek counterparts. + + * FreeSerif.sfd: + + Made a few repeated glyphs into references in Musical Symbols + +2008-10-19 Stevan_White + * FreeSerif.sfd: + + Moved several glypns from Mathematical Alphanumeric Symbols to + Letterlike Symbols. + Couple tweeks in Mathematical Symbols. + + * FreeMono.sfd, FreeSerif.sfd: + + Fiddling with Mathematical Symbols. + In Serif, trying to make stroke width more consistent. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd: + + Added some Greek symbols in Mono and Sans to make a little more regular + and correspond better with TeX. + Tweek of serif. + + * FreeSansBold.sfd: + + a few more improvements. + + One problem with the Mathematical Alphanumeric area is, one must + remember to change it any time another face is altered... + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerifBold.sfd: + + Several improvements and additions to Sans faces (mostly in Greek) from + experience of pasting into FreeSerif Mathematical Alphanumeric Symbols. + + * FreeSerif.sfd: + + Replaced most of Mathematical Alphanumeric Symbols + roman italic bold (latin and greek) + gothic italic bold (latin and greek) + typewriter + and numerals + with glyphs from FreeFont. These were scaled to uniform height. + + Remains: Blackboard Bold, Fraktur, Calligraphic, Script + + * FreeSerif.sfd: + + Tidied lookup table names for Malayalam + + * FreeSerif.sfd: + + Applied Malayalam patch from Hiran Venugopalan + + * FreeMono.sfd: + + Added/corrected many Mathematical Symbols + + * FreeSansOblique.sfd: + + more IPA + +2008-10-18 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Made lots more IPA and Phonetic Extensions + Note: fontforge is reporting an error in a few glyphs made by scaling + another, that the glyphs are drawn in the wrong direction--only in + TrueType though. Suspect a FontForge bug. + + Added several Combining Diacritical Marks + +2008-10-17 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Made several Spacing Modifier Letters, Combining Diacritical Marks, + and IPA and Phonetic Extensions + +2008-10-16 Stevan_White + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added some Superscripts and Subscripts + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Finished off Superscripts and subscripts + + Completed General Punctuation for Mono faces + + Added some General Punctuation + +2008-10-15 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + more Letterlike Symbols, Currency Symbols + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Made some Combining Diacritical Marks for Symbols, Letterlike Symbols + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Added some General Punctuation + +2008-10-14 Stevan_White + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Added double slanted hyphen, made General Punctuaton Supplement like + Serif's + + * FreeSansBoldOblique.sfd: + + Filled out Greek Extended + + * FreeMono.sfd, FreeSerifItalic.sfd: + + fixes to last 2 commits + + * FreeSerifItalic.sfd: + + Last character to General Punctuation + + * FreeMono.sfd: + + Built some Enclosed Alphanumerics (1-10) + + * FreeSerif.sfd: + + Copied in Daniel Johnson's changes to Cherokee. + +2008-10-12 Stevan_White + * FreeSerif.sfd: + + Included Daniel Johnson's Cherokee glyphs. + +2008-10-05 Stevan_White + * FreeMono.sfd: + + Further corrections to diaresis in Cyrillic -- legibility in small sizes + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSerif.sfd: + + Regularized placement of diaresis in Cyrillic + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added same set of glyphs to Cyrillic Supplement + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Added some of the easier letters from Cyrillic Supplement + +2008-10-04 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSerifItalic.sfd: + + Finished high Cyrillic range for MonoBold and MonoBoldOblique. + (Remaining: historic ranges, Cyrillic extensions) + Tweeked others. + + * FreeMonoBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Serif*Italic: Added last Abkhazian letters to Cyrillic + MonoBold: tweek + +2008-10-03 Stevan_White + * FreeMono.sfd, FreeMonoOblique.sfd, FreeSerif.sfd, FreeSerifBoldItalic.sfd: + + Mono: Some additions to historic letters + + * FreeSerif.sfd: + + Added some punctuation and combining numeric marks from + Cyrillic Extended B + + * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Various technical tweeks, mostly concerning recent additions. + Also did a bit more "Points too close" and "irrelevant control points". + Cyrillic millions redesign meant could not maintain use of refrences + for it. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More high Cyrillic + Included old Cyrillic millions combining mark in Sans, changed design + in Serif + +2008-10-02 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + More high Cyrillic + + * FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd: + + More high Cyrillic glyphs + + * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More glyphs in high Cyrillic. Remains only some whose form I'm unsure + of in italic. + + * FreeSerifBoldItalic.sfd: + + More glyphs in higher Cyrillic range + + * FreeSerifItalic.sfd: + + Same process of tightening el, em, ge (but a P.S. to previous commit: + also did ya, ze for SerifBold.) + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + BoldItalic: Tightened up spacing on left of el, em, ge (could go + farther, but it is partly a problem with glyph design... + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More additions to Cyrillic. Finished SerifBold except for Nivkh + additions. + Used references on number combining forms. + +2008-09-30 Stevan_White + * FreeSerif.sfd: + + Added four (obsolete) Chuvash letters to Cyrillic Supplement + - completing it. + +2008-09-29 Stevan_White + * FreeSerif.sfd: + + Greek adjustments + Adjusted spacing of kappa slightly + Got rid of ears on Psi, following similar request for Upsilon. + +2008-09-28 Stevan_White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Adding and fiddling with Spacing Modifiers and Combining Diacriticals + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Revisions of several Combining Diacritical marks + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + A few Combining Diacriticals and Spacing Modifiers + + MonoBoldOblique: Primarily filling out Spacing Modifier Letters + others: little fixes found along the way + +2008-09-27 Stevan_White + * FreeSerif.sfd: + + Replaced Malayalam range with that from Rachana_04 found on + Swathanthra Malayalam Computing project page + http://savannah.nongnu.org/projects/smc/ + Besides scaling and converting to cubic, performed much clean-up of + glyphs, added an r2 character, and re-named a bunch of characters. + +2008-09-22 Stevan_White + * FreeSerif.sfd: + + Filled in as much of Phonetic Extensions as I could without artistic + abilities. + Note 1D48-9 are not references due to apparent FontForge bug, that says + scaled references go in wrong direction. + + * FreeSerif.sfd: + + Cleaup of some Bengali glyphs. + Note many of the ligatures remain very very messy. + + * Makefile: + + added more validations + made to work with GenerateOpenType + + * FreeSerif.sfd: + + Built two more easy Phonetic Extensions + + * FreeSerif.sfd: + + Built some Phonetic Extensions letters, those with middle tilde + +2008-09-21 Stevan_White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Added lots of Spacing Modifier Letters and Combining Diacritical Marks. + + * FreeMono.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSerif.sfd: + + Wrote script to check if glyph encodings were in stated ranges, fixed + most discrepancies. + + There were a bunch of incompletely deleted characters in several faces. + + Sans: found several other problems in the process + # Tamil + Four slots labelled 0BDA-D have glyphs, not in Unicode. also 0BE1 + I think they are misplaced; added 0010 to each of them + + # Devanagari + Slot labelled U+093B is not in Unicode--can't find glyph: deleted + likewise 094F (may have been meant to be 0954) + 0955, 0973-0976 + + 0954 should be a combining mark, but it appears on the wrong side of 0. + 0971 was just wrong--made into simple dot. + 0972 is also wrong--made my own Candra A. + + # Gujarati + Slots labelled 0AE4-5 are not in Unicode; seem not to belong at all. + Deleted. 2800 is a dup of 2790. Deleted + + Serif: phillipine_double u1736 was misplaced + + A bunch of the Math Alphanumeric symbols are empty in the standard, + because they're represented elsewhere. These should be deleted + First need to make style consistent with existing symbols. + + * FreeSerif.sfd: + + Applied patch from Daniel J + Remedies bug + FreeSerif: Missing glyphs with palatal hook + https://savannah.gnu.org/bugs/index.php?24298 + Adding several letters to Phoenetic Extensions range U+1D80-BF + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made four characters U+200C-F to be zero-width + Remedy to bug #23593: Mono 0-width chars: zero-width or space? + https://savannah.gnu.org/bugs/index.php?23593 + + * FreeSerif.sfd: + + Made Mahjong tiles to take up less space using references + Cleaned up several validation problems + +2008-09-19 Stevan_White + * FreeSerif.sfd: + + Added several Hebrew Alphabetic Presentation Forms (some easy ones), to + make its coverage the same as Serif Bold. + + * FreeSerifBold.sfd: + + Re-encoded. + Deleted several glyphs in Hebrew Alphabetic Presentation Forms that + didn't correspond valid Unicode + + * FreeMonoBold.sfd, FreeSans.sfd, FreeSerifItalic.sfd: + + Ran script to find mis-numbered glyphs. Several were simply typos, + some offset by one. + + * FreeSansOblique.sfd: + + Numerous cases of glyphs in Private Use area incorrectly assigned + Unicode numbers and names. Gave all -1 for Unicode and named like + "slot.XXXX". + + * FreeSerif.sfd: + + Adapted Mahjong Tiles from George Douros' Unicode Symbols font. + + * FreeSerif.sfd: + + Added Domino Tiles. Domino outline is copied from George Douros' + Unicode Symbols, but the rest I preferred to do with references. + +2008-09-18 Stevan_White + * FreeSerif.sfd: + + Adapted Mathematical Alphanumeric Symbols from George Douros' Unicode + Symbols font. + + * FreeMonoBoldOblique.sfd: + + This one got away from me--I don't know what I did. + Looks like some small contour edits. + + * FreeSansBoldOblique.sfd: + + Fixed one mis-numberd character in Latin Extended-B + + * FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Fixed several mis-numbered characters. + + * FreeSansBold.sfd: + + SansBold: one Georgian letter with no name, one Zapf Dingbat was + unnumbered + ATT test shows a bunch of problems with Gurmukhi and 'blwf' table + indeed shows those letters at 0x10000+ + Sans names them like uni0A30_uni0A4D.blwf: they are in range + ECC6 to ED06 + + I meant to move this range into Private Use in last release, and + missed it. So now it is moved, into same range as Sans. + + Both Sans and SansBold in nukt table for Gurmukhi have duplicate + entries for uni0A15 uni0A3C. Deleted dups. + + * FreeMonoOblique.sfd: + + fixed a number of Unassigned Code Points in Greek Extended + + * FreeSansOblique.sfd: + + mis-numbered Combining Diacritics + + * FreeSansOblique.sfd: + + Several chars in Latin Extended hadn't been named. + One spurious letter in Letterlike Symbols + +2008-09-16 Stevan_White + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd: + + Lots of additions: unless otherwise noted, they are from George Duros' + fonts Analecta, Music, and Unicode (haven't got final confirmation of + the eligibility of these glyphs, so this is just for testing.) + + Added some combining marks, fiddled a bit. In both Serif & Mono, tried + to get a key symbol characters to fit inside the key combining mark + + Serif + Got rid of ears on Upsilon + Added: + # Gothic + # Western & Byzantine Musical Symbols + + # Misc Symbols, Misc Technical Symbols (drew many myself) + # Supplemental Symbols and Arrows + + Mono + Added: + # lotsa Misc Technical Symbols + # OCR Symbols + # drew many Supplemental Symbols and Arrows, Misc Technical + + Sans + Added # Phoenecian + Made a few Letterlike Symbols; Made Re and Im to be sans-serif. + +2008-09-11 Stevan_White + * FreeSerif.sfd: + + Removed pointless entries from Latin kern table + + Tidied points in Sinhala + +2008-09-07 Stevan_White + * FreeSerif.sfd: + + Tidied up Tamil ligatures EEA8-EEAB to fix TT build warning + "MonotonicFindAlong: Never found our spline." + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, Makefile: + + + Added APL characters to FreeMono (why?...) + + Fixed several last-minute problems, including + + Serif: Tweeked GPOS mark table for Cyrillic + Sans: Added a GPOS table for Cyrillic (but several diacritics missing) + + Serif, Mono: tweeked some bugs in extensible brackets & integrals + + Serif: Vietnamese o circumflex: accent was a bit high. fixed. + + MonoBoldOblique OTF build + uni213b intersects self + + Generation of TT fonts complains about several things to stderr, + including: + + SerifBold: "There exists a 'fpgm' code that seems incompatible with FontForge's. Instructions generated will be of lower quality. If legacy hinting is to be scrapped, it is suggested to clear the `fpgm` and repeat autoinstructing. It will be then possible to append user's code to FontForge's 'fpgm', but due to possible future updates, it is extremely advised to use high numbers for user's functions." + Probably has been there since I first copied the TT instructions in. + Just repeated the copying process carefully, and the warning went away. + + Serif: "FindMatchingHVEdge fell into an impossible position" + fixed a bunch of point too close + + REMAINING PROBLEM in Serif TT build + "MonotonicFindAlong: Never found our spline." + fixed several bad TT matrices-- there are several more + fixed many "control points too close" no luck + +2008-09-03 Stevan_White + * FreeSans.sfd, FreeSansOblique.sfd: + + Added/corrected some Misc. Symbols by copying from Serif. + Note this is only a stopgap solution. Want real sans-serif symbols. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added minimal Miscellaneous Symbols: card suites and some musical notes. + Note not happy with shapes...some I just drew. Sans isn't really sans. + + Fixed one APL symbol in Mono so it verified in OTF version + +2008-08-31 Stevan_White + * FreeMono.sfd: + + Built set of APL symbols. + +2008-08-30 Stevan_White + * FreeSans.sfd: + + Un-linked references in uni02B2 and uni02B5, because when validating the + TrueType version, FontForge gave an error "is drawn in wrong direction". + I suspect a bug in FontForge. Other similar glyphs make no errors. + + Fixed missing extrema in TrueType. + These were the last cases being reported by validate in all the faces. + + * FreeSerifItalic.sfd: + + fixed last missing extrema in TrueType + + * Makefile: + + restructured validation to look in a directory + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd: + + Fixed missing extrema in TrueType versions + +2008-08-15 Stevan_White + * FreeSans.sfd: + + Same problem with uni0A83 as with bn_llikaar. Just made zero-width. + +2008-08-14 Stevan_White + * FreeSans.sfd, FreeSansOblique.sfd: + + Glyph bn_llikaar, U+09E3 BENGALI VOWEL SIGN VOCALIC LL, + has right bound positioned far into the negative. Causes a warning in + FontForge when opening OTF version. + Comparing with other fonts supporting Bengali, found no others that + do this. + Serif makes glyph width 0 (which sounds right according to Unicode) + and puts glyph wholly to left of 0. But, I haven't found this letter + in text anywhere. I wonder if it is really used in writing. + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Further TrueType validation fixes. + Sans still has two glyps in wrong direction. + + * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Fixed more TrueType problems...all missing extrema in TTF validation + +2008-08-13 Stevan_White + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + fixed all the TrueType validation problems of type "intersects itself" + and all but two of the "wrong directions", as well as a lot of + "missing extrema". But there remain hundreds of missing extrema in the + TrueType version. + Also, bn_llikaar in Sans and Oblique still has a problem in OTF version. + + * FreeMono.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd: + + Made .ttf files to validate. Other faces have many more problems still. + +2008-08-12 Stevan_White + * FreeMonoOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Continuing to make OTF versions validate. + + * FreeMonoOblique.sfd: + lots of missing points at extrema + * FreeSerif.sfd: + 12 wrong directions, 1 missing extrema + * FreeSerifItalic.sfd: + many missing points at extrema, 1 self-intersecting + + What was wrong: in several oblique cases, an already-italic glyph was + made more italic, thereby fouling up extrema (although why it passed + validation in the SFD I don't know). Some glyphs were + overly-complicated with many near points. Cleaned up, rounded to int. + + Remaining problem: OTF FreeSansOblique FreeSans. one Bengali glyph in + each whose advance width and htmx don't match. + + Moral of story: validate the OTF and TTF versions too before a release. + + * FreeSansOblique.sfd: + + Reverse a mistake from last commit: somehow this file was converted to + quadratic, or something. + +2008-08-11 Stevan_White + * FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Found that SFD files that validated produced OpenType files that don't. + These represent the easy fixes. Some were result of conversion to + quadratic; some shouldn't have validated in the SFD... + + * MonoBoldOblique: uni0250 missing pts at extrema [reference glyph rotated...] + * Sans: uni0AC4 wrong direction [simplified, rounded to int] + * SansOblique: uni01EA wrong direction [rounded to int] + * SerifBold: uni023f wrong direction [round to int] + * SerifBoldItalic: uni0245 missing pts at extrema [ungrouped ref, added extrema] + +2008-08-06 Stevan_White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd: + + Re-set font metrics, which were somehow making uneven vertical spacing. + +2008-06-22 Steve White + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Made to validate + + * ranges.py: + + Brought more into line with OpenType + Added some ranges + Fixed bug with ranges outside of font + + * CREDITS: + + 3 new ranges + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Cyrillic: tweeked accents for consistency, and for readability in small + sizes. + + * FreeSerif.sfd: + + Thanna range: tweeking + + Thaana range: Scaled up by about 15%, raised by 100EM, tightened + some of the diacritics to get inside 900 to -300 EM limits. + + * FreeSans.sfd: + + Added Old Persian and Ugaritic from MPH2BDamase font. + +2008-06-21 Steve White + * FreeSerif.sfd: + + Added Tai Le range adapted from MPH2BDamase font. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Added some ancient Greek numerals from Tempora to high Unicode area, + (partly just to show it can now be done.) + + * FreeSerifItalic.sfd: + + Couple of tweeks putting glyphs above -300EM. + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Surgery to Thai letter 'tho than', u+0e10, to push it above -300 EM. + This makes Thai range completely between 900 and -300 EM. + + * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Many auxilary characters (esp. for Malayalam, Bengla, and Tamil) + representing ligatures and alternative forms without their own Unicode, + were moved from + ranges above 0xFFFF (which ought to have been slots for other defined + Unicode ranges) into the Private Use area. + + In Serif, I segregated the scripts, in Sans it was hard to see where one + began and another ended, so I moved them en masse. + + Note several problems with wrongly-named characters: + I already re-named glyph570 and glyph582. + But there are others with names starting with A... + + * FreeSansBold.sfd, FreeSansOblique.sfd: + + Fixed (I hope the last) problem with scripts in lookups + Find Problems -> ATT (all selected) finds multiple issues, + + * FreeSansBold.sfd: + In addition to script 'guru', added 'gur2' to the scripts for these + lookups + 'nukt' Nukta forms in Gurmukhi + 'blwf' Below Base Forms in Gurmukhi + 'pstf' Post Base Forms in Gurmukhi + 'blws' Below Base Substitutions in Gurmukhi + 'abvs' Above Base Substitutions in Gurmukhi + 'psts' Post Base Substitutions in Gurmukhi + + * FreeSansOblique.sfd: + In addition to script 'beng', added 'bng2' to the scripts for the lookup + 'half' Half Forms in Bengali + + Moreover, the lookup + 'aalt' Access All Alternates in Latin + contains only Bengali letters. + Re-named as Bengali, made to work on beng, bng2 scripts + +2008-06-20 Steve White + * FreeSerif.sfd: + + Scaled Sinhala range. + Remedies bug #23656: Sinhala letters over-sized + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Mostly messing with Greek Extended accents again. + re-positioned ypogegrammani on advice of Alexey Kryukov + Put prosgegrammani beneath main letters in Mono, to make narrower glyphs + Implemented more distinction between tonos and acute. + +2008-06-19 Steve White + * FreeMonoBoldOblique.sfd: + + Completed fit of Mono to 800 to -200 EM. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd: + + Set Metrics to recommended values + + * FreeMonoOblique.sfd: + + Now Mono Oblique, as well as roman and Bold, are within 800 to -200 EM. + Just BoldOblique to go. + + * FreeMono.sfd, FreeMonoBold.sfd: + + More toward fitting to 800 to -200 EM. + Basically, reduced Georgian by 92%. + Also made an over-all offset, so Georgian is somehow centered (Bold...I + guess I already did this in roman). + Want to also do an emboldening to make stroke like rest of font, but + current FontForge has a nasty crash that loses data on this function. + + * FreeMono.sfd: + + In effort to make fit in 800 to -200 EM, + Scaled Georgian by 92%, centered on 600 wide box. + Next: Embolden a bit. + +2008-06-18 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Toward making all glyphs lie between -200 and 800 EM. + Numerous small changes, especially raising descenders of some Hebrew + letters. + Georgian remains a problem + +2008-06-13 Steve White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Moved prosgegrammeni up to baseline, + (and then moved all references down to baseline) + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added Control Picture "blank" to all faces. + Switched U+0222-3 from TemporaLGCUni + +2008-06-11 Steve White + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More fiddling with Greek Extended accents + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Tweeks to accents etc in Greek Extended and Cyrillic + +2008-06-10 Steve White + * FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Fixed a few big horizontal spacing problems + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Implemented TemporaLCGUni glyphs in Cyrillic ranges. + Added a breve_cyrillic for the moustache breve mark. + +2008-06-08 Steve White + * FreeSerif.sfd: + + Replaced most of Cyrillic range with TemporaLGCUni. + Remodelled many of the derived Cyrillic characters after these. + Fiddled globally with spacing of small letters. + Unclear on diacritics 485-6, unhappy with breve. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Started implementing TemporaLCGUni in Greek ranges. + + Replaced 3DC-3E1 from Tempora, because I thought they looked nicer and + more like the other existing FreeFont glyphs. + Replaced 3DA-B from Tempora, because they look more like Unicode + samples, and nicer. + Added 03f3-4, 03F7-F. + Prefer my own lunate epsilon. + Replaced Phi and Omega from Tempora. + These plainly fit the other FreeFont glyphs better than the origninals. + (How did this happen?) + + In bold, replaced U+03D7 + + Copied lbbar u+2114 + + Small italic greek--replaced most except phi, psi, omega + + Based on new information, broke the identification of oxia with Latin + acute. + +2008-06-07 Steve White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Efforts to control heights of characters + +2008-06-06 Steve White + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made to validate + +2008-06-05 Steve White + * FreeSans.sfd: + + Fixed undefined character in kerning classes + +2008-06-04 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + tweeks and additions to General Punctuation + +2008-06-03 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansOblique.sfd: + + Completed/tweeked Number Forms + + * FreeMono.sfd, FreeSerif.sfd: + + Added some Miscellaneous Technical symbols + +2008-06-02 Steve White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Tweeks...mostly Letterlike + +2008-06-01 Steve White + * FreeMono.sfd, FreeSerif.sfd: + + Added Box Drawing characters to Serif. + Tweeked a glyph in Mono + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Added several glyphs to Letterlike Characters + +2008-05-31 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Validation pass + + SansOblique and SansBoldOblique had validation problem with BlueValues + Private Dictionary + Elements in BlueValues/OtherBlues array are disordered + Elements in BlueValues/OtherBlues array are too close + (Change BlueFuzz) + StemSnapV does not contain StdVW value. + So I ordered the array, and based on other slanted fonts, + removed StemSnapV. + + Note however, I still think the two top Blues lines are too close + But I don't even know what the second-to-top line is meant to do. + + * FreeSerif.sfd: + + Added to Block Elements, Geometric Shapes + Made to validate + +2008-05-29 Steve White + * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Looking at special symbols. + Drew several Miscellaneous Symbols in Mono and Serif + > Completed/corrected planetary symbols, added Dice, + some other easy ones + > Completed Dingbats in Serif (using URW Dingbats) + Added some Block Elements to Serif + +2008-05-26 Steve White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More changes stemming from J. Poon's report. + +2008-05-25 Steve White + * FreeSerif.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Height surgery on SerifBoldItalic. + More fiddling with accents in others. + + * FreeSerifItalic.sfd: + + More height surgery. Only a few left in Benglai and Thai + + * FreeSerifBold.sfd: + + Re-applied surgery to make glyphs between 900 and -300EM + + *** Regression + Inadvertently un-linked all references in SerifBold in r1.83. + This reverses that error (but also un-does the surgery mentioned there) + + * FreeSerifBold.sfd, FreeSerifItalic.sfd: + + Applied surgery to make Latin letters go under 900EM. + One exception yet... + +2008-05-24 Steve White + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Serif: much fiddling with accents in Latin ranges. + Re-thought some glyphs (there are still a few messy ones, especially + in bold) + Checked horizontal spacing...fixed a number of problems. + +2008-05-23 Steve White + * FreeSansBold.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Made Latin Extended-B coverage consistent across Serif; cleaned up some + glyphs + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Filled more of General Punctuation in Sans and Serif + Made all agree on coverage of Latin Extended Additional + +2008-05-22 Steve White + * FreeSans.sfd, FreeSansBold.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Added Latin Extended Additional to SansOblique. + Made Latin Extended Additional coverage consistent across Sans, B, I + Made Latin Extended-B coverage same in SerifBold. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSansBold.sfd: + + Mono* made Latin-B coverage consistent across faces + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Made set of Latin Extended-B consistent across Sans faces + + * FreeSans.sfd, FreeSansBold.sfd: + + More filling in General Punctuation + + * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Another bunch of J. Poon's reports + also, filling in some Combining Diacriticals, Spacing Modifiers, and + General Punctuation in bold faces + +2008-05-21 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Mucking about with mark tables in Thai (Serif) + Other faces: Making changes from J. Poon's report + +2008-05-20 Steve White + * CREDITS: + + Mark Williamson + Jacob Poon + + * Makefile: + + added tests target + +2008-05-18 Steve White + * ranges.py: + + Put table explanation back in + + Improved behaviour for high Unicode + + * FreeSans.sfd: + + Revision of kerning + + * FreeSerif.sfd: + + Made Latin kerning a little more reasonable: + reduced many excessive kerns (some had letters apparently + overlapping, which shouldn't happen) + made kerns increment by 5EM for ease of reading + got rid of kerns too small to be seen + + * FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerifBold.sfd: + + Made to verify + +2008-05-13 Steve White + * FreeSerif.sfd: + + Made to validate + + * FreeSerif.sfd: + + Gurmukhi: filled range in Serif, taking glyphs from the original + Punjabi font by Hardip Singh Pannu + http://members.aol.com/hspannu/punjabi.html (file pb_win95.exe) + +2008-05-12 Steve White + * FreeSans.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Hebrew, basic. Some faces missing punctuation marks, added. + + * FreeMono.sfd, FreeSans.sfd: + + Armenian: Sans tried to make verticals and horizontals of more uniform + width both, finddled with punctuation + + * FreeMonoOblique.sfd: + + made to validate + + * FreeMonoBold.sfd: + + made to validate + + * FreeSans.sfd, FreeSansBold.sfd: + + Armenian in Sans: regularized letter spacing + + * FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd: + + Armenian: fill out ranges and clean up + SansBold especially had a lot of incorrect references. + Now all the ranges with Armenian at least share the same set of + characters. + + * FreeMono.sfd: + + Fixed glyph with wrong width. + +2008-05-11 Steve White + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifItalic.sfd: + + 1) made to validate + 2) Mono: copied in Spacing Modifier Letters (glyphs not yet named) + 3) SerifItalic: Filled in General Punctuation + + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made to validate, and pass all other FontForge tests. + Expedient: rounded everything to int + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Made to have the same Greek Symbols, + Made to validate + + * FreeSans.sfd, FreeSansBold.sfd: + + Made Greek Symbols as full as rest of Sans. Changed a name in Sans. + + * FreeMonoOblique.sfd: + + Made Greek as full as other faces + Made to validate + + * FreeSansBold.sfd: + + Deleted seven orphaned Arabic characters; looks like somebody started, + didn't get very far, putting Arabic in bold. + + Deleted orphaned Arabic glyph from Arabic Presentation forms-B + + * FreeSerifBold.sfd: + + Deleted the single Arabic character: it was clearly there by mistake. + + * FreeSansOblique.sfd: + + Made Greek Symbols as full as rest of Sans + + Tweeks to Armenian + + Comment from previous commit of FreeSans was meant for FreeSansOblique. + In FreeSans, only tweeked a few letters during putting more characters + in this face. + + Filled in Spacing Modifier Letters, increased General Punctuation. + + * FreeSans.sfd: + + Filled in Spacing Modifier Letters, increased General Punctuation + + * FreeMono.sfd: + + Made Armenian as full as other roman faces. + + Completed Spacing Modifier Letters + Added a couple of Greek Punctuation + + added more Spacing Modifier Letters + +2008-05-10 Steve White + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Did same process of scaling and sizing for Thai in Sans as in Serif. + Added mark tables to Sans. Improvement, but there are questions... + + * FreeSans.sfd: + + Tidied some Gurmukhi glyphs, validated. + + Deleted ranges for Oriya, Kannada, on account of + 1) they only contained a subset of the consonant glyphs of the scripts, + few if any vowels, and had no ligature lookups as required + 2) Kannada was based on the Akurti fonts, which have copyright issues. + + See + bug #23225: Oriya range only partial + bug #23224: Kannada range only partial + + * FreeMonoBoldOblique.sfd: + + Made metrics like rest of Mono + +2008-05-09 Steve White + * ranges.py: + + More info on range intervals + + * FreeSerif.sfd: + + Deleted Telugu range. + It didn't represent a complete writing system for the language. + + See notes at https://savannah.gnu.org/bugs/index.php?23202 + Serif: Telugu range missing many characters; many wrong + + Got a copy of the original Tikkana font, + Copied in remaining consonants and vowels that I could find there. + I think one vowel 0C55 is missing according to unicode). + Strangely, the Telugu digits are alo missing. + In Tikkana, the default "checkmark" structural mark is missing from many + consonants, according to Unicode, but is a separate glyph. I put + the checkmark on. + This, and scaled up by 150% and cleaned up intersecting glyphs and + many unnecessary points. + +2008-05-08 Steve White + * FreeSerif.sfd: + + Filled out Telugu consonants. + Vowels still need to be done + +2008-05-07 Steve White + * FreeSerif.sfd: + + Operated on Latin glyphs with stacked accents to make them fit under + 900EM. + Scaled Telugu bu 150%. + +2008-05-06 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeSansBold.sfd, FreeSerif.sfd: + + Corrected further fontforge "find problems" + Added some math characters to FreeSerif + +2008-05-05 Steve White + * FreeSansBold.sfd: + + Made to validate, and fixed bad TT transformations + +2008-05-04 Steve White + * FreeMono.sfd, FreeSerif.sfd: + + Mainly TeX additions trying to satisfy Markus Kuhn's TeX-as-Unicode page + + * FreeMono.sfd: + + Adjusted heights of extensible brackets + + Fixed problems with extensible brackets, thanks to Markus Kuhn's page + http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt + + * ranges.py: + + fiddled with ranges, doc + + made some ranges more correct? + + fixed some bugs in ranges + better error reporting + + Got rid of Unicode 1.1 references + + made to use OpenType table + + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd: + + made to validate + +2008-05-03 Steve White + * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Removed digits from Private Use Area. + See bug 23050. + + * FreeMono.sfd, FreeSans.sfd: + + Completed General Punctuation + + * FreeSans.sfd: + + Completed IPA Extensions + + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd: + + More work on Superscripts and Subscripts, Spacing Modifiers. + Sans is now complete in both. + Added Pfennig to Sans and Mono. + + * ranges.py: + + Restructure text output + Rearrangement and cosmetic ...except I had broken it. now fixed + Seems to be in a useful form at this point. + More docs, date + + * FreeSerif.sfd: + + Added a hand-drawn old German Pfennig to Currency Symbols + + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: + + Further additions to General Punctuation, Super and Sub Scripts, + Spacing Modifiers, etc. + +2008-05-02 Steve White + * FreeSans.sfd: + + additions to Spacing Modifiers, IPA + + * FreeSerifItalic.sfd: + + Shortening stacked accents to maintain readability when clipped + +2008-05-01 Steve White + * FreeSans.sfd: + + Additions to Spacing Modifiers and changes to Combining Diacritics + + * FreeSerif.sfd: + + Made sure all the half rings in Combining Diacriticals and Spacing + Modifiers were really half rings (J. Poon had complained about this) + + Filled out General Punctuation + Some work on Spacing Modifiers + + Filled out Mathematical Operators + still needs lots of work + Made to validate + + Filled out Latin Extended B + Added some letters with curls to Latin Extended B + More fiddling with Latin Extended B accents + +2008-04-30 Steve White + * FreeSerif.sfd: + + Added Hanunóo script, with characters based on those in + font MPH2BDamase, on request from the maintainer of that font, + http://packages.debian.org/sid/ttf-mph-2b-damase + + Glyphs are simple vector strokes. Could be a little more uniform. + + Added Buginese script "Lontara", with characters based on those in + font MPH2BDamase, on request from the maintainer of that font, + http://packages.debian.org/sid/ttf-mph-2b-damase + + Note the glyphs are pretty rough, clearly a digitization of handwriting. + I just cleaned them up, and corrected discrepancies with Unicode, + and compared with some pictorial samples of the script I could find. + +2008-04-29 Steve White + * ranges.py: + + Improved look a lot--still unhappy with some ranges + OS/2 seems sometimes bang-on, sometimes unrelated to anything (including + fontforge's OS/2 listing) + + * FreeSerif.sfd: + + Much fiddling with Tamil range. + First scaled to 78% (avoiding the references) + This gets it in the ballpark height-wise. [A bit taller than the Latin + letters, but the stroke is narrower, but then the glyphs are busier.] + Then had to re-align combined references, the trickiest being the + halants. + Checked with other fonts with Tamil text. + +2008-04-28 Steve White + * FreeSans.sfd, FreeSerif.sfd: + + Cleanup of control points in Arabic and Thaana + + * FreeSerif.sfd: + + Cleanup of missing extrema in Arabic and Thaana + + Many changes to Thai, trying to make the script fit between some lines, + so accents won't get clipped, etc. + Also, stroke weight was heavier than that of Latin. + + Scaled whole thing by 93%. + Shrank the tallest letters 0E42-4 to get them under 900EM. + Shaved off top of maiek. + Fiddled with positioning of all accents. + Made positioning tables for accents. + Note: unclear these are working correctly + + Fixed a bug having to do with character replacements for characters + named 'ng' and 'nj'; these names had been taken on by other characters. + + Made to validate + + Unicode positions of two Cyrillic Extended characters were switched. + Fiddled with a couple of Cyrillic combining diacritics + +2008-04-27 Steve White + * FreeSans.sfd: + + bugfix: a left harpoon mysteriously appeared to the left of letter p! + +2008-04-26 Steve White + * FreeMono.sfd: + + Made to validate + + * FreeSans.sfd: + + Made to validate + + Toward J. Poons report + Made 032B more like proper double-arches (and distinct fro 033C seagull) + Made 032b more like a seagull + + * FreeSans.sfd, FreeSansBold.sfd: + + Sans: fiddling with widths and terminators of math symbols, + toward J. Poon's report + R & B: removed u+2741 because it didn't match the Unicode description + + * FreeMono.sfd: + + Extensible parenthesis symbols weight/terminators + Toward bug # 23064: https://savannah.gnu.org/bugs/index.php?23064 + Rounded a bunch of terminators + +2008-04-22 Steve White + * FreeSerif.sfd: + + Small alignment problem in Greek Extended + + One more tweek to spacing in Cyrillic Extended + + Corrected spacing in Cyrillic Supplement + + Added Cyrillic Supplement letters for + Enets, Khanty, Chukchi, Itelmen, Mordvin, Kurdish, Aleut + + Added Cyrillic letters for Nivkh (completing Cyrillic range) + More tightening of accents in Latin Extended. + + * FreeSans.sfd: + + Fiddled with math--consequences of changing the "similar" operator + + More tightening of accents + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Adjustments to h and k with caron and cedilla in Latin A and B + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd: + + FreeSerifBold: deleted 3 dotted Hebrew letters in Private/Corporate use + (E801-3). They weren't ligatures or in any other lookup, and they + weren't present in FreeSerif. + + * FreeSansBold: + Unlinked and deleted F6C3, which called itself commaaccent. + Made some new spacing and non-spacing accents to make up for it. + + * FreeSansBoldOblique: + Made references of many Latin Extended. + Also corrected several wrong ones. + + * Freeserif: + Re-named commaaccent + +2008-04-21 Steve White + * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd, FreeSerifBold.sfd: + + Deleted Hiragana and Katakana ranges, as discussed on bugs list. + Cleaned up some encoding issues, unnamed glyphs + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Roman: added 'sine' -- not beautiful, but I liked drawing it + All: Made special lookup for Dutch ligatures 'IJ' and 'ij' + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Roman: ffi etc Latin ligatures from 'liga' to 'dlig' (these weren't + really ligatures anyway, and only looked very bad when used. + Retain for condensed type. + Others: deleted Latin 'liga' table altogether + BoldOblique : added j to ij ligature + + Toward J. Poon's Report: + Except for issues of terminators not always vertical or horizontal, + and a few things that were too hard or I was unsure of. + +2008-04-20 Steve White + * FreeSerif.sfd: + + Futzing with accents in Latin Extended Additional and Latin Extended-B + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Added primemod character, referenced by Greek number sign + + * FreeMono.sfd, FreeMonoOblique.sfd: + + Following J. Poon's report, disconnected NJ (01CA) + +2008-04-19 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + First pass throught J. Poon's bug list. + See bug reports for details. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made underscore slanted in Oblique faces, made all to be width of + space character. + Towards J. Poon's report. + Disturbed that xterm and some other apps put small space between + characters when none was called for. + + * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSansOblique.sfd: + + Corrections on Currency Symbols + + * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More corrections, additions to Currency Symbols + + * FreeSans.sfd, FreeSerif.sfd: + + Filled out and corrected Currency Symbols + +2008-04-18 Steve White + * FreeSans.sfd, FreeSerif.sfd: + + Adjustments to Combining Marks for Symbols + Additions to range in Sans, and re-structured its marks table so that + "middle" can apply to any range + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Made reference between combining koronis and lenis of Greek Extended. + In Serif, re-worked combining marks lookup tables, added anchors in + Latin, moved so without marks they work in kedit (but now I'm doubting + kedit does a reasonable thing...what is a better application for + testing this?) + +2008-04-16 Steve White + * FreeSerifItalic.sfd: + + Adjusting of spacing and accents in Greek + + * FreeMono.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd: + + Much futzing with Greek letter spacing and accents. + Added lenis to FreeMono. + + * FreeMono.sfd, FreeSerif.sfd: + + Adjusted spacing of dots of Greek dieresistonons in Serif + Whipped up something for Greek kappascript in Mono (could use revision) + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Raised dots on double-dotted Cyrillic i, to match that of i and j. + +2008-04-14 Steve White + * FreeMono.sfd: + + Corrected 27e6-7 "white bracket" + Note it is probably a FontForge bug these symbols aren't showing up. + FontForge thinks they are in Supplemental Arrows, but they should be + in Supplemental Math-A + + Named some Greek characters + + * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: + + Spacing of some Cyrillic characters + +2008-04-13 Steve White + * FreeSerif.sfd: + + Some fiddling with accents + 'yogh' was too wide + + * FreeSansBold.sfd, FreeSansOblique.sfd: + + Character spacing was chaos--tried to improve. BoldOblique also needs + it. + + * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: + + Completed the fix of bug #12798, Greek glyphs with accents to side + Much mucking with accents here, and fixed a few things that were just + wrong. + +2008-04-12 Steve White + * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Made Mono curly quotes "bent" + + * FreeMono.sfd: + + More fiddling with Greek accents + Made quotes "bent" + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Adjustments on Greek diaresistonos etc. + Adjustments in Serif on combining marks for symbols + + * FreeSerif.sfd: + + More additions to Combining marks for Symbols + + Additions to Combining marks for Symbols -- now mostly full. + Lots of adjustments to middle anchor point in Latin to make big circle + (nearly) encircle preceding latter + +2008-04-11 Steve White + * FreeMono.sfd: + + Bugfix: + Had indroduce a glyph of width other than 600, making kterminal not + recognize it as a monospace font. + +2008-04-10 Steve White + * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More messing with accents. + Further to bug #12798, Greek glyphs with accents to side + Much messing with glyphs in Greek Extended range + +2008-04-09 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerif.sfd: + + Revisited Latin-1 and Latin-A accents. + Glyph B7 was called "periodcentered", but Unicode callse it Mid Dot, + and the description doesn't refer to the period. I made it like the + dot accent. throughout, and referred L-dot to it. + + Also double-checked "commaaccent" characters (some in Unicode called + cedilla, but the Unicode example shows a comma...mystery) + + Also the funny IPA upside-down f often had two bars, incorrectly. + + To do: go through rest of Serif, and Sans + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Completed re-structuring of stacked Latin accents in Mono. + Also: lots of associated adjustments of Greek Extended accents. + (Trying to at least center extremely wide characters on their box) + Repaired some victems of "find overlaps" sweeps + Worked on glyphs with apostrope/comma parts + Corrected a few wrong glyphs. + + Trying out a "bent quotes" solution to making primes distinct from + quotes. + +2008-04-08 Steve White + * FreeMonoOblique.sfd: + + Toward reducing overall height + Did similar process as for Mono, fixing a few errors along the way. + Also the Greek Extended range was very messed up vertical and + horizontally. + Horizonal spacing of the heavily accented Greek is a real problem in + Mono... + To do: + revisit "commaaccent" characters in all faces: do some have + edillas? + some Hebrew glyphs are a little low + Georgian generally is way out of bounds + +2008-04-07 Steve White + * INSTALL: + + Various updates and corrections, tweeked formatting + + * FreeMonoBold.sfd: + + Tweeking of accents + +2008-04-06 Steve White + * FreeMono.sfd, FreeMonoBold.sfd: + + Re-worked accents in FreeMonoBold.sfd to make Latin ranges lie between + 800 and -200 EM, as with FreeMono. + + * FreeMono.sfd: + + Latin Extended ranges: Implemented new policy of shortening the letters + of the characters with the highest-stacked accents. + + At this point all the Latin glyphs lie betweeen 800 and -200 EM. + + Also checked for readability of all the Latin extended letters in xterm. + (Issue: it chops letters outside their bounding boxes; many accents had + been a bit outside. Made sure that if they were chopped, they were at + least still recognizable.) + +2008-04-05 Steve White + * FreeMono.sfd: + + Following exchange about Mono on freefont-bugs with Joe Wells, who + > doesn't like the curly quote marks + > wants combining diacritics to work + > wants tight line spacing + + Trying to reduce font height: + > exclamdown was below -200 + > Throughout Extended Greek, ypogegrammeni were too low. Shortened + glyph, and raised all references. + > Lots of messing with Latin Extended ranges to make glyphs mostly + fit into 800 height. Mostly succeeded. A couple will get chopped. + > Messed with "commaaccent" glyphs, which were very low + > Cyrillic 04B1 had a tail that was incorrectly low + > Much mucking with Georgian range. Moved up by 95 (read that Georgian + is written as though centered between two horizontal lines, rather than + as sitting on a baseline) There are still a few very high glyphs. + + FontForge U+0122 called Gcommaaccent, glyph looks like that, but + Unicode says it's Gcedilla. Made the ones called cedilla by Unicode + to be cedillas + + Note bug in Unicode: standard for 0122, 0123, 0136, 0137, 013B, 013C, + 0145, 0146, 0156, 0157 all talk about cedilla, say to make it with + cedilla, but example shows comma. + + By the way: + > Got rid of commaaccent and dotlessj in Corporate Use + > Replaced shadedark, with little squares now not overlapping. + > Corrected IPA symbol 'ts' 02A6, added 02a8, 02a9, 02aa, 02ab, 02ac, + 02ad, 02ae, 02af + + (so many changes...the CVS server was down...) + + * FreeSerif.sfd: + + Re-named arabic and hebrew characters + Big adjustment to comma-accents. Mostly effects Greek Extended. + Made such accents to be like comma, rather than like Russian apostrophe + (and de-referenced that symbol) + +2008-04-04 Steve White + * FreeMono.sfd, FreeSerif.sfd: + + Raised dot on superscript i (2071) -- more distinct at small sizes + + * FreeMono.sfd: + + added two IPA symbols + +2008-04-02 Steve White + * FreeSerif.sfd: + + fixed a few more control points too close + + Fixed names of languages in ligature table for latn "w/i". + This fixes a crash when FontForge opened the ttf table + + Motivated by bug crashing FontForge when opening ttf file, + started cleanup of useless control points. Not finished. + Got partway through Sinhala + +2008-03-31 Steve White + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Fixed various "Find Problems", including glyphs with mixed-up names, + and bad TT matrices. (lots more bad TT matrices remain) + + * FreeSerif.sfd: + + Re-named a bunch of Cyrillic letters + + * FreeSerif.sfd: + + Put above mark on Cyrillic i and double-dot i for Slavonic number forms + +2008-03-30 Steve White + * FreeSans.sfd: + + Tightened spacing on glyphs of last commit + + * FreeSans.sfd, FreeSerif.sfd: + + Concerning bug #16120, Include upper case Wynn and upper case Yogh + Adapted Herman Miller's Thyromanes letters 01F7 021C 021D for Serif + Drew my own versions for Sans. + + * FreeSerif.sfd: + + Added 04F6,7 + + * FreeSerif.sfd, FreeSerifItalic.sfd: + + Made more Cyrillic diacritics really combine. + Made a mark lookup just for Cyrillic diacritics, + Marked most of the unadorned Cyrillic alphabet. + + Still not clear on correct shapes for some of the marks. + + * FreeMono.sfd, FreeMonoOblique.sfd: + + Tweeks to accents + +2008-03-29 Steve White + * FreeSans.sfd, FreeSerifItalic.sfd: + + Small adjustments in Cyrillic + + * FreeSerif.sfd: + + Corrected small palochka + Made Cyrillic combining hundred-thousands and millions really combine + Named some combining diacriticals + + * FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: + + Mostly adjusted horizontal spacing of mono oblique faces + + * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + More cleanup of Cyrillic ranges + + Completely re-did horizontal spacing of SerifItalic and SerifBoldItalic. + See bug #17912, poor kerning in Cyrillic oblique... + https://savannah.gnu.org/bugs/index.php?17912 + It looked like chaos to me. + Only so much can be done: the font is flawed. + But I think the changes make text readable in these faces. + + There were dozens of incorrect glyphs in higher-numbered characters. + I deleted all those I found. No glyph is better than a wrong glyph. + + Futzt with accents, shooting for consistency and readability. + + A maintenance thing: making correct references (acyrillic vs a, + although they may be the same glyph) I made a lot of headway, but + it isn't finished. + + Likewise, a large fraction of these are compound characters, which can + be made with references, resulting in easier maintenance, reduced + likelihood of errors, and smaller files. I replaced many. + + * FreeSerif.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Cyrillic italic + Added italic, bolditalic + 0493, 04a7, 04AD + because their form clearly varies in italic. But was just guessing... + + * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Cyrillic italic + + Added italic, bolditalic + 0493, 04AD + because their form clearly varies in italic. + But was just guessing as to exact form. + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Overhaul of Cyrillic + + Italic, BoldItalic + added small yat for bug #22588 (note Times New Roman doesn't use + alternate form in Italic) + + All forms of Serif have big problems in Cyrillic. + + The ugliest is in roman. The letters, even of the Russian alphabet, are + of inconsistent height (awfully, small 0438 (ii) 0446 (tse)) + and they vary from the height of Latin + and they vary from the height of italic and bold. + They are a mish-mash of letters from several fonts, of similar (but not + quite identical) weight, and similar, (but not quite identical) size. + + I think the best solution would be to identify the face that best + matches Latin, and fill the range with that. I think this is possible + because the rarer letters seem to be better: the common letters are the + ones that are wrong. + + For now, I just increased the sized of 0438 and 0446, and 048a, 048b, + also 0459 (lje) 045A (nje) 0464 (dje) + + Other issues + +2008-03-27 Steve White + * FreeSerifBoldItalic.sfd: + + Moving all Greek capitals with accent so they don't cover previous + letter. Remedies bug #12798 + + * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: + + Various tweeks to accented Latin letters. + Connected O-ogonek correctly + + * FreeSerifItalic.sfd: + + Accents of numerous accented Latin letters got shifted in a previous + commit. This fixes it. + + * FreeSerif.sfd: + + Adjusted combining tack left and right (0318-0319) to be above -300 EM. + + * FreeSans.sfd, FreeSerif.sfd: + + Added some "middle" marks for positioning of diacritics + + * FreeSans.sfd: + + Copied 4 enclosing combining diacriticals from Serif 20DD - 20E0 + + * FreeSerif.sfd: + + Adjusted and added some enclosing diacritics 20DD - 20E0 + In response to Debian bug #472566 + ttf-freefont: U+20DD COMBINING ENCOLSING CIRCLE doesn't combine + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=472566 + +2008-03-26 Steve White + * FreeSerif.sfd: + + Lowered a few over-high Latin accents + + * FreeSansBold: + + Devangari--only digits 1 and 2, and nothing else. Deleted + + * FreeMonoBold, FreeMonoOblique, + FreeSerifBold, FreeSeriftalic, FreeSerifBoldItalic, + FreeSansOblique, FreeSansBold, FreeSansBoldOblique: + + Got rid of dotlessj, comma in Corporate Use + Single Substitution lookup, ccmp table + Made proper dotlessj, re-linked j-circumflex + + Note: + FreeSansBold has a commaaccent in Corporate Use, used by several other + characers. Haven't done anything about this. + +2008-03-25 Steve White + * FreeSerif.sfd: + + Added/corrected glyphs for yeh hamza in Arabic, + Added init and medi lookups for yeh hamza. + +2008-03-24 Steve White + * FreeSerif.sfd: + + Added isolated and final forms for + 0629 teh marbuta + 0624 waw hamza + 0626 yeh hamza + 0649 alef maksura + A previous commit had added lookups that referred to these, + + More fiddling with super/subscripts + + * Makefile, Makefile, GenerateTrueType: + + Scripts and Make targets to generate OpenType fonts and zip file + + * maintenance.txt: + + Added gnupload and info about tagging + +2008-03-23 Steve White + * FreeSerif.sfd: + + Last of Find Problems -> ATT + 'mark' Latin lookup: afii10026 is in 'cyrl', also afii10074 + Upper and lower Cyrillic i. Just removed mark from both letters. + + 'half' Bengali lookup Khanda_Ta is in 'bng2'. Added bng2 to lookup + Added TtTable etc + + Clean-up of Points too Close through to end of font. + This episode completes the paths/points clean-up of Serif. + But note: many ranges, esp. Ethiopic, Japanese, and Indic, have way + too many points, resulting in lumpiness. + + At this point, FontForge can convert splines to quadratic, auto-hint, + and auto-instrument without segfault. + + * Makefile, sfd/Makefile, tools/GenerateTrueType: + + Alterations to build process: added a Makefile, and made to work + on my system. Now auto-hints before generating TrueType. + +2008-03-22 Steve White + * sfd/FreeSans.sfd: + Lots of additions of math characters. Should complete for + LaTeX 2e, except for extensible brackets. + +2008-03-21 Steve White + * *.sfd: + + Regularized stacking of accents in Latin Extended Additional + Changed name of 00B5 from 'mu' to 'micro', + 2206 from 'Delta' to 'Delta.math', + 0308 from 'diaerisis' to 'diaerisiscomb' + + * FreeMono.sfd: + + additions to IPA + + * FreeMonoBoldOblique.sfd: + + Moved dotlessj from Corporate Use, + Deleted commaaccent there + Fixed mis-named glyphs tcommaaccent, Tcommaaccent + Changed name of 030A from 'dieresis' to 'ringcomb' + + * FreeSans.sfd: + + Added some arrows, and a couple of blackboard bold characters + + Several characters in U+F600 Corporate Use range + dotlessj, onefitted, commaaccent + + dotlessj referred to by: jcircumflex, uni01F0: + renamed it to uFFFF, re-linked others by hand + + commaaccent + http://diacritics.typo.cz/index.php?id=9 + should be u+0326 but wasn't linked to anything + + * FreeSansBold.sfd: + + U+0617 etc: read glyphs "4GWglm". It should be Arabic. Deleted + + * FreeSansBold.sfd, FreeSansOblique.sfd, FreeSansBoldOblique.sfd: + + Removed bogus glyphs for 200C 200D, ZWJ and ZWNJ + + * FreeSerif.sfd: + + Split lookup for ligatures in latin into two classes; + ff, ffl, fl which are appropriate for all languages, + and fi, ffi, which are not appropriate in Turkish (due to distinction + between short and long i) + Needs to be done for other faces. + + Filled set of extensible brackets in Miscellaneous Technical + + Think IPA is now complete. + +2008-03-18 Steve White + * FreeSans.sfd: + + clean-up of all path issues and points too close + +2008-03-18 Steve White + * FreeSans.sfd: + + Something was causing crashing effects in Windows. Cleanup of + problems eventually made it go away. Now works well. + + Cleaned up many "points too close" + + Cleaned up all ATT problems, of which there were many and various. + + # Incorrectly labelled zero-width joiner used in a ligature + + # Incorrect substitution of dotlessi and dotlessj with i and j was + somehow connected with FontForge crash. Attemts to remove the + substitution would damage a 'ccmp' table; subsequent changes would + result in FontForge crashing on save, and truncating the sfd file. + Surgically removed with vi. + + # A couple of Indic lookups had incorrect script DFLT; one had 'latn'. + + # Don't understand why there are scripts named + dev2 bng2 grj2 gur2 when there are already deva beng gurj guru + But anyway, lots of 'vatu' 'pres' 'haln' and 'liga' lookups contained + characters in the '2' scripts but were lablled only for the 'non-2' + ones. Added the '2' scripts to all these lookups. Suspect a mistake. + + Note: several of these problems are repeated in other Sans faces. + +2008-03-16 Steve White + * FreeMono.sfd: + + Cleanup of many path problems "points too close" + + Strove to make accents Latin Extended range legible at small sizes + + Named some unnamed characters; removed a duplicate + + At this point, all fonts are passing FontForge Validate. + +2008-03-15 Steve White + * FreeSerif.sfd: + + CJK punctuation: made some of the very high glyphs smaller (under 900EM) + The brackets in Sans were very ugly, and not even Sans-serif. + Serif: added extensible square brackets, diddled with integral + corrected direction of some added glyphs + + Several bugs having to do with missing glyphs in Tamil range. + Also a buggy ligature in Devangari. + + Shortened names of many lookup tables + + Futzt with some combining diacriticals + + Added extensible square brackets. + + * FreeSans.sfd: + + Changed names of a bunch of glyphs with invalid + TrueType names, in range 0x1025f+ (not real Unicode). + Took pains to retain information contained in the names. + Wonder if these glyphs have ever been of any use. + + CJK Punctuation: brackets were hand-drawn and very ugly. Improved. + + * *.sfd: + + Set OS/2 Metrics back to absolute 900/300. Offsets are not + interpreted uniformly. + + Cleanup of many path problems up to extrema and self-intersecting + + Ordered PS Blue values. + +2008-03-14 Steve White + * FreeSerif.sfd: + + Got rid of mixed references and contours + Cleanup of many path problems "points too close" + + Started clean-up to satisfy FontForge Validate + + Changed names of three glyphs in the + Tamil ligatures range...all clearly bugs. + + * FreeSans.sfd: + + Added slanted-hyphen + + * *.sfd: + + Unified OS/2 Metrics + Added Grid Fit + +2008-03-13 Steve White + * FreeSans.sfd: + + Rearranged PS BluesValues so they were in increasing order, + Made all 20 in width. + +2008-03-12 Steve White + * FreeSans.sfd, FreeMono.sfd: + + Added TrueType hinting tables. + Fixed glyphs that didn't convert well to quadratics + Got rid of mixed contours and refs + + * FreeSerifBold.sfd: + + Cleanup of path problems + +2008-03-11 Steve White + * FreeMonoOblique.sfd: + + Cleanup of path problems + +2008-03-09 Steve White + * FreeSerif.sfd: + + Corrected L-dot + Further cleanup of path/ref problems + + Found several ligatures that referred to a missing glyph "ZWJ". + Took this to mean the "zero width joiner" u+200D + + * *.sfd: + + Changed OS/2 metrics to be absolute 900/300 + + * FreeSerifItalic.sfd: + + Added Greek lunate epsilon + + * FreeMono.sfd: + + Many additions in math range + Reduced size of binary union, intersection, vee, wedge + Corrected empty set + Corrected logical 'assert' relations, etc. 22a2-22af + Efforts to make Math glyphs legible at small point sizes + + * FreeSans.sfd: + + Added Greek lunate epsilon and rho symbol + Unstacked more stacked diacriticals + + Further cleanup of path/reference problems + +2008-03-08 Steve White + * FreeSans.sfd, FreeSerif.sfd: + + Added some "n-ary" Math operators + + * FreeSerif.sfd: + + Further clean-up of path problems...up to Ethiopic + > Started adding and correcting Math operators for LaTeX 2e + > Corrected n-ary union, intersection, and spikes to be larger + than the binary operators + > Made (many of) the operators based on + - = to use those + symbols directly (by reference or copying). + > Added lunate epsilon + > Corrected empty set + > Tightened up spacing of some other technical characters + > Worked on some more math operators involving = + > triangle + > Several arrows + > Supplemental Arrows-A + + * FreeSans.sfd: + + Clean-up of font paths + Open self-intersecting outermost-clockwise missing-extrema + also flipped references (unlinked) + + Added Greek lunate epsilon and rho symbol + +2008-03-06 Steve White + * sfd/FreeSerif.sfd: Shortened and thickened the combining hook mark, + U+0309, to make more like Unicode samples. + Also see (bug #22499) un-stacked incorrectly stacked accents + +2008-03-05 Steve White + * sfd/FreeSerif.sfd: vertical lines: combining diacritical marks + corrected 0300 030D 0329 0348 (were rendered as straight apostrophes) + Spacing Modifier letters added 02C8 02CC + 02B9 02Ba prime and double-prime + Fixed positioning U+1EC8, 9, I with hook above + +2008-03-03 Steve White + * sfd/FreeSerif.sfd: TT strings updates. + updated Copyright to 2008 + Added Vendor URL as the Savannah freefont site + * sfd/FreeMono.sfd: A standard pangram as the Sample Text for Russian + It reads: In the thickets of the South once there was a citrus + ...--yes, but a fake specimen! + * sfd/*.sfd: Set the OS/2 Sup/Sub settings, which by default looked + like random trash. + +2008-03-02 Steve White + * sfd/FreeSerif.sfd: began cleanup of problems given by FontForge + "Find Problems" feature. (bug #22454) + +2008-03-01 Steve White + * sfd/FreeSerif.sfd: made Arabic work for text display (bug #22329) + Added required contextual replacement tables, + Made a few missing characters, + * sfd/*.sfd: Removde all back layers from glyphs that had them. + +2008-02-27 Steve White + * sfd/FreeSans.sfd: filled in Combining Diacriticals + * sfd/FreeSerif.sfd: shifted whole Arabic range down by 200EM. + +2008-02-26 Steve White + * sfd/FreeSerif.sfd: enabled DPOS table. + +2008-02-24 Steve White + * sfd/*.sfd: Much fiddling with the "combining diacriticals" + range 0300-036F. Made to align with medium-size lowercase + preceding character if not using DPOS table. + +2008-02-23 Steve White + * sfd/FreeSerif.sfd, FreeSans.sfd, FreeMono.sfd: (bug #21784) Filled + in set of HTML 4 Character Entities. + + * sfd/FreeSerif.sfd, FreeSans.sfd, FreeMono.sfd: (bug #18413) + undertie too low -- went on to tidy other similar characters in + Combining Diacriticals range. + +2008-02-21 Steve White + * sfd/*.sfd: Moved capital Greek letters with tonos so tonos doesn't + cover preceding letter (bug #12798) + + * sfd/FreeSerif.sfd, FreeSans.sfd: (bug #13370) made extended + integrals to line up. + +2008-02-20 Steve White + * sfd/*.sfd: started removing glyphs with back layers (printing bug) + * sfd/*.sfd: adjusted vulgar fractions (bug #17756) + * sfd/*.sfd: adjusted numerical superscripts (bug #20278) + +2008-02-18 Steve White + * sfd/FreeSerif.sfd: Offset Hiragana and Katakana ranges (bug #22326) + * sfd/FreeSerif.sfd: U+30FB, KATAKANA MIDDLE DOT to be full width + (bug #18326) + + * sfd/FreeSerif.sfd: Re-promoted + ff ffi ffl fi fl + as standard ligatures in Latin. + +2008-02-17 Steve White + * sfd/*.sfd: committed to FontForge Spline Font Database (SFD) 2 + format. + +2008-02-10 Steve White + * sfd/*.sfd: brought into line with Debian ttf-freefont + Deleted a couple of patches, and applied those applied to Debian. + +2006-09-20 Primoz Peterlin + + * INSTALL: added installation procedure for MacOS X, courtesy + Philipp Kempgen. + +2006-05-04 Primoz Peterlin + + * sfd/FreeMono.sfd: deleted Russian sample text, which did not + conform to UTF-7. + +2006-04-15 Primoz Peterlin + + * sfd/FreeSerif.sfd: corrected U+10D3. + + * sfd/FreeSans.sfd: ligature U+FB06 (LATIN SMALL LIGATURE S T) + changed from mandatory ("liga") to discretionary ("dlig") (bug + #16253). + + * sfd/FreeMono.sfd: deleted incomplete glyph U+FB06 (LATIN SMALL + LIGATURE S T); deleted U+FB00, U+FB01, U+FB02, U+FB05 as + ligatures (bug #16253). + + * sfd/FreeMonoOblique.sfd, sfd/FreeMonoBoldOblique.sfd: added + U+FB00; deleted U+FB01, U+FB02 as ligatures (bug #16253). + + * sfd/FreeMonoBold.sfd: deleted U+FB00, U+FB01, U+FB02 as + ligatures (bug #16253). + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd: added Georgian letters, donated by + Gia Shervashidze + +2006-02-22 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd: ligature U+FB4F + changed from mandatory ("liga") to discretionary ("dlig"). This is + respons to Bug#349657: [bug #15792] Freefont Alef and Lamed + combine + +2006-02-21 Primoz Peterlin + + * sfd/FreeSerifBold.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd, + sfd/FreeSansBold.sfd: ligature U+FB4F changed from mandatory + ("liga") to discretionary ("dlig"). This is respons to Bug#349657: + [bug #15792] Freefont Alef and Lamed combine + + * sfd/FreeSerif.sfd: corrected bug#275759: [bug #15790] FreeSerif + glyphs for U+2198/U+2199 were reversed. + +2006-02-15 Denis Jacquerye + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeMonoBold.sfd: removed ij + and IJ ligatures. + +2006-02-10 Primoz Peterlin + + * sfd/FreeSerif.sfd: added small Georgian letters (mkhedruli), + donated by Gia Shervashidze + + * AUTHORS: Added Gia Shervashidze + + * CREDITS: Added Gia Shervashidze + +2006-01-26 Primoz Peterlin + + * notes/maintenance.txt: Added information on the Makefile now + used; username for FTP login is anonymous. + + * sfd/FreeSansBold.sfd: added U+0569, U+0571, U+0579, U+057B, + U+0586. Armenian small letters completed. + + * sfd/FreeSerif.sfd: added U+0297, U+02AD-02AF. IPA Extensions + section is now complete. Copied a dozen of glyphs from Omega IPA + to Phonetic Extension section. + +2006-01-25 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+01A, U+01A3, U+01A6, U+01B2, U+01BA, + U+01BB, U+01BE, U+01BF. + + * sfd/FreeSans.sfd: aligned small Armenian letters to x-height in + response to bug #15480. Armenian in Free Sans needs a major + cleanup. + +2006-01-24 Primoz Peterlin + + * sfd/FreeSerif.sfd: changed U+0452, U+045B. Cleanup: U+0460, + U+0461, U+04Bc, U+04BD, U+0508. + + * sfd/FreeSansOblique.sfd: replaced accented chars in Latin-1 and + Latin Extended-B sections with references, where possible. + + * sfd/FreeSerif.sfd: changed U+0285. + +2006-01-23 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0195, U+01AA, U+0297, U+03D7, + U+03F0. Several flipped references replaced by outlines. + + * sfd/FreeSansOblique.sfd: Latin Extended-B section more or less + brought in sync with FreeSans. + + * sfd/FreeMonoBoldOblique.sfd: added glyphs from FreeMonoBold in + the Latin Extended-B and IPA Extensions sections. + + * sfd/FreeSerifBold.sfd: Added U+0224, U+0225. Changed U+01B7, + U+01B8, U+04E0, U+0452, U+045B. Replaced accented characters in + the Cyrillic region with references. + +2006-01-21 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0255, U+0264, U+0277, U+0286, + U+029D. Changed U+0261. Deleted spurious glyphs in the control + code area. + +2006-01-19 Primoz Peterlin + + * sfd/FreeSans.sfd: replaced Hardip Pannu Singh's Gurmukhi with + AnmolUni by Kulbir Singh Thind. + +2006-01-17 Primoz Peterlin + + * sfd/FreeSansBold.sfd: Added U+018D, U+0194, U+01B5, U+01B6, + U+01BE, U+0262, U+02A2. + + * sfd/FreeSansBold.sfd: Changed U+0261 in order to distinguish it + from U+0067. Changed U+0251, U+0252. + + * sfd/FreeSerifBold.sfd: Small changes in the Cyrillic + section. Added U+0183, U+018C. + + * sfd/FreeSans.sfd: Added U+2045, U+2046. + + * sfd/FreeSansBold.sfd: Filled in the Gurkmukhi part with the + AnmolUni-Bold by Kulbir Singh Thind. Also some minor corrections + in the Cyrillic part. + + * CREDITS: Added Kulbir Singh Thind. + + * AUTHORS: Added Kulbir Singh Thind. + +2006-01-14 Primoz Peterlin + + * sfd/FreeSerif.sfd: Thomas Ridgeway's Tamil characters replaced + by the ones released by the Samyak font project. + + * CREDITS: Added Pravin Satpute, Bageshri Salvi, Rahul Bhalerao + and Sandeep Shedmake + + * AUTHORS: Added Pravin Satpute, Bageshri Salvi, Rahul Bhalerao + and Sandeep Shedmake + +2006-01-08 Primoz Peterlin + + * sfd/FreeSansBold.sfd, sfd/FreeMonoBoldOblique.sfd: minor changes. + +2006-01-05 Denis Jacquerye + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd: added cedi sign U+20B5, Ghanaian + currency + +2005-12-29 Primoz Peterlin + + * sfd/FreeSans.sfd: minor cleanup in the Gujarati part. + +2005-12-22 Primoz Peterlin + + * sfd/FreeSans.sfd: Devanagari and Gujarati parts cleared; once + again merged with Gargi 1.9 and Padmaa 0.6, this time correctly so + that the anchor points survived the merger. + +2005-12-16 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0577. + +2005-12-15 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0559, U+055F, U+2024. + + * sfd/FreeSansBold.sfd: added U+056E, U+0573. + +2005-12-14 Primoz Peterlin + + * sfd/FreeSans.sfd: Merged with Gargi 1.9 and Padmaa 0.6, + courtesy Monika Shah and Sonali Sonania from C-DAC, Mumbai. + + * CREDITS: Added Monika Shah and Sonali Sonania. + + * AUTHORS: Added Monika Shah and Sonali Sonania. + +2005-12-13 Primoz Peterlin + + * sfd/FreeSans.sfd - Removed Sinhala glyphs. + + * sfd/FreeSerif.sfd - Added Sinhala glyphs, formerly in FreeSans. + +2005-12-09 Primoz Peterlin + + * sfd/FreeSerif.sfd: added U+20AF, U+211E. Changed U+20AC (EURO + SIGN). + + * tools/freefont-ttf.spec: Added specification file for building + RPM package, courtesy Rok Papez. + + * sfd/FreeSerifBold.sfd: added more glyphs from Txfonts to the + Arrows and Mathematical Symbols ranges. + + * sfd/FreeSerifBoldItalic.sfd: added U+03F5 from Txfonts. + +2005-12-08 Primoz Peterlin + + * sfd/FreeSans.sfd: added U+0567, U+056A, U+056C, U+0582. + + * sfd/FreeSerifBold.sfd: copied Box Drawing range from FreeSans. + + * sfd/FreeSerifBold.sfd: added glyphs from Txfonts to the Arrows + and Mathematical Symbols ranges. + + * sfd/FreeSerif.sfd: added U+2259-225A, U+22BA, U+2308-230B, + U+2322-2323. Cyrillic composite characters replaced with + references. + +2005-12-07 Primoz Peterlin + + * sfd/FreeSerifBold.sfd: added U+025A, U+025D, U+026B, U+029B, + U+02AE, U+02AF, U+02DE. + + * sfd/FreeSerifBold.sfd: updated Hebrew part with Drugulin font + from the Culmus project. + + * sfd/FreeSerif.sfd: added U+207A-207C, U+208A-208C, U+2215-2216. + + * sfd/FreeSans.sfd: added U+2320 TOP HALF INTEGRAL, U+23AE + INTEGRAL EXTENSION, U+2321 BOTTOM HALF INTEGRAL (bug #13370). + +2005-12-07 Primoz Peterlin + + * sfd/FreeSerifBold.sfd: added U+0294-0296, U+02A1-02A2. Started + adding "below" anchors. Performed hinting on characters that were + not hinted "en masse". + +2005-12-06 Primoz Peterlin + + * sfd/FreeSans.sfd: fixed some more metrics problems in the + Extended Greek area; performed hinting on characters that were not + hinted "en masse". + + * Makefile: clean also signature files. + + * sfd/FreeMonoBoldOblique.sfd, sfd/FreeMonoBold.sfd: cosmetic + changes; cleaning background of referenced composed characters. + +2005-12-05 Panayotis Katsaloulis + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd: Some changes to the greek glyphs, + mostly having to do with "tonos" (accent) + +2005-12-05 Primoz Peterlin + + * sfd/FreeSans.sfd: minor cosmetic changes. + + * sfd/FreeSans.sfd: adjusted widths of characters in the Extended + Greek range; accents are not any more considerably overhanging on + the left side. Added U+1EDA-1EE3, U+1EE8-1EF1. + + * sfd/FreeSans.sfd: continued working on Extended Greek range; + metrics still not finished. + +2005-12-03 Primoz Peterlin + + * sfd/FreeSans.sfd: fixed combined Greek accents (bug + #12800). Width of characters still need to be adjusted as in + FreeSerif. + + * sfd/FreeSerif.sfd: fixed positions of Greek accents (bug #12798). + + * CREDITS: Added Panayotis Katsaloulis. + + * AUTHORS: Added Panayotis Katsaloulis. + + * Makefile: minor changes; now creating also a tarfile with sfds. + +2005-12-01 Primoz Peterlin + + * sfd/FreeSerifItalic.sfd: added U+0183, U+018C, U+01C0, U+01C1, + U+01C3, U+01E0, U+01E1, U+01F8, U+01F9. + + * Makefile: created a Makefile to assist building. + + * README: an update. + + * COPYING: added GNU General Public License, version 2. + + * tools/GenerateTrueType: wrote a FontForge script for conversion + to TrueType. + + * sfd/FreeSerif.sfd: merged with SolaimanLipi Bangla OpenType font + from www.ekushey.org, courtesy Solaiman Karim. + + * sfd/FreeSerifItalic.sfd: merged with SolaimanLipi Bangla + OpenType font from www.ekushey.org, slanted by 15.5 degrees. + + * sfd/FreeSans.sfd: merged with Rupali Bangla OpenType font from + www.ekushey.org + + * sfd/FreeSansOblique.sfd: merged with Rupali Bangla OpenType font from + www.ekushey.org, slanted by 12 degrees. + + * CREDITS: added Solaiman Karim + + * AUTHORS: added Solaiman Karim + +2005-11-30 Primoz Peterlin + + * sfd/FreeSerif.sfd: merged with the Rachana Normal. + + * AUTHORS: added K.H. Hussain and R. Chitrajan + + * CREDITS: added K.H. Hussain and R. Chitrajan + +2005-11-23 Primoz Peterlin + + * sfd/FreeSans.sfd - cleaned some background images. + + * sfd/FreeSans.sfd - added U+01A0-01A1, U+01AF-01B0, U+026E, + U+028F, U+0291, U+02A3-02A5, U+031B. Modified U+0198. + +2005-11-22 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+2504-250B. + + * sfd/FreeSans.sfd - added U+2591-25A1, U+25A3-25A5, U+25AA, U+25AC. + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd - added U+0263. + +2005-11-21 Primoz Peterlin + + * sfd/FreeMono.sfd - corrected positions of some Greek diacritics + on page 0x1F. + + * sfd/FreeMonoOblique.sfd - working on bringing it in sync with + FreeMono.sfd. + + * sfd/FreeSerifBoldItalic.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Added a couple of + glyphs in the IPA Extensions region. + + * sfd/FreeSansBold.sfd - added U+0574, U+0576. Removed overlaps. + +2005-11-20 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+02AA-02AC, U+02B0-02B2. + +2005-11-19 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+01B7-01B9, U+0196, U+019A, U+01C3, + U+0224-0225, U+025E, U+029A, U+2422. Changed U+0184-0185, U+0192, + U+01B4, U+0282, U+0284. + +2005-11-18 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+02EE, U+207F. + + * sfd/FreeSans.sfd - started Box Drawing area. + +2005-11-17 Primoz Peterlin + + * sfd/FreeSerifBold.sfd - added glyphs from the Omega project to + Latin Extended-B, IPA Extensions and Greek ranges. + + * sfd/FreeSerifBoldItalic.sfd - added glyphs from the Omega + project to Latin Extended-B, IPA Extensions and Greek ranges. + + * sfd/FreeSerifItalic.sfd - added glyphs from the Omega + project to Latin Extended-B, IPA Extensions and Greek ranges. + + * sfd/FreeSerifItalic.sfd - added U+018B, U+025C, U+0265, U+026F, + U+0279, U+0287, U+028C-028E, U+029E. + + * sfd/FreeSerifBoldItalic.sfd - added U+1EDA-1EE3, U+1EE8-1EF1, + U+2190-219B, U+219E-21A8, U+21B9-21BA, U+21C4-21CA, U+21E4-21E5, + U+2669-266F. MES-1 compliant. + + * sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - added U+FFFD. + + * sfd/FreeSerif.sfd - removed overlaps in Latin Extended-B and IPA + Extensions ranges. + +2005-11-16 Primoz Peterlin + + * sfd/FreeSerifItalic.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. + + * sfd/papers/eurotex2003/freefont.tex, + sfd/papers/eurotex2003/freefont.bib - Revised version, sent back + by Karl Berry on 20050110, that should match the one published in + TUGboat. + + * sfd/FreeSerifItalic.sfd - started added accent anchors. Added a + handful of Greek letters from Omega font collection. + + * sfd/FreeSerif.sfd - added a handful of letters in the Latin + Extended-B and IPA Extension ranges from the Omega font collection. + +2005-11-16 Denis Jacquerye + + * sfd/FreeSerif.sfd - moved U+0263 to U+0264; added U+0263 + + * sfd/FreeSerifItalic.sfd - fixe U+01EE; added U+01B7-U+01B9 + +2005-11-16 Primoz Peterlin + + * sfd/FreeSans.sfd - Made small Greek letters the same height as + Latin and Cyrillic ones and replaced them with references, where + applicable. + + * sfd/FreeSerif.sfd - replaced Greek letters with references, + where applicable. Added U+03D7, U+03F0-03F2. + + * sfd/FreeSerif.sfd - added U+0255, U+025A, U+025D, U+025F, + U+0262-0263, U+026B-026C, U+0274, U+0276-0277, U+028F, U+0291, + U+029D. + + * sfd/FreeMonoOblique.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Added U+F6BE. + + * sfd/FreeSansOblique.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. + + * sfd/FreeSans.sfd - changed U+01A5. + +2005-11-16 Primoz Peterlin + + * sfd/FreeSans.sfd - applied the sequence suggested by Werner + Lemberg for reducing redundant points. Replaced accented glyphs in + the Latin-1 and Latin Extended-A areas with references. Made + capital Greek letters the same height as Latin and Cyrillic ones + and replaced them with references, where applicable. + +2005-11-15 Denis Jacquerye + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSansOblique.sfd - fixed + U+026A, it was a dotlessi and therefore like U+0069 when + accented. + +2005-11-15 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - corrected Greek tonos (slanted instead of + a vertical line). + + * sfd/FreeMonoBoldOblique.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Replaced accented + glyphs in the Latin-1 and Latin Extended-A areas with references. + +2005-11-14 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Added 2005 in copyright info. + + * sfd/FreeSansBoldOblique.sfd - applied the sequence suggested by + Werner Lemberg for reducing redundant points. Replaced accented + glyphs in the Latin-1 area with references. + + * sfd/FreeSansBoldOblique.sfd - added U+0180, U+0184, U+0185, + U+0195, U+01A0-01A2, U+01AF-01B0, U+025E, U+026E, U+0292, + U+0294-0296, U+029A, U+02A1, U+2126-2127, U+2190-219B, + U+219E-21A8, U+21C4-21CA, U+2669-266F. MES-1 compliant. + + * sfd/FreeMono.sfd - Replaced accented glyphs in the Greek and + Cyrillic areas with references. + + * sfd/FreeMonoBold.sfd - applied the sequence suggested by Werner + Lemberg for reducing redundant points. Replaced accented glyphs in + the Latin-1 and Latin Extended-A areas with references. + +2005-11-14 Primoz Peterlin + + * sfd/FreeSerif.sfd - applied the sequence suggested by Werner + Lemberg for reducing redundant points. + + * sfd/FreeSansBold.sfd - added U+219A, U+219B, U+2669-266F. + + * sfd/FreeSerifBold.sfd - added U+2669-266F. + +2005-11-12 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+0180, U+0181, U+0183, U+0187, + U+0188, U+018A, U+018C, U+018D, U+0193, U+019C, U+01A0, U+01A1, + U+01AC, U+01AF, U+01B0, U+025C, U+0260, U+026E, U+0277, U+0281, + U+0284. + +2005-11-11 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+195, U+1A6, U+025E, U+026E, + U+029A, U+0313, U+0314, U+0342, U+0344, U+0345. Started adding + accent anchors. + + * sfd/FreeMono.sfd - applied the sequence for reducing redundant + points, suggested by Werner Lemberg. + + * sfd/FreeMono.sfd - corrected Greek letters (using tonos instead + of a vertical line). Added U+026E, U+F6BE. Accented characters in + Latin 1, Latin Extended A and partly Latin Extended B replaced by + references. + + * sfd/FreeSerifBold.sfd - applied the sequence for reducing + redundant points, suggested by Werner Lemberg. Added U+01A5, + U+02A0, U+2190-219B, U+219E-21A8, U+21B8, U+21B9, U+21C4-21CA, + U+21E4, U+21E5. + +2005-11-10 Primoz Peterlin + + * sfd/FreeSansOblique - changed U+0192, U+01A5; added U+01C0-01C3. + + * sfd/FreeSansBold.sfd - replaced glyphs with references in the + Cyrillic area. Removed U+04A8, U+04A9. Added U+04C5, U+04C6, + U+04C9, U+04CA, U+04CD, U+04CE, U+0535, U+053F, U+0546, U+0565, + U+0584, U+0587, U+0589. + +2005-11-10 Denis Jacquerye + + * sfd/FreeSans.sfd - added U+028A-U+028B + + * sfd/FreeSansOblique - added U+028A-U+028B, U+0276, + U+0292, U+0294-U+0296, U+0298-U+0299 and U+029B; fixed some + other glyphs + +2005-11-10 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+01A6. Simplified outlines in the + ASCII range. + + * sfd/FreeSansBold.sfd - added U+00A0, U+00AD, U+0531, U+2126, + U+2190-2199, U+219E-21A8, U+21C4-21CA. + + * sfd/FreeSansBold.sfd - applied the sequence for reducing + redundant points, suggested by Werner Lemberg. Added automatically + constructed accented characters in page 0x1E. + +2005-11-09 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+0183, U+018C. + + * sfd/FreeSans.sfd - added U+1EA2, U+1EA3, U+1EA8, U+1EA9, U+1EB2, + U+1EB3, U+1EBA, U+1EBB, U+1EC2, U+1EC3, U+1EC8, U+1EC9, U+1ECE, + U+1ECF, U+1ED4, U+1ED5, U+1EE6, U+1EE7, U+1EF6, U+1EF7, U+220A, + U+220B, U+220D, U+2272, U+2273, U+2282, U+2283. + + * sfd/FreeSerifItalic.sfd - changed U+03D5. + + * sfd/FreeSerifBoldItalic.sfd - changed U+03C6; added U+2070, + U+2075-2079, U+207F, U+2080, U+2085-2089, U+2155-217F. + + * sfd/FreeSerif.sfd - added U+0184, U+0185, U+018D, U+0195, + U+0197, U+019A, U+019B, U+01A0, U+01A1, U+01AC, U+01B5, U+01B6, + U+01C0, U+01C1, U+01C3, U+01F6, U+0294-0296, U+1E9A, U+1EDA-1EE3, + U+1EE8-1EF1. + +2005-11-07 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+0562, U+056D. U+0575. + + * sfd/FreeMono.sfd - added U+0589. + +2005-11-06 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+0278, U+03D5, U+2248. Corrected + U+2071, U+222E, U+2242, U+2243 in response to bug reports + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276118 + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276120 + + * sfd/FreeMono.sfd - added U+2227, U+2228, U+2262. Corrected + U+2299-229D in response to bug report + http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276121 + + * sfd/FreeMonoBold.sfd - added U+2010, U+2012 in response to bug + report http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=289032 + Swapped U+03C6 (Greek small letter phi) and U+03D5 (Greek phi + symbol) in order to conform to Unicode standard. Simplified glyph + shapes in ASCII range. Started adding "above" and "below" anchors. + +2005-11-05 Primoz Peterlin + + * sfd/FreeSerif.sfd - accented letters in Latin Extended-A + replaced by references wherever possible. + + * sfd/FreeSerif.sfd - added U+0180, U+0181, U+0187, U+0188, + U+018A, U+0193, U+019C, U+01A4, U+01A5, U+01A7, U+01A8, U+01AF, + U+01B0, U+026E, U+0270, U+0278, U+0280, U+0281, U+028B, U+0299, + U+029C, U+029F. + +2005-11-03 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+0180, U+0184, U+0185, U+0192, + U+019B, U+01A0-01A2, U+01AF, U+01B0, U+01EE, U+01EF, U+0292, + U+0294-0296, U+02A1, U+0532, U+054C, U+057C, U+222B. Changed + U+014B, U+01A5, U+01B4, U+03BB. + + * sfd/FreeSans.sfd - added U+04C5, U+04C6, U+04C9, U+04CA, U+04D, + U+04CE. + + * sfd/FreeSansBold.sfd - cleaner Arabic outlines. Added U+01E4, + U+01E5. + +2005-11-02 Primoz Peterlin + + * sfd/FreeSansBold.sfd - started Armenian; added U+0538, U+0542, + U+0544, U+0548, U+054D, U+054F, U+0550, U+0553, U+0555, U+0561, + U+0563, U+0564, U+0566, U+0568 U+056B, U+056F, U+0570, U+0572, + U+0578, U+057A, U+057D-057F, U+0580, U+0581, U+0583, U+0585. + + * sfd/FreeMono.sfd - swapped U+03C6 (Greek small letter phi) and + U+03D5 (Greek phi symbol) in order to conform to Unicode standard. + Added U+04C5, U+04C6, U+04C9, U+04CA, U+04D, U+04CE. + +2005-11-01 Primoz Peterlin + + * sfd/FreeSansBold.sfd - modified U+019C. + + * sfd/FreeSansBoldOblique.sfd - added U+00A0, U+00AD, U+019C, + U+01B7, U+01B8, U+0275, U+0278, U+0298, U+2012, U+2015, + U+2070-207F, U+2080-208E, U+2153-217F, U+2213, U+2215. + +2005-10-31 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+0199, U+01AB, U+0265, U+0282, + U+0288, U+028C-028E, U+0290, U+029E, U+02A0. + +2005-10-28 Primoz Peterlin + + * sfd/FreeSerifBold.sfd - added U+019E, U+01AB, U+01AD, U+01B1, + U+0256, U+025F, U+0265, U+0269, U+026F, U+0270, U+0279-027F, + U+0282, U+0287, U+0288, U+028C-028E, U+0290. + + * sfd/FreeSerifBold.sfd - added U+2070, U+2075-2079, U+2080, + U+2085-2089, U+2153-215E, U+2113-2115, U+2119. + + * sfd/FreeSerifBold.sfd - added U+0199, U+019B, U+01B8, U+01B9, + U+01BE, U+01C0, U+0262, U+0274, U+0278, U+0280, U+028F, U+0298, + U+0299, U+029C, U+029E, U+029F, U+2012, U+2015, U+2016, U+2129, + U+2217. + +2005-10-27 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+018D, U+0194, U+019B, U+019C, U+01B5, + U+01B6, U+0295, U+0296, U+029B, U+02A2, U+0472, U+0473, U+2114, + U+2119. + + * sfd/FreeSerifItalic.sfd - minor cleanup in the superscript range + (U+2070-2079). + + * sfd/FreeSansBold.sfd - added subscripts and superscripts + (U+2070-208F), completed fractions (U+2152-215F) and Roman + numerals (U+2160-217F). + + * sfd/FreeSerifBold.sfd - added U+018B, U+018E, U+018F, U+0191, + U+019D, U+01A7, U+01A8, U+01AE, U+0253, U+0266, U+0267, U+026A, + U+0271-0273, U+0283, U+0285. + +2005-10-26 Primoz Peterlin + + * sfd/FreeSans.sfd - added "above" anchors to selected Cyrillic + characters. Added U+0294, U+02A1. + + * sfd/FreeMono.sfd - added U+2011, U+2012, U+203B, U+204A, U+2071, + U+2129, U+2232, U+2233. Changed and/or corrected U+2106, U+211E, + U+2126, U+2127, U+2153-215F, U+2202. + + * sfd/FreeMono.sfd - a try to imitate Denis' work on adding + anchors by adding "above" anchor to a couple of basic Latin + characters. + + * sfd/FreeSansBold.sfd - added U+0278, U+0298. Cleaned up outlines + of most Greek letters. + + * sfd/FreeSansBold.sfd - Added U+2010-2012, U+2015, U+2032, + U+203C, U+2047-2049. + + * sfd/FreeSans.sfd - Added U+01C0-01C2, U+0276, U+0292, + U+0298. Changed U+0251, U+0294, U+02A1. + +2005-10-25 Primoz Peterlin + + * sfd/FreeSerifItalic.sfd - added U+00A0, U+00AD, U+2010-2012, + U+2015, U+2126, U+2127, U+2153-215E, U+2160-217F, U+2190-2193, + U+2669-266F. FreeSerifItalic is now MES-1 compliant. + + * sfd/FreeSerif.sfd - added U+0191, U+019D, U+01AE, U+027E, + U+027F, U+0283, U+0285. + + * sfd/FreeSerif.sfd - added U+019E, U+01AD, U+01B8, U+01B9, + U+0253, U+0256, U+0257, U+025C, U+0260, U+0266, U+0267, U+0269, + U+026D, U+0271-0273, U+0279-027D. + + * sfd/FreeSerifBoldItalic.sfd - added U+00A0, U+00AD, U+2010-2012, + U+2015, U+2032-2034, U+203C, U+2047-204A, U+2074, U+2081-2084, + U+2126, U+2153, U+2154, U+215F, U+2215. Corrected positions of + diacritics on U+0200-0217. + + * sfd/FreeSansOblique.sfd, sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeMonoBoldOblique.sfd, + sfd/FreeMonoBold.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd sfd/FreeSerifBoldItalic.sfd - brought in + sync with Valek Filipov's urw-fonts-1.0.7pre41. + + * sfd/FreeSansOblique.sfd - added U+00A0, U+2011-2012, U+2015, + U+2070, U+2071, U+2074-2079, U+2080-2089, U+2126, U+2153-215F, + U+2190-2195, U+2215, U+266A. FreeSansOblique is now MES-1 + compliant. + +2005-10-24 Denis Jacquerye + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd - added + ccmp for i and j to be substituted with dotless i or j when + followed by above diacritic + +2005-10-24 Primoz Peterlin + + * sfd/FreeSans.sfd - added U+2011, U+2012, U+2015. FreeSans is now + MES-1 conformant. + +2005-10-23 Denis Jacquerye + + * sfd/FreeSans.sfd - added above, below, abovemk and belowmk + anchors for diacritics placement to many Basic Latin characters, + some Latin Extented A and B, and some IPA characters; fixed a + couple of precomposed characters to have diacritics at the same + height as similar characters. + +2005-10-21 Primoz Peterlin + + * sfd/FreeSerif.sfd - added U+02B9, U+02BA, U+02CD, U+2017, + U+2036, U+2037, U+203C, U+203E, U+2047-204A. + +2005-10-20 Primoz Peterlin + + * sfd/FreeSerifBold.sfd - added U+0182, U+0189, U+0192, U+019F, + U+01A9, U+01B7, U+01C4-01CC, U+01E0-1E2, U+01F0-01F3, U+F6BE. + Corrected position of diacritics on U+0200-0217. + + * sfd/FreeSerif.sfd - added U+00A0, U+00AD, U+0182, U+0189, + U+018B, U+018E, U+018F, U+0192, U+019F, U+01A9, U+01B1, U+01B7, + U+01DD, U+2010-2013, U+2015. FreeSerif is now MES-1 conformant. + +2005-10-19 Denis Jacquerye + + * sfd/FreeSerif.sfd - added U+0268, U+026A, U+0289, U+0292; and + anchor "above" to more base glyphs. + + * sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBoldItalic.sfd - added U+0250-0252, U+0258-0259, + U+0261, U+0268, U+026A, U+0279, U+0289 + + * sfd/FreeSerifBold.sfd - added anchor "above" to marks + U+0300-0314, and to base glyphs (vowels). + +2005-10-18 Denis Jacquerye + + * sfd/FreeSerif.sfd - added anchor "above" to marks U+0300-0314, + and bases vowel of the U+0041-007A range, U+00E6, U+0186, U+0190, + U+0254 and U+025B; fixed Latin-1 Supplement block accented glyphs + to use references. + +2005-10-17 Primoz Peterlin + + * sfd/FreeSansBold.sfd - added U+01B7, U+01B8, U+0275. + +2005-10-16 Denis Jacquerye + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - added some Latin + Extended-B African letters: U+0181, U+018A, U+0197-0198, U+01A4, + U+01AC, U+01B1, U+01B3-01B4; + + * sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd - added Latin + Extended-B U+0187, 018E-018F, U+0191, U+0193, U+0197-0199, + U+019D-019F, U+01AB-01AE; correcting width of non-space + Combining Diacrtical Marks; added more glyphs to IPA Extensions + to match non Bold + + * sfd/FreeSansBoldOblique.sfd - added many accented glyphs to + Latin Extended-B + +2005-10-15 Denis Jacquerye + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - added IPA Extensions + U+0262,U+0274,U+0280-0281, U+0299, U+029F, and Spacing Modifier + Letters U+02C9-02CB; fixed U+0287,029E height to baseline; added + stroke to U+0268 + + * sfd/FreeSansOblique.sfd - fixed skew on U+027F + + * sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd - added to Latin + Extended-B U+01A7-01A8, IPA Extensions U+0251-0253, U+0256-0257, + U+0261, U+0265-026A, U+026F-0273, U+0289, U+028C-028E + + * sfd/FreeSansBoldOblique.sfd - added to Latin extended-B U+0189, + U+01A8, U+01B1, U+0283, U+02C9 and Spacing Modifiers U+02C9-02CB + +2005-10-14 Primoz Peterlin + + * sfd/FreeSansBold.sfd - Added a couple of composite glyphs, + mostly in the IPA and Latin Extended B ranges. + +2005-10-13 Denis Jacquerye + + * FreeSans.sfd - removed overlap and simplified U+0187, 0191, + 0193, 01A5, 01AE, 0260, 0271, 0272, 0273, 027B; fixed diacritics + placement on U+0200-0217; fixed glyph for U+0283 to correct esh + without stroke; added U+025F and fixed U+025F from it; fixed + height of glyph at U+0285; arranged U+027E,027F to make more + distinguishable from U+0072. + + * FreeSansOblique.sfd - added the corrected or new glyphs from + FreeSans; diacritics on U+200-0217 will need height readjustements. + + * FreeSansBold.sfd, FreeSansBoldOblique.sfd - added U+0186, 0190, + 0250, 0254, 0258, 0259, 025B, 025C + +2005-10-13 Primoz Peterlin + + * sfd/FreeSerif.sfd - Minor changes: U+22A2, U+22A3, U+22A6, U+23AE. + Added U+0250, U+0251, U+0258, U+0259, U+0275. + + * sfd/FreeSerifItalic.sfd - Added glyphs U+222B-U+222F, U+2320, + U+2321. Fixed diacritics on U+0200-U+0217. + +2005-10-12 Denis Jacquerye + + * sfd/FreeSerif.sfd - Corrected diacritics position on + U+01D5-01D9,01DB,01EA-01ED,0200-0217 and U+022A. + + * sfd/FreeSerif.sfd, sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBoldItalic.sfd - added U+0186,0190,0254 and U+025B. + +2005-10-11 Primoz Peterlin + + * sfd/FreeSerif.sfd - Fixed bug #13399 (glyphs for U+0360 and + U+0361 were swapped). + + * sfd/FreeSerif.sfd - Attempt to correct bug #13370: INTEGRAL + EXTENSION does not align with TOP/BOTTOM HALF INTEGRAL; added + glyph U+23AE. + +2005-05-16 Primoz Peterlin + + * sfd/FreeMono.sfd - Corrected shapes for Cross of Lorraine and + Cross of Jerusalem. + +2005-04-07 Primoz Peterlin + + * sfd/FreeSansBold.sfd - Added some combining accents, just to + test the a version of FontForge. + +2003-12-05 Primoz Peterlin + + * sfd/FreeMono.sfd - Some composite Latin characters rebuilt, as + they had accents 600 points to the left due to changes on October + 2. Some other minor changes in the mathematics area. + +2003-10-08 Primoz Peterlin + + * sfd/FreeMonoOblique.sfd, sfd/FreeSerifBoldItalic.sfd, + FreeSerifItalic.sfd - applied Josef Segur's corrections from + Oct. 5. + +2003-10-02 Primoz Peterlin + + * sfd/FreeSerif.sfd - Abbas Izad's contributed Arabic/Farsi + characters added. + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Combining characters (U+0300 - + U+036F) moved left, so that they have negative horizontal values + and zero advance width. + +2003-09-15 Primoz Peterlin + + * sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd - Started working + on super- and subscripts. + +2003-09-12 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSerif.sfd - Added some missing + Hiragana and Katakana characters. + + * sfd/FreeSansBold.sfd - Cleared background characters in Latin + Extended-A. Added some automatically constructed characters in + Latin Extended-B. Started with superscripts and subscripts. + + * sfd/FreeSans.sfd - Subscript numerals (U+2080-U+2089) completed. + +2003-05-19 Primoz Peterlin + + * sfd/FreeSerif.sfd - Thai characters po pla and bo baimai + swapped; Thai character fongman corrected; all courtesy Theppitak + Karoonboonyanan. + +2003-05-17 Panayotis Katsaloulis + + * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - Full support + of all ancient greek glyphs + +2003-05-15 Primoz Peterlin + + * tools/KerningNumerals.pl - A Perl script for moving kerning + information from ASCII numerals (U+0030...) to characters in the + Adobe corporate use area (U+F6xx). + + * sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBoldOblique.sfd - Created kerned numerals in the Adobe + corporate use area (U+F6xx) and moved kerning information from + ASCII numerals to the kerned numerals. + +2003-05-14 Primoz Peterlin + + * sfd/FreeSans.sfd - First approximation of super- and subscript + numerals and vulgar fractions. + + * sfd/FreeSerif.sfd - Super- and subscript numerals complete, + vulgar fractions completed and redone as references rather than + outlines. + +2003-05-12 Primoz Peterlin + + * sfd/FreeSerif.sfd - Clean-up of the Cyrillic letters added on + March 27; super- and subscripts, vulgar fractions. + +2003-05-09 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - Added a couple of characters to + the Latin Extended-B area and the IPA extensions area. + +2003-05-08 Primoz Peterlin + + * sfd/FreeSerifBoldItalic.sfd - Added a couple of characters to + the Latin Extended-B area. + + * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - ASCII + numerals now monospaced; kerned numerals moved to Adobe corporate + use area + (U+F6xx). + +2003-05-07 Primoz Peterlin + + * sfd/FreeSerif.sfd - Roman numerals now more complete. + + * sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd - Accented + characters added in the Latin Extended-B area. + + * sfd/FreeSans.sfd - Greek accents added in the Greek Extended + area, characters added in the Latin Extended-B area, Roman + numerals added. + + * sfd/FreeMonoOblique.sfd - Kerning pairs removed (what were they + doing in a monospaced font, anyway?). + + * sfd/FreeMonoBoldOblique.sfd - Additions in Latin Extended-B and + Basic Greek. + + * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd, sfd/FreeMonoOblique.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBoldOblique.sfd - Major cleanup (fixed widths, open + paths, path directions (clockwise/counter-clockwise), points + rounded to integer values; outlines simplified etc.) + +2003-05-06 Primoz Peterlin + + * tools/OS2UnicodeRange - A simple script to display OS/2 Unicode + range table in TrueType fonts. + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd - ASCII numerals now + monospaced; kerned numerals moved to Adobe corporate use area + (U+F6xx). FreeSans is done, FreeSansBold half-way. + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Added 2003 in copyright info. + +2003-03-27 Primoz Peterlin + + * sfd/FreeSerif.sfd - Cyrillic and Cyrillic Supplement blocks + brought to conformance with Unicode 3.2, courtesy Daniel Shurovich + Chirkov. + +2003-03-19 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - somewhat wider + germandbls (U+00DF), due to complaints by Walter Schmidt. + +2003-03-18 Primoz Peterlin + + * sfd/FreeSans.sfd - Added Sinhala glyphs from the Tipitaka + project , recoded to Unicode by Noah Levitt. + +2003-02-19 Primoz Peterlin + + * sfd/FreeSans.sfd - Minor changes on mathematical operators. + +2003-02-18 Primoz Peterlin + + * sfd/FreeMono.sfd - minor cleanup of glyph backgrounds; changed + integral signs (U+222B - U+2230) + +2003-02-05 Primoz Peterlin + + * sfd/FreeSans.sfd - added a couple of glyphs in the IPA and + African Latin ranges. + +2003-01-30 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd - Corrected Maltese Hbar (U+0126) + and/or hbar (U+0127). + +2003-01-28 Primoz Peterlin + + * sfd/FreeSerifItalic.sfd - Corrected Maltese hbar (U+0127). + +2002-12-18 Primoz Peterlin + + * tools/ConvertFont - PfaEdit script for converting SFD files to + TrueType fonts. + + * sfd/FreeSans.sfd - Added Tamil and Kannada glyphs from the + Akruti Indic fonts. + +2002-12-17 Primoz Peterlin + + * sfd/FreeSans.sfd - Added Devanagari and Gujarati glyphs from the + Akruti Indic fonts. + + * www/index.html - Added information on Rogier van Dalen's tools. + + * AUTHORS - Added M.S. Sridhar. + + * CREDITS - Correct spelling of Culmus project. Added M.S. Sridhar. + +2002-12-06 Primoz Peterlin + + * sfd/FreeMono.sfd - Added Braille glyphs, courtesy Vyacheslav + Dikonov. + + * sfd/FreeSans.sfd - Added Unicode Syriac glyphs, courtesy + Vyacheslav Dikonov. + +2002-10-11 Primoz Peterlin + + * www/index.html - Added information on the availability of the + Debian GNU/Linux package. + + * sfd/FreeSerif.sfd, sfd/FreeSans.sfd - added some kern pairs + beyond Latin-1 area. + + * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - re-introduced + all the emtpy glyph slots (changes from Sep 23 made PfaEdit + crash). + +2002-09-23 Primoz Peterlin + + * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, + sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - imported + kerning information from the URW++ AFM files + +2002-09-11 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoOblique.sfd - updated Hebrew parts to comply with + Culmus v0.6. + + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansOblique.sfd - Added Danilo Segan's Serbian Cyrillic + glyphs; updated Hebrew parts to comply with Culmus v0.6. + +2002-09-09 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansOblique.sfd - Updated Cyrillic part to match + Filippov's 1.0.7pre14 + + * sfd/FreeSansOblique.sfd - added Sam Stepanyan's Armenian glyphs + from FreeSans (skewed for 12 degrees). + +2002-09-06 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, + sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd - Added Maxim + Iorsh's Hebrew characters. + +2002-08-29 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, + sfd/FreeMonoBold.sfd, sfd/FreeMonoOblique.sfd - Added Maxim + Iorsh's Hebrew characters. + + * AUTHORS, CREDITS - Added Maxim Iorsh as author. + +2002-08-28 Primoz Peterlin + + * www/index.html - Added information of Microsoft's withdrawal of + freely available Unicode TrueType fonts + + * www/resources.html - Added link to Maxim Iorsh's Culmus project. + +2002-07-26 Primoz Peterlin + + * sfd/FreeMono.sfd - Added a couple of characters (Arrows area). + +2002-06-11 Primoz Peterlin + + * sfd/FreeMono.sfd - Applied Michalis Kabrianis's patch concerning + perispomeni in Greek politoniko. + +2002-05-23 Primoz Peterlin + + * sfd/FreeMono.sfd - Applied Michalis Kabrianis's patch concerning + psili in Greek politoniko. Also added two working variants of + chars in the IPA range. + +2002-05-15 Primoz Peterlin + + * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifBold.sfd - Deleted explicit ".notdef" character with + no contours. + +2002-05-14 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - The new version of PfaEdit saves + correctly formed Panose and LineGap lines. + + * sfd/FreeSansBoldOblique.sfd - Filled-in the missing TTFWidth and + TTFWeight values. + +2002-05-09 Primoz Peterlin + + * sfd/FreeSans.sfd - Added diacritics to the Spacing Modifier + Letters and Combining Diacritical Marks areas. Added composed + glyphs to the Latin Extended-B area. + +2002-05-07 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Updated Panose information with data + provided by Josef W. Segur. Updated TTF headers with English and + Slovenian text. + +2002-04-30 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - Working on Greek small letters. Several + minor changes (lower carons etc.) + +2002-04-29 Primoz Peterlin + + * FreeMonoBoldOblique.sfd - Started adding Greek. + + * sfd/FreeMonoBold.sfd - Added glyphs in the Geometrical Shapes + and Miscellaneous Symbols area. Harmonizing Greek with Latin. Done + with capitals. + + * sfd/FreeMono.sfd - Deleted the explicit .notdef character. Added + one glyph to the Geometrical Shapes area, which is now completed; + added three glyphs to the Miscellaneous Symbols area. Harmonizing + Greek with Latin. Done with the capitals. + +2002-04-26 Primoz Peterlin + + * sfd/FreeSans.sfd - Adjusted accent positions on several glyphs + in the Latin Extended-A area. + +2002-04-25 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - Box Drawing area completed. Added a + couple of glyphs in the Geometrical Shapes area. + + * sfd/FreeMono.sfd - Small corrections in the Box Drawing area. + +2002-04-24 Primoz Peterlin + + * sfd/FreeMono.sfd - Box Drawing area completed. + +2002-04-23 Primoz Peterlin + + * tools/WGL4.lst - corrected. + + * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd - Working on Box Drawing + area. + +2002-04-22 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd - Working on Latin + Extended-B and Greek. + +2002-04-19 Primoz Peterlin + + * sfd/FreeSerif.sfd - Somewhat cleaner chess figures. + + * tools/MES-2.txt, tools/MES-2.lst - Corrected list (it is not + 203C-203E, it is 203C and 203E). + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, + sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, + sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, + sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, + sfd/FreeSerifBoldItalic.sfd - Changed "Family Name" from Free to + FreeSerif, FreeSans and FreeMono, as appropriate. Changed Font + Modifiers from MonoBold etc. to Bold, Italic, Oblique, BoldOblique + and BoldItalic. + +2002-04-18 Primoz Peterlin + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, + sfd/FreeMonoBoldOblique.sfd - Corrected metrics; now all character + widths are set to 600. + +2002-04-17 Primoz Peterlin + + * sfd/FreeSerif.sfd - Corrected glyphs in the Box Drawing area and + Block Elements area, which should extend through the ascender *and + descender* height. + + * sfd/FreeMonoBold.sfd - Continued working on harmonizing Greek + letters with Latin and Cyrillic. + + * sfd/FreeMonoBold.sfd - Added some box drawing characters. + +2002-04-16 Primoz Peterlin + + * www/design-notes.html - Updated notes on stroke width for + symbols in Free Mono Bold. + + * sfd/FreeMono.sfd - Added a handful of characters in the + Miscellaneous Symbols area. + + * sfd/FreeMonoBoldOblique.sfd - Added subscripts, superscripts and + vulgar fractions. + + * sfd/FreeMonoBold.sfd - Started harmonizing Greek letters with + Latin and Cyrillic. + + * sfd/FreeMonoBold.sfd - Added subscripts, superscripts and vulgar + fractions. + +2002-04-15 Primoz Peterlin + + * www/design-notes.html - Updated notes on super-/subscripts in + Free Mono Bold. Separate subsections for Free Mono regular and + Free Mono Bold. + +2002-04-12 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added Ethiopian glyphs, converted from the + Metafont sources from TGI, Universität Hamburg (authors Berhanu + Beyene, Prof. Dr. Manfred Kudlek, Olaf Kummer, and Jochen + Metzinger) using Szabo's TeXtrace and retouched using + PfaEdit. Ethiopian metafonts are released under GNU GPL, + . + + * sfd/FreeMonoBold.sfd - Added 40 characters, mostly in the Latin + Extended-B and IPA Extensions areas. + +2002-04-11 Primoz Peterlin + + * sfd/FreeMono.sfd - Added a handful of characters in the Latin + Extended-B, IPA Extensions, Currency Symbols and Miscellaneous + Symbols areas. + +2002-04-09 Primoz Peterlin + + * sfd/FreeMono.sfd - Correcting accent positioning in the Extended + Greek area; adding a couple of characters here and there. Still 20 + characters short of MES-2 conformance. + +2002-04-08 Primoz Peterlin + + * sfd/FreeMono.sfd - Added some characters in the Arrows area; + more or less completed Extended Greek area (accents still need to + be fine-tuned). + +2002-04-05 Primoz Peterlin + + * sfd/FreeMono.sfd - Modern non-Russian Cyrilic mostly completed. + + * sfd/FreeMonoOblique.sfd - Synchronized with FreeMono. + + * sfd/FreeSerif.sfd - Added Thomas Ridgeway's Tamil characters + (converted from Metafont and edited somehwat). + +2002-04-04 Primoz Peterlin + + * sfd/FreeMonoOblique.sfd - Armenian letters added. + + * sfd/FreeMonoBold.sfd - Serbian Cyrillic letters dje, tshe, lje + and nje corrected. + + * sfd/FreeMono.sfd - Serbian Cyrillic letters dje and tshe + corrected. Some other non-Russian Cyrillic letters modified and + "welded together". + +2002-04-03 Primoz Peterlin + + * sfd/FreeMono.sfd - Added more or less complete Armenian + area. The glyphs are a tidied-up version based on the Armenian + Courier on the . Now we have + 1673 characters. + +2002-03-28 Primoz Peterlin + + * sfd/FreeMono.sfd - Added some mathematical symbols. + +2002-03-26 Primoz Peterlin + + * sfd/FreeSans.sfd - took H.S. Pannu's Gurmukhi from FreeSerif. It + actually fits to FreeSans much better. It seems I'll have to look + for another Gurmukhi font with modulated stroke for FreeSerif. + + * sfd/FreeSerifItalic.sfd - replaced existing Hebrew glyphs by + those from FreeSerif (slanted for 15.5 degrees). + + * sfd/FreeSerif.sfd - Added dotted Hebrew letters. Changed barred H. + + * sfd/FreeMono.sfd - Completed vulgar fractions; minor changes in + Greek; added some mathematical operators. + + * sfd/FreeMonoBold.sfd - added 12 characters to Latin Extended-B + and IPA Extensions areas (total 984). + +2002-03-25 Primoz Peterlin + + * sfd/FreeMonoBold.sfd - started adding Latin Extended-B and IPA + Extensions. + + * sfd/FreeMono.sfd - Minor cosmetic changes; cleaning up Greek + (removing redundant control points), added some non-European + Cyrillic glyphs as a test. + +2002-03-22 Primoz Peterlin + + * sfd/FreeMono.sfd - Some minor modifications; letters in Latin + Extended-B area "welded" together. + +2002-03-20 Primoz Peterlin + + * www/index.html - finally linked the resources and design notes + pages. + + * www/design-notes.html - added scaling information for super- and + subscript numerals in FreeMono. + +2002-03-19 Primoz Peterlin + + * sfd/FreeMono.sfd - the Latin Extended-B and IPA Extension area + characters moved from FreeMono and skewed for 12 degrees. + +2002-03-18 Primoz Peterlin + + * sfd/FreeMono.sfd - added a dozen or two of new characters, in + particular in the Latin Extended-B and IPA Extension area. + +2002-03-15 Primoz Peterlin + + * sfd/FreeMono.sfd - added a dozen of two of new characters, in + particular in the IPA Extension area. + + * www/design-notes.html - Corrected data for x-height in FreeMono; + information on constructing small caps. + +2002-03-14 Primoz Peterlin + + * sfd/FreeMono.sfd - added three smiley characters to the + Miscallaneous Symbols area. + +2002-03-10 Primoz Peterlin + + * sfd/FreeSerif.sfd - Anshuman Pandey has only converted Gurmukhi + from TrueType to Metafont; the original author of Gurkmukhi font + is Hardip Singh Pannu . + Got the permission from him to include the Gurmukhi glyph set. + +2002-03-08 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added some more glyphs in the Mathematical + Symbols area to a total number of 3374. + +2002-03-06 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added a basic Gurmukhi set. + + * www/design-notes.html - started a page on design notes + + * sfd/FreeMono.sfd - realized that glyphs in the Box Drawing area + and Block Elements area should extend through the ascender *and + descender* height, and corrected it. + + * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd - added some musical + glyphs, linking "no-break space" to space, "soft hyphen" to + hyphen-minus etc. + +2002-03-05 Primoz Peterlin + + * tools/WGL4.lst - Added Windows Glyph List 4.0 + + * tools/LigatureList.pl - Wrote a Perl script, which lists the + GSUB list (ligature list) of a OpenType font. + + * sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd, + sfd/FreeSerifItalic.sfd - auxilliary Hebrew glyphs added. They are + too light compared with Latin and will be substituted with better + ones. + +2002-03-04 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added some more glyphs to the Mathematical + Operators area (page 0x22). + + * sfd/FreeSerif.sfd - Incomplete and fragmentary support for + Devanagari, originating from Harsh Kumar's Shusha fonts was + replaced by Frans Velthuis' Devanagari metafont, now maintained by + Anshuman Pandey and available under + GPL. Until I figure out how to provide glyph substitution table in + OpenType, only the Unicode part is there. + +2002-02-28 Primoz Peterlin + + * ChangeLog file created + + * sfd/FreeSerif.sfd - Added some Telugu glyphs to page 0x0C, + courtesy Prasad A. Chodavarapu + + * sfd/FreeSerif.sfd - Added some glyphs to the Miscellaneous + Symbols page (0x26). + +2002-02-26 Primoz Peterlin + + * mailing lists freefont-announce and freefont-bugs created + +2002-02-25 Primoz Peterlin + + * sfd/FreeSerif.sfd - Added a couple of glyphs in Mathematics + Operators area. + + * sfd/FreeMono.sfd + - Added some more glyphs, in particular in the Mathematical + Operators section. + - Changed FamilyName to Free, FontName to FreeMono, and Full name + to "Free Monospaced". + +2002-02-20 Primoz Peterlin + + * sfd/ directory added containing FreeSerif, FreeSans and FreeMono + families. + + * tools/ directory added containing lists with characters required + for MES (Multilinguag European Subset) compliance. + + * tools/mes-list-expand.pl created - a Perl script for expanding MES + ranges into simple one-char-per-line format + + * tools/CheckConformance.pl created - a Perl script for checking + conformance of a font file with a given coded character set + + * homepage created + +2002-02-19 Primoz Peterlin + + * freefont (Free UCS Scalable Fonts) project approved on + savannah.gnu.org: diff --git a/admin/External/Fonts/FreeFont/FreeMono.ttf b/admin/External/Fonts/FreeFont/FreeMono.ttf new file mode 100644 index 0000000..ba90adb Binary files /dev/null and b/admin/External/Fonts/FreeFont/FreeMono.ttf differ diff --git a/admin/External/Fonts/FreeFont/INSTALL b/admin/External/Fonts/FreeFont/INSTALL new file mode 100644 index 0000000..fbbbe80 --- /dev/null +++ b/admin/External/Fonts/FreeFont/INSTALL @@ -0,0 +1,86 @@ + Installing GNU FreeFont + ======================= + +GNU FreeFont can be used in any modern operating system. + +This document explains how to install FreeFont on some common systems. + +UNIX/GNU/Linux/BSD Systems +-------------------------- + +FreeFont works with any system using the free font rasterizer FreeType +. + +* Debian GNU/Linux + +Users of Debian GNU/Linux system will probably want to use the Debian package, +available from the Debian site, + + , + +or any of its mirrors. + +Install them by issuing the command + apt-get install ttf-freefont + + +* KDE local installation + +Users of KDE can install .ttf files on a per-user basis using the KDE +Control Center module "kcmfontinst", which may appear in the menu as + + Settings -> System Administration -> Font Installer + +This is especially helpful for developers and testers. + + +* Generic X-windows + + 1) Fetch the freefont-ttf.tar.gz package with Free UCS outline fonts + in the TrueType format. + + 2) Unpack TrueType fonts into a suitable directory, + e.g. /usr/local/share/fonts/default/TrueType/ + + 3) If you have chosen any other directory, make sure the directory you + used to install the fonts is listed in the path searched by the X + Font Server by editing the config file in /etc/X11/. + + In some systems, you list the directory in the item "catalogue=" + in the file /etc/X11/fs/config. + + 4) Run ttmkfdir in the directory where you unpacked the fonts. + + +Windows 95/98/NT/2000/XP; Vista +------------------------------- + +Note that in at least Vista, XP and 2000, the OpenType versions perform much +better than, and are recommended over, the TrueType ones. + +* Vista: + 1) From the Start menu, open Control Panels + 2) Drag-n-drop font files onto Fonts control panel + You may get a dialog saying + "Windows needs your permission to continue" + a) Click Continue + +* 95/98/NT: + The font installation is similar to Vista. + + In order to use OpenType, users of Windows 95, 98 and NT 4.0 can + install Adobe's 'Type Manager Light'. It is available for download + without cost from Adobe's web site. + + Otherwise, use the TrueType versions. + +Mac OS X +-------- + +Installing on Mac OS X consists of moving the .ttf files to either + /Library/Fonts/ or ~/Library/Fonts/ +depending on whether they should be available to all users on your system +or just to yourself. + +-------------------------------------------------------------------------- +$Id: INSTALL,v 1.7 2008/12/26 12:33:31 Stevan_White Exp $ diff --git a/admin/External/Fonts/FreeFont/README b/admin/External/Fonts/FreeFont/README new file mode 100644 index 0000000..60e67f2 --- /dev/null +++ b/admin/External/Fonts/FreeFont/README @@ -0,0 +1,108 @@ +-*-text-*- + GNU FreeFont + +The GNU FreeFont project aims to provide a useful set of free scalable +(i.e., OpenType) fonts covering as much as possible of the ISO 10646/Unicode +UCS (Universal Character Set). + +Statement of Purpose +-------------------- + +The practical reason for putting glyphs together in a single font face is +to conveniently mix symbols and characters from different writing systems, +without having to switch fonts. + +Coverage +-------- + +FreeFont covers the following character sets + +* ISO 8859 parts 1-15 +* CEN MES-3 European Unicode Subset + http://www.evertype.com/standards/iso10646/pdf/cwa13873.pdf +* IBM/Microsoft code pages 437, 850, 852, 1250, 1252 and more +* Microsoft/Adobe Windows Glyph List 4 (WGL4) + http://www.microsoft.com/typography/otspec/WGL4.htm +* KOI8-R and KOI8-RU +* DEC VT100 graphics symbols +* International Phonetic Alphabet +* Arabic, Hebrew, Armenian, Georgian, Ethiopian and Thai alphabets, + including Arabic presentation forms A/B +* mathematical symbols, including the whole TeX repertoire of symbols +* APL symbols + etc. + +Editing +------- + +The free outline font editor, George Williams's FontForge + is used for editing the fonts. + +Design Issues +------------- + +Which font shapes should be made? Historical style terms like Renaissance +or Baroque letterforms cannot be applied beyond Latin/Cyrillic/Greek +scripts to any greater extent than Kufi or Nashki can be applied beyond +Arabic script; "italic" is really only meaningful for Latin letters. + +However, most modern writing systems have typographic formulations for +contrasting uniform and modulated character stroke widths, and have some +history with "oblique", faces. Since the advent of the typewriter, most +have developed a typographic style with uniform-width characters. + +Accordingly, the FreeFont family has one monospaced - FreeMono - and two +proportional faces (one with uniform stroke - FreeSans - and one with +modulated stroke - FreeSerif). + +To make text from different writing systems look good side-by-side, each +FreeFont face is meant to contain characters of similar style and weight. + +Licensing +--------- + +Free UCS scalable fonts is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License as published +by the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +The fonts are distributed in the hope that they will be useful, but +WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY +or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License along +with this program; if not, write to the Free Software Foundation, Inc., +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +As a special exception, if you create a document which uses this font, and +embed this font or unaltered portions of this font into the document, this +font does not by itself cause the resulting document to be covered by the +GNU General Public License. This exception does not however invalidate any +other reasons why the document might be covered by the GNU General Public +License. If you modify this font, you may extend this exception to your +version of the font, but you are not obligated to do so. If you do not +wish to do so, delete this exception statement from your version. + + +Files and their suffixes +------------------------ + +The files with .sfd (Spline Font Database) are in FontForge's native format. +Please use these if you plan to modify the font files. + +TrueType fonts for immediate consumption are the files with the .ttf +(TrueType Font) suffix. These are ready to use in Xwindows based +systems using FreeType, on Mac OS, and on older Windows systems. + +OpenType fonts (with suffix .otf) are for use in Windows Vista. +Note that although they can be installed on Linux, but many applications +in Linux still don't support them. + + +-------------------------------------------------------------------------- +Primoz Peterlin, +Steve White + +Free UCS scalable fonts: http://savannah.gnu.org/projects/freefont/ +$Id: README,v 1.6 2008/12/25 12:51:41 Stevan_White Exp $ diff --git a/admin/Library/Array/Validate/Base.php b/admin/Library/Array/Validate/Base.php new file mode 100644 index 0000000..3366097 --- /dev/null +++ b/admin/Library/Array/Validate/Base.php @@ -0,0 +1,241 @@ +_lang = $lang; + $stringClass = 'Lang_'.$this->_lang.'_ValCondStrings'; + if (!class_exists($stringClass)) + { + $stringClass = 'Lang_Eng_ValCondStrings'; + } + $this->_resultString = new $stringClass(); + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other + public function checkEqual($associativeArray,$keyString) + { + $errorString = null; + $keyArray = explode(',',$keyString); + $numb = 0; + + //set the first value to null + $firstValue = null; + + foreach ($keyArray as $key) + { + if (array_key_exists($key,$associativeArray)) + { + $firstValue = $associativeArray[$key]; + break; + } + } + + if (isset($firstValue)) + { + for ($i = 0; $i < count($keyArray); $i++) + { + if (array_key_exists($keyArray[$i],$associativeArray)) + { + if (strcmp($associativeArray[$keyArray[$i]],$firstValue) !== 0) + { + $numb++; + $errorString = $this->_resultString->getNotEqualResultString($keyString); + } + } + } + } + + $this->errorString = $errorString; + return $numb === 0 ? true : false; + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphabetic values + //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null + public function checkAlpha($associativeArray,$keyString,$strength = 'strong') + { + return $this->checkGeneric($associativeArray,$keyString,$strength,'ctype_alpha','getNotAlphabeticResultString'); + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphanumeric values + //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null + public function checkAlphaNum($associativeArray,$keyString,$strength = 'strong') + { + return $this->checkGeneric($associativeArray,$keyString,$strength,'ctype_alnum','getNotAlphanumericResultString'); + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal digits + //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null + public function checkDigit($associativeArray,$keyString,$strength = 'strong') + { + return $this->checkGeneric($associativeArray,$keyString,$strength,'ctype_digit','getNotDecimalDigitResultString'); + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have mail format + //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null + public function checkMail($associativeArray,$keyString,$strength = 'strong') + { + return $this->checkGeneric($associativeArray,$keyString,$strength,'checkMail','getNotMailFormatResultString'); + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function + //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null + public function checkNumeric($associativeArray,$keyString,$strength = 'strong') + { + return $this->checkGeneric($associativeArray,$keyString,$strength,'is_numeric','getNotNumericResultString'); + } + + + //apply a generic check function + //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null + //$func: the function to apply + //$strFunc: the method of the object $this->_resultString to apply + private function checkGeneric($associativeArray,$keyString,$strength,$func,$strFunc) + { + + $errorString = null; + $keyArray = explode(',',$keyString); + $numb = 0; + + for ($i = 0; $i < count($keyArray); $i++) + { + if (array_key_exists($keyArray[$i],$associativeArray)) + { + if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong') + { + if (!call_user_func($func,$associativeArray[$keyArray[$i]])) + { + $numb++; + $errorString .= call_user_func(array($this->_resultString,$strFunc),$keyArray[$i]); + } + } + } + } + + $this->errorString = $errorString; + return $numb === 0 ? true : false; + + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have a number of chars smaller than $maxLenght + public function checkLength($associativeArray,$keyString,$maxLength = 10) + { + $errorString = null; + $keyArray = explode(',',$keyString); + $numb = 0; + for ($i = 0; $i < count($keyArray); $i++) + { + if (array_key_exists($keyArray[$i],$associativeArray)) + { + if (eg_strlen($associativeArray[$keyArray[$i]]) > $maxLength) + { + $numb++; + $errorString .= $this->_resultString->getLengthExceedsResultString($keyArray[$i],$maxLength); + } + } + } + $this->errorString = $errorString; + return $numb === 0 ? true : false; + + } + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are different from the values indicated in the argument $strings (a comma-separated list of words) + public function checkIsNotStrings($associativeArray,$keyString,$strings = '') + { + $errorString = null; + $keyArray = explode(',',$keyString); + $numb = 0; + //get the array from the comma-separated list of strings + $stringsArray = explode(',',$strings); + for ($i = 0; $i < count($keyArray); $i++) + { + if (array_key_exists($keyArray[$i],$associativeArray)) + { + foreach ($stringsArray as $string) + { + if (strcmp($associativeArray[$keyArray[$i]],$string) === 0) + { + $numb++; + $errorString .= $this->_resultString->getIsForbiddenStringResultString($keyArray[$i],$strings); + } + } + } + } + $this->errorString = $errorString; + return $numb === 0 ? true : false; + } + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are one of the values indicated in the argument $strings (a comma-separated list of words) + //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null + public function checkIsStrings($associativeArray,$keyString,$strings = '',$strength = 'strong') + { + $errorString = null; + $keyArray = explode(',',$keyString); + $numb = 0; + //get the array from the comma-separated list of strings + $stringsArray = explode(',',$strings); + for ($i = 0; $i < count($keyArray); $i++) + { + if (array_key_exists($keyArray[$i],$associativeArray)) + { + if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong') + { + if (!in_array($associativeArray[$keyArray[$i]],$stringsArray)) + { + $numb++; + $errorString .= $this->_resultString->getIsNotStringResultString($keyArray[$i],$strings); + } + } + } + } + $this->errorString = $errorString; + return $numb === 0 ? true : false; + } + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) match the regular expression $regExp + public function checkMatch($associativeArray,$keyString,$regExp = '/./',$strength = 'strong') + { + $errorString = null; + $keyArray = explode(',',$keyString); + $numb = 0; + for ($i = 0; $i < count($keyArray); $i++) + { + if (array_key_exists($keyArray[$i],$associativeArray)) + { + if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong') + { + if (!preg_match($regExp,$associativeArray[$keyArray[$i]])) + { + $numb++; + $errorString .= $this->_resultString->getDoesntMatchResultString($keyArray[$i],$regExp); + } + } + } + } + $this->errorString = $errorString; + return $numb === 0 ? true : false; + } + +} \ No newline at end of file diff --git a/admin/Library/Array/Validate/Soft.php b/admin/Library/Array/Validate/Soft.php new file mode 100644 index 0000000..95e208d --- /dev/null +++ b/admin/Library/Array/Validate/Soft.php @@ -0,0 +1,85 @@ +_resultString->getNotDefinedResultString($keyArray[$i]); + $numb++; + } + } + else + { + $errorString .= $this->_resultString->getNotDefinedResultString($keyArray[$i]); + $numb++; + } + } + $this->errorString = $errorString; + $this->errorNumb = $numb; + return $numb === 0 ? true : false; + } + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other + public function checkEqual($associativeArray,$keyString) + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkEqual($associativeArray,$keyString); + + } else { + return false; + } + } + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphabetic values + public function checkAlpha($associativeArray,$keyString) + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkAlpha($associativeArray,$keyString,'strong'); + + } else { + return false; + } + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphanumeric values + public function checkAlphaNum($associativeArray,$keyString) + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkAlphaNum($associativeArray,$keyString,'strong'); + + } else { + return false; + } + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal digits + public function checkDigit($associativeArray,$keyString) + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkDigit($associativeArray,$keyString,'strong'); + + } else { + return false; + } + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have mail format + public function checkMail($associativeArray,$keyString) + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkMail($associativeArray,$keyString,'strong'); + + } else { + return false; + } + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function + public function checkNumeric($associativeArray,$keyString) + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkNumeric($associativeArray,$keyString,'strong'); + + } else { + return false; + } + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have a number of chars smaller than $maxLenght + public function checkLength($associativeArray,$keyString,$maxLength = 10) + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkLength($associativeArray,$keyString,$maxLength); + + } else { + return false; + } + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are different from the values indicated in the argument $strings (a comma-separated list of words) + public function checkIsNotStrings($associativeArray,$keyString,$strings = '') + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkIsNotStrings($associativeArray,$keyString,$strings); + + } else { + return false; + } + } + + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are one of the values indicated in the argument $strings (a comma-separated list of words) + public function checkIsStrings($associativeArray,$keyString,$strings = '') + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkIsStrings($associativeArray,$keyString,$strings,'strong'); + + } else { + return false; + } + } + + //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) match the regular expression $regExp + public function checkMatch($associativeArray,$keyString,$regExp = '/./') + { + if ($this->checkNotEmpty($associativeArray,$keyString)) + { + + return parent::checkMatch($associativeArray,$keyString,$regExp,'strong'); + + } else { + return false; + } + } +} \ No newline at end of file diff --git a/admin/Library/Array/Validate/index.html b/admin/Library/Array/Validate/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Library/Array/Validate/index.html @@ -0,0 +1 @@ + diff --git a/admin/Library/Array/index.html b/admin/Library/Array/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Library/Array/index.html @@ -0,0 +1 @@ + diff --git a/admin/Library/ArrayExt.php b/admin/Library/ArrayExt.php new file mode 100755 index 0000000..93eca91 --- /dev/null +++ b/admin/Library/ArrayExt.php @@ -0,0 +1,63 @@ +subset($associativeArray,$complementaryKeyString,$func); + } + +} diff --git a/admin/Library/Bootstrap.php b/admin/Library/Bootstrap.php new file mode 100755 index 0000000..796b22f --- /dev/null +++ b/admin/Library/Bootstrap.php @@ -0,0 +1,14 @@ +module name tag defines the name of the object that has to be instantiate and saved in the +//$modules property (that is an array referencing different module objects) array(moduleObj1,moduleObj2, ...) +//if the module class corresponding ot the module name tag does not exists, than no module is created and the next module name is checked +class BoxParser { + + public $modules = array(); //array referencing different module classes --> array(moduleObj1,moduleObj2, ...) See files inside the Application/Modules folder + + //$simpleXMLText: it has to be an XML text + //$type; it can be string or file. + public function __construct($simpleXMLText, $type = 'string') + { + if ($type === 'string') + { + if (@simplexml_load_string($simpleXMLText)) + { + $simpleXmlObj = simplexml_load_string($simpleXMLText); + $this->populate($simpleXmlObj); + } + } + else if ($type === 'file') + { + if (@simplexml_load_file($simpleXMLText)) + { + $simpleXmlObj = simplexml_load_file($simpleXMLText); + $this->populate($simpleXmlObj); + } + } + } + + //inistantiate the module objects and save them in the $this->modules property array + private function populate($simpleXmlObj) + { + foreach ($simpleXmlObj as $mod) + { + $className = 'Mod'.ucwords((string)$mod->type); + if (class_exists($className)) + { + if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Modules' . DS . $className . '.php')) + { + $newModule = new $className($mod); + if ($newModule instanceof ModAbstract) + { + $this->modules[] = $newModule; + } + } + } + } + } + + //create the HTML of the modules + public function render() + { + $HTML = null; + foreach ($this->modules as $module) + { + $HTML .= $module->render(); + } + return $HTML; + } + +} \ No newline at end of file diff --git a/admin/Library/Call.php b/admin/Library/Call.php new file mode 100755 index 0000000..d80f1d4 --- /dev/null +++ b/admin/Library/Call.php @@ -0,0 +1,321 @@ + $value) + { + if (strlen($value) > MAX_POST_LENGTH) die('the length of some of the $_POST values is too large'); + } + } +} + +function checkRequestUriLength() +{ + if (MAX_REQUEST_URI_LENGTH !== 0) + { + if (strlen($_SERVER['REQUEST_URI']) > MAX_REQUEST_URI_LENGTH) die('the length of the REQUEST_URI is too large'); + } +} + +function checkRegisterGlobals() +{ + if (ini_get('register_globals')) die('register globals is on: easyGiant works only with register globals off'); +} + +function callHook() +{ + + if (MOD_REWRITE_MODULE === true) + { + $url = isset($_GET['url']) ? $_GET['url'] : DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION; + } + else + { + $url = (strcmp(getQueryString(),"") !== 0) ? getQueryString() : DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION; + } + + //rewrite the URL +// if (Route::$rewrite === 'yes') +// { +// $url = rewrite($url); +// } + +// echo $url; + + $urlArray = array(); + $urlArray = explode("/",$url); + + $controller = DEFAULT_CONTROLLER; + $action = DEFAULT_ACTION; + + if (isset($urlArray[0])) + { + $controller = (strcmp($urlArray[0],'') !== 0) ? strtolower(trim($urlArray[0])) : DEFAULT_CONTROLLER; + } + + array_shift($urlArray); + + if (isset($urlArray[0])) + { + $action = (strcmp($urlArray[0],'') !== 0) ? strtolower(trim($urlArray[0])) : DEFAULT_ACTION; + } + + //set ERROR_CONTROLLER and ERROR_ACTION + $errorController = ERROR_CONTROLLER !== false ? ERROR_CONTROLLER : DEFAULT_CONTROLLER; + $errorAction = ERROR_ACTION !== false ? ERROR_ACTION : DEFAULT_ACTION; + + /* + VERIFY THE ACTION NAME + */ + if (method_exists('Controller', $action) or !ctype_alnum($action) or (strcmp($action,'') === 0)) + { + $controller = $errorController; + $action = $errorAction; + $urlArray = array(); + } + + /* + VERIFY THE CONTROLLER NAME + */ + if (!ctype_alnum($controller) or (strcmp($controller,'') === 0)) + { + $controller = $errorController; + $action = $errorAction; + $urlArray = array(); + } + + //check that the controller class belongs to the application/controllers folder + //otherwise set the controller to the default controller + if (!file_exists(ROOT.DS.APPLICATION_PATH.DS.'Controllers'.DS.ucwords($controller).'Controller.php')) + { + $controller = $errorController; + $action = $errorAction; + $urlArray = array(); + } + + //set the controller class to DEFAULT_CONTROLLER if it doesn't exists + if (!class_exists(ucwords($controller).'Controller')) + { + $controller = $errorController; + $action = $errorAction; + $urlArray = array(); + } + + //set the action to DEFAULT_ACTION if it doesn't exists + if (!method_exists(ucwords($controller).'Controller', $action)) + { + $controller = $errorController; + $action = $errorAction; + $urlArray = array(); + } + + /* + CHECK COUPLES CONTROLLER,ACTION + */ + if (!in_array('all',Route::$allowed)) + { + $couple = "$controller,$action"; + if (!in_array($couple,Route::$allowed)) + { + $controller = $errorController; + $action = $errorAction; + $urlArray = array(); + } + } + + array_shift($urlArray); + $queryString = $urlArray; + //set the name of the application + $application = $controller; + $controller = ucwords($controller); + $model = $controller; + $controller .= 'Controller'; + $model .= 'Model'; + + //include the file containing the set of actions to carry out before the initialization of the controller class + Hooks::load(ROOT . DS . APPLICATION_PATH . DS . 'Hooks' . DS . 'BeforeInitialization.php'); + + if (class_exists($controller)) + { + $dispatch = new $controller($model,$application,$queryString); + + //pass the action to the controller object + $dispatch->action = $action; + $dispatch->currPage = $dispatch->baseUrl.'/'.$dispatch->controller.'/'.$dispatch->action; + + //require the file containing the set of actions to carry out after the initialization of the controller class + Hooks::load(ROOT . DS . APPLICATION_PATH . DS . 'Hooks' . DS . 'AfterInitialization.php'); + + $templateFlag= true; + + if (method_exists($controller, $action)) + { + //pass the action to the theme object + $dispatch->theme->action = $action; + $dispatch->theme->currPage = $dispatch->baseUrl.'/'.$dispatch->controller.'/'.$dispatch->action; + + call_user_func_array(array($dispatch,$action),$queryString); + } + else + { + $templateFlag= false; + } + + if ($templateFlag) + { + $dispatch->theme->render(); + } + + } + else + { + echo "

        the '$controller' controller is not present!

        "; + } + +} + + +// //rewrite the URL +// function rewrite($url) +// { +// foreach (Route::$map as $key => $address) +// { +// if (preg_match('/^'.$key.'/',$url)) +// { +// return preg_replace('/^'.$key.'/',$address,$url); +// } +// } +// return ERROR_CONTROLLER.'/'.ERROR_ACTION; +// } + +function getQueryString() +{ + + if (strstr($_SERVER['REQUEST_URI'],'index.php/')) + { + return Params::$mbStringLoaded === true ? mb_substr(mb_strstr($_SERVER['REQUEST_URI'],'index.php/'),10) : substr(strstr($_SERVER['REQUEST_URI'],'index.php/'),10); + } + + return ''; +} + +function __autoload($className) +{ + + $backupName = $className; + + if (strstr($className,'_')) + { + $parts = explode('_',$className); + $className = implode(DS,$parts); + } + + if (file_exists(ROOT . DS . 'Library' . DS . $className . '.php')) + { + require_once(ROOT . DS . 'Library' . DS . $className . '.php'); + } + else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Controllers' . DS . $backupName . '.php')) + { + require_once(ROOT . DS . APPLICATION_PATH . DS . 'Controllers' . DS . $backupName . '.php'); + } + else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Models' . DS . $backupName . '.php')) + { + require_once(ROOT . DS . APPLICATION_PATH . DS . 'Models' . DS . $backupName . '.php'); + } + else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Modules' . DS . $backupName . '.php')) + { + require_once(ROOT . DS . APPLICATION_PATH . DS . 'Modules' . DS . $backupName . '.php'); + } + else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Strings' . DS . $className . '.php')) + { + require_once(ROOT . DS . APPLICATION_PATH . DS . 'Strings' . DS . $className . '.php'); + } + +} + +try { + + //check the length of the $_POST values + checkPostLength(); + + //check the length of the REQUEST_URI + checkRequestUriLength(); + + //connect to the database + Factory_Db::getInstance(DATABASE_TYPE,array(HOST,USER,PWD,DB)); + + //set htmlentities charset + switch (DEFAULT_CHARSET) + { + case 'SJIS': + Params::$htmlentititiesCharset = 'Shift_JIS'; + break; + } + + $allowedCharsets = array('UTF-8','ISO-8859-1','EUC-JP','SJIS'); + if (!in_array(DEFAULT_CHARSET,$allowedCharsets)) die('charset not-allowed'); + + //check if the mbstring extension is loaded + if (extension_loaded('mbstring')) + { + //set the internal encoding + mb_internal_encoding(DEFAULT_CHARSET); + Params::$mbStringLoaded = true; + } + + //load the files defined inside Config/Autoload.php + foreach (Autoload::$files as $file) + { + $ext = strtolower(end(explode('.', $file))); + $path = ROOT . DS . APPLICATION_PATH . DS . 'Include' . DS . $file; + if (file_exists($path) and $ext === 'php') + { + require_once($path); + } + } + + //include the file containing the set of actions to carry out before the check of the super global array + Hooks::load(ROOT . DS . APPLICATION_PATH . DS . 'Hooks' . DS . 'BeforeChecks.php'); + + //sanitize super global arrays + sanitizeSuperGlobal(); + + //report errors + ErrorReporting(); + + //verify that register globals is not active + checkRegisterGlobals(); + + //call the main hook + callHook(); + + //disconnect to the database + Factory_Db::disconnect(DATABASE_TYPE); + +} catch (Exception $e) { + + echo '
        Message: '.$e->getMessage().'
        '; + +} \ No newline at end of file diff --git a/admin/Library/Controller.php b/admin/Library/Controller.php new file mode 100755 index 0000000..9ceaa5f --- /dev/null +++ b/admin/Library/Controller.php @@ -0,0 +1,291 @@ +viewArgs) + + public $theme; + public $baseUrl = null; //the base url of the website: http://domainname + public $baseUrlSrc = null; //the base url of the website (http://domainname) if MOD_REWRITE_MODULE has been set to false + + public $headerObj; //reference to headerObj class + +// protected $_users; //object to manage access + + protected $scaffold = null; //the reference to the scaffold object + + function __construct($model, $controller, $queryString = array()) { + + $this->controller = $controller; + $this->modelName = $model; + $this->_queryString = $queryString; + + $this->theme = new Theme($controller); + $this->baseUrl = $this->theme->baseUrl; + $this->baseUrlSrc = $this->theme->baseUrlSrc; + + $this->headerObj = new HeaderObj(DOMAIN_NAME); + $this->request = new Request(); + } + + //redirect to $path after the time $time + final public function redirect($path,$time = 0,$string = null) + { + $this->headerObj->redirect($path,$time,$string); + } + + //set the $_data structure of the theme + final public function set($value) + { + $this->theme->set($value); + } + + //append values to the $_data structure of the theme + final public function append($value) + { + $this->theme->append($value); + } + + //load a view file + final public function load($viewFile,$option = 'none') { + $this->theme->load($viewFile,$option); + } + + //clean the array containing the view files to load + final public function clean() { + $this->theme->clean(); + } + + //load an helper class + final function helper($helperName) { + $args = func_get_args(); + array_shift($args); + $name = 'Helper_'.$helperName; + if (class_exists($name)) + { + $this->h[$helperName] = new $name(); + + if ($this->h[$helperName] instanceof Helper_Html) { + $this->h[$helperName]->viewArgs = $this->viewArgs; + $this->h[$helperName]->viewStatus = $this->viewStatus; + } + + if (method_exists($this->h[$helperName], 'build')) { + call_user_func_array(array($this->h[$helperName],'build'),$args); + } + } + + } + + //load a model class + //$name: the name of the model class + final public function model($name = null) { + $modelName = isset($name) ? $name : $this->modelName; + if (class_exists($modelName)) { + $this->m[$modelName] = new $modelName(); + } else { + throw new Exception('Error in '.__METHOD__.': class "'.$modelName.'" has not been defined'); + } + } + + //load a controller + //$controllerName: the name of the controller class to load + final public function controller($controller) + { + if (class_exists($controller)) { + $model = str_replace('Controller',null,$controller).'Model'; + $application = strtolower(str_replace('Controller',null,$controller)); + $this->c[$controller] = new $controller($model,$application,array()); + $this->c[$controller]->theme = $this->theme; + } + } + + //load a users_checkAdmin class + //$sessonType: the type of session. It can be 'admin' (in the case of the access of an admin user) or 'registered' (in the case of the access of a registerd user) + final public function session($sessionType = 'admin') { + $sessionTypeArray = array('admin','registered'); + if (!in_array($sessionType,$sessionTypeArray)) { + throw new Exception('Error in '.__METHOD__.': the session type can be \'admin\' or \'registered\' only'); + } + //admin session + if ($sessionType === 'admin') { + $params = array( + 'users_controller' => ADMIN_USERS_CONTROLLER, + 'users_login_action' => ADMIN_USERS_LOGIN_ACTION, + 'panel_controller' => ADMIN_PANEL_CONTROLLER, + 'panel_main_action' => ADMIN_PANEL_MAIN_ACTION, + 'cookie_name' => ADMIN_COOKIE_NAME, + 'sessionsTable' => ADMIN_SESSIONS_TABLE, + 'usersTable' => ADMIN_USERS_TABLE, + 'groupsTable' => ADMIN_GROUPS_TABLE, + 'manyToManyTable' => ADMIN_MANYTOMANY_TABLE, + 'accessesTable' => ADMIN_ACCESSES_TABLE, + 'session_expire' => ADMIN_SESSION_EXPIRE, + 'cookie_path' => ADMIN_COOKIE_PATH, + 'database_type' => DATABASE_TYPE, + 'hijacking_check' => ADMIN_HIJACKING_CHECK, + 'on_hijacking_event' => ADMIN_ON_HIJACKING_EVENT, + 'hijacking_action' => ADMIN_HIJACKING_ACTION, + 'time_after_failure' => ADMIN_TIME_AFTER_FAILURE, + 'password_hash' => PASSWORD_HASH, + 'cookie_domain' => ADMIN_COOKIE_DOMAIN, + 'cookie_secure' => ADMIN_COOKIE_SECURE + ); + $this->s['admin'] = new Users_CheckAdmin($params); + } + //registered session + if ($sessionType === 'registered') { + $params = array( + 'users_controller' => REG_USERS_CONTROLLER, + 'users_login_action' => REG_USERS_LOGIN_ACTION, + 'panel_controller' => REG_PANEL_CONTROLLER, + 'panel_main_action' => REG_PANEL_MAIN_ACTION, + 'cookie_name' => REG_COOKIE_NAME, + 'sessionsTable' => REG_SESSIONS_TABLE, + 'usersTable' => REG_USERS_TABLE, + 'groupsTable' => REG_GROUPS_TABLE, + 'manyToManyTable' => REG_MANYTOMANY_TABLE, + 'accessesTable' => REG_ACCESSES_TABLE, + 'session_expire' => REG_SESSION_EXPIRE, + 'cookie_path' => REG_COOKIE_PATH, + 'database_type' => DATABASE_TYPE, + 'hijacking_check' => REG_HIJACKING_CHECK, + 'on_hijacking_event' => REG_ON_HIJACKING_EVENT, + 'hijacking_action' => REG_HIJACKING_ACTION, + 'time_after_failure' => REG_TIME_AFTER_FAILURE, + 'password_hash' => PASSWORD_HASH, + 'cookie_domain' => REG_COOKIE_DOMAIN, + 'cookie_secure' => REG_COOKIE_SECURE + ); + $this->s['registered'] = new Users_CheckAdmin($params); + } + } + + //method to set $this->argKeys. Chenge the string in the array! + final public function setArgKeys($argKeys) { +// $this->argKeys = explode(',',$argKeys); + $this->argKeys = array_keys($argKeys); + $this->argDefault = array_values($argKeys); + } + + //shift the $this->_queryString array a number of times equal to the number indicated by the $number variable and build the $this->viewArgs array and the $this->viewStatus string (additional url) + final public function shift($number = 0) { + + //save the query string array + $oldQueryString = $this->_queryString; + + for ($i = 0; $i < $number; $i++) + { + array_shift($this->_queryString); + } + $this->callInArgKeysFunc(); + for ($i = 0; $i < count($this->argKeys); $i++) + { + if (!isset($this->_queryString[$i])) { + $this->viewArgs[$this->argKeys[$i]] = isset($this->argDefault[$i]) ? $this->argDefault[$i] : null; + continue; + } + $this->viewArgs[$this->argKeys[$i]] = $this->_queryString[$i]; + } + $this->viewStatus = Url::createUrl(array_values($this->viewArgs)); + $this->updateHelpers(); + + //update the theme + $this->theme->viewStatus = $this->viewStatus; + $this->theme->viewArgs = $this->viewArgs; + + //restore the query string array + $this->_queryString = $oldQueryString; + } + + //call the functions defined in $this->argKeys after the colon (ex- 'page:forceInt' => apply the forceInt() function upon the $page arg) + final public function callInArgKeysFunc() { + for ($i = 0; $i < count($this->argKeys); $i++) { + if (strstr($this->argKeys[$i],':')) { + $temp = explode(':',$this->argKeys[$i]); + //exception + if (!in_array($temp[1],explode(',',params::$allowedSanitizeFunc))) { + throw new Exception('"'.$temp[1]. '" function not allowed in $this->argKeys'); + } + $this->argKeys[$i] = $temp[0]; + if (!isset($this->_queryString[$i])) { + continue; + } + $this->_queryString[$i] = call_user_func($temp[1],$this->_queryString[$i]); + } + } + } + + //function to update all the Helper that are instance of the HtmlHelper class. This function update the $viesArgs and $viewStatus properties. This function is called by the shift method. + final public function updateHelpers() { + foreach ($this->h as $Helper) { + if ($Helper instanceof Helper_Html) { + $Helper->viewArgs = $this->viewArgs; + $Helper->viewStatus = $this->viewStatus; + } + } + } + + //create the viewStatus property + final public function buildStatus() + { + $this->viewStatus = Url::createUrl(array_values($this->viewArgs)); + //update the theme + $this->theme->viewStatus = $this->viewStatus; + $this->theme->viewArgs = $this->viewArgs; + } + + //method to instanciate the scaffold + final public function loadScaffold($type,$params = null) { + + $typeArray = array('main','form'); + if (!in_array($type,$typeArray)) { + throw new Exception("the type '$type' is not allowed in ".__METHOD__); + } + $this->scaffold = new Scaffold($type,$this->controller,$this->m[$this->modelName],$this->viewArgs,$params); + + $this->helper('Menu',$this->controller,$this->scaffold->params['panelController']); + $this->scaffold->mainMenu = $this->h['Menu']; + + $this->m[$this->modelName]->popupBuild(); + $popupArray = $this->m[$this->modelName]->popupArray; + + if ($type === 'main') { + + $here = $this->controller.'/'.$this->scaffold->params['mainAction']; + $this->helper('Pages',$here,$this->scaffold->params['pageVariable']); + $this->helper('List',$this->m[$this->modelName]->identifierName); + + + $this->helper('Popup',$here,$popupArray,$this->scaffold->params['popupType'],$this->scaffold->params['pageVariable']); + + $this->scaffold->pageList = $this->h['Pages']; + $this->scaffold->itemList = $this->h['List']; + $this->scaffold->popupMenu = $this->h['Popup']; + } + } + +} \ No newline at end of file diff --git a/admin/Library/Db/Mysql.php b/admin/Library/Db/Mysql.php new file mode 100755 index 0000000..8b96f44 --- /dev/null +++ b/admin/Library/Db/Mysql.php @@ -0,0 +1,394 @@ + 'utf8', + 'ISO-8859-1' => 'latin1', + 'EUC-JP' => 'ujis', + 'SJIS' => 'sjis' + ); + + private function __construct($host,$user,$pwd,$db_name) + { + + $this->dblink = mysql_connect($host,$user,$pwd); + + if ($this->dblink === FALSE) { + die ("Connection error. Verify parameters in config.php"); + } + + $db2 = mysql_select_db($db_name, $this->dblink) + or die ("Database selection error. Verify parameters in config.php"); + + $charset = array_key_exists(DEFAULT_CHARSET,$this->charsetTranslationTable) ? $this->charsetTranslationTable[DEFAULT_CHARSET] : 'utf8'; + + if (!@mysql_set_charset($charset,$this->dblink)) $this->charsetError = false; + + $this->charset = mysql_client_encoding(); + } + + public static function getInstance($host = null, $user = null, $pwd = null, $db_name = null) + { + if (!isset(self::$instance)) { + $className = __CLASS__; + self::$instance = new $className($host,$user,$pwd,$db_name); + } + + return self::$instance; + } + + + //close the connection + public function disconnect() + { + mysql_close($this->dblink); + } + + //the text of the error message from previous MySQL operation + public function getError() + { + return mysql_error($this->dblink); + } + + //the numerical value of the error message from previous MySQL operation + public function getErrno() + { + return mysql_errno($this->dblink); + } + + public function createSelectQuery($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=null,$using=null) + { + if (isset($where)) + { + $where='WHERE '.$where; + } + if (isset($using)) + { + $using ='USING ('.$using.')'; + $on = null; + } + if (isset($on) and !isset($using)) + { + $on='ON '.$on; + } + if (isset($order_by)) { + $order_by='ORDER BY '.$order_by; + } + if (isset($group_by)) { + $group_by='GROUP BY '.$group_by; + } + if (isset($limit)) { + $limit='LIMIT '.$limit; + } + + $query="SELECT $fields FROM $table $on $using $where $group_by $order_by $limit;"; + return $query; + } + + public function get_num_rows($table,$where=null,$group_by=null,$on=null,$using=null) { + + $query = $this->createSelectQuery($table,'*',$where,$group_by,null,null,$on,$using); + + $this->query=$query; + + $ris = mysql_query($query); + if ($ris) { + $num_rows = mysql_num_rows($ris); + return $num_rows; + } else { + return false; + } + } + + //get the maximum value of the field $field of the table $table having the $where conditions + public function getMath($func,$table,$field,$where=null,$group_by = null, $on=null,$using=null) + { + $query = $this->createSelectQuery($table,"$func($field) AS m",$where,$group_by,null,null,$on,$using); + + $this->query = $query; + $result = mysql_query($query); + if ($result) + { + $row = mysql_fetch_array($result); + return $row['m']; + } + else + { + return false; + } + } + + //get the maximum value of the field $field of the table $table having the $where conditions + public function getMax($table,$field,$where=null,$group_by = null,$on=null,$using=null) + { + return $this->getMath('MAX',$table,$field,$where,$group_by,$on,$using); + } + + //get the minimum value of the field $field of the table $table having the $where conditions + public function getMin($table,$field,$where=null,$group_by = null,$on=null,$using=null) + { + return $this->getMath('MIN',$table,$field,$where,$group_by,$on,$using); + } + + //get the sum of the fields + public function getSum($table,$field,$where=null,$group_by = null,$on=null,$using=null) + { + return $this->getMath('SUM',$table,$field,$where,$group_by,$on,$using); + } + + //get the average of the fields + public function getAvg($table,$field,$where=null,$group_by = null,$on=null,$using=null) + { + return $this->getMath('AVG',$table,$field,$where,$group_by,$on,$using); + } + + public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=null,$using=null) + { + $query = $this->createSelectQuery($table,$fields,$where,$group_by,$order_by,$limit,$on,$using); + + $this->query = $query; + $result = mysql_query($query); + return $this->getData($result); + } + + +// public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null) { +// $query = $this->selectQuery($table,$fields,$where,$group_by,$order_by,$limit); +// return $this->getData($query); +// } + + + //obtain an associative array containing the result values (keys:tableName_fieldsName) + //$par = 'single/multi' single table,multi table + public function getData($result) + { + $data = array(); //data from the query + $temp = array(); //temporary array (values of a single record) +// $result = mysql_query($query); + if ($result) + { + $fieldsNumber = mysql_num_fields($result); + while ($row = mysql_fetch_array($result)) + { + for ($i = 0;$i < $fieldsNumber;$i++) + { + $tableName = mysql_field_table($result, $i); + if (strcmp($tableName,'') === 0) $tableName = Params::$aggregateKey; + $fieldName = mysql_field_name($result, $i); + $temp[$tableName][$fieldName] = $row[$i]; + } + array_push($data,$temp); + } + return $data; + } + else + { + return false; + } + } + + //return an array containing all the types of the fields (indicated in $fields) of a table (indicated in $table) + public function getTypes($table, $fields) + { + $query = "DESCRIBE $table;"; + $result = mysql_query($query); + $temp = array(); + while ($row = mysql_fetch_assoc($result)) { + $temp[$row['Field']] = reset(explode('(',$row['Type'])); + } + + $types = array(); + $fields = explode(',',$fields); + for ($i = 0; $i < count($fields); $i++) + { + if (!array_key_exists($fields[$i],$temp)) return false; + $types[] = $temp[$fields[$i]]; + } + + return $types; + } + + public function insert($table,$fields,$values) { + + #$table is a string + #$fields has to be a string with comma as separator: name1,name2,... + #$values has to be an array + $values = array_values($values); + if (strcmp($fields,'') !== 0) + { + //get the type of the fields + $types = $this->getTypes($table,$fields); + if (!$types) return false; + + for($i = 0; $i < count($values); $i++) + { + if (!in_array($types[$i],$this->fieldsType)) + { + $values[$i] = '"'.$values[$i].'"'; + } + else + { + if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"'; + } + } + + $values = implode(',',$values); + $query="INSERT INTO $table ($fields) VALUES ($values);"; + $this->query = $query; + $ris = mysql_query($query); + + #check the result + if ($ris) { + return true; + } else { + return false; + } + + } else { + return false; + } + } + + // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT). + public function lastId() + { + return mysql_insert_id(); + } + + public function update($table,$fields,$values,$where) { + + #$table and $where are two strings + #$fields has to be a string with comma as separator: name1,name2,... + #$values has to be an array + $values = array_values($values); +// if (isset($where)) { + $where='WHERE '.$where; +// } + #get the array from the $fields string + if (strcmp($fields,'') !== 0) + { + //get the type of the fields + $types = $this->getTypes($table,$fields); + if (!$types) return false; + + $fields=explode(',',$fields); + $str=array(); + + for ($i=0;$ifieldsType)) + { + $values[$i] = '"'.$values[$i].'"'; + } + else + { + if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"'; + } + $str[$i]= $fields[$i].'='.$values[$i]; + } + + #set the string name1=value1,name2=... + $str=implode(',',$str); + $query="UPDATE $table SET $str $where;"; + $this->query=$query; + $ris = mysql_query($query); + + #check the result + if ($ris) { + return true; + } else { + return false; + } + } else { + return false; + } + + } + + + public function del($table,$where) { + + #$table and $where are two strings +// if (isset($where)) { + $where='WHERE '.$where; +// } + $query="DELETE FROM $table $where;"; + $this->query=$query; + $ris = mysql_query($query); + #check the result + + if ($ris) { + return true; + } else { + return false; + } + + } + + // function to check if exist the record having the field $id_name=$id_value + public function recordExists($table,$fieldName,$fieldValue,$where = null,$groupBy=null,$on=null,$using=null) + { + if (isset($where)) + { + $where=' AND '.$where; + } + + $fieldValue = '"'.$fieldValue.'"'; + + $num=$this->get_num_rows($table,$fieldName.'='.$fieldValue.$where,$groupBy,$on,$using); + $res=($num>0) ? true : false; + return $res; + + } + + + //send a generic query to the database + //$query: the query to be sent + public function query($query) + { + $this->query = $query; + $result = mysql_query($query); + if ($result === false) + { + return false; + } + else if ($result === true) + { + return true; + } + else if (@get_resource_type($result)) + { + return $this->getData($result); + } + } + + // Prevent users to clone the instance + public function __clone() + { + throw new Exception('error in '. __METHOD__.': clone is not allowed'); + } + +} \ No newline at end of file diff --git a/admin/Library/Db/Mysqli.php b/admin/Library/Db/Mysqli.php new file mode 100644 index 0000000..4e4c528 --- /dev/null +++ b/admin/Library/Db/Mysqli.php @@ -0,0 +1,400 @@ + 'utf8', + 'ISO-8859-1' => 'latin1', + 'EUC-JP' => 'ujis', + 'SJIS' => 'sjis' + ); + + /** + + *connect to the database + *'host','user','password','db_name' + + */ + + private function __construct($host,$user,$pwd,$db_name) + { + + $this->db = new mysqli($host,$user,$pwd,$db_name); + + if (mysqli_connect_error()) + { + die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); + } + + $charset = array_key_exists(DEFAULT_CHARSET,$this->charsetTranslationTable) ? $this->charsetTranslationTable[DEFAULT_CHARSET] : 'utf8'; + + if (!@$this->db->set_charset($charset)) $this->charsetError = false; + + $this->charset = $this->db->character_set_name(); + + } + + //return the $this->db property + public function getDb() + { + return $this->db; + } + + public static function getInstance($host = null, $user = null, $pwd = null, $db_name = null) + { + if (!isset(self::$instance)) { + $className = __CLASS__; + self::$instance = new $className($host,$user,$pwd,$db_name); + } + + return self::$instance; + } + + + //close the connection + public function disconnect() + { + $this->db->close(); + } + + //the text of the error message from previous MySQL operation + public function getError() + { + return $this->db->error; + } + + //the numerical value of the error message from previous MySQL operation + public function getErrno() + { + return $this->db->errno; + } + + public function createSelectQuery($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=null,$using=null) + { + if (isset($where)) + { + $where='WHERE '.$where; + } + if (isset($using)) + { + $using ='USING ('.$using.')'; + $on = null; + } + if (isset($on) and !isset($using)) + { + $on='ON '.$on; + } + if (isset($order_by)) { + $order_by='ORDER BY '.$order_by; + } + if (isset($group_by)) { + $group_by='GROUP BY '.$group_by; + } + if (isset($limit)) { + $limit='LIMIT '.$limit; + } + + $query="SELECT $fields FROM $table $on $using $where $group_by $order_by $limit;"; + return $query; + } + + public function get_num_rows($table,$where=null,$group_by=null,$on=null,$using=null) { + + $query = $this->createSelectQuery($table,'*',$where,$group_by,null,null,$on,$using); + + $this->query = $query; + $ris = $this->db->query($query); + if ($ris) { + $num_rows = $ris->num_rows; + $ris->close(); + return $num_rows; + } else { + return false; + } + } + + public function getMath($func,$table,$field,$where=null,$group_by = null, $on=null,$using=null) + { + $query = $this->createSelectQuery($table,"$func($field) AS m",$where,$group_by,null,null,$on,$using); + + $this->query = $query; + $result = $this->db->query($query); + if ($result) + { + $row = $result->fetch_array(); + $result->close(); + return $row['m']; + } + else + { + return false; + } + } + + //get the maximum value of the field $field of the table $table having the $where conditions + public function getMax($table,$field,$where=null,$group_by = null,$on=null,$using=null) + { + return $this->getMath('MAX',$table,$field,$where,$group_by,$on,$using); + } + + //get the minimum value of the field $field of the table $table having the $where conditions + public function getMin($table,$field,$where=null,$group_by = null,$on=null,$using=null) + { + return $this->getMath('MIN',$table,$field,$where,$group_by,$on,$using); + } + + //get the sum of the fields + public function getSum($table,$field,$where=null,$group_by = null,$on=null,$using=null) + { + return $this->getMath('SUM',$table,$field,$where,$group_by,$on,$using); + } + + //get the average of the fields + public function getAvg($table,$field,$where=null,$group_by = null,$on=null,$using=null) + { + return $this->getMath('AVG',$table,$field,$where,$group_by,$on,$using); + } + + public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=null,$using=null) + { + $query = $this->createSelectQuery($table,$fields,$where,$group_by,$order_by,$limit,$on,$using); + + $this->query = $query; + $result = $this->db->query($query); + return $this->getData($result); + } + + +// public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null) { +// $query = $this->selectQuery($table,$fields,$where,$group_by,$order_by,$limit); +// return $this->getData($query); +// } + + + //obtain an associative array containing the result values (keys:tableName_fieldsName) + //$par = 'single/multi' single table,multi table + public function getData($result) { + $data = array(); //data from the query + $temp = array(); //temporary array (values of a single record) +// $result = $this->db->query($query); + if ($result) { + $fieldsNumber = $result->field_count; + while ($row = $result->fetch_array()) { + for ($i = 0;$i < $fieldsNumber;$i++) { + $finfo = $result->fetch_field_direct($i); + $tableName = $finfo->table; + if (strcmp($tableName,'') === 0) $tableName = Params::$aggregateKey; + $fieldName = $finfo->name; + $temp[$tableName][$fieldName] = $row[$i]; + } + array_push($data,$temp); + } + $result->close(); + return $data; + } else { + return false; + } + } + + //return an array containing all the types of the fields (indicated in $fields) of a table (indicated in $table) + public function getTypes($table, $fields) + { + $query = "DESCRIBE $table;"; + $result = $this->db->query($query); + $temp = array(); + while ($row = $result->fetch_assoc()) { + $temp[$row['Field']] = reset(explode('(',$row['Type'])); + } + $result->close(); + + $types = array(); + $fields = explode(',',$fields); + for ($i = 0; $i < count($fields); $i++) + { + if (!array_key_exists($fields[$i],$temp)) return false; + $types[] = $temp[$fields[$i]]; + } + + return $types; + } + + public function insert($table,$fields,$values) { + + #$table is a string + #$fields has to be a string with comma as separator: name1,name2,... + #$values has to be an array + $values = array_values($values); + if (strcmp($fields,'') !== 0) + { + //get the type of the fields + $types = $this->getTypes($table,$fields); + if (!$types) return false; + + for($i = 0; $i < count($values); $i++) + { + if (!in_array($types[$i],$this->fieldsType)) + { + $values[$i] = '"'.$values[$i].'"'; + } + else + { + if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"'; + } + } + + $values = implode(',',$values); + $query="INSERT INTO $table ($fields) VALUES ($values);"; + $this->query=$query; + + $ris = $this->db->query($query); + + #check the result + if ($ris) { + return true; + } else { + return false; + } + + } else { + return false; + } + } + + // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT). + public function lastId() + { + return $this->db->insert_id; + } + + public function update($table,$fields,$values,$where) { + + #$table and $where are two strings + #$fields has to be a string with comma as separator: name1,name2,... + #$values has to be an array + $values = array_values($values); +// if (isset($where)) { + $where='WHERE '.$where; +// } + #get the array from the $fields string + if (strcmp($fields,'') !== 0) + { + //get the type of the fields + $types = $this->getTypes($table,$fields); + if (!$types) return false; + + $fields = explode(',',$fields); + $str = array(); + + for ($i=0;$ifieldsType)) + { + $values[$i] = '"'.$values[$i].'"'; + } + else + { + if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"'; + } + $str[$i]= $fields[$i].'='.$values[$i]; + } + + #set the string name1=value1,name2=... + $str=implode(',',$str); + $query="UPDATE $table SET $str $where;"; + $this->query=$query; + $ris = $this->db->query($query); + + #check the result + if ($ris) { + return true; + } else { + return false; + } + } else { + return false; + } + + } + + + public function del($table,$where) { + + #$table and $where are two strings +// if (isset($where)) { + $where='WHERE '.$where; +// } + $query="DELETE FROM $table $where;"; + $this->query=$query; + $ris = $this->db->query($query); + #check the result + + if ($ris) { + return true; + } else { + return false; + } + + } + + + //function to check if exist the record having the field $id_name=$id_value + public function recordExists($table,$fieldName,$fieldValue,$where = null,$groupBy=null,$on=null,$using=null) + { + if (isset($where)) + { + $where=' AND '.$where; + } + + $fieldValue = '"'.$fieldValue.'"'; + + $num = $this->get_num_rows($table,$fieldName.'='.$fieldValue.$where,$groupBy,$on,$using); + $res=($num>0) ? true : false; + return $res; + + } + + + //send a generic query to the database + //$query: the query to be sent + public function query($query) + { + $this->query = $query; + $result = $this->db->query($query); + if ($result === true) + { + return true; + } + else if ($result === false) + { + return false; + } + else if ($result instanceof MySQLi_Result) + { + return $this->getData($result); + } + } + + // Prevent users to clone the instance + public function __clone() + { + throw new Exception('error in '. __METHOD__.': clone is not allowed'); + } + +} \ No newline at end of file diff --git a/admin/Library/Db/index.html b/admin/Library/Db/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Library/Db/index.html @@ -0,0 +1 @@ + diff --git a/admin/Library/Email.php b/admin/Library/Email.php new file mode 100644 index 0000000..c948098 --- /dev/null +++ b/admin/Library/Email.php @@ -0,0 +1,229 @@ +_check = $bool; + } + + //set the sentTo addresses array + //$addresses: array of e-mail addresses or a string + public function sendTo($addresses) + { + $this->_sendTo = explode(',',$addresses); + } + + //set the subject + public function subject($subject) + { + $this->_subject = $subject; + } + + //set the cc addresses array + //$addresses: array of e-mail addresses or a string + public function cc($addresses) + { + $this->_cc = explode(',',$addresses); + } + + //set the bcc addresses array + //$addresses: array of e-mail addresses or a string + public function bcc($addresses) + { + $this->_bcc = explode(',',$addresses); + } + + //set the address of the sender + public function from($address) + { + $this->_from = $address; + } + + //set the charset + public function charset($charset) + { + $this->_charset = $charset; + } + + //set the Content-Transfer-Encoding + public function ctencoding($ctencoding) + { + $this->_ctencoding = $ctencoding; + } + + //set the text body + public function body($body) + { + $this->_body = $body; + } + + //set the address regular expression + public function addressRegExp($regExp) + { + $this->_addressRegExp = $regExp; + } + + //check if the mail address is valid + public function isValidAddress($address) + { + + if( preg_match( '/^[^<>]*<(.+)>$/', $address, $matches ) ) + { + $address = $matches[1]; + } + + if (isset($this->_addressRegExp)) + { + if (preg_match($this->_addressRegExp,$address)) + { + return true; + } + else + { + return false; + } + } + else + { + if (checkMail($address)) return true; + } + + return false; + + } + + //check the addresses inside the $addresses array + public function checkAddresses($addresses) + { + foreach ($addresses as $address) + { + if(!$this->isValidAddress($address)) return false; + } + return true; + } + + //build the mail + public function buildMail() + { + + if (empty($this->_sendTo)) + { + $this->errorsArray[] = 'no address specified'; + return false; + } + + if ($this->_check) + { + if (!$this->checkAddresses($this->_sendTo)) + { + $this->errorsArray[] = 'errors in the sendTo address validation'; + return false; + } + + if (!empty($this->_cc)) + { + if (!$this->checkAddresses($this->_cc)) + { + $this->errorsArray[] = 'errors in the cc address validation'; + return false; + } + } + + if (!empty($this->_bcc)) + { + if (!$this->checkAddresses($this->_bcc)) + { + $this->errorsArray[] = 'errors in the bcc address validation'; + return false; + } + } + + if (isset($this->_from)) + { + if (!$this->checkAddresses(array($this->_from))) + { + $this->errorsArray[] = 'errors in the from address validation'; + return false; + } + } + } + + if (strcmp($this->_subject,'') === 0) + { + $this->errorsArray[] = 'no subject specified'; + return false; + } + + $headers = null; + if (isset($this->_from)) $headers .= "From: ".$this->_from."\r\n"; + $headers .= "MIME-Version: 1.0\r\n"; + $headers .= "Content-Type: text/plain; charset=\"".$this->_charset."\"\r\n"; + $headers .= "Content-Transfer-Encoding: ".$this->_ctencoding."\r\n"; + if (!empty($this->_cc)) $headers .= "CC: ".implode(',',$this->_cc)."\r\n"; + if (!empty($this->_bcc)) $headers .= "Bcc: ".implode(',',$this->_bcc)."\r\n"; + + $this->_headers = $headers; + + return true; + + } + + public function send() + { + if (!$this->buildMail()) return false; + + $to = implode(',',$this->_sendTo); + + if (!@mail($to,$this->_subject,$this->_body,$this->_headers)) + { + $this->errorsArray[] = 'error in the send process'; + return false; + } + + return true; + } + +} \ No newline at end of file diff --git a/admin/Library/ErrorReporting.php b/admin/Library/ErrorReporting.php new file mode 100644 index 0000000..18ba519 --- /dev/null +++ b/admin/Library/ErrorReporting.php @@ -0,0 +1,45 @@ +. + +//function to set the error reporting parameters + +function ErrorReporting() { + if (RUNTIME_CONFIGURATION === true) + { + error_reporting(ERROR_REPORTING_DIRECTIVE); + if (DISPLAY_ERRORS === 'On') { + ini_set('display_errors','On'); + } else { + ini_set('display_errors','Off'); + } + + if (ERROR_REPORTING_FILE === true) + { + if (LOG_ERROR_FILE === 'default') + { + ini_set('error_log',ROOT.DS.'Logs/Errors.log'); + } else { + ini_set('error_log',LOG_ERROR_FILE); + } + } + } +} diff --git a/admin/Library/Factory/Db.php b/admin/Library/Factory/Db.php new file mode 100755 index 0000000..3a988dd --- /dev/null +++ b/admin/Library/Factory/Db.php @@ -0,0 +1,52 @@ +disconnect(); + break; + case 'Mysqli': + $mysqli = Db_Mysqli::getInstance(); + $mysqli->disconnect(); + break; + case 'None': + return null; + break; + } + } + +} diff --git a/admin/Library/Factory/index.html b/admin/Library/Factory/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Library/Factory/index.html @@ -0,0 +1 @@ + diff --git a/admin/Library/Files/Log.php b/admin/Library/Files/Log.php new file mode 100644 index 0000000..895c26d --- /dev/null +++ b/admin/Library/Files/Log.php @@ -0,0 +1,97 @@ +splFile = new SplFileObject($path,'a+'); + //change the permission of the file + @chmod($path,self::$logPermission); + } + + // The singleton method + // $instanceName: name of the key of self::$instance. It is also the name of the log file to open + public static function getInstance($instanceName) + { + if (!isset(self::$instance[$instanceName])) { + $className = __CLASS__; + self::$instance[$instanceName] = new $className($instanceName); + } + + return self::$instance[$instanceName]; + } + + //write the string $string at the end of the file + public function writeString($string,$format = 'Y-m-d H:i:s') + { + $date = date($format); + $this->splFile->fwrite("[$date]\t".$string."\n"); + } + + //get the date string of the line $line + public function getDateString($line) + { + if (preg_match('/^[\[]{1}([a-zA-Z0-9:\-\s])*[\]]{1}/',$line,$match)) + { + $match[0] = str_replace('[',null,$match[0]); + $match[0] = str_replace(']',null,$match[0]); + return $match[0]; + } + else + { + return false; + } + } + + //delete all the lines older than a number of days equal to $days + public function clearBefore($days = 30) + { + $tempArray = array(); + $newTime = time() - (int)$days * 24 * 3600; + foreach ($this->splFile as $line) + { + $lineTime = strtotime($this->getDateString($line)); + if ($lineTime !== false and $lineTime > $newTime) + { + $tempArray[] = $line; + } + } + $this->splFile->ftruncate(0); + foreach ($tempArray as $row) + { + $this->splFile->fwrite($row); + } + } + + // Prevent users to clone the instance + public function __clone() + { + throw new Exception('error in '. __METHOD__.': clone is not allowed'); + } + +} \ No newline at end of file diff --git a/admin/Library/Files/Upload.php b/admin/Library/Files/Upload.php new file mode 100755 index 0000000..47289fd --- /dev/null +++ b/admin/Library/Files/Upload.php @@ -0,0 +1,451 @@ +directory. The path starts from the $base folder + private $files = array(); //files inside the current directory + private $relFiles = array(); //files inside $this->directory. The path starts from the $base directory + private $params; //class parameters + private $pattern = null; //the pattern for the preg_match function + + protected $_resultString; //reference to the class uploadStrings containing all the result strings + + public $fileName = null; //the name of the last file that has been uploaded + public $notice = null; //the result string of the operation + + public function __construct($base,$params = null, $directory = null) { + + $this->base = $this->addTrailingSlash($base); + + //set the match pattern + $tmp = str_replace(self::DS,'\\'.self::DS,$this->base); + $this->pattern = "/^(".$tmp.")/"; + + $defaultParams = array( + 'filesPermission'=>0777, + 'delFolderAction'=>'delFolderAction', + 'delFileAction'=>'delFileAction', + 'createFolderAction'=>'createFolderAction', + 'uploadFileAction'=>'uploadFileAction', + 'maxFileSize' => 3000000, + 'language' => 'eng', + 'allowedExtensions'=>'jpg,jpeg,png,gif,txt', + 'fileUploadKey' => 'userfile' + ); + + //set the $this->scaffold->params array + if (is_array($params)) + { + foreach ($params as $key => $value) + { + $defaultParams[$key] = $value; + } + } + $this->params = $defaultParams; + + //instantiate the $_resultString object + $stringClass = 'Lang_'.$this->params['language'].'_UploadStrings'; + if (!class_exists($stringClass)) + { + $stringClass = 'Lang_Eng_UploadStrings'; + } + $this->_resultString = new $stringClass(); + + $this->setDirectory($directory); + + } + + //obtain the current directory + public function setDirectory($directory = null) + { + $relDir = (strcmp($directory,"") !== 0) ? $this->addTrailingSlash($directory) : null; + $absDir = $this->addTrailingSlash($this->base.$directory); + + if (is_dir($absDir)) + { + if ($this->isValidFolder($absDir)) + { + $this->directory = $relDir; + return true; + } + else + { + $this->notice = $this->_resultString->getString('not-child'); + } + } + else + { + $this->directory = null; + $this->notice = $this->_resultString->getString('not-dir'); + } + return false; + } + + //check if $folder is a folder and is subfolder of $this->base + protected function isValidFolder($folder) + { + if (is_dir($folder)) + { + $folder = $this->addTrailingSlash(realpath($folder)); + if ($this->isMatching($folder)) return true; + } + return false; + } + + protected function isMatching($path) + { + if (preg_match($this->pattern,$path)) + { + if (strstr($path,'..')) return false; + return true; + } + return false; + } + + public function getDirectory() { + return $this->directory; + } + + public function getBase() + { + return $this->base; + } + + public function getSubDir() { + return $this->subDir; + } + + public function getRelSubDir() + { + return $this->relSubDir; + } + + public function getFiles() { + return $this->files; + } + + public function getRelFiles() + { + return $this->relFiles; + } + + public function getParentDir() { + return $this->parentDir; + } + + //add the trailing slash to the string + protected function addTrailingSlash($string) + { + $finalChar = $string[strlen($string) - 1]; + if (strcmp($finalChar,self::DS) !== 0) + { + return $string.self::DS; + } + return $string; + } + + protected function urlDeep($dir) { #funzione per creare l'indirizzo completo della cartella all'interno della quale voglio entrare + #$dir:cartella all'interno della quale voglio entrare + return $this->base.$this->directory.$dir.self::DS; + } + + public function listFiles() { #creo la lista di file e cartelle all'interno della directory corrente + $items = scandir($this->base.$this->directory); + foreach( $items as $this_file ) { + if( strcmp($this_file,".") !== 0 && strcmp($this_file,"..") !== 0 ) { + if (is_dir($this->urlDeep($this_file))) { + $this->subDir[] = $this_file; + $this->relSubDir[] = $this->directory.$this_file; + } else { + $this->files[] = $this_file; + $this->relFiles[] = $this->directory.$this_file; + } + } + } + //get the parent dir + $this->parentDir(); + } + + //get the extension of the file + protected function getFileExtension($file) + { + return strtolower(end(explode('.', $file))); + } + + protected function parentDir() { #individuo la cartella madre + + $folders = explode(self::DS,$this->directory); + array_pop($folders); + array_pop($folders); + $parent = implode(self::DS,$folders); + $parent = (strcmp($parent,"") !== 0) ? $this->addTrailingSlash($parent) : null; + + if ($this->isValidFolder($this->base.$parent)) + { + $this->parentDir = $parent; + } + else + { + $this->parentDir = null; + } + } + + //create the $name subfolder of the $this->directory folder + public function createFolder($name) { #funzione per creare una cartella nella directory corrente + $name = basename($name); + if (strcmp(trim($name),'') !== 0) + { + if (is_writable($this->base.$this->directory)) + { + $path = $this->base.$this->directory.$name; + + if ($this->isMatching($path)) + { + if (!file_exists($path)) + { + if (@mkdir($path,$this->params['filesPermission'])) + { + @chmod($path, $this->params['filesPermission']); + $this->notice = $this->_resultString->getString('executed'); + return true; + } + else + { + $this->notice = $this->_resultString->getString('error'); + } + } + else + { + $this->notice = $this->_resultString->getString('dir-exists'); + } + } + else + { + $this->notice = $this->_resultString->getString('not-child'); + } + } + else + { + $this->notice = $this->_resultString->getString('not-writable'); + } + } + else + { + $this->notice = $this->_resultString->getString('no-folder-specified'); + } + return false; + } + + //check if the $name folder is empty or not + protected function isEmpty($name) + { + $items = scandir($name); + foreach( $items as $this_file ) { + if( strcmp($this_file,".") !== 0 && strcmp($this_file,"..") !== 0 ) { + return false; + } + } + return true; + } + + public function removeFile($name) + { + $name = basename($name); + if (strcmp(trim($name),'') !== 0) + { + $path = $this->base.$this->directory.$name; + if ($this->isMatching($path)) + { + if ($this->removeAbsFile($path)) return true; + } + else + { + $this->notice = $this->_resultString->getString('not-child'); + } + } + else + { + $this->notice = $this->_resultString->getString('no-file-specified'); + } + return false; + } + + //remove the $name file + protected function removeAbsFile($name) + { + if (strcmp(trim($name),'') !== 0) + { + if (is_writable($name)) + { + if (@unlink($name)) + { + $this->notice = $this->_resultString->getString('executed'); + return true; + } + else + { + $this->notice = $this->_resultString->getString('error'); + } + } + else + { + $this->notice = $this->_resultString->getString('not-writable-file'); + } + } + else + { + $this->notice = $this->_resultString->getString('no-file-specified'); + } + return false; + } + + public function removeFolder($name) + { + $name = basename($name); + if (strcmp(trim($name),'') !== 0) + { + $dir = $this->base.$this->directory.$name; + if ($this->isMatching($dir)) + { + if ($this->removeAbsFolder($dir)) return true; + } + else + { + $this->notice = $this->_resultString->getString('not-child'); + } + } + else + { + $this->notice = $this->_resultString->getString('no-folder-specified'); + } + return false; + } + + //remove the $name folder + protected function removeAbsFolder($name) { + if (strcmp(trim($name),'') !== 0) { + if (is_writable($name)) + { + if ($this->isEmpty($name)) + { + if (@rmdir($name)) + { + $this->notice = $this->_resultString->getString('executed'); + return true; + } + else + { + $this->notice = $this->_resultString->getString('error'); + } + } + else + { + $this->notice = $this->_resultString->getString('not-empty'); + } + } + else + { + $this->notice = $this->_resultString->getString('not-writable'); + } + } + else + { + $this->notice = $this->_resultString->getString('no-folder-specified'); + } + return false; + } + + //upload a file in the current directory + //$fileName: name of the file + public function uploadFile($fileName = null) { + $userfile = $this->params['fileUploadKey']; + $ext = $this->getFileExtension($_FILES[$userfile]["name"]); + $fileName = isset($fileName) ? $fileName.".$ext" : basename($_FILES[$userfile]["name"]); + + $this->fileName = $fileName; + + if(strcmp(trim($_FILES[$userfile]["name"]),"") !== 0) + { + if(@is_uploaded_file($_FILES[$userfile]["tmp_name"])) { + if ($_FILES[$userfile]["size"] <= $this->params['maxFileSize']) + { + //check the extension of the file + $AllowedExtensionsArray = explode(',',$this->params['allowedExtensions']); + + if (in_array($ext,$AllowedExtensionsArray)) + { + //check if the file doesn't exists + if (!file_exists($this->base.$this->directory.$fileName)) + { + if (@move_uploaded_file($_FILES[$userfile]["tmp_name"],$this->base.$this->directory.$fileName)) + { + @chmod($this->base.$this->directory.$fileName, $this->params['filesPermission']); + $this->notice = $this->_resultString->getString('executed'); + return true; + } + else + { + $this->notice = $this->_resultString->getString('error'); + } + } + else + { + $this->notice = $this->_resultString->getString('file-exists'); + } + } + else + { + $this->notice = $this->_resultString->getString('not-allowed-ext'); + } + } + else + { + $this->notice = $this->_resultString->getString('size-over'); + } + } + else + { + $this->notice = $this->_resultString->getString('no-upload-file'); + } + } + else + { + $this->notice = $this->_resultString->getString('no-upload-file'); + } + return false; + } + + //update the folder tree + public function updateTree() { + + if (isset($_POST[$this->params['delFolderAction']])) { + $this->removeFolder($_POST[$this->params['delFolderAction']]); + } + + if (isset($_POST[$this->params['delFileAction']])) { + $this->removeFile($_POST[$this->params['delFileAction']]); + } + + if (isset($_POST[$this->params['createFolderAction']])) { + $this->createFolder($_POST['folderName']); + } + + if (isset($_POST[$this->params['uploadFileAction']])) { + $this->uploadFile(); + } + + } +} \ No newline at end of file diff --git a/admin/Library/Files/index.html b/admin/Library/Files/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Library/Files/index.html @@ -0,0 +1 @@ + diff --git a/admin/Library/Form/Checkbox.php b/admin/Library/Form/Checkbox.php new file mode 100755 index 0000000..5df1917 --- /dev/null +++ b/admin/Library/Form/Checkbox.php @@ -0,0 +1,41 @@ +entryName = $entryName; + } + + public function render($value = null) + { + $wrap = $this->getWrapElements(); + $returnString = "
        \n\t"; + $returnString .= $wrap[0]; + $returnString .= $this->getLabelTag(); + $returnString .= $wrap[1]; + $returnString .= Html_Form::checkbox($this->entryName, $value, $this->options, $this->className,$this->idName); + $returnString .= $wrap[2]; + $returnString .="
        \n"; + return $returnString; + } + +} diff --git a/admin/Library/Form/Entry.php b/admin/Library/Form/Entry.php new file mode 100755 index 0000000..725235a --- /dev/null +++ b/admin/Library/Form/Entry.php @@ -0,0 +1,45 @@ + entry or a radio button). Associative array or comma-divided list. + public $defaultValue = ''; + public $wrap = array(); + public $type = null; //the type of the entry + + //create the label of each entry of the form + public function getLabelTag() + { + $labelTagClass = isset($this->labelClass) ? $this->labelClass : 'entryLabel'; + return isset($this->labelString) ? "\n\t" : null; + } + + //get the class of the entry + public function getEntryClass() + { + return isset($this->entryClass) ? $this->entryClass : 'formEntry'; + } + + public function getWrapElements() + { + $wrap[0] = isset($this->wrap[0]) ? $this->wrap[0] : null; + $wrap[1] = isset($this->wrap[1]) ? $this->wrap[1] : null; + $wrap[2] = isset($this->wrap[2]) ? $this->wrap[2] : null; + return $wrap; + } + + abstract public function render($value = null); + +} diff --git a/admin/Library/Form/Form.php b/admin/Library/Form/Form.php new file mode 100755 index 0000000..00e27d4 --- /dev/null +++ b/admin/Library/Form/Form.php @@ -0,0 +1,116 @@ +'value') + public $method = 'POST'; //the transmission method: POST/GET + + public function __construct($action,$submit = array('generalAction'=>'save'),$method = 'POST') + { + $this->action = $action; //action of the form: controller/action + $this->submit = $submit; + $this->method = $method; + } + + //method to manage the $this->entry associative array + //entryType: the type of the object to be initialized, $entryName: the name of the entry + //$options: the list of options (if the entry is a \n
        \n"; + } + $htmlForm .= "\n"; + return $htmlForm; + } + +} diff --git a/admin/Library/Form/Hidden.php b/admin/Library/Form/Hidden.php new file mode 100755 index 0000000..fb81b30 --- /dev/null +++ b/admin/Library/Form/Hidden.php @@ -0,0 +1,23 @@ +entryName = $entryName; + } + + public function render($value = null) + { + $returnString = Html_Form::hidden($this->entryName, $value); + return $returnString; + } + +} diff --git a/admin/Library/Form/Html.php b/admin/Library/Form/Html.php new file mode 100644 index 0000000..dce91c6 --- /dev/null +++ b/admin/Library/Form/Html.php @@ -0,0 +1,23 @@ +entryName = $entryName; + } + + public function render($value = null) + { + $returnString = "
        \n\t$value\n
        \n"; + return $returnString; + } + +} diff --git a/admin/Library/Form/InputText.php b/admin/Library/Form/InputText.php new file mode 100755 index 0000000..fb98336 --- /dev/null +++ b/admin/Library/Form/InputText.php @@ -0,0 +1,30 @@ +entryName = $entryName; + } + + public function render($value = null) + { + $wrap = $this->getWrapElements(); + $returnString = "
        \n\t"; + $returnString .= $wrap[0]; + $returnString .= $this->getLabelTag(); + $returnString .= $wrap[1]; + $returnString .= Html_Form::input($this->entryName, $value, $this->className, $this->idName); + $returnString .= $wrap[2]; + $returnString .="
        \n"; + return $returnString; + } + +} diff --git a/admin/Library/Form/Password.php b/admin/Library/Form/Password.php new file mode 100644 index 0000000..76bc735 --- /dev/null +++ b/admin/Library/Form/Password.php @@ -0,0 +1,30 @@ +entryName = $entryName; + } + + public function render($value = null) + { + $wrap = $this->getWrapElements(); + $returnString = "
        \n\t"; + $returnString .= $wrap[0]; + $returnString .= $this->getLabelTag(); + $returnString .= $wrap[1]; + $returnString .= Html_Form::password($this->entryName, null, $this->className); + $returnString .= $wrap[2]; + $returnString .="
        \n"; + return $returnString; + } + +} diff --git a/admin/Library/Form/Radio.php b/admin/Library/Form/Radio.php new file mode 100755 index 0000000..fb20677 --- /dev/null +++ b/admin/Library/Form/Radio.php @@ -0,0 +1,30 @@ +entryName = $entryName; + } + + public function render($value = null) + { + $wrap = $this->getWrapElements(); + $returnString = "
        \n\t"; + $returnString .= $wrap[0]; + $returnString .= $this->getLabelTag(); + $returnString .= $wrap[1]; + $returnString .= Html_Form::radio($this->entryName,$value,$this->options,$this->className, 'after', $this->idName); + $returnString .= $wrap[2]; + $returnString .="
        \n"; + return $returnString; + } + +} diff --git a/admin/Library/Form/Select.php b/admin/Library/Form/Select.php new file mode 100755 index 0000000..558fd57 --- /dev/null +++ b/admin/Library/Form/Select.php @@ -0,0 +1,30 @@ +entryName = $entryName; + } + + public function render($value = null) + { + $wrap = $this->getWrapElements(); + $returnString = "
        \n\t"; + $returnString .= $wrap[0]; + $returnString .= $this->getLabelTag(); + $returnString .= $wrap[1]; + $returnString .= Html_Form::select($this->entryName,$value,$this->options,$this->className, $this->idName); + $returnString .= $wrap[2]; + $returnString .="
        \n"; + return $returnString; + } + +} diff --git a/admin/Library/Form/Textarea.php b/admin/Library/Form/Textarea.php new file mode 100755 index 0000000..d81cc84 --- /dev/null +++ b/admin/Library/Form/Textarea.php @@ -0,0 +1,30 @@ +entryName = $entryName; + } + + public function render($value = null) + { + $wrap = $this->getWrapElements(); + $returnString = "
        \n\t"; + $returnString .= $wrap[0]; + $returnString .= $this->getLabelTag(); + $returnString .= $wrap[1]; + $returnString .= Html_Form::textarea($this->entryName, $value, $this->className, $this->idName); + $returnString .= $wrap[2]; + $returnString .="
        \n"; + return $returnString; + } + +} diff --git a/admin/Library/Form/index.html b/admin/Library/Form/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Library/Form/index.html @@ -0,0 +1 @@ + diff --git a/admin/Library/Functions.php b/admin/Library/Functions.php new file mode 100755 index 0000000..414770f --- /dev/null +++ b/admin/Library/Functions.php @@ -0,0 +1,279 @@ +getDb(); + $stringa = $db->real_escape_string($stringa); + return $stringa; + } + + return $stringa; +} + +function sanitizeAll($stringa) { + + $stringa=sanitizeHtml($stringa); + $stringa=sanitizeDb($stringa); + return $stringa; + +} + +function sanitizeHtml($stringa) { + + $charset = Params::$htmlentititiesCharset; + $stringa=htmlentities($stringa,ENT_QUOTES,$charset); + return $stringa; + +} + +//check if only alphabetic + optional characters are present in the string $string. Set $string to $altString if other characters are found +//$optChar: allowed characters divided by '|' Ex: '+|-|;' +function sanitizeCustom($string,$optChar,$altString = 'EasyGiant') +{ + + $optChar = html_entity_decode($optChar,ENT_QUOTES); + $optCharArray = explode('|',$optChar); + $temp = $string; + foreach($optCharArray as $char) + { + $temp = str_replace($char,null,$temp); + } + if (ctype_alnum($temp)) + { + return $string; + } + else + { + return $altString; + } +} + + + + +/* +SANITIZE DEEP +*/ + +function stripslashesDeep($value) { + if(get_magic_quotes_gpc()) {#if stripslashes + return array_map('stripslashes', $value); + } + return $value; +} + + +function sanitizeHtmlDeep($value) { + return array_map('sanitizeHtml', $value); +} + + +function sanitizeDbDeep($value) { + return array_map('sanitizeDb', $value); +} + + +function sanitizeCustomDeep($stringArray,$optChar,$altString = 'EasyGiant') +{ + $result = array(); + foreach ($stringArray as $key => $value) + { + $result[$key] = sanitizeCustom($value,$optChar,$altString); + } + return $result; +} + + +function sanitizeAllDeep($value) { + return array_map('sanitizeAll', $value); +} + + +function forceIntDeep($value) { + return array_map('forceInt', $value); +} + +function forceNatDeep($value) { + return array_map('forceNat', $value); +} + +function noneDeep($value) { + return array_map('none', $value); +} + + +function md5Deep($value) +{ + return array_map('md5', $value); +} + +function sha1Deep($value) +{ + return array_map('sha1', $value); +} + + + + + + + +function sanitizeAlnum($string) +{ + return ctype_alnum($string) ? sanitizeAll($string) : ''; +} + + +function sanitizeIp($ip) +{ + return preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/',$ip) ? sanitizeAll($ip) : ''; +} + + +/* + CHECK FUNCTIONS +*/ + +//check if a string has the mail format (abc.efg@hij.klm.on) +//modification of the rule found at http://www.sastgroup.com/tutorials/8-espressioni-regolari-per-validare-un-po-di-tutto +//original rule: /^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/ +function checkMail($string) +{ + if (preg_match('/^[a-zA-Z0-9_\-]+([.][a-zA-Z0-9_\-]+){0,2}[@][a-zA-Z0-9_\-]+([.][a-zA-Z0-9_\-]+){0,2}[.][a-zA-Z]{2,4}$/',$string)) + { + return true; + } + else + { + return false; + } +} + + + +function wrap($string,$tag_class) {#wrap the string with the tag and its class + #$tag_class has to be an associative array (tag1=>class1,$tag2=>class2,.. )!! + $str_front=null; + $str_rear=null; + if (is_array($tag_class)) { + foreach ($tag_class as $tag => $class) { + $tag = str_replace('+','',$tag); + $str_class=isset($class) ? " class=\"".$class."\"" : null; + $str_front.="<".$tag.$str_class.">\n"; + $str_rear.="\n"; + } + } + return $str_front.$string.$str_rear; +} + +//generate a random password +//$start: start number of mt_rand +//$end: end number of mt_rand +function randString($length,$start = 33, $end = 126) +{ + $random = ''; + for ($i = 0; $i < $length; $i++) + { + $random .= chr(mt_rand($start, $end)); + } + return $random; +} + +//generate a random string +//$charNumb:number of characters of the final string +//$allowedChars: allowed characters +function generateString($charNumb = 8,$allowedChars = '0123456789abcdefghijklmnopqrstuvwxyz') +{ + $str = null; + for ($i = 0; $i < $charNumb; $i++) + { + $str .= substr($allowedChars, mt_rand(0, strlen($allowedChars)-1), 1); + } + return $str; +} + + +function getIp() +{ + $ip = ""; + + if (isset($_SERVER)) + { + if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) + { + $ip = sanitizeIp($_SERVER["HTTP_X_FORWARDED_FOR"]); + } else if (!empty($_SERVER["HTTP_CLIENT_IP"])) { + $ip = sanitizeIp($_SERVER["HTTP_CLIENT_IP"]); + } else { + $ip = sanitizeIp($_SERVER["REMOTE_ADDR"]); + } + } else { + if ( getenv( 'HTTP_X_FORWARDED_FOR' ) !== false ) { + $ip = sanitizeIp(getenv( 'HTTP_X_FORWARDED_FOR' )); + } else if ( getenv( 'HTTP_CLIENT_IP' ) !== false ) { + $ip = sanitizeIp(getenv( 'HTTP_CLIENT_IP' )); + } else { + $ip = sanitizeIp(getenv( 'REMOTE_ADDR' )); + } + } + return $ip; +} + + + +function getUserAgent() { + if (isset($_SERVER['HTTP_USER_AGENT'])) + { + return md5($_SERVER['HTTP_USER_AGENT']); + } + else + { + return md5('firefox'); + } +} + + +function xml_encode($string) +{ + $trans = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES); + foreach ($trans as $k=>$v) + { + $trans[$k]= "&#".ord($k).";"; + } + + return strtr($string, $trans); +} \ No newline at end of file diff --git a/admin/Library/HeaderObj.php b/admin/Library/HeaderObj.php new file mode 100644 index 0000000..f4fe65b --- /dev/null +++ b/admin/Library/HeaderObj.php @@ -0,0 +1,28 @@ +domainName = $domainName; + } + + //redirect to $path after the time $time + //string that appears until the page is redirected + public function redirect($path,$time = 0,$string = null) + { + $completePath = Url::getRoot().$path; + header('Refresh: '.$time.';url='.$completePath); + if (isset($string)) echo $string; + exit; + } + +} diff --git a/admin/Library/Helper/Array.php b/admin/Library/Helper/Array.php new file mode 100755 index 0000000..32a4c27 --- /dev/null +++ b/admin/Library/Helper/Array.php @@ -0,0 +1,11 @@ + null, + 'del' => null, + 'up' => null, + 'down' => null, + 'link' => null + ); + + //set the titles of the input:submit + public $submitTitles = array( + 'edit' => 'edit the record', + 'del' => 'delete the record', + 'up' => 'move up the record', + 'down' => 'move down the record', + 'link' => 'associate the record' + ); + + //$position: array. First element: page number, second element: number of pages + public $position = array(); + + //it can be: both, top, bottom, none + protected $_boundaries = 'none'; + + public function build($identifierName = 'identifier') + { + $this->_identifierName = $identifierName; + } + + public function setIdentifierName($identifierName) + { + $this->_identifierName = $identifierName; + } + + //add a list Item. $type: the type of the item, $field: the table.field to exctract (use colon to separate the table and the field),$action: controller/action,$value=if type == link->the value of the link + public function addItem($type, $action = '', $field = '', $name = '') { + if (!in_array($type,$this->_allowedItems)) { + throw new Exception('"'.$type. '" argument not allowed in '.__METHOD__.' method'); + } + $temp=array(); + $temp['type'] = $type; + $temp['action'] = $action; + $temp['field'] = $field; + $temp['name'] = $name; + $this->_itemsList[] = $temp; + + //set the $this->_head array + $head = array(); + $head['type'] = $type; + + if ($type === 'simpleText') { + $head['action'] = $this->extractFieldName($action); + } else { + $head['action'] = ' '; + } + $this->_head[] = $head; + } + + + //set the head of the table + //$columnsName: name of the columns. It has to be a comma-separated list of strings + public function setHead($columnsName = '') + { + //get the array from the list + $columnsArray = explode(',',$columnsName); + for ($i = 0; $i < count($columnsArray); $i++) + { + if ($i < count($this->_itemsList)) $this->_head[$i]['action'] = $columnsArray[$i]; + } + } + + + //$method to extract the field name from the $action string (;table:field;) + public function extractFieldName($string) { + $string = str_replace(';','',$string); + return $string; + } + + //replace the strings wrapped by ; with their correspondent value taken by the $recordArray associative array (a row of the select query) + public function replaceFields($string,$rowArray) { + $stringArray = explode(';',$string); + for ($i = 0; $i < count($stringArray); $i++) { + if (strstr($stringArray[$i],':')) { + //check if a function has been indicated + if (strstr($stringArray[$i],'|')) + { + //get the function + $firstArray = explode('|',$stringArray[$i]); + $func = $firstArray[0]; + //replace the fields + $temp = explode(':',$firstArray[1]); + $stringArray[$i] = $rowArray[$temp[0]][$temp[1]]; + + if (!function_exists($func)) { + throw new Exception('Error in '.__METHOD__.': function '.$func.' does not exists..'); + } + //apply the function + $stringArray[$i] = call_user_func($func,$stringArray[$i]); + } + else + { + $temp = explode(':',$stringArray[$i]); + $stringArray[$i] = $rowArray[$temp[0]][$temp[1]]; + } + } + } + return implode('',$stringArray); + } + + //call the method replaceFields upon the $items array using the associative array $rowArray + public function replaceAll($item,$rowArray) { + $item['action'] = $this->replaceFields($item['action'],$rowArray); + $item['field'] = $this->replaceFields($item['field'],$rowArray); + $item['name'] = $this->replaceFields($item['name'],$rowArray); + return $item; + } + + //wrap the column with the tag td + public function wrapColumn($string, $className = null) { + return wrap($string,array('td'=>$className)); + } + + //wrap the row with the tag tr + public function wrapRow($string,$className = null) { + return wrap($string,array('tr'=>$className)); + } + + public function wrapList($string) { + return wrap($string,array('table'=>'listTable')); + } + + //method to create the HTML of the head of the table + public function createHead() { + $htmlHead = null; + foreach ($this->_head as $item) { + $temp = $item['action']; + $htmlHead .= $this->wrapColumn($temp,$item['type']); + } + return $htmlHead; + } + + //create the HTML of a single row (values taken from the associative array $rowArray) + public function getRowList($rowArray) { + $htmlList = null; + foreach ($this->_itemsList as $item) { + $item = $this->replaceAll($item,$rowArray); + + if (($this->_boundaries === 'top' and $item['type'] === 'moveupForm') or ($this->_boundaries === 'bottom' and $item['type'] === 'movedownForm') or ($this->_boundaries === 'both' and ($item['type'] === 'moveupForm' or $item['type'] === 'movedownForm'))) + { + $htmlList .= $this->wrapColumn(' ',$item['type']); + } + else + { + $temp = call_user_func_array(array($this,$item['type']),array($item)); + $htmlList .= $this->wrapColumn($temp,$item['type']); + } + } + return $htmlList; + } + + //$index: record number + public function ifInBoundaries($index) + { + $this->_boundaries = 'none'; + + if (!empty($this->position)) + { + if ($this->_recordNumber === 1 and strcmp($this->position[0],1) === 0) + { + $this->_boundaries = 'both'; + } + else if ($index === 0 and strcmp($this->position[0],1) === 0) + { + $this->_boundaries = 'top'; + } + else if ($index === ($this->_recordNumber-1) and strcmp($this->position[0],$this->position[1]) === 0) + { + $this->_boundaries = 'bottom'; + } + } + + } + + //create the HTML of the entire list. $queryResult: the array coming from the select query + public function render($queryResult) + { + //set the number of records + $this->_recordNumber = count($queryResult); + $htmlList = null; + //create the HTML of the head of the record list + $htmlList .= $this->wrapRow($this->createHead(),'listHead'); + for ($i = 0; $i < count($queryResult); $i++) + { + $this->ifInBoundaries($i); + $temp = $this->getRowList($queryResult[$i]); + $htmlList .= $this->wrapRow($temp,'listRow'); + } + return $this->wrapList($htmlList); + } + + public function generalForm($itemArray, $submitName, $submitValue) + { + $string = "
        viewStatus."' method='POST'>\n"; + $name = (strcmp($itemArray['name'],'') !== 0) ? $itemArray['name'] : $submitName; + + if (strcmp($this->submitImageType,'yes') === 0) + { + $string .= "\n"; + $string .= "\n"; + } + else + { + $string .= "\n"; + } + + $string .= "\n"; + $string .= "
        \n"; + return $string; + } + + public function moveupForm($itemArray) + { + return $this->generalForm($itemArray, 'moveupAction', 'up'); + } + + public function movedownForm($itemArray) + { + return $this->generalForm($itemArray, 'movedownAction', 'down'); + } + + public function editForm($itemArray) + { + return $this->generalForm($itemArray, 'generalAction', 'edit'); + } + + public function delForm($itemArray) + { + return $this->generalForm($itemArray, 'delAction', 'del'); + } + + public function associateForm($itemArray) + { + return $this->generalForm($itemArray, 'generalAction', 'link'); + } + + public function simpleText($itemArray) { + $string = "".$itemArray['action']."\n"; + return $string; + } + + public function simpleLink($itemArray) { + $string = "viewStatus."'>".$itemArray['name']."\n"; + return $string; + } + +} \ No newline at end of file diff --git a/admin/Library/Helper/Menu.php b/admin/Library/Helper/Menu.php new file mode 100755 index 0000000..119ada8 --- /dev/null +++ b/admin/Library/Helper/Menu.php @@ -0,0 +1,75 @@ + array( + 'title' => 'back', + 'class' => 'mainMenuItem', + 'text' => 'Back', + 'url' => 'main' + ), + + 'add' => array( + 'title' => 'add a new record', + 'class' => 'mainMenuItem', + 'text' => 'Add', + 'url' => 'form/insert' + ), + + 'panel' => array( + 'title' => 'back to the Panel', + 'class' => 'mainMenuItem', + 'text' => 'Panel', + 'url' => 'main' + ) + + ); + + public function build($controller = null, $panelController = null) + { + $this->controller = $controller; + $this->panelController = $panelController; + } + + //$voices: comma-separated list of links you want to print + public function render($linksList) + { + $linksArray = explode(',',$linksList); + $menu = null; + foreach ($linksArray as $linkName) + { + //check that the voice exists + if (array_key_exists($linkName,$this->links)) + { + //check that the text and the ure are defined + if (isset($this->links[$linkName]['text']) and isset($this->links[$linkName]['url'])) + { + $title = isset($this->links[$linkName]['title']) ? "title='".$this->links[$linkName]['title']."'" : null; + $class = isset($this->links[$linkName]['class']) ? "class='".$this->links[$linkName]['class']."'" : null; + + //choose the controller (current or panel) + $controller = (strcmp($linkName,'panel') === 0) ? $this->panelController.'/' : $this->controller.'/'; + $viewStatus = (strcmp($linkName,'panel') === 0) ? null : $this->viewStatus; + + $href = Url::getRoot($controller.$this->links[$linkName]['url'].$viewStatus); + $text = $this->links[$linkName]['text']; + $menu .= "\n"; + } + } + } + return $menu; + } + +} \ No newline at end of file diff --git a/admin/Library/Helper/Pages.php b/admin/Library/Helper/Pages.php new file mode 100755 index 0000000..eec58f6 --- /dev/null +++ b/admin/Library/Helper/Pages.php @@ -0,0 +1,108 @@ +_variableArg = $variableArg; + $this->_urlViewAction =$urlViewAction; //url of the controller and (/) main action + $this->previousString = $previousString; + $this->nextString = $nextString; + + } + + //return the number of pages + public function getNumbOfPages() + { + return $this->_numbOfPages; + } + + //get the limit of the select query clause + public function getLimit($currentPage,$recordNumber,$recordPerPage) + { + $this->_currentPage = $currentPage; + $this->_numbOfPages=(($recordNumber%$recordPerPage)===0) ? (int) ($recordNumber/$recordPerPage) : ((int) ($recordNumber/$recordPerPage))+1; + $start=(($currentPage-1)*$recordPerPage); + return "$start,$recordPerPage"; + } + + //return the page list string + public function render($pageNumber,$numberOfPages) + { + $pageList = null; + $pageList .= $this->pageLink($this->_currentPage-1,$this->previousString); + $pageList .= $this->recursiveLink($pageNumber,$numberOfPages); + $pageList .= $this->pageLink($this->_currentPage+1,$this->nextString); + return $pageList; + } + + //recorsive function in order to write the page list + public function recursiveLink($pageNumber,$numberOfPages) + { + + if ($numberOfPages === 0) return null; + + if ($numberOfPages === 1) { + return $this->pageLink($pageNumber); + } else { + return $this->pageLink($pageNumber) . $this->recursiveLink($pageNumber+1,$numberOfPages-1); + } + } + + public function pageLink($pageNumber, $string = null) { + if ($pageNumber > 0 and $pageNumber <= $this->_numbOfPages) { + return $this->html($pageNumber,$string); + } else { + return null; + } + } + + //return the html link + public function html($pageNumber,$string = null) { + if (isset($string)) { + $strNumber = $string; + $strClass = "class='itemListPage'"; + } else { + if ($pageNumber === $this->_currentPage) + { + $strNumber = $pageNumber; + $strClass = "class='currentPage'"; + } + else + { + $strNumber = $pageNumber; + $strClass = "class='itemListPage'"; + } + } + $this->viewArgs[$this->_variableArg] = $pageNumber; + $viewStatus = Url::createUrl(array_values($this->viewArgs)); + $href= Url::getRoot(null) . $this->_urlViewAction .$viewStatus; + return $this->getATag($href,$strNumber,$strClass); + } + + //get the HTMl of the tag + //$href: href of the link + //$text: the text of the link + //$strClass: the class of the link + public function getATag($href,$text,$strClass) + { + return "$text"; + } + +} \ No newline at end of file diff --git a/admin/Library/Helper/Popup.php b/admin/Library/Helper/Popup.php new file mode 100755 index 0000000..17ba908 --- /dev/null +++ b/admin/Library/Helper/Popup.php @@ -0,0 +1,87 @@ +viewArgs[$this->pageArg] is set to 1 if $this->pageArg !== null + + //the type of the popup. If type !=exclusive, than each voice selected is added to the where clause. If type=exclusive, the selection of a popup voice causes the unselection of the other voices + public $type = null; + + //list of popup names + public $popupItems = array(); + + public function build($url, $popupArray = null, $type = 'exclusive', $pageArg = null) { + $this->url = $url; + $this->popupArray = $popupArray; + $this->pageArg = $pageArg; + $this->type = $type; + + foreach ($this->popupArray as $field => $popup) + { + $this->popupItems[] = $field; + } + } + + //check that the ViewArgs array is complete + public function checkViewArgs() + { + foreach ($this->popupArray as $field => $popup) + { + if (!array_key_exists($field,$this->viewArgs)) return false; + } + return true; + } + + //unselect the voices different from the current one + public function unselect($currentVoice) + { + foreach ($this->popupItems as $item) + { + if (strcmp($item,$currentVoice) !== 0) $this->viewArgs[$item] = Params::$nullQueryValue; + } + } + + public function render() { + $returnString = null; + if ($this->checkViewArgs()) + { + if (isset($this->viewArgs[$this->pageArg])) + { + $this->viewArgs[$this->pageArg] = 1; + } + foreach ($this->popupArray as $field => $popup) + { + if ($this->type === 'exclusive') $this->unselect($field); + //save the value of the current ViewArg + $tempArg = $this->viewArgs[$field]; + $returnString .= "\n"; + $this->viewArgs[$field] = $tempArg; + } + if (count($this->popupArray)>0) { + $returnString .= "\n"; + } + } + return $returnString; + } + +} diff --git a/admin/Library/Helper/index.html b/admin/Library/Helper/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Library/Helper/index.html @@ -0,0 +1 @@ + diff --git a/admin/Library/Hooks.php b/admin/Library/Hooks.php new file mode 100644 index 0000000..fa005b9 --- /dev/null +++ b/admin/Library/Hooks.php @@ -0,0 +1,21 @@ +'value') + //$className: the class name of the select + //$idName: name of the id + static public function select($name, $value, $options, $className = null, $idName = null) + { + $strClass = isset($className) ? "class='".$className."'" : null; + $idStr = isset($idName) ? "id='".$idName."'" : null; + + $returnString = null; + $returnString .= "\n"; + return $returnString; + } + + //return the HTML of an + //$name: the name of the input + //$value: the value of the input + //$className: the class name of the input + //$idName: name of the id + static public function input($name, $value, $className = null, $idName = null) + { + $strClass = isset($className) ? "class='".$className."'" : null; + $idStr = isset($idName) ? "id='".$idName."'" : null; + + $returnString ="\n"; + return $returnString; + } + + //return the HTML of a checkBox + //$name: name of the checkBox (string) + //$value: the value of the checkBox (string or number) + //$option: option of the checkBox (string or number) + //$className: the class name of the checkBox (string) + //$idName: name of the id + static public function checkbox($name, $value, $option, $className = null, $idName = null) + { + $strClass = isset($className) ? "class='".$className."'" : null; + $idStr = isset($idName) ? "id='".$idName."'" : null; + + $str = (strcmp($value,$option) === 0) ? "checked = 'checked'" : null; + return "\n"; + } + + //return the HTML of a hidden entry + //$name: name of the hidden entry (string) + //$value: the value of the hidden entry (string or number) + static public function hidden($name, $value) + { + return "\n"; + } + + //return the HTML of a password entry + //$name: name of the password entry (string) + //$value: the value of the password entry (string or number) + //$idName: name of the id + static public function password($name, $value, $className = null, $idName = null) + { + $strClass = isset($className) ? "class='".$className."'" : null; + $idStr = isset($idName) ? "id='".$idName."'" : null; + + return "\n"; + } + + //return the HTML of a textarea + //$name: name of the textarea (string) + //$value: the value of the textarea (string or number) + //$idName: name of the id + static public function textarea($name, $value, $className = null, $idName = null) + { + $strClass = isset($className) ? "class='".$className."'" : null; + $idStr = isset($idName) ? "id='".$idName."'" : null; + + return "\n"; + } + + //return the HTML of a radio button + //$name: name of the radio button + //$value: the selected value of the radio button (set $value equal to null if you don't want to select an option) + //$options: options of the radio button. This param can be a comma-separated list of options or an associative array ('name'=>'value') + //$className: the class name of the radio button + //$position: position of the strings of the radio with respect to the "circles". It can be before or after + //$idName: name of the id + static public function radio($name, $value, $options, $className = null, $position = 'after', $idName = null) + { + $strClass = isset($className) ? "class='".$className."'" : null; + $idStr = isset($idName) ? "id='".$idName."'" : null; + + $returnString = null; + + if (is_string($options)) { + $tempArray = explode(',',$options); + foreach ($tempArray as $item) + { + $optionsArray[$item] = $item; + } + } else { + $optionsArray = $options; + } + + foreach ($optionsArray as $optionName => $optionValue) { + + if ($position === 'before') + { + $before = $optionName; + $after = null; + } + else + { + $before = null; + $after = $optionName; + } + + $str= (strcmp($value,$optionValue) === 0) ? "checked='checked'" : null; + $returnString .= "$before$after\n"; + } + + return $returnString; + } + +} \ No newline at end of file diff --git a/admin/Library/Html/index.html b/admin/Library/Html/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Library/Html/index.html @@ -0,0 +1 @@ + diff --git a/admin/Library/Image/Gd/Captcha.php b/admin/Library/Image/Gd/Captcha.php new file mode 100644 index 0000000..ace4806 --- /dev/null +++ b/admin/Library/Image/Gd/Captcha.php @@ -0,0 +1,85 @@ + 150, + 'boxHeight' => 100, + 'charNumber' => 6, + 'fontPath' => $here.'/External/Fonts/FreeFont/FreeMono.ttf', + 'undulation' => true, + 'align' => false, + 'charHeight' => 28 + ); + + //set the $this->scaffold->params array + if (is_array($params)) + { + foreach ($params as $key => $value) + { + $defaultParams[$key] = $value; + } + } + $this->params = $defaultParams; + + $this->string = generateString($this->params['charNumber']); + } + + public function render() + { + //space among characters + $space = $this->params['boxWidth'] / ($this->params['charNumber']+1); + //create the image box + $img = imagecreatetruecolor($this->params['boxWidth'],$this->params['boxHeight']); + + $background = imagecolorallocate($img,255,255,255); + $border = imagecolorallocate($img,0,0,0); + $colors[] = imagecolorallocate($img,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125)); + $colors[] = imagecolorallocate($img,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125)); + $colors[] = imagecolorallocate($img,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125)); + + //create the background + imagefilledrectangle($img,1,1,$this->params['boxWidth']-2,$this->params['boxHeight']-2,$background); + imagerectangle($img,0,0,$this->params['boxWidth']-1,$this->params['boxHeight']-2,$border); + + //set the text + for ($i=0; $i< $this->params['charNumber']; $i++) + { + $color = $colors[$i % count($colors)]; + $char = substr($this->string,$i,1); + $fontPath = $this->params['fontPath']; + $angle = $this->params['undulation'] === false ? 0 : -20+rand(0,40); + $yposFixed = (int)(($this->params['boxHeight'])/2); + $ypos = $this->params['align'] === true ? $yposFixed : $yposFixed + mt_rand(0,10); + $charHeight = $this->params['charHeight']; + imagettftext($img,$charHeight + rand(0,8),$angle,($i+0.3)*$space,$ypos,$color,$fontPath,$char); + } + + $noiseColor = imagecolorallocate($img, mt_rand(125,255), mt_rand(125,255), mt_rand(125,255)); + /* generate random dots in background */ + for( $i=0; $i<($this->params['boxWidth'] * $this->params['boxHeight'])/7; $i++ ) { + imagefilledellipse($img, mt_rand(0,$this->params['boxWidth']), mt_rand(0,$this->params['boxHeight']), 1, 1, $noiseColor); + } + + $_SESSION['captchaString'] = $this->string; + header('Content-Type: image/png'); + imagepng($img); + imagedestroy($img); + } + +} \ No newline at end of file diff --git a/admin/Library/Image/Gd/Thumbnail.php b/admin/Library/Image/Gd/Thumbnail.php new file mode 100644 index 0000000..5981175 --- /dev/null +++ b/admin/Library/Image/Gd/Thumbnail.php @@ -0,0 +1,151 @@ +basePath = $basePath; + + $defaultParams = array( + 'imgWidth' => 100, + 'imgHeight' => 100, + 'defaultImage' => null, + 'cropImage' => 'no', + 'horizAlign' => 'left', + 'vertAlign' => 'top' + ); + + //set the $this->scaffold->params array + if (is_array($params)) + { + foreach ($params as $key => $value) + { + $defaultParams[$key] = $value; + } + } + $this->params = $defaultParams; + } + + //create the thumbnail + //$imageName: the name of the file inside $this->basePath + public function render($imageFile) + { + $imagePath = $this->basePath . basename($imageFile); + + if (!file_exists($imagePath) and isset($this->params['defaultImage'])) $imagePath = $this->params['defaultImage']; + + $img = null; + $ext = strtolower(end(explode('.', $imagePath))); + + if (strcmp($ext,'jpg') === 0 or strcmp($ext,'jpeg') === 0) { + $img = @imagecreatefromjpeg($imagePath); + } else if (strcmp($ext,'png') === 0) { + $img = @imagecreatefrompng($imagePath); + } else if (strcmp($ext,'gif') === 0) { + $img = @imagecreatefromgif($imagePath); + } + + //If an image was successfully loaded, test the image for size + if ($img) { + //image size + $width = imagesx($img); + $height = imagesy($img); + + if ($this->params['cropImage'] === 'no') + { + $scale = min($this->params['imgWidth']/$width, $this->params['imgHeight']/$height); + } + else if ($this->params['cropImage'] === 'yes') + { + $scale = max($this->params['imgWidth']/$width, $this->params['imgHeight']/$height); + } + + if ($scale < 1) { + + $xSrc = 0; + $ySrc = 0; + + if ($this->params['cropImage'] === 'no') + { + $newWidth = floor($scale*$width); + $newHeight = floor($scale*$height); + } + else if ($this->params['cropImage'] === 'yes') + { + + $newWidth = $this->params['imgWidth']; + $newHeight = $this->params['imgHeight']; + $oldWidth = $width; + $oldHeight = $height; + $width = floor($newWidth/$scale); + $height = floor($newHeight/$scale); + + switch ($this->params['horizAlign']) + { + case 'left': + $xSrc = 0; + break; + case 'right': + $xSrc = floor(($oldWidth-$width)); + break; + case 'center': + $xSrc = floor(($oldWidth-$width)/2); + break; + default: + $xSrc = $this->params['horizAlign']; + } + + switch ($this->params['vertAlign']) + { + case 'top': + $ySrc = 0; + break; + case 'bottom': + $ySrc = floor(($oldHeight-$height)); + break; + case 'center': + $ySrc = floor(($oldHeight-$height)/2); + break; + default: + $ySrc = $this->params['vertAlign']; + } + + } + + //temp image + $tmpImg = imagecreatetruecolor($newWidth, $newHeight); + + //copy and resize + imagecopyresized($tmpImg, $img, 0, 0, $xSrc, $ySrc,$newWidth, $newHeight, $width, $height); + imagedestroy($img); + $img = $tmpImg; + } + + } + + if (!$img) { + $img = imagecreate($this->params['imgWidth'], $this->params['imgHeight']); + imagecolorallocate($img,200,200,200); + } + + //print the image + header("Content-type: image/jpeg"); + imagejpeg($img); + + } + +} \ No newline at end of file diff --git a/admin/Library/Image/Gd/index.html b/admin/Library/Image/Gd/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Library/Image/Gd/index.html @@ -0,0 +1 @@ + diff --git a/admin/Library/Image/index.html b/admin/Library/Image/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Library/Image/index.html @@ -0,0 +1 @@ + diff --git a/admin/Library/Lang/Eng/DbCondStrings.php b/admin/Library/Lang/Eng/DbCondStrings.php new file mode 100644 index 0000000..1edae98 --- /dev/null +++ b/admin/Library/Lang/Eng/DbCondStrings.php @@ -0,0 +1,17 @@ +The value of ". $field ." is already present. Please choose a different value.
        \n"; + } + +} diff --git a/admin/Library/Lang/Eng/ModelStrings.php b/admin/Library/Lang/Eng/ModelStrings.php new file mode 100644 index 0000000..411d196 --- /dev/null +++ b/admin/Library/Lang/Eng/ModelStrings.php @@ -0,0 +1,19 @@ + "
        Query error: Contact the administrator!
        \n", + "executed" => "
        Operation executed!
        \n", + "associate" => "
        Referential integrity problem: record associated to some other record in a child table. Break the association before.
        \n", + "no-id" => "
        Alert: record identifier not defined!
        \n", + "not-linked" => "
        The Item is not associated : you can't dissociate it
        ", + "linked" => "
        The Item is already associated: you can't associate it another time
        " + ); + +} diff --git a/admin/Library/Lang/Eng/UploadStrings.php b/admin/Library/Lang/Eng/UploadStrings.php new file mode 100644 index 0000000..195fd5f --- /dev/null +++ b/admin/Library/Lang/Eng/UploadStrings.php @@ -0,0 +1,27 @@ + "
        Error: verify the permissions of the file/directory
        \n", + "executed" => "
        Operation executed!
        \n", + "not-child" => "
        The selected directory is not a child of the base directory
        \n", + "not-dir" => "
        The selected directory is not a directory
        \n", + "not-empty" => "
        The selected directory is not empty
        \n", + "no-folder-specified" => "
        No folder has been specified
        \n", + "no-file-specified" => "
        No file has been specified
        \n", + "not-writable" => "
        The folder is not writable
        \n", + "not-writable-file" => "
        The file is not writable
        \n", + "dir-exists" => "
        The directory is already present in the current folder
        \n", + "no-upload-file" => "
        There is no file to upload
        \n", + "size-over" => "
        The size of the file is too big
        \n", + "not-allowed-ext" => "
        The extension of the file you want to upload is not allowed
        \n", + "file-exists" => "
        The file is already present in the current folder
        \n" + ); + +} diff --git a/admin/Library/Lang/Eng/ValCondStrings.php b/admin/Library/Lang/Eng/ValCondStrings.php new file mode 100644 index 0000000..b9d132e --- /dev/null +++ b/admin/Library/Lang/Eng/ValCondStrings.php @@ -0,0 +1,76 @@ +". $element ." not defined!
        \n"; + } + + //if the elements are not equal + public function getNotEqualResultString($element) + { + return "
        Different values: $element
        \n"; + } + + //if the element is not alphabetic + public function getNotAlphabeticResultString($element) + { + return "
        ".$element." has to be alphabetic
        \n"; + } + + //if the element is not alphanumeric + public function getNotAlphanumericResultString($element) + { + return "
        ".$element." has to be alphanumeric
        \n"; + } + + //if the element is not a decimal digit + public function getNotDecimalDigitResultString($element) + { + return "
        ".$element." has to be a decimal digit
        \n"; + } + + //if the element has the mail format + public function getNotMailFormatResultString($element) + { + return "
        ".$element." doesn't seem an e-mail address
        \n"; + } + + //if the element is numeric + public function getNotNumericResultString($element) + { + return "
        ".$element." has to be a numeric
        \n"; + } + + //if the element (string) length exceeds the value of characters (defined by $maxLength) + public function getLengthExceedsResultString($element,$maxLength) + { + return "
        ".$element." exceeds the value of $maxLength characters
        \n"; + } + + //if the element is one of the strings indicated by $stringList (a comma-separated list of strings) + public function getIsForbiddenStringResultString($element,$stringList) + { + return "
        ".$element." can't be one of the following strings: $stringList
        \n"; + } + + //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings) + public function getIsNotStringResultString($element,$stringList) + { + return "
        ".$element." has to be one of the following strings: $stringList
        \n"; + } + + //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings) + public function getDoesntMatchResultString($element,$regExp) + { + return "
        ".$element." has to match the following regular expression: $regExp
        \n"; + } + +} diff --git a/admin/Library/Lang/Eng/index.html b/admin/Library/Lang/Eng/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Library/Lang/Eng/index.html @@ -0,0 +1 @@ + diff --git a/admin/Library/Lang/ResultStrings.php b/admin/Library/Lang/ResultStrings.php new file mode 100644 index 0000000..db1095c --- /dev/null +++ b/admin/Library/Lang/ResultStrings.php @@ -0,0 +1,25 @@ +string[$stringName])) + { + return $this->string[$stringName]; + } + else + { + return 'result string not defined!'; + } + } + +} diff --git a/admin/Library/Lang/index.html b/admin/Library/Lang/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Library/Lang/index.html @@ -0,0 +1 @@ + diff --git a/admin/Library/ModAbstract.php b/admin/Library/ModAbstract.php new file mode 100644 index 0000000..885f64f --- /dev/null +++ b/admin/Library/ModAbstract.php @@ -0,0 +1,25 @@ +simpleXmlObj = $simpleXmlObj; + } + + //define the abstract method to render (create the HTML) of the single module + //$xmlObject: simpleXML object + abstract public function render(); + +} diff --git a/admin/Library/Model/Base.php b/admin/Library/Model/Base.php new file mode 100755 index 0000000..1aaadca --- /dev/null +++ b/admin/Library/Model/Base.php @@ -0,0 +1,1140 @@ +fields fields + public $form = null; //reference to a Form_Form object + public $formStruct = null; //the form structure + + public $submitName = null; //the current submitName (from the form) + public $identifierName = 'identifier'; + + public $notice = null; //a string explaining the result of the query applied (or not if an error occured): executed, error, etc + public $result = true; //the result of validate conditions, database conditions and query. It can be 'true' or 'false' + public $queryResult = false; //the result of the query + + //conditions that have to be satisfied before applying the query + //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions' + public $strongConditions = array(); + + //conditions that have to be satisfied before applying the query + //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions' + //do not return error if a value is equal to '' or null + public $softConditions = array(); + + //conditions that have to be satisfied before applying the query + //check that the new values inserted satisfy some conditions + //Ex: 'update'=>'checkUniqueCompl:titolo,autore;checkUnique:titolo','insert'=>'checkUnique:titolo' + public $databaseConditions = array(); + + public $popupArray = array(); //array of popup objects (see popup.php) + + public $supplInsertValues = array(); //associative array defining supplementary values to be inserted on each insert query. It has to have the following form: array(field1 => value1,field2 => value2, ...) + + public $supplUpdateValues = array(); //associative array defining supplementary values to be inserted on each update query. It has to have the following form: array(field1 => value1,field2 => value2, ...) + + public $select = null; //fields that have to be selected in select queries + public $where = array(); //associative array containing all the where clauses ($field => $value) + //group by, order by and limit clauses + public $groupBy = null; + public $orderBy = null; + public $limit = null; + + public $from = null; //from clause of the select queries + public $on = null; //join part of the where clause of the select queries + public $using = null; //using clause + + public $toList = false; //if the result have to be given in a list format + public $listArray = array(); //array containing the $key and the $value to be used to extract a list from a resultSet + + //logic operator between statements in the where clause of select queries + public $logicalOperators = array('AND'); + + protected $_tables='itemTable,boxTable,item_boxTable'; + protected $_idFields='id_item,id_box'; + protected $_tablesArray=array(); + protected $_idFieldsArray=array(); + protected $_where = array(); + + //the name of the field that has to be used to order the rows of the main table of the model + protected $_idOrder = null; + + protected $_onDelete = 'check'; //can be 'nocheck' or 'check'. check: referential integrity check. nocheck: no referential integrity check + protected $_reference = null; //array containing the child table that have a reference to this table and the foreign key of the child table-> array($childTable,$foreignKey) + + protected $_popupItemNames = array(); //the fields to be used as names in the popupArray elements. Associative array ($itemNameField1 => $itemNameValue1, ...) + + //the labels of the pop-up menus + protected $_popupLabels = array(); + + //functions that have to be applied upon the label fields of the popup menu + protected $_popupFunctions = array(); + + protected $_popupWhere = array(); //where clause for the pupup menu + + protected $_resultString; //reference to the class containing all the result strings of the db queries + protected $_dbCondString; //reference to the class containing all the result strings of the database conditions + + protected $_backupFields = ''; //field saved after the delFields method has been applied + protected $_backupValues = array(); //values saved after the delFields method has been applied + protected $_allowedDbMethods = array('update','insert','del','moveup','movedown'); //methods that can be called by the updateTable method + + protected $submitNames = array( + 'update' => 'updateAction', + 'insert' => 'insertAction', + 'del' =>'delAction', + 'moveup' =>'moveupAction', + 'movedown' =>'movedownAction' + ); + + protected $identifierValue = null; //the value of the identifier ($_POST[$this->identifier]) + protected $arrayExt; //arrayExt object (see library/arrayExt.php) + + protected $_arrayStrongCheck; //Array_Validate_Strong object + protected $_arraySoftCheck; //Array_Validate_Soft object + + public $db; //reference to the database layer class + protected $_lang = 'Eng'; //language of notices + + + public function __construct() { + $this->_tablesArray = explode(',',$this->_tables); + $this->_idFieldsArray = explode(',',$this->_idFields); + $this->_where[$this->_idFieldsArray[0]] = $this->_tablesArray[0]; + $this->arrayExt = new ArrayExt(); + + //initialize the validate objects + $this->_arrayStrongCheck = new Array_Validate_Strong($this->_lang); + $this->_arraySoftCheck = new Array_Validate_Soft($this->_lang); + + $this->identifierName = $this->_idFieldsArray[0]; + + //create the $_resultString object (result strings of the db queries) + $modelStringClass = 'Lang_'.$this->_lang.'_ModelStrings'; + if (!class_exists($modelStringClass)) + { + $modelStringClass = 'Lang_Eng_ModelStrings'; + } + $this->_resultString = new $modelStringClass(); + + //create the $_dbCondString object (result strings of the database conditions) + $dbCondStringClass = 'Lang_'.$this->_lang.'_DbCondStrings'; + if (!class_exists($dbCondStringClass)) + { + $dbCondStringClass = 'Lang_Eng_DbCondStrings'; + } + $this->_dbCondString = new $dbCondStringClass(); + + //instantiate the database class + $this->db = Factory_Db::getInstance(DATABASE_TYPE); + } + + //set the submitNames property (array) + //$methodName : the method name, $submitName: the submit name of the submit action of the form + public function setSubmitNames($methodName,$submitName) + { + if (!in_array($methodName,$this->_allowedDbMethods)) + { + throw new Exception('query type "'.$methodName. '" not allowed in '. __METHOD__); + } + $this->submitNames[$methodName] = $submitName; + } + + //get the last query executed + public function getQuery() + { + return $this->db->query; + } + + //get the where clause of the select query + public function getWhereQueryClause() + { + return $this->where; + } + + //set the where clause of the select query + //whereArray = array ($table_field => $value) + public function setWhereQueryClause($whereArray) + { + $this->where = $whereArray; + } + + //append the whereArray clause to $this_->whereClause + //whereArray = array ($table_field => $value) + public function appendWhereQueryClause($whereArray) + { + $this->where = array_merge($this->where,$whereArray); + } + + //drop the char $char from the beginning of the string $string + public function dropStartChar($string,$char) + { + while(strcmp($string[0],$char) === 0) + { + $string = substr($string,1); + } + return $string; + } + + //get the table name from $this->_where. If the table is not present then return $this->_tablesArray[0] + public function getTableName($field) + { + return isset($this->_where[$field]) ? $this->_where[$field] : $this->_tablesArray[0]; + } + + //method to create the where clause of the select query from the $this->where array + //$level: level of the ricorsion + //$whereClauseLevel: array containing the field=>value statements of the where clause. If $whereClause = null than $this->where is considered + public function createWhereClause($level = 0, $whereClauseLevel = null) + { + $whereClause = null; + $whereClauseArray = array(); + + $whereClause = isset($whereClauseLevel) ? $whereClauseLevel : $this->where; + + foreach ($whereClause as $field => $value) + { + if (is_array($value)) + { + $newValue = $this->createWhereClause($level+1, $value); + if (isset($newValue)) $whereClauseArray[] = $newValue; + } + else + { + $flag = 0; //equal where clause + if (isset($field)) + { + //drop the 'n:' and '-' chars from $field + $fieldClean = str_replace('n!',null,$field); + $fieldClean = $this->dropStartChar($fieldClean,'-'); + if (strcmp($value,Params::$nullQueryValue) !== 0 or (Params::$nullQueryValue === false)) + { + foreach (params::$whereClauseSymbolArray as $symbol) + { + if (strstr($value,$symbol)) + { + //check if write or not the table name + $tableName = strstr($field,'n!') ? null : $this->getTableName($field).'.'; + $whereClauseArray[] = $tableName.$fieldClean.' '.$value; + $flag = 1; //not equal where clause + break; + } + } + if ($flag === 0) + { + $value = '"'.$value.'"'; + //check if write or not the table name + $tableName = strstr($field,'n!') ? null : $this->getTableName($field).'.'; + $whereClauseArray[] = $tableName.$fieldClean.'='.$value; + } + } + } + } + } + //get the logic operator at the current level + $logicOper = isset($this->logicalOperators[$level]) ? ' '.$this->logicalOperators[$level].' ' : ' AND '; + $whereClause = !empty($whereClauseArray) ? implode($logicOper,$whereClauseArray) : null; + $whereClause = (isset($whereClause) and $level>0) ? '('.$whereClause.')' : $whereClause; + return $whereClause; + } + + + //get the submitName having its key (the method name) + public function getSubmitName($key) + { + if (!array_key_exists($key,$this->submitNames)) + { + return 'generalAction'; +// throw new Exception('query type "'.$key. '" not allowed in '.__METHOD__); + } + return $this->submitNames[$key]; + + } + + + //return the values, taken from the $_POST array, to be inserted inside the forms + //$queryType: insert or update + //$func: sanitize function to apply upon each value + //$id: if $queryType='update' that the values are taken from the record (of the main table of this model) having the primary key equal to $id + //$defaultValues = associative array of the form: array($entry=>$defaultValue) + //$functionsIfFromDb = associative array of the form: array($entry=>$function_to_be_applied) + public function getFormValues($queryType = 'insert', $func = 'sanitizeHtml',$id = null,$defaultValues = array(),$functionsIfFromDb = array()) + { + $arrayType = array('update','insert'); + $values = array(); + $idName = $this->identifierName; + if (in_array($queryType,$arrayType)) + { + $ident = null; + if (isset($id)) + { + $ident = (int)$id; + } + else if (isset($_POST[$idName])) + { + $ident = (int)$_POST[$idName]; + } + if ($this->result) + { + if ($queryType === 'update') + { + if (isset($ident)) + { + $recordArray = $this->selectId($ident); + + $fieldsArray = explode(',',$this->fields); + + foreach ($fieldsArray as $field) + { + $values[$field] = array_key_exists($field,$recordArray) ? $recordArray[$field] : ''; + } + + $values[$idName] = $ident; + + //apply the functions upon entries + foreach ($functionsIfFromDb as $entry => $funcUponEntry) + { + if (array_key_exists($entry,$values)) + { + if (!function_exists($funcUponEntry)) { + throw new Exception('Error in '.__METHOD__.': function '.$funcUponEntry. ' does not exists'); + } + + $values[$entry] = call_user_func($funcUponEntry,$values[$entry]); + } + } + + } + } + else if ($queryType === 'insert') + { + + $tempArray = is_array($defaultValues) ? $defaultValues : array(); + + $values = $this->arrayExt->subset($tempArray,$this->fields,$func); + + } + } + else + { + $values = $this->arrayExt->subset($_POST,$this->fields,$func); + + if ($queryType === 'update') + { + $values[$idName] = $ident; + } + } + } + return $values; + } + + + //method to set the properties $this->fields and $this->values + public function setFields($fields,$func = 'sanitizeAll') + { + $this->values = $this->arrayExt->subset($_POST,$fields,$func); + $this->fields = $this->extractFields($fields); + + //set the backup variables + $this->_backupFields = $this->fields; + $this->_backupValues = $this->values; + } + + + //clear the fields list + public function clearFields() + { + $this->_backupFields = $this->fields; + $this->_backupValues = $this->values; + $this->fields = ''; + $this->values = array(); + } + + //del the fields written in the $list argument. The $list argument has to be of the type: field1,field2,... + public function delFields($list) + { + $this->_backupFields = $this->fields; + $this->_backupValues = $this->values; + $this->values = $this->arrayExt->subsetComplementary($this->values,$list); + $this->fields = implode(',',array_keys($this->values)); + } + + //restore the fields and values saved in $_backupFields and $_backupValues + public function restoreFields() + { + $this->fields = $this->_backupFields; + $this->values = $this->_backupValues; + } + + //method to clean the $fields string deleting the colons (and the word after the colon) + public function extractFields($fields) { + $fieldsArray = explode(',',$fields); + $resultString = array(); + foreach ($fieldsArray as $field) { + if (strstr($field,':')) { + $temp = explode(':',$field); + $resultString[] = $temp[0]; + } else { + $resultString[] = $field; + } + } + return implode(',',$resultString); + } + + //add the supplementary value on insert and update queries + //$queryType: insert or update + public function setSupplValues($queryType) + { + if ($queryType === 'insert') + { + $supplValues = $this->supplInsertValues; + } + else if ($queryType === 'update') + { + $supplValues = $this->supplUpdateValues; + } + + $baseFields = implode(',',array_keys($this->values)); + + $supplFields = implode(',',array_keys($supplValues)); + $supplFields = (strcmp($supplFields,'') === 0) ? $supplFields : ',' . $supplFields; + + $fields = $baseFields . $supplFields; + $values = array_merge(array_values($this->values),array_values($supplValues)); + + return array($fields,$values); + } + + + //method to call the update query (overriding of the base_db del method) + //update the record with the primary key equal to $id (default) + //if $whereClause is set then use $whereClause as where clause of the update query + public function update($id = null, $whereClause = null) + { + if (!is_array($this->supplUpdateValues)) + { + throw new Exception('error in ' . __METHOD__ . ': the supplUpdateValues property has to be an array.'); + } + $el = $this->setSupplValues('update'); + $this->queryResult = false; + + if (isset($whereClause)) + { + $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$whereClause); + $this->setNotice($result); + return $result; + } + else + { + if (isset($id)) + { + $where = $this->_idFieldsArray[0].'='.(int)($id); + $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$where); + $this->setNotice($result); + return $result; + } + else + { + $this->notice = $this->_resultString->getString('no-id'); + $this->result = false; + $this->identifierValue = null; + return false; + } + } + } + + //method to call the insert query (overriding of the base_db del method) + public function insert() { + + $this->queryResult = false; + if (!is_array($this->supplInsertValues)) { + throw new Exception('error in ' . __METHOD__ . ': the supplInsertValues property has to be an array.'); + } + + if (isset($this->_idOrder)) + { + $maxValue = $this->db->getMax($this->_tablesArray[0],$this->_idOrder); + $this->supplInsertValues[$this->_idOrder] = (int)$maxValue + 1; + } + + $el = $this->setSupplValues('insert'); + + $result = $this->db->insert($this->_tablesArray[0],$el[0],$el[1]); + $this->setNotice($result); + return $result; + } + + //method to call the delete query (overriding of the base_db del method) + public function del($id = null, $whereClause = null) { + + $this->queryResult = false; + + if (isset($whereClause)) + { + $result = $this->db->del($this->_tablesArray[0],$whereClause); + $this->setNotice($result); + return $result; + } + else + { + if (isset($id)) { + $where = $this->_idFieldsArray[0].'='.(int)$id; + $result = $this->db->del($this->_tablesArray[0],$where); + $this->setNotice($result); + return $result; + } else { + $this->notice = $this->_resultString->getString('no-id'); + $this->result = false; + $this->identifierValue = null; + return false; + } + } + } + + //move to the top the record having $this->_idOrder = $id + //where clause + public function moveup($id) + { + return $this->move($id,'up'); + } + + //move to the top the record having $this->_idOrder = $id + //where clause + public function movedown($id) + { + return $this->move($id,'down'); + } + + //move the record having $this->_tablesArray[0] = $id + //$par: 'up' or 'down' + //where clause + public function move($id,$par = 'up') + { + $this->queryResult = false; + if (isset($id)) + { + $increm = ($par === 'up') ? 1 : -1; + + $backupLimit = $this->limit; + $this->limit = null; + + $data = $this->getFields($this->_tablesArray[0].'.'.$this->_idFieldsArray[0].','.$this->_tablesArray[0].'.'.$this->_idOrder); + + for($i = 0; $i < count($data); $i++) + { + if (strcmp($data[$i][$this->_tablesArray[0]][$this->_idFieldsArray[0]],$id) === 0) + { + if (($par === 'up' and $i !== 0) or ($par === 'down' and $i !== (count($data)-1))) + { + $prevOrder = $data[$i-$increm][$this->_tablesArray[0]][$this->_idOrder]; + $prevId = $data[$i-$increm][$this->_tablesArray[0]][$this->_idFieldsArray[0]]; + $currentOrder = $data[$i][$this->_tablesArray[0]][$this->_idOrder]; + $currentId = $data[$i][$this->_tablesArray[0]][$this->_idFieldsArray[0]]; + + //exchange the id_order of the two record + $res1 = $this->db->update($this->_tablesArray[0],$this->_idOrder,array($prevOrder),$this->_idFieldsArray[0]."='$currentId'"); + $res2 = $this->db->update($this->_tablesArray[0],$this->_idOrder,array($currentOrder),$this->_idFieldsArray[0]."='$prevId'"); + $result = ($res1 and $res2); + $this->setNotice($result); + return $result; + } + } + } + + $this->limit = $backupLimit; + } + else + { + $this->notice = $this->_resultString->getString('no-id'); + $this->result = false; + $this->identifierValue = null; + return false; + } + return false; + } + + public function setNotice($result) { + if ($result) { + $this->notice = $this->_resultString->getString('executed'); + $this->result = true; + $this->queryResult = true; + } else { + $this->notice = $this->_resultString->getString('error'); + $this->result = false; + $this->queryResult = false; + } + } + + //method used to verify that the value of a field is not duplicated + //$fieldsList: list of fields to check. Ex: field1,field2,... + //$where: the where clause + public function checkUnique($fieldsList,$where = null) + { + $errorString = null; + $numb = 0; + $fieldsArray = explode(',',$fieldsList); + $queryFieldsArray = explode(',',$this->fields); + foreach ($fieldsArray as $field) + { + if (in_array($field,$queryFieldsArray)) + { + if ($this->db->recordExists($this->_tablesArray[0],$field,$this->values[$field],$where)) + { + $errorString .= $this->_dbCondString->getNotUniqueString($field); + $numb++; + } + } + } + $this->notice = $errorString; + return $numb === 0 ? true : false; + } + + //like checkUnique: check all the records of the table apart from the record that has to be modified + public function checkUniqueCompl($fieldsList,$id = null) + { + if (isset($id)) + { + $where = $this->_idFieldsArray[0].'!='.(int)($id); + return $this->checkUnique($fieldsList,$where); + } else { + $this->notice = $this->_resultString->getString('no-id'); + return false; + } + } + + //method to apply the database conditions listed in the $this->databaseConditions associative array + //$queryType: indicates what set of validate conditions has to be considered (it's the key of the associative array) + public function applyDatabaseConditions($queryType,$id = null) + { + if (array_key_exists($queryType,$this->databaseConditions)) + { + if (!is_array($this->databaseConditions[$queryType])) + { + throw new Exception('error in method '.__METHOD__.' : databaseConditions['.$queryType.'] has to be an associative array'); + } + + foreach ($this->databaseConditions[$queryType] as $key => $values) + { + + //personalized error string + $altErrorString = null; + + //delete all the '+' chars + $key = $this->dropStartChar($key,'+'); + + if (strcmp($values,'all') === 0 or strstr($values,'all|')) + { + if (strstr($values,'all|')) + { + $values = str_replace('all|',$this->fields.'|',$values); + } + else + { + $values = $this->fields; + } + } + + if (strstr($values,'|')) + { + $temp = explode('|',$values); + $altErrorString = "
        ".$temp[1]."
        \n"; + $values = $temp[0]; + } + + $allowedMethod = array('checkUnique','checkUniqueCompl'); + if (!in_array($key,$allowedMethod)) + { + throw new Exception('error in method '.__METHOD__.' : method "'.$key. '" not allowed in the property named databaseConditions'); + } + if (!call_user_func_array(array($this,$key),array($values,$id))) + { + if (isset($altErrorString)) $this->notice = $altErrorString; + $this->result = false; + $this->queryResult = false; + return false; + } + } + return true; + } else { + return true; + } + } + + + //method to apply the validate conditions listed in the $this->strongConditions associative array + //$queryType: indicates what set of validate conditions has to be considered (it's the key of the associative array) + //$strength: 'strong' or 'soft' + public function applyValidateConditions($queryType,$strength = 'strong') + { + if ($strength === 'strong') + { + $validateObj = $this->_arrayStrongCheck; + $conditions = $this->strongConditions; + $errString = 'strongConditions'; + } + else + { + $validateObj = $this->_arraySoftCheck; + $conditions = $this->softConditions; + $errString = 'softConditions'; + + if (Params::$nullQueryValue !== false) + { + $conditions['insert']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all'; + $conditions['update']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all'; + } + } + + if (array_key_exists($queryType,$conditions)) + { + if (!is_array($conditions[$queryType])) + { + throw new Exception('error in method '.__METHOD__.' : '.$errString.'['.$queryType.'] has to be an associative array'); + } + + foreach ($conditions[$queryType] as $key => $values) + { + + //personalized error string + $altErrorString = null; + + //delete all the '+' chars + $key = $this->dropStartChar($key,'+'); + + if (strcmp($values,'all') === 0 or strstr($values,'all|')) + { + if (strstr($values,'all|')) + { + $values = str_replace('all|',$this->fields.'|',$values); + } + else + { + $values = $this->fields; + } + } + + if (strstr($values,'|')) + { + $temp = explode('|',$values); + $altErrorString = "
        ".$temp[1]."
        \n"; + $values = $temp[0]; + } + + $baseArgs = array($_POST,$values); + + if (strstr($key,'|')) + { + $funcArray = explode('|',$key); + $funcName = $funcArray[0]; + array_shift($funcArray); + $funcArgs = array_merge($baseArgs,$funcArray); + } + else + { + $funcName = $key; + $funcArgs = $baseArgs; + } + + if (!method_exists($validateObj,$funcName) or $funcName === 'checkGeneric') + { + throw new Exception('error in method '.__METHOD__.' :method "'.$funcName. '" not allowed in '.$errString); + } + if (!call_user_func_array(array($validateObj,$funcName),$funcArgs)) + { + $this->notice .= (isset($altErrorString)) ? $altErrorString : $validateObj->errorString; + $this->result = false; + $this->queryResult = false; + return false; + } + } + return true; + } else { + return true; + } + } + + + //apply, in sequence, the strong,soft and database conditions + //$methodName: insert,update + //$id: the id of the record. It is necessary for database conditions + public function checkConditions($methodName,$id = null) + { + if ($this->applyValidateConditions($methodName,'strong')) + { + if ($this->applyValidateConditions($methodName,'soft')) + { + if ($this->applyDatabaseConditions($methodName,$id)) + { + return true; + } + } + } + return false; + } + + //method that calls the function indicated in $this->submitNames. Ex: if $_POST['delAction'] is found, then the "del" method is called. + public function updateTable($methodsList = '',$id = null) { + + $allowedMethodsArray = explode(',',$methodsList); + $resultArray = array(); + $this->identifierValue = null; + if (isset($id)) + { + $this->identifierValue = (int)$id; + } + else if (isset($_POST[$this->identifierName])) + { + $this->identifierValue = (int)$_POST[$this->identifierName]; + } + foreach ($this->submitNames as $methodName => $submitName) + { + if (array_key_exists($submitName,$_POST)) + { + $this->submitName = $submitName; + if (method_exists($this,$methodName)) + { + //if the method is allowed + if (in_array($methodName,$allowedMethodsArray)) + { + if ($this->checkConditions($methodName,$this->identifierValue)) + { + $this->notice = null; + call_user_func_array(array($this,$methodName),array($this->identifierValue)); + } + } + } + else + { + throw new Exception('method '.$methodName.' not defined in class '.__CLASS__.'; error in method '.__METHOD__.''); + } + return; //only one cycle! + } + } + } + + //method to build the array of popup objects + public function popupBuild() + { + foreach ($this->_popupItemNames as $field => $itemName) + { +// if (array_key_exists($field,$this->_where)) +// { + $fieldClean = str_replace('n!',null,$field); + $itemNameClean = str_replace('n!',null,$itemName); + $fieldClean = $this->dropStartChar($fieldClean,'-'); + $itemNameClean = $this->dropStartChar($itemNameClean,'-'); + + //fields that have to be extracted + $queryFields = ($fieldClean === $itemNameClean) ? $fieldClean : $fieldClean.','.$itemNameClean; + + $table = $this->getTableName($field); + $this->popupArray[$field] = new Popup(); + + $popupWhereClause = array_key_exists($field,$this->_popupWhere) ? $this->_popupWhere[$field] : null; + + $result = $this->db->select($table,$queryFields,$popupWhereClause,$fieldClean); + + if ($result and $result !== false) + { + //get the label of the popup menu + $label = array_key_exists($field,$this->_popupLabels) ? $this->_popupLabels[$field] : $table.' : '.$itemNameClean; + $this->popupArray[$field]->name = $label; + + //get the table name + $fieldTable = isset($result[0][$table][$fieldClean]) ? $table : Params::$aggregateKey; + $itemNameTable = isset($result[0][$table][$itemNameClean]) ? $table : Params::$aggregateKey; + + foreach ($result as $row) + { + $this->popupArray[$field]->itemsValue[] = $row[$fieldTable][$fieldClean]; + + if (array_key_exists($field,$this->_popupFunctions)) + { + if (!function_exists($this->_popupFunctions[$field])) + { + throw new Exception('Error in '.__METHOD__.': function '.$this->_popupFunctions[$field]. ' does not exists'); + } + + $tempName = call_user_func($this->_popupFunctions[$field],$row[$itemNameTable][$itemNameClean]); + } + else + { + $tempName = $row[$itemNameTable][$itemNameClean]; + } + + $this->popupArray[$field]->itemsName[] = $tempName; + } + } +// } + } + } + + + //get the element before and after the current one + //$key: the key of the self::$where array that indicates the field to be used in order to find out the records before and after + //$fields: the fields that have to be extracted + public function getNeighbours($key,$fields = '') + { + //backup of the values + $tempWhere = $this->where; + $tempLimit = $this->limit; + $tempOrderBy = $this->orderBy; + $this->limit = 1; + //before + $this->where[$key] = '<'.$tempWhere[$key]; + $this->orderBy = $this->getTableName($key).'.'.$key.' DESC'; + $dataAfter = $this->getFields($fields); + //after + $this->where[$key] = '>'.$tempWhere[$key]; + $this->orderBy = $this->getTableName($key).'.'.$key; + $dataBefore = $this->getFields($fields); + //restore the previous values + $this->where = $tempWhere; + $this->limit = $tempLimit; + $this->orderBy = $tempOrderBy; + $result[0] = isset($dataBefore[0]) ? $dataBefore[0] : null; + $result[1] = isset($dataAfter[0]) ? $dataAfter[0] : null; + return $result; + } + + //set the $select property and return the current object + public function select($fields = null) + { + $this->select = $fields; + return $this; + } + + //set the $from property and return the current object + public function from($tables = null) + { + $this->from = isset($tables) ? $tables : $this->_tables; + return $this; + } + + //set the $on property and return the current object + public function on($joinClause = '-') + { + $this->on = $joinClause; + return $this; + } + + //set the $using property and return the current object + public function using($using = null) + { + $this->using = $using; + return $this; + } + + //set the $where property and return the current object + public function where($where = array()) + { + $this->where = $where; + return $this; + } + + //append the $where array to the ::where property and return the current object + public function aWhere($where = array()) + { + $this->appendWhereQueryClause($where); + return $this; + } + + //set the $groupBy property and return the current object + public function groupBy($groupBy = null) + { + $this->groupBy = $groupBy; + return $this; + } + + //set the $orderBy property and return the current object + public function orderBy($orderBy = null) + { + $this->orderBy = $orderBy; + return $this; + } + + //set the $limit property and return the current object + public function limit($limit = null) + { + $this->limit = $limit; + return $this; + } + + //set the $listArray property + public function toList($key, $value = null) + { + $this->listArray = array($key,$value); + $this->toList = true; + return $this; + } + + //reset all the clauses of the select query + public function clear() + { + $this->select = null; + $this->where = array(); + $this->groupBy = null; + $this->orderBy = null; + $this->limit = null; + $this->from = null; + $this->on = null; + $this->using = null; + $this->toList = false; + return $this; + } + + //initialize and populate the ::form property (reference to a Form_Form object) + public function setForm($defAction = null, $defSubmit = array(), $defMethod = 'POST') + { + if (isset($this->formStruct)) + { + $action = array_key_exists('action',$this->formStruct) ? $this->formStruct['action'] : $defAction; + $submit = array_key_exists('submit',$this->formStruct) ? $this->formStruct['submit'] : $defSubmit; + $entries = array_key_exists('entries',$this->formStruct) ? $this->formStruct['entries'] : null; + $method = array_key_exists('post',$this->formStruct) ? $this->formStruct['post'] : $defMethod; + + $this->form = new Form_Form($action,$submit,$method); + + if (isset($entries)) + { + $this->form->setEntries($entries); + } + + $copy = $this->form->entry; + + foreach ($copy as $name => $entry) + { + if (strcmp($entry->type,'Select') === 0 and isset($entry->options)) + { + if (!is_array($entry->options)) + { + if (strstr($entry->options,'foreign::')) + { + $elements = explode('::',$entry->options); + + for ($i = 0; $i < count($elements); $i++) + { + if (strcmp($elements[$i],'--') === 0) $elements[$i] = null; + } + //send the query + array_shift($elements); + $resultSet = call_user_func_array(array($this->db,'select'),$elements); + + $single = true; + + if (strstr($elements[1],',')) + { + $args = explode(',',$elements[1]); + //add the table name + $args[0] = $elements[0].'.'.$args[0]; + $args[1] = $elements[0].'.'.$args[1]; + //associative array + $single = false; + } + else + { + $args[0] = $elements[0].'.'.$elements[1]; + $args[1] = null; + } + + $list = $this->getList($resultSet,$args[0],$args[1]); + + $this->form->entry[$name]->options = ($single) ? implode(',',array_values($list)) : $list; + } + } + } + } + + } + else + { + $this->form = new Form_Form($defAction,$defSubmit,$defMethod); + } + } + + //get a list from a result set + //$resultSet: the result set coming from a select query + public function getList($resultSet, $key, $value = null) + { + $list = array(); + + if (strstr($key,'.')) + { + $arr = explode('.',$key); + $keyTable = $arr[0]; + $keyField = $arr[1]; + } + else + { + $keyTable = $this->_tablesArray[0]; + $keyField = $key; + } + + if (!isset($value)) + { + foreach ($resultSet as $row) + { + $list[] = $row[$keyTable][$keyField]; + } + } + else + { + if (strstr($value,'.')) + { + $arr = explode('.',$value); + $valueTable = $arr[0]; + $valueField = $arr[1]; + } + else + { + $valueTable = $this->_tablesArray[0]; + $valueField = $value; + } + + foreach ($resultSet as $row) + { + $list[$row[$keyTable][$keyField]] = $row[$valueTable][$valueField]; + } + + } + return $list; + } + + // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT). + public function lastId() + { + return $this->db->lastId(); + } + + //send a free query + public function query($query) + { + return $this->db->query($query); + } + + //the text of the error message from previous MySQL operation + public function getError() + { + return $this->db->getError(); + } + + //the numerical value of the error message from previous MySQL operation + public function getErrno() + { + return $this->db->getErrno(); + } + + //define the abstract method to get the value of the record $id of the main table + abstract public function selectId($id); + + //define the abstract method to get the fields from the tables + abstract public function getFields(); + +} \ No newline at end of file diff --git a/admin/Library/Model/Map.php b/admin/Library/Model/Map.php new file mode 100755 index 0000000..7a36c6f --- /dev/null +++ b/admin/Library/Model/Map.php @@ -0,0 +1,439 @@ +identifierName] + protected $_boxIdentifierValue = null; //the id of the box that has to be associated with the item + + public function __construct() + { + //add some submit names (method => form_submit_value) + $this->submitNames['associate'] = 'associateAction'; + $this->submitNames['dissociate'] = 'dissociateAction'; + //add the allowed methods + $this->_allowedDbMethods[] = 'associate'; + $this->_allowedDbMethods[] = 'dissociate'; + parent::__construct(); + } + + public function createMapWhere($choice) + { //create the where join clause + //$choice=(first,last,all) + if (isset($this->on)) + { + return $this->on; + } + else + { + $first = $this->_tablesArray[0].'.'.$this->_idFieldsArray[0].'='.$this->_tablesArray[2].'.'.$this->_idFieldsArray[0]; + $last = $this->_tablesArray[1].'.'.$this->_idFieldsArray[1].'='.$this->_tablesArray[2].'.'.$this->_idFieldsArray[1]; + switch ($choice) { + case 'first': + return $first; + break; + case 'last': + return $last; + break; + case 'all': + return $first. ' and '.$last; + break; + } + } + } + + //check if a join query is necessary or not + //$val: 0 or 1 (items or boxes) + //$whereClauseLevel: array containing the field=>value statements of the where clause. If $whereClause = null than $this->where is considered + public function checkIfJoinNeeded($val, $whereClauseLevel = null) + { + $whereClause = isset($whereClauseLevel) ? $whereClauseLevel : $this->where; + + foreach ($whereClause as $field => $value) + { + if (is_array($value)) + { + if ($this->checkIfJoinNeeded($val, $value) === true) return true; + } + else + { + if (strcmp($this->getTableName($field),$this->_tablesArray[$val]) !== 0) + { + if (strcmp($value,Params::$nullQueryValue) !== 0 or (Params::$nullQueryValue === false)) return true; + } + } + } + //return false if no where clause has been defined + return false; + } + + //method to create the where clause and the list of tables of the select query + public function mapQueryElements($val) + { +// $val = $element === 'Items' ? 0 : 1; + $tables = $this->_tablesArray[$val]; + $where = null; + $fields = $this->_tablesArray[$val].'.*'; + + if ($this->checkIfJoinNeeded($val)) + { + $tables = $this->_tables; + $fields = $this->_tablesArray[$val].'.*'; + $wherePlus = $this->createWhereClause(); + $wherePlus = isset($wherePlus) ? ' AND ' . $wherePlus : null; + $where = $this->createMapWhere('all') . $wherePlus; + } + else + { + $where = $this->createWhereClause(); + } + + return array('tables' => $tables,'where' => $where,'fields' => $fields); + } + + //$element: Items or Boxes. + //get all Item or Boxes + public function getAll($element = 'Items') + { + return $this->getFields('',$element); + } + + //method to get the values of the selected fields + //$fields: the fields that have to be excracted from the tableName + public function getFields($fields = '',$element = 'Items') + { + //get all Item or Boxes + if ((strcmp($element,'Items') !== 0) and (strcmp($element,'Boxes') !== 0)) + { + throw new Exception('"'.$element. '" argument not allowed in '.__METHOD__.' method'); + } + $val = $element === 'Items' ? 0 : 1; + + $elements = $this->mapQueryElements($val); + + $queryFields = (strcmp($fields,'') === 0) ? $elements['fields'] : $fields; + + return $row = $this->db->select($elements['tables'],$queryFields,$elements['where'],$this->groupBy,$this->orderBy,$this->limit); + + } + + public function send($element = 'Items') + { + $table = $this->getFields($this->select, $element); + + if ($this->toList) + { + $key = $this->listArray[0]; + $value = isset($this->listArray[1]) ? $this->listArray[1] : null; + $this->toList = false; + return $this->getList($table, $key, $value); + } + else + { + return $table; + } + } + + //the fields that have to be extracted from the table + public function getTable($fields = null) + { + return isset($fields) ? $this->getFields($fields) : $this->getAll(); + } + + //select the values of a specified record + //$id: the id (primary key) of the record + //$fields: the comma separated list of fields that have to be extracted + public function selectId($id,$fields = null) + { + $id = (int)$id; + $this->setWhereQueryClause(array($this->_idFieldsArray[0] => $id)); + + if (isset($fields)) + { + $values = $this->getFields($fields,'Items'); + } + else + { + $values = $this->getAll('Items'); + } + + return (count($values) > 0) ? $values[0][$this->_tablesArray[0]] : array(); + } + + //get the number of records (items or boxes) + public function recordNumber($element) + { + $val = $element === 'Items' ? 0 : 1; + + $elements = $this->mapQueryElements($val); + return $this->db->get_num_rows($elements['tables'],$elements['where'],$this->groupBy); + } + + //get the number of records (only items) + public function rowNumber() + { + return $this->recordNumber('Items'); + } + + public function getMax($field) + { + $elements = $this->mapQueryElements(0); + return $this->db->getMax($elements['tables'],$field,$elements['where'],$this->groupBy); + } + + public function getMin($field) + { + $elements = $this->mapQueryElements(0); + return $this->db->getMin($elements['tables'],$field,$elements['where'],$this->groupBy); + } + + public function getSum($field) + { + $elements = $this->mapQueryElements(0); + return $this->db->getSum($elements['tables'],$field,$elements['where'],$this->groupBy); + } + + public function getAvg($field) + { + $elements = $this->mapQueryElements(0); + return $this->db->getAvg($elements['tables'],$field,$elements['where'],$this->groupBy); + } + + //check if the table has the field $field equal to $value + public function has($field,$value) + { + $elements = $this->mapQueryElements(0); + return $this->db->recordExists($elements['tables'],$field,$value,$elements['where'],$this->groupBy); + } + + //associate an item with a box + //$idItem : name of the field of the Items table, $idGroup : name of the field of the Boxes table + public function associate($idItem = null,$idGroup = null) + { + $this->queryResult = false; + if (isset($idItem) and isset($idGroup)) + { + $idItem = (int)$idItem; + $idGroup = (int)$idGroup; + $values = array($idItem,$idGroup); //values relative to the fields $this->_idFields + $var = $this->checkAssociation($idItem,$idGroup); + if (!$var) + { + $result = $this->db->insert($this->_tablesArray[2],$this->_idFields,$values); + $this->setNotice($result); + return $result; + } + else + { + if (strcmp($this->printAssError,'yes') === 0) $this->notice = $this->_resultString->getString('linked'); + $this->result = false; + } + } + else + { + $this->notice = $this->_resultString->getString('no-id'); + $this->result = false; + } + return false; + } + + //associate an item with a box + //$idItem : name of the field of the Items table, $idGroup : name of the field of the Boxes table + public function dissociate($idItem = null,$idGroup = null) + { + $this->queryResult = false; + if (isset($idItem) and isset($idGroup)) + { + $idItem = (int)$idItem; + $idGroup = (int)$idGroup; + $var = $this->checkAssociation($idItem,$idGroup); + if ($var) + { + $result = $this->db->del($this->_tablesArray[2],$this->_idFieldsArray[0].'='.$idItem.' and '.$this->_idFieldsArray[1].'='.$idGroup); + $this->setNotice($result); + return $result; + } + else + { + if (strcmp($this->printAssError,'yes') === 0) $this->notice = $this->_resultString->getString('not-linked'); + $this->result = false; + } + } + else + { + $this->notice = $this->_resultString->getString('no-id'); + $this->result = false; + } + return false; + } + + public function checkAssociation($idItem,$idGroup) + { + $idItem = (int)$idItem; + $idGroup = (int)$idGroup; + $numRow = $this->db->get_num_rows($this->_tablesArray[2],$this->_idFieldsArray[0].'='.$idItem.' and '.$this->_idFieldsArray[1].'='.$idGroup); + if ($numRow === 1) + { + return true; + } + else + { + return false; + } + } + + //check what items are associate to a box + //itemsArray:array of items to check + public function checkAssociationDeep($itemsArray) + { + $associatedItems = array(); + $itemsArray = is_array($itemsArray) ? array_values($itemsArray) : array($itemsArray); + foreach ($itemsArray as $item) { + if ($this->db->recordExists($this->_tablesArray[2],$this->_idFieldsArray[0],$item)) + { + $associatedItems[] = $item; + } + } + return $associatedItems; + } + + //method to call the delete query (overriding of the del method of Model.php) + //check the referential integrity + public function del($id = null, $whereClause = null) + { + $this->queryResult = false; + + if (isset($whereClause)) + { + return parent::del(null,$whereClause); + } + else + { + if ($this->_onDelete === 'check') + { + if ($this->db->recordExists($this->_tablesArray[2],$this->_idFieldsArray[0],(int)$id)) + { + $this->notice = $this->_resultString->getString('associate'); + $this->identifierValue = null; + $this->result = false; + } + else + { + return parent::del((int)$id); + } + } + else if ($this->_onDelete === 'nocheck') + { + return parent::del((int)$id); + } + } + return false; + } + + //override of the updateTable method of the parent class + //method that calls the function indicated in $this->submitNames. Ex: if $_POST['delAction'] is found, then the "del" method is called. + public function updateTable($methodsList = '',$id = null) + { + $allowedMethodsArray = explode(',',$methodsList); + $resultArray = array(); + $this->identifierValue = null; + if (isset($id)) + { + $this->identifierValue = (int)$id; + } + else if (isset($_POST[$this->identifierName])) + { + $this->identifierValue = (int)$_POST[$this->identifierName]; + } + foreach ($this->submitNames as $methodName => $submitName) { + if (array_key_exists($submitName,$_POST)) + { + $this->submitName = $submitName; + if (method_exists($this,$methodName)) + { + if (in_array($methodName,$allowedMethodsArray)) + { + if ($this->checkConditions($methodName,$this->identifierValue)) + { + $this->notice = null; + $methodArray = array('associate','dissociate'); + if (in_array($methodName,$methodArray)) + { + $this->_boxIdentifierValue = null; + if (isset($_POST[$this->boxIdentifierName])) + { + $this->_boxIdentifierValue = (int)$_POST[$this->boxIdentifierName]; + } + call_user_func_array(array($this,$methodName),array($this->identifierValue,$this->_boxIdentifierValue)); + } + else + { + call_user_func_array(array($this,$methodName),array($this->identifierValue)); + } + } + } + } + else + { + throw new Exception('method "'.$methodName. '" not defined in class '.__CLASS__.'; error in method '.__METHOD__); + } + return; //only one cycle! + } + } + } + + //method to obtain one columns from the tables $this->_tablesArray as an associative array + //$valueField: the column that have to be extracted (array_values of the resulting associative array), $keyField: the column that have to play the role of array_keys + //$valueField = field:table, $keyField = field:table + public function getFieldArray($valueField,$keyField = null, $groupBy = null, $orderBy = null, $limit = null) + { + + $keyField = isset($keyField) ? $keyField : $valueField; + $valueFieldArray = explode(':',$valueField); + $keyFieldArray = explode(':',$keyField); + + $keyFieldTable = $keyFieldArray[0]; + $valueFieldTable = $valueFieldArray[0]; + + $keyFieldName = $keyFieldArray[1]; + $valueFieldName = $valueFieldArray[1]; + + $fields = implode('.',$keyFieldArray) . ',' . implode('.',$valueFieldArray); + + $temp = $this->where; //save the $this->where array + $this->where = array(); + + $val = array_search($keyFieldTable,$this->_tablesArray); + + if (strcmp($keyFieldTable,$valueFieldTable) !== 0) + { + throw new Exception("the tables '$valueFieldTable' and '$keyFieldTable' do not match in ".__METHOD__); + } + + if ($val === false or !in_array($val,array(0,1))) + { + throw new Exception("the table '$keyFieldTable' is not allowed in ".__METHOD__); + } + + $elements = $this->mapQueryElements($val); + + $table = $this->db->select($elements['tables'],$fields,$elements['where'],$groupBy,$orderBy,$limit); + $this->where = $temp; + + $returnArray = array(); + foreach ($table as $record) { + $returnArray[$record[$keyFieldTable][$keyFieldName]] = $record[$valueFieldTable][$valueFieldName]; + } + + return $returnArray; + + } + +} \ No newline at end of file diff --git a/admin/Library/Model/Tree.php b/admin/Library/Model/Tree.php new file mode 100755 index 0000000..d7b655d --- /dev/null +++ b/admin/Library/Model/Tree.php @@ -0,0 +1,287 @@ +_tablesArray + public function createTreeWhere($index) { + if (isset($this->on)) + { + return $this->on; + } + else + { + $whereArray = array(); + for ($i = $index; $i < (count($this->_tablesArray)-1); $i++) + { + $whereArray[] = $this->_tablesArray[$i].'.'.$this->_idFieldsArray[$i+1].'='.$this->_tablesArray[$i+1].'.'.$this->_idFieldsArray[$i+1]; + } + $whereString = !empty($whereArray) ? implode(' and ',$whereArray) : null; + return $whereString; + } + } + + //create the list of tables of the select query + //$index: the index of $this->_tablesArray + public function createTablesList($index) { + if (isset($this->from)) + { + return $this->from; + } + else + { + $tablesString = null; + for ($i = $index; $i < (count($this->_tablesArray)-1); $i++) + { + $tablesString .= $this->_tablesArray[$i] . ','; + } + $tablesString .= $this->_tablesArray[count($this->_tablesArray)-1]; + return $tablesString; + } + } + + //method to create the list of fields of the select query + public function createFieldsList($index) { + $fieldsString = null; + for ($i = $index; $i < (count($this->_tablesArray)-1); $i++) + { + $fieldsString .= $this->_tablesArray[$i] . '.*,'; + } + $fieldsString .= $this->_tablesArray[count($this->_tablesArray)-1].'.*'; + return $fieldsString; + } + + + //method to create the where clause and the list of tables and fields of the select query + //$tableName: the table name ($this->_tablesArray) + //$choice:all->all the tables in $this->_arrayTables, other value->only the table of $this->_arrayTables ad index $index + //return: $elements = array('tables'=>$tables,'where'=>$where,'fields'=>$fields) + public function treeQueryElements($tableName,$choice = 'all') + { + $index = array_search($tableName,$this->_tablesArray); + $subArray = ($choice === 'all') ? array_slice($this->_tablesArray,$index) : array($tableName); //this array is necessary to verify that the where clause makes sense + $tables = ($choice === 'all') ? $this->createTablesList($index) : $tableName; + $where = ($choice === 'all') ? $this->createTreeWhere($index) : null; + $fields = ($choice === 'all') ? $this->createFieldsList($index) : $tableName.'.*'; + + $wherePlus = $this->createWhereClause(); + + if (!isset($this->on)) + { + $on = null; + + if (isset($where) and isset($wherePlus)) + { + $where .= ' AND ' . $wherePlus; + } + else if (!isset($where) and isset($wherePlus)) + { + $where .= $wherePlus; + } + } + else + { + $on = (strcmp($where,'-') !== 0) ? $where : null; + $where = $wherePlus; + } + + return array('tables' => $tables,'where' => $where,'fields'=>$fields,'on'=>$on); + } + + + //method to obtain the values of the whole tree + //$choice:all->all the tables in $this->_arrayTables, other value->only the table of $this->_arrayTables ad index $index + public function getAll($choice = 'all') { + return $this->getFields('',$choice); + } + + //method to get the values of the selected fields + //it walks the tree by means of a join query + //$fields: the fields that have to be excracted from the tableName + public function getFields($fields = '',$choice = 'all') + { + $elements = $this->treeQueryElements($this->_tablesArray[0],$choice); + + $queryFields = (strcmp($fields,'') === 0) ? $elements['fields'] : $fields; + + return $row = $this->db->select($elements['tables'],$queryFields,$elements['where'],$this->groupBy,$this->orderBy,$this->limit,$elements['on'],$this->using); + } + + public function send() + { + $table = $this->getFields($this->select); + + if ($this->toList) + { + $key = $this->listArray[0]; + $value = isset($this->listArray[1]) ? $this->listArray[1] : null; + $this->toList = false; + return $this->getList($table, $key, $value); + } + else + { + return $table; + } + } + + //call the getAll method with $tableName = $this->_tablesArray[0] + //the fields that have to be extracted from the table + public function getTable($fields = null) { + return isset($fields) ? $this->getFields($fields) : $this->getAll(); + } + + //select the values of a specified record + //$id: the id (primary key) of the record + //$fields: the comma separated list of fields that have to be extracted + public function selectId($id,$fields = null) { + $this->setWhereQueryClause(array($this->_idFieldsArray[0] => (int)$id)); + + $this->using = null; + + if (isset($fields)) + { + $values = $this->getFields($fields,'other'); + } + else + { + $values = $this->getAll('other'); + } + + return (count($values) > 0) ? $values[0][$this->_tablesArray[0]] : array(); + + } + + //get the number of records () + //the number of records of the table $tableName is returned + public function rowNumber() { + $elements = $this->treeQueryElements($this->_tablesArray[0]); + return $this->db->get_num_rows($elements['tables'],$elements['where'],$this->groupBy,$elements['on'],$this->using); + } + + public function getMax($field) + { + $elements = $this->treeQueryElements($this->_tablesArray[0]); + return $this->db->getMax($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using); + } + + public function getMin($field) + { + $elements = $this->treeQueryElements($this->_tablesArray[0]); + return $this->db->getMin($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using); + } + + public function getSum($field) + { + $elements = $this->treeQueryElements($this->_tablesArray[0]); + return $this->db->getSum($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using); + } + + public function getAvg($field) + { + $elements = $this->treeQueryElements($this->_tablesArray[0]); + return $this->db->getAvg($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using); + } + + //check if the table has the field $field equal to $value + public function has($field,$value) + { + $elements = $this->treeQueryElements($this->_tablesArray[0]); + return $this->db->recordExists($elements['tables'],$field,$value,$elements['where'],$this->groupBy,$elements['on'],$this->using); + } + +// //get the number of records of the table $this->_tablesArray[0] +// public function rowNumber() { +// return $this->recordNumber($this->_tablesArray[0]); +// } + + //method to call the delete query (overriding of the del method of Model.php) + //check the referential integrity + public function del($id = null, $whereClause = null) + { + $this->queryResult = false; + + if (isset($whereClause)) + { + return parent::del(null,$whereClause); + } + else + { + if ($this->_onDelete === 'check' and isset($this->_reference)) + { + if (isset($this->_reference[0]) and isset($this->_reference[1])) + { + if ($this->db->recordExists($this->_reference[0],$this->_reference[1],(int)$id)) + { + $this->notice = $this->_resultString->getString('associate'); + $this->identifierValue = null; + $this->result = false; + } + else + { + return parent::del((int)$id); + } + } + else + { + throw new Exception('you have forgotten to set \'$this->_reference\' or you have forgotten to set $this->_onDelete = \'nocheck\''); + } + } + else + { + return parent::del((int)$id); + } + } + return false; + } + + //method to obtain one columns from the tables $this->_tablesArray as an associative array + //$valueField: the column that have to be extracted (array_values of the resulting associative array), $keyField: the column that have to play the role of array_keys + public function getFieldArray($valueField,$keyField = null, $groupBy = null, $orderBy = null, $limit = null) { + + $keyField = isset($keyField) ? $keyField : $valueField; + $valueFieldArray = explode(':',$valueField); + $keyFieldArray = explode(':',$keyField); + + $keyFieldTable = $keyFieldArray[0]; + $valueFieldTable = $valueFieldArray[0]; + + $keyFieldName = $keyFieldArray[1]; + $valueFieldName = $valueFieldArray[1]; + + $fields = implode('.',$keyFieldArray) . ',' . implode('.',$valueFieldArray); + + $temp = $this->where; //save the $this->where array + $this->where = array(); + + if (strcmp($keyFieldTable,$valueFieldTable) !== 0) { + throw new Exception("the tables '$valueFieldTable' and '$keyFieldTable' do not match in ".__METHOD__); + } + + if (!in_array($keyFieldTable,$this->_tablesArray)) { + throw new Exception("the table '$keyFieldTable' is not allowed in ".__METHOD__); + } + + $elements = $this->treeQueryElements($keyFieldTable,''); + + $table = $this->db->select($elements['tables'],$fields,$elements['where'],$groupBy,$orderBy,$limit,$elements['on'],$this->using); + $this->where = $temp; + + $returnArray = array(); + foreach ($table as $record) { + $returnArray[$record[$keyFieldTable][$keyFieldName]] = $record[$valueFieldTable][$valueFieldName]; + } + + return $returnArray; + + } + +} \ No newline at end of file diff --git a/admin/Library/Model/index.html b/admin/Library/Model/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Library/Model/index.html @@ -0,0 +1 @@ + diff --git a/admin/Library/Params.php b/admin/Library/Params.php new file mode 100644 index 0000000..9ec0ba5 --- /dev/null +++ b/admin/Library/Params.php @@ -0,0 +1,37 @@ +','!=','<=','>=','in(','not in('); + + //is the mbstring extension enabled? + public static $mbStringLoaded = false; + +} \ No newline at end of file diff --git a/admin/Library/Popup.php b/admin/Library/Popup.php new file mode 100755 index 0000000..55ea7f5 --- /dev/null +++ b/admin/Library/Popup.php @@ -0,0 +1,15 @@ +'.__METHOD__.': function '.$func. ' does not exists'); + } + return isset($_GET[$name]) ? call_user_func($func,$_GET[$name]) : $default; + } + + public function post($name, $default = null, $func = 'none') + { + if (!function_exists($func)) + { + throw new Exception('Error in '.__METHOD__.': function '.$func. ' does not exists'); + } + return isset($_POST[$name]) ? call_user_func($func,$_POST[$name]) : $default; + } + + public function cookie($name, $default = null, $func = 'none') + { + if (!function_exists($func)) + { + throw new Exception('Error in '.__METHOD__.': function '.$func. ' does not exists'); + } + return isset($_COOKIE[$name]) ? call_user_func($func,$_COOKIE[$name]) : $default; + } + +} \ No newline at end of file diff --git a/admin/Library/Scaffold.php b/admin/Library/Scaffold.php new file mode 100755 index 0000000..2ac3fa5 --- /dev/null +++ b/admin/Library/Scaffold.php @@ -0,0 +1,272 @@ +HTML,..) + + public $mainMenu = null; //the reference to the MenuHelper object + public $pageList = null; //the reference to the PageDivisionHelper object + public $itemList = null; //the reference to the ListHelper object + public $popupMenu = null; //the reference to the PopupHelper object + + public $form = null; //the reference to the form object + public $entries = null; //the entries of the form (string having entries separated by comma) + public $values = array(); //the values inserted in the form (taken from the table if $this->queryType === 'update' or if an error occured during the databse query, otherwise taken from the $_POST array) + + //the list of fields of the select query + public $fields = null; + + public function __construct($type,$controller,$model,$viewArgs,$params = null) { + + $this->_type = $type; + $this->_controller = $controller; + $this->model = $model; + $this->viewArgs = $viewArgs; + + $autoParams = array( + 'mainAction' => 'main', + 'modifyAction' => 'form/update', + 'associateAction' => 'associate', + 'panelController' => 'panel', + 'pageList' => true, + 'pageVariable' => 'page', + 'recordPerPage' => 10, + 'mainMenu' => 'panel,add', + 'formMenu' => 'panel,back', + 'postSubmitValue' => 'Save', + 'popup' => false, + 'popupType' => 'exclusive' + ); + + //set the $this->scaffold->params array + if (is_array($params)) { + foreach ($params as $key => $value) { + $autoParams[$key] = $value; + } + } + $this->params = $autoParams; + + } + + //ad some clauses to the select query + //whereArray = array ($table_field => $value) + public function appendWhereQueryClause($whereArray) + { + $this->model->appendWhereQueryClause($whereArray); + } + + //set clauses to the select query + //whereArray = array ($table_field => $value) + public function setWhereQueryClause($whereArray) + { + $this->model->setWhereQueryClause($whereArray); + } + + //initialize the main scaffold (ListHelper) + //$recordList: field of the table to show, $primaryKey: the key of the table + public function loadMain($recordList,$primaryKey,$theme = 'edit,del') + { + $this->_primaryKey = $primaryKey; + + $recordListArray = explode(',',$recordList); + foreach ($recordListArray as $record) { + $this->itemList->addItem("simpleText",";$record;"); + } + + $themeArray = explode(',',$theme); + + foreach ($themeArray as $el) + { + switch ($el) + { + case 'moveup': + $this->itemList->addItem('moveupForm',$this->_controller.'/'.$this->params['mainAction'],$primaryKey); + break; + case 'movedown': + $this->itemList->addItem('movedownForm',$this->_controller.'/'.$this->params['mainAction'],$primaryKey); + break; + case 'link': + $this->itemList->addItem('associateForm',$this->_controller.'/'.$this->params['associateAction'],$primaryKey); + break; + case 'edit': + $this->itemList->addItem('editForm',$this->_controller.'/'.$this->params['modifyAction'],$primaryKey); + break; + case 'del': + $this->itemList->addItem('delForm',$this->_controller.'/'.$this->params['mainAction'],$primaryKey); + break; + } + } + + } + + //initialize the form + //$queryType = insert/update + //$action: the action of the form (controller/action/queryString) + public function loadForm($queryType,$action) + { + $this->queryType = $queryType; + $submitName = $this->model->getSubmitName($queryType); + $value = $this->params['postSubmitValue']; + $viewStatus = Url::createUrl(array_values($this->viewArgs)); + $this->model->setForm($action.$viewStatus,array($submitName => $value),'POST'); + $this->form = $this->model->form; + } + + //function to obtain the values to use in the form + //$func = function to validate the values + //$id = the id of the record (used if $_POST[$this->m[$this->model]->identifierName] is not present) + public function getFormValues($func = 'sanitizeHtml',$id = null,$defaultValues = array(),$functionsIfFromDb = array()) + { + if ($this->_type === 'form') + { + $this->values = $this->model->getFormValues($this->queryType,$func,$id,$defaultValues,$functionsIfFromDb); + } + } + + //set the head of the table + //$columnsName: name of the columns. It has to be a comma-separated list of strings + public function setHead($columnsName) + { + $this->itemList->setHead($columnsName); + } + + //method to set the type of the entries of the form + //$entries: string containing the list of the entries where each entry is separated by comma: entry1,entry2,entry3 + //$entryType: associative array that describes the entries of the form. The key is the entry name while the value is the entry type (textarea,inputText,etc) + public function setFormEntries($entries = 'model',$entryType = array(),$optionsArray = array()) + { + if ($this->_type === 'form') + { + if ($entries === 'model') + { + $this->entries = $this->model->fields; + if ($this->queryType === 'update') + { + $this->entries .= ','. $this->model->identifierName; + } + } + else + { + $this->entries = null; + } + $entriesArray = explode(',',$this->entries); + if (isset($this->form)) + { + foreach ($entriesArray as $entry) + { + $type = isset($entryType[$entry]) ? $entryType[$entry] : 'InputText'; + $options = isset($optionsArray[$entry]) ? $optionsArray[$entry] : null; + $this->form->setEntry($entry,$type,$options); + } + if ($this->queryType === 'update') + { + $this->form->setEntry($this->model->identifierName,'Hidden'); + } + } + else + { + throw new Exception('form object has not been initialized. Call the scaffold->loadForm method before'); + } + } + } + + //add an item to the list of items + public function addItem($type, $action = '', $field = '', $name = '') { + if ($this->_type === 'main') { + $this->itemList->addItem($type, $action, $field, $name); + } + } + + //update the table + public function update($methodsList = '',$id = null) { + $this->model->updateTable($methodsList,$id); + } + + //method to create the HTML of the scaffold + //$values: the values to insert in the from entries + public function render($values = null,$subset = null) + { + + if ($this->_type === 'main') + { + + $recordNumber = $this->model->rowNumber(); + + if (isset($this->viewArgs[$this->params['pageVariable']])) + { + $page = $this->viewArgs[$this->params['pageVariable']]; + } + else + { + $this->params['pageList'] = false; + } + + $recordPerPage = $this->params['recordPerPage']; + + if ($this->params['pageList'] === true) + { + $this->model->limit = $this->pageList->getLimit($page,$recordNumber,$recordPerPage); + $this->html['pageList'] = $this->pageList->render((int)($page-2),5); + $position = array($page,$this->pageList->getNumbOfPages()); + } + else + { + $this->model->limit = null; + $this->html['pageList'] = null; + $position = array(1,1); + } + + $values = $this->model->getTable($this->fields); + + $primaryKey = $this->_primaryKey; + + //pass the variable position + $this->itemList->position = $position; + $this->html['main'] = $this->itemList->render($values); + + $this->html['menu'] = $this->mainMenu->render($this->params['mainMenu']); + + $popupHtml = null; + if ($this->params['popup'] === true) + { + $this->html['popup'] = $this->popupMenu->render(); + $popupHtml = "
        \n".$this->html['popup']."\n
        \n"; + } + + $this->html['all'] = "\n".$this->model->notice."\n $popupHtml \n
        \n".$this->html['main']."\n
        \n"."
        \n
        \n".$this->html['pageList']."
        \n
        \n\n"; + + } + else if ($this->_type === 'form') + { + + $subset = (!isset($subset)) ? $this->entries : $subset; + $values = (!isset($values)) ? $this->values : $values; + $this->html['menu'] = $this->mainMenu->render($this->params['formMenu']); + $this->html['main'] = $this->form->render($values,$subset); + $this->html['all'] = "\n".$this->model->notice."\n
        \n".$this->html['main']."
        \n"; + + } + + return $this->html['all']; + + } + +} \ No newline at end of file diff --git a/admin/Library/Strings/Functions.php b/admin/Library/Strings/Functions.php new file mode 100644 index 0000000..eabc0d8 --- /dev/null +++ b/admin/Library/Strings/Functions.php @@ -0,0 +1,30 @@ +controller = $controller; + $this->baseUrl = MOD_REWRITE_MODULE === true ? '/admin' : '/admin/index.php'; + $this->baseUrlSrc = '/admin'; + } + + + public function set($values) + { + $this->_data = $values; + } + + public function append($values) + { + $this->_data = array_merge($this->_data,$values); + } + + //clean the $this->viewFiles array + public function clean() { + $this->_viewFiles = array(); + $this->_lastView = null; + } + + public function load($fileName,$option = 'none') { + if ((strcmp($option,'last') !== 0) and (strcmp($option,'none') !== 0)) { + throw new Exception('"'.$option. '" argument not allowed in '.__METHOD__.' method'); + } + if ($option === 'last') { + $this->_lastView = $fileName; + } else { + $this->_viewFiles[] = $fileName; + } + } + + + public function render() { + extract($this->_data); + + foreach ($this->_viewFiles as $file) { + if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . ucwords($this->controller) . DS . $file . '.php')) { + include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . ucwords($this->controller) . DS . $file . '.php'); + } else { + include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . $file . '.php'); + } + } + + if (isset($this->_lastView)) { + if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . ucwords($this->controller) . DS . $this->_lastView . '.php')) { + include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . ucwords($this->controller) . DS . $this->_lastView . '.php'); + } else { + include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . $this->_lastView . '.php'); + } + } + + } + +} diff --git a/admin/Library/Url.php b/admin/Library/Url.php new file mode 100755 index 0000000..54d6e3e --- /dev/null +++ b/admin/Library/Url.php @@ -0,0 +1,36 @@ +_params = $params; + + $this->_sessionsTable = $params['sessionsTable']; + $this->_usersTable = $params['usersTable']; + $this->_groupsTable = $params['groupsTable']; + $this->_manyToManyTable = $params['manyToManyTable']; + $this->_accessesTable = $params['accessesTable']; + $this->_login = Url::getRoot(null) . $params['users_controller'] . '/' . $params['users_login_action'] ; + $this->_main = Url::getRoot(null) . $params['panel_controller'] . '/' . $params['panel_main_action'] ; + $this->_retype = Url::getRoot(null) . $params['users_controller'] . '/' . $params['hijacking_action'] ; + $this->_db = Factory_Db::getInstance($params['database_type']); + } + + private function acquireCookie() { #obtain cookie + #cookie + $this->uid = NULL; + global $_COOKIE; + $this->uid = isset($_COOKIE[$this->_params['cookie_name']]) ? sanitizeAlnum($_COOKIE[$this->_params['cookie_name']]) : null; + } + + private function cleanSessions() + { + #cancello le sessioni scadute + $row = $this->_db->select($this->_sessionsTable,'creation_date',"uid='".$this->uid."'"); + if ($row) + { + if ($row[0][$this->_sessionsTable]['creation_date']) + { + if($row[0][$this->_sessionsTable]['creation_date'] + $this->_params['session_expire'] <= time()) + { + setcookie($this->_params['cookie_name'],'',time()-3600,$this->_params['cookie_path']); + } + } + } + $this->_db->del($this->_sessionsTable,"creation_date + " . $this->_params['session_expire'] . " <= ".time()); + } + + public function checkStatus() + { #controlla se l'utente è già loggato + $this->acquireCookie(); #ottengo il cookie + $this->cleanSessions(); #elimino le sessioni vecchie + $row=$this->_db->select($this->_usersTable.','.$this->_sessionsTable,$this->_usersTable.'.id_user,username,token,user_agent',$this->_usersTable.".id_user=".$this->_sessionsTable.".id_user and uid='".$this->uid."'"); + if (count($row) === 1 and $row !== false) + { + $this->status['user']=$row[0][$this->_usersTable]['username']; + $this->status['status']='logged'; + $this->status['id_user']=$row[0][$this->_usersTable]['id_user']; + $this->status['user_agent'] = $row[0][$this->_sessionsTable]['user_agent']; + $this->status['token'] = $row[0][$this->_sessionsTable]['token']; + $this->obtainGroups(); + } else { + $this->status['user']='sconosciuto'; + $this->status['status']='not-logged'; + $this->status['id_user']=''; + $this->status['user_agent']=''; + $this->status['token'] = ''; + $this->status['groups'] = array(); + } + } + + public function redirect($val,$time = 3) { #fa il redirect dell'utente + if ($val === 'logged') { + header('Refresh: '.$time.';url='.$this->_main); + if ($time !== 0) echo "You are already logged, ".$this->status['user'].".."; + } else if ($val === 'accepted') { + header('Refresh: '.$time.';url='.$this->_main); + if ($time !== 0) echo "Hi ".$this->status['user'].".."; + } else if ($val === 'login-error') { + header('Refresh: '.$time.';url='.$this->_login); + if ($time !== 0) echo "Wrong username or password..."; + } else if ($val === 'not-logged') { + header('Refresh: '.$time.';url='.$this->_login); + if ($time !== 0) echo "Limited access... sorry"; + } else if ($val === 'not-authorized') { + header('Refresh: '.$time.';url='.$this->_main); + if ($time !== 0) echo "Your account doesn't allow you to manage this page.. sorry!"; + } else if ($val === 'stolen') { + header('Refresh: '.$time.';url='.$this->_login); + if ($time !== 0) echo "Your session have been probably intercepted! Please login another time."; + } else if ($val === 'retype') { + header('Refresh: '.$time.';url='.$this->_retype); + if ($time !== 0) echo "Your session have been probably intercepted. Please type your password another time."; + } else if ($val === 'wait') { + header('Refresh: '.$time.';url='.$this->_login); + if ($time !== 0) echo "You have to wait ".$this->_params['time_after_failure']." seconds before you can try to login another time"; + } + exit; + } + + //obtain the group of the user + private function obtainGroups() + { + $tables = $this->_usersTable.','.$this->_groupsTable.','.$this->_manyToManyTable; + $fields = $this->_groupsTable.'.name'; + $where = $this->_usersTable.'.id_user='.$this->_manyToManyTable.'.id_user and '.$this->_groupsTable.'.id_group='.$this->_manyToManyTable.'.id_group and '.$this->_usersTable.'.id_user='.$this->status['id_user']; + $groups = $this->_db->select($tables,$fields,$where); + $this->status['groups'] = array(); + foreach ($groups as $group) + { + $this->status['groups'][] = $group[$this->_groupsTable]['name']; + } + } + + //$groups: string with name of groups separated by comma; ex: base,root,users + public function checkAccess($groups) + { + $groupsArray = explode (',',$groups); + foreach ($this->status['groups'] as $group) + { + if (in_array($group,$groupsArray)) return true; + } + return false; + } + + //check that the user is logged and, if present, check the group of the user (if loggeg) + //$groups: comma-separated list of groups whose users can access the page + //$time: time before the redirect is carried out + public function check($groups = null, $time = 3) + { + $this->checkStatus(); + if (strcmp($this->status['status'],'not-logged') === 0) + { + $this->redirect('not-logged',$time); + } + else if (strcmp($this->status['status'],'logged') === 0) + { + if ($this->_params['hijacking_check']) + { + if (!$this->checkHijacking()) + { + if ($this->_params['on_hijacking_event'] === 'forceout') + { + $this->logout(); + $this->redirect('stolen',$time); + } + else if ($this->_params['on_hijacking_event'] === 'redirect') + { + $this->redirect('retype',$time); + } + } + } +// $this->obtainGroups(); + if (isset($groups)) + { + $permission = $this->checkAccess($groups); + if (!$permission) $this->redirect('not-authorized',$time); + } + } + } + + //check if someone have stolen your uid + private function checkHijacking() + { + if (array_key_exists('user_agent',$this->status)) + { + if (strcmp($this->status['user_agent'],'') !== 0) + { + if (strcmp($this->status['user_agent'],getUserAgent()) === 0) + { + return true; + } + } + } + return false; + } + + //check CSRF + //$token: token to check + public function checkCSRF($token) + { + if (strcmp($this->status['token'],'') !== 0) + { + if (strcmp($this->status['token'],$token) === 0) + { + return true; + } + } + return false; + } + + //get an array containing all the users currently logged + public function getUsersLogged() + { + $usersLogged = array(); + $data=$this->_db->select($this->_usersTable.','.$this->_sessionsTable,'DISTINCT '.$this->_usersTable.'.username',$this->_usersTable.".id_user=".$this->_sessionsTable.".id_user"); + foreach ($data as $row) + { + $usersLogged[] = $row[$this->_usersTable]['username']; + } + return $usersLogged; + } + + //get the password of the current user + public function getPassword() + { + $row=$this->_db->select($this->_usersTable,'password',"id_user=".$this->status['id_user']); + if ($row !== false) + { + return $row[0][$this->_usersTable]['password']; + } + else + { + return false; + } + } + + private function checkPassword($user,$pwd) { #check username and password + + if (!in_array($this->_params['password_hash'],Params::$allowedHashFunc)) + { + throw new Exception('Error in '.__METHOD__.' : the hash func has to be '.implode(' or ',Params::$allowedHashFunc)); + } + //calculate the hash of the password + $pwd = call_user_func($this->_params['password_hash'],$pwd); + + $row=$this->_db->select($this->_usersTable,$this->_usersTable.'.id_user,username,password',"username=\"".$user."\" and password=\"".$pwd."\" and has_confirmed=0"); + if (count($row) === 1 and $row !== false) + { + $this->status['user'] = $row[0][$this->_usersTable]['username']; + $this->status['status'] = 'accepted'; + $this->status['id_user'] = $row[0][$this->_usersTable]['id_user']; + } + else + { + $this->status['user'] = 'unknown'; + $this->status['status'] = 'login-error'; + $this->status['id_user'] = ''; + if ($this->_db->recordExists($this->_usersTable,'username',$user)) + { + $this->_db->update($this->_usersTable,'last_failure',array(time()),'username="'.$user.'"'); + } + } + } + + //check that enough time is passed since the last failure of the user + private function checkLastFailure($user) + { + //current time + $now = time(); + //max time + $max = $now - $this->_params['time_after_failure']; + $data = $this->_db->select($this->_usersTable,'last_failure','username="'.$user.'"'); + if (count($data) === 1 and $data !== false) + { + if ($data[0][$this->_usersTable]['last_failure'] < $max) + { + return true; + } + return false; + } + else + { + return true; + } + } + + public function login($user,$pwd) + { + $user = sanitizeAll($user); + $this->checkStatus(); + //check if already logged + if ($this->status['status'] === 'logged') + { +// $this->redirect('logged'); + return 'logged'; + } + else + { + if ($this->checkLastFailure($user)) + { + $this->checkPassword($user,$pwd); + if ($this->status['status']==='accepted') + { + $this->uid = md5(randString(10).uniqid(mt_rand(),true)); + $this->_token = md5(randString(12)); + $userAgent = getUserAgent(); + $this->_db->insert($this->_sessionsTable,'id_user,uid,token,creation_date,user_agent',array($this->status['id_user'],$this->uid,$this->_token,time(),$userAgent)); + setcookie($this->_params['cookie_name'],$this->uid,0,$this->_params['cookie_path']); #magic cookie + $this->updateAccesses(); + + $this->_db->del($this->_sessionsTable,'id_user='.$this->status['id_user'].' AND uid != "'.$this->uid.'"'); + +// $this->redirect('accepted'); + return 'accepted'; + } + else if ($this->status['status']==='login-error') + { +// $this->redirect('login-error'); + return 'login-error'; + } + } + else + { +// $this->redirect('wait'); + return 'wait'; + } + } +// $this->redirect('login-error'); + return 'login-error'; + } + + private function updateAccesses() + { + $ip=getIp(); #ip + $date=date('d'). "-" . date('m') . "-" . date('Y'); #date + $ora=date('H') . ":" . date('i'); #time + $values=array($ip,$date,$ora,$this->status['user']); + $res=$this->_db->insert($this->_accessesTable,'ip,data,ora,username',$values); + } + + //force out an user + //$id: the id of the user + public function forceOut($id) + { + $id = (int)$id; + if ($this->_db->del($this->_sessionsTable,'id_user='.$id)) + { + return true; + } + return false; + } + + public function logout() + { + $this->checkStatus(); + if ($this->status['status'] === 'logged') + { + setcookie ($this->_params['cookie_name'], "", time() - 3600,$this->_params['cookie_path']); + if ($this->_db->del($this->_sessionsTable,'id_user='.$this->status['id_user'])) + { + return 'was-logged'; + } + else + { + return 'error'; + } + } + else + { + return 'not-logged'; + } + } + +} \ No newline at end of file diff --git a/admin/Library/Users/index.html b/admin/Library/Users/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Library/Users/index.html @@ -0,0 +1 @@ + diff --git a/admin/Library/index.html b/admin/Library/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Library/index.html @@ -0,0 +1 @@ + diff --git a/admin/License.txt b/admin/License.txt new file mode 100755 index 0000000..404896a --- /dev/null +++ b/admin/License.txt @@ -0,0 +1,201 @@ +GNU GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright © 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +Preamble + +The GNU General Public License is a free, copyleft license for software and other kinds of works. + +The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. + +Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. + +Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and modification follow. + +TERMS AND CONDITIONS + +0. Definitions. + +“This License” refers to version 3 of the GNU General Public License. +“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. +“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. +To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. +A “covered work” means either the unmodified Program or a work based on the Program. +To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. +To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. +An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. + +1. Source Code. + +The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. +A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. +The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. +The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. +The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. +The Corresponding Source for a work in source code form is that same work. + +2. Basic Permissions. + +All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. +You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. +Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. + +3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. +When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. + +4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. +You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. + +5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: +a) The work must carry prominent notices stating that you modified it, and giving a relevant date. +b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. +c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. +d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. +A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. + +6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: +a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. +b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. +c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. +d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. +e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. +A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. +A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. +“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. +If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). +The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. +Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. + +7. Additional Terms. + +“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. +When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. +Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: +a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or +b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or +c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or +d) Limiting the use for publicity purposes of names of licensors or authors of the material; or +e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or +f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. +All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. +If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. +Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. + +8. Termination. + +You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). +However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. +Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. +Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. + +9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. + +10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. +An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. +You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. + +11. Patents. + +A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. +A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. +Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. +In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. +If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. +If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. +A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. +Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. + +12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. + +13. Use with the GNU Affero General Public License. + +Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. + +14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. +Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. +If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. +Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. + +15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. +If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. + +You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . + +The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . + + diff --git a/admin/Logs/index.html b/admin/Logs/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Logs/index.html @@ -0,0 +1 @@ + diff --git a/admin/Public/Css/comune.css b/admin/Public/Css/comune.css new file mode 100644 index 0000000..b6ecdd3 --- /dev/null +++ b/admin/Public/Css/comune.css @@ -0,0 +1,130 @@ +/*parte di login.css*/ + +/*controller:users*/ +/*action:login*/ +.login_box { + margin:10px 10px 20px 10px; +} +.login_box input { + border:1px solid orange; +} + +/*action:logout*/ +.logout_box { + margin:10px 10px 20px 10px; +} + +.logout_button a{ + margin:20px; + padding:10px; + background:orange; + border:1px solid black; +/* width:30px; */ +} + + +/*parte di scaffold.css*/ + +td { + font-size: 12px; +} + +td.editForm, td.delForm, td.associateForm, td.moveupForm, td.movedownForm { + width:3%; +} + +td.editForm input, td.delForm input, td.associateForm input, td.moveupForm input, td.movedownForm input +{ + height:30px; +} + +/*alert string*/ +.alert { + font:bold 12px/1.5 Verdana,arial; + padding:5px; + margin:5px 5px 15px 5px; + background:TOMATO; + border-top:2px solid MAROON; + border-bottom:2px solid MAROON; + color:MAROON; +} + +/*executed operation string*/ +.executed { + font:bold 12px/1.5 Verdana,arial; + padding:5px; + margin:5px 5px 15px 5px; + background:#E0FFFF; + border-top:2px solid #ADD8E6; + border-bottom:2px solid #ADD8E6; + color:#4169E1; +} + +/*action:main*/ +tr.listRow { + background:#E6E6FA; +} + +tr.listHead { + font-weight: bold; + background:#d1deed; + border:1px solid #4169E1; + border-bottom:1px solid #4169E1; +} + +tr.listHead td { +/* font-weight: bold; */ +/* background:#d1deed; */ + border-top:1px solid #4169E1; + border-bottom:1px solid #4169E1; +} + +.recordsBox { + margin:10px 0px; +} + +.recordsBox table { + width:100%; +} + +.listItemForm { + margin:0px; +} + +a.linkItem { +/* background:red; */ + font:bold 12px/1 Verdana,arial; +} + +/*controller:panel +/*action:main*/ +.main_box { + padding:50px 20px; + width:700px; + height:250px; +} +.top_color { + text-align:center; + width:160px; + height:35px; + margin:0; + padding:0; +} +.bottom_color { + background:lavender; + text-align:center; + width:160px; + margin:0; + padding:5px 0; +} + + + +/*box che dice dove ti trovi, in che controller*/ +.controller_info_header +{ + background:#E6E6FA; + padding:5px; + font: bold 16px/1.75em sans-serif; + border-bottom:1px solid #4169E1; +} \ No newline at end of file diff --git a/admin/Public/Css/explorer.css b/admin/Public/Css/explorer.css new file mode 100644 index 0000000..1adb80b --- /dev/null +++ b/admin/Public/Css/explorer.css @@ -0,0 +1,91 @@ +ul#menuBlock li { + height:24px; +} + +ul#menuBlock li ul { + top:25px; +} + +ul#menuBlock li ul li { + margin-top:-3px; +} + +.view_page_top_box +{ + height:32px; +} + +.update_submit_class +{ + padding:7px; +} + +.view_page_update_button +{ + width:40px; +} + +/*div that contains the update form*/ +.view_page_update_button +{ + margin-top:2px; + margin-right:5px; +} +.update_submit_class +{ + padding:2px; + width:30px; +} +.notebooks_insert_form +{ + margin-right:-30px; +} + +.notebook_insert_link +{ + margin:0px 5px 0px 5px; +} +.top_left_images_help +{ + height:22px; + margin-bottom:-3px; +} +ul#menuBlock li { + height:26px; +} +ul#menuBlock li ul { + left:-6px; +} +.user_logged +{ + margin-left:62px; +} +.viewall_popup_menu_status_item +{ + padding-left:10px; +} +.copyright_notice_box +{ + width:140px; +} +.language_links_box ul +{ + width:100%; + margin:-1px 5px 30px 5px; +} +.language_links_box ul li +{ + margin-bottom:5px; +} +.language_links_box ul li a +{ + height:30px; +} +.talk_numb_ext +{ + margin-top:-30px; +} +.talk_numb_ext a +{ + margin-bottom:0px; +} \ No newline at end of file diff --git a/admin/Public/Css/files.css b/admin/Public/Css/files.css new file mode 100644 index 0000000..e98e681 --- /dev/null +++ b/admin/Public/Css/files.css @@ -0,0 +1,113 @@ +form +{ + padding:0px; + margin:0px; +} + +/*external box*/ +.EGexternalBox +{ + height:500px; + overflow:scroll; +} + +/*top box containing the forms: upload,create folder,got to folder*/ +.EGformBox +{ + padding-left:10px; + padding-right:10px; + height:35px; + margin:5px; + border-top:1px solid #DC143C; + border-bottom:1px solid #DC143C; + background:#FF7F50; +} + +/*item box: folder*/ +.EGfolderBox +{ + padding-left:10px; + padding-right:10px; + height:55px; + margin:5px; +/* border-top:1px solid black; */ + background:#E6E6FA; +} + +/*item box: file*/ +.EGfileBox +{ + padding-left:10px; + padding-right:10px; + height:55px; + margin:5px; +/* border-top:1px solid black; */ + background:#E0FFFF; +} + +/*back box*/ +.EGbackBox +{ + padding-left:10px; + padding-right:10px; + height:50px; + margin:5px; + border-top:1px solid #6495ED; + border-bottom:1px solid #6495ED; + background:#ADD8E6; +} + +/*folder image and back image*/ +.EGfolderImage, .EGbackImage, .EGfileImage +{ + margin:3px; +/* padding:2px; */ + width:55px; +/* background:red; */ + float:left; +} + +/*box containing the form to create a new folder*/ +.EGcreateFolderBox +{ + margin:5px; + width:300px; + float:left; +} + +/*box containing the form to upload a file*/ +.EGuploadFileBox +{ + margin:5px; + margin-left:50px; + width:400px; + float:left; +} + +.EGcreateFolderBox input:text +{ + width:150px; +} + +/*name of the folder*/ +.EGfolderName, .EGfileName, .EGcurrentDirectory +{ + width:500px; + float:left; + font:normal 12px/1 Verdana,arial; + margin:10px; +} + +/*del image*/ +.EGfolderDelImage, .EGfileDelImage +{ + float:right; + margin:2px; +} + +/*preview of the image in upload file*/ +#imagePreview +{ + margin:10px; + height:120px; +} diff --git a/admin/Public/Css/form.css b/admin/Public/Css/form.css new file mode 100755 index 0000000..911af19 --- /dev/null +++ b/admin/Public/Css/form.css @@ -0,0 +1,31 @@ +.entryLabel { + display:block; + font:bold 12px/1em Verdana,arial; + padding:3px 0px; + margin-top:10px; + background:#E6E6FA; + width:500px; +} + +.formEntry textarea{ + width:500px; + height:300px; +} + +.formEntry input,.formEntry textarea { + width:500px; + padding:3px; + border: 1px solid #4169E1; +} + +.formClass { + margin:10px; +} + +.inputEntry { + margin:10px 0px; +} + +.formEntry #abstract { + height:100px; +} \ No newline at end of file diff --git a/admin/Public/Css/index.html b/admin/Public/Css/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Public/Css/index.html @@ -0,0 +1 @@ + diff --git a/admin/Public/Css/login.css b/admin/Public/Css/login.css new file mode 100644 index 0000000..7c42964 --- /dev/null +++ b/admin/Public/Css/login.css @@ -0,0 +1,21 @@ +/*controller:users*/ +/*action:login*/ +.login_box { + margin:10px 10px 20px 10px; +} +.login_box input { + border:1px solid orange; +} + +/*action:logout*/ +.logout_box { + margin:10px 10px 20px 10px; +} + +.logout_button a{ + margin:20px; + padding:10px; + background:orange; + border:1px solid black; +/* width:30px; */ +} \ No newline at end of file diff --git a/admin/Public/Css/mainmenu.css b/admin/Public/Css/mainmenu.css new file mode 100755 index 0000000..615c8bf --- /dev/null +++ b/admin/Public/Css/mainmenu.css @@ -0,0 +1,78 @@ +/*stile header di ogni view*/ +.mainMenu { + height:50px; +/* border-top:1px solid #ADD8E6; */ + border-bottom:1px solid #4169E1; + padding-top:6px; + margin-bottom:10px; + background:#d1deed; +} +.mainMenuItem { + float:left; + width:60px; + height:40px; + margin-left:5px; + border:1px outset #708090; + background:#4169E1; + text-align:center; +} + +.mainMenuItem a { +/* margin:8px 5px 1px 10px; */ + display:block; + margin-top:12px; + color:#B0E0E6; + font:bold 14px/1 Verdana,arial; +} + +.verticalMenu { + margin-bottom:30px; + margin-left:10px; +/* text-align:right;*/ +} + +ul#menuBlock { +/* float:right; */ + float:left; + margin:0px; + padding:0px; + list-style:none; + height:24px; +} + +ul#menuBlock li { + position:relative; + display:block; + float:left; + width:100px; + border:1px outset #D3D3D3; + height:21px; +# height:24px; + text-align:center; + background:#E6E6FA; + padding-top:3px; +} + +ul#menuBlock li a { + color:#696969; + font: bold 12px/1 Verdana,arial; +} + +ul#menuBlock li ul { + margin:0px; + padding:0px; + list-style:none; + position:absolute; + top:24px; +# top:25px; + left:-1px; + display:none; +} + +ul#menuBlock li ul li { +# margin-top:-3px; +} + +/*ul#menuBlock li:hover ul{ + display:block; +}*/ \ No newline at end of file diff --git a/admin/Public/Css/pagelist.css b/admin/Public/Css/pagelist.css new file mode 100644 index 0000000..93c8454 --- /dev/null +++ b/admin/Public/Css/pagelist.css @@ -0,0 +1,29 @@ +/*page division*/ +.pageList { + text-align:left; + font:normal 14px/1 Verdana,arial; + padding:10px; +} + +div.pageList a { + padding:5px 10px; + border:1px outset #708090; + color:#B0E0E6; + background:#4169E1; + margin-right:5px; +} + +/*view footer*/ +.viewFooter { + height:50px; + border-top:1px solid #4169E1; + padding-top:6px; + margin-bottom:10px; + background:#d1deed; +} + +div.pageList a.currentPage +{ + font-weight:bold; + background:#0000CD; +} \ No newline at end of file diff --git a/admin/Public/Css/panel.css b/admin/Public/Css/panel.css new file mode 100644 index 0000000..8b9f9a9 --- /dev/null +++ b/admin/Public/Css/panel.css @@ -0,0 +1,74 @@ +ul { + list-style-type: none; +} + +div.mainPanel { + +} + +/*logout button*/ +.logoutButton +{ + float:left; + width:70px; + height:40px; + margin-left:5px; + border:1px outset #708090; + background:#4169E1; + text-align:center; +} +.logoutButton a +{ + display:block; + margin-top:13px; + color:#B0E0E6; + font:bold 12px/1 Verdana,arial; +} + +/*list of application in the panel main action*/ +.panelApplicationList +{ + padding:0px; +} +.panelApplicationList li +{ + display:block; + width:200px; + height:30px; + border:1px outset #708090; + margin:5px; + background:#4169E1; + padding-top:9px; +} + +.panelApplicationList li a +{ + margin:5px; + font: bold 14px/1 Verdana,arial; + color:#B0E0E6; +} + +/*list of groups an user is inserted within*/ +.groupsList +{ + margin:20px 5px 5px 5px; + font:normal 14px/1 Verdana,arial; +} +.groupsList li +{ + margin:5px 0px; + padding:0px; + font:bold 14px/1 Verdana,arial; +} +.groupsList ul +{ + padding:10px; +} + +/*list of logged users in panel*/ +.usersLoggedList +{ + margin:5px; + text-align:right; + font:normal 14px/1 Verdana,arial; +} \ No newline at end of file diff --git a/admin/Public/Css/popupmenu.css b/admin/Public/Css/popupmenu.css new file mode 100755 index 0000000..66a202e --- /dev/null +++ b/admin/Public/Css/popupmenu.css @@ -0,0 +1,49 @@ +.verticalMenu { + margin-bottom:50px; + margin-left:10px; +/* text-align:right;*/ +} + +ul#menuBlock { +/* float:right; */ + float:left; + margin:0px; + padding:0px; + list-style:none; + height:24px; +} + +ul#menuBlock li { + position:relative; + display:block; + float:left; + width:150px; + border:1px outset #D3D3D3; + height:21px; + text-align:center; + background:#E6E6FA; + padding-top:5px; + padding-bottom:-2px; +} + +ul#menuBlock li a { + color:#696969; + font: bold 12px/1 Verdana,arial; +} + +ul#menuBlock li ul { + margin:0px; + padding:0px; + list-style:none; + position:absolute; + top:24px; + left:-1px; + display:none; +} + +ul#menuBlock li ul li { +} + +/*ul#menuBlock li:hover ul{ + display:block; +}*/ \ No newline at end of file diff --git a/admin/Public/Css/scaffold.css b/admin/Public/Css/scaffold.css new file mode 100755 index 0000000..8cc7529 --- /dev/null +++ b/admin/Public/Css/scaffold.css @@ -0,0 +1,105 @@ +html, body{margin: 0;padding:0} + +body{ + font-family: Verdana,arial,sans-serif; + font-size: 11px; + text-align: center; +/* background: #93045a; */ +} + +td { + font-size: 12px; +} + +img { + border:none; +} + +td.editForm, td.delForm, td.associateForm, td.moveupForm, td.movedownForm { + width:3%; +} + +td.editForm input, td.delForm input, td.associateForm input, td.moveupForm input, td.movedownForm input +{ + height:30px; +} + +/*alert string*/ +.alert { + font:bold 12px/1.5 Verdana,arial; + padding:5px; + margin:5px 5px 15px 5px; + background:TOMATO; + border-top:2px solid MAROON; + border-bottom:2px solid MAROON; + color:MAROON; +} + +/*executed operation string*/ +.executed { + font:bold 12px/1.5 Verdana,arial; + padding:5px; + margin:5px 5px 15px 5px; + background:#E0FFFF; + border-top:2px solid #ADD8E6; + border-bottom:2px solid #ADD8E6; + color:#4169E1; +} + +/*action:main*/ +tr.listRow { + background:#E6E6FA; +} + +tr.listHead { + font-weight: bold; + background:#d1deed; + border:1px solid #4169E1; + border-bottom:1px solid #4169E1; +} + +tr.listHead td { +/* font-weight: bold; */ +/* background:#d1deed; */ + border-top:1px solid #4169E1; + border-bottom:1px solid #4169E1; +} + +.recordsBox { + margin:10px 0px; +} + +.recordsBox table { + width:100%; +} + +.listItemForm { + margin:0px; +} + +a.linkItem { +/* background:red; */ + font:bold 12px/1 Verdana,arial; +} + +/*controller:panel +/*action:main*/ +.main_box { + padding:50px 20px; + width:700px; + height:250px; +} +.top_color { + text-align:center; + width:160px; + height:35px; + margin:0; + padding:0; +} +.bottom_color { + background:lavender; + text-align:center; + width:160px; + margin:0; + padding:5px 0; +} \ No newline at end of file diff --git a/admin/Public/Css/website.css b/admin/Public/Css/website.css new file mode 100755 index 0000000..7a5bda5 --- /dev/null +++ b/admin/Public/Css/website.css @@ -0,0 +1,1414 @@ +/*stili per il layout fisso*/ +html, body +{ + margin: 0; + padding:0; +} + +body +{ + font:normal 15px/1.3 sans-serif,Verdana,arial; + text-align: center; + background:#ffffff; +} + +img +{ + border:0px; +} + + +div#container +{ + width: 950px; + margin: 0px auto; + text-align: left; + background:white; +} + + +/*stile header grande*/ +div#external_header { + background:#b7f18c; + text-align:center; + height:80px; +} +div#header { + background:#b7f18c; + width: 950px; + margin: 0px auto; + text-align:left; + height:80px; +} + +div#top_menu_external +{ + text-align:center; + background:#015512; + margin-bottom:50px; +/* border-top:1px solid #4169E1; */ +/* border-bottom:1px solid #4169E1; */ +} + +div#top_menu +{ + font:bold 15px sans-serif,Verdana,arial; + text-align:left; + padding:0.4em 0px; + background:#015512; + width: 950px; + margin: 0px auto; +} +#top_menu .currentitem a +{ + background:#DC143C; + color:#FFF; +} + +div#top_menu a +{ + font:bold 16px sans-serif,Verdana,arial; + padding:0.4em 10px; + text-decoration:none; + font-weight:bold; + color:#FFF; +/* border-left:1px solid #4169E1; */ +} +#top_menu a:hover, +#top_menu a:focus, +#top_menu a:active +{ + background:#61c418; +} + +div#top_menu ul +{ + list-style-type: none; + display:inline; + margin:0px; + padding:0px; +} + +div#top_menu li +{ + display:inline; +/* padding:10px; */ +} + + +div#left +{ + width:730px; + float:left; +} + +div#right +{ + width:198px; + float:right; +} + +.login_username_input,.login_password_input +{ + width:150px; +} + +.login_table_box +{ + clear:left; + margin:5px; + margin-bottom:35px; +} +.statistics_ext_box +{ + margin:5px; + margin-bottom:30px; +} +.statistics_int_title +{ + margin:5px 0px 15px 0px; + padding:3px 0px; +/* background-color:#B7F18C; */ + border-bottom:2px solid #DC143C; + font-weight:bold; +} +.statistics_hard_title +{ + margin:5px 0px; + color:#808080; +} +.user_logged +{ + margin-left:55px; + color:black; + font-weight:bold; +} +.login_right_label +{ + font-weight:bold; +} +.login_right_form input +{ + border:1px solid #6495ED; + width:180px; + padding:2px; + margin:3px 0px; +} + +.login_input +{ + width:100px; +} + +.login_form_title +{ + color:black; + +/* padding:10px; */ +/* background:#5c98dc; */ +} + +.login_box +{ + margin-bottom:400px; +} + +.hardware_element +{ + margin:5px; + padding:10px; + background:#c7daef; +/* border-bottom:1px solid #6495ED; */ +} +.hardware_element_link +{ + margin:0px 10px; +} +.notebook_view_title +{ + width:400px; + height:50px; + float:left; + overflow:hidden; +/* background:red; */ + margin:10px 0px 10px 10px; + font:normal 14px/1 sans-serif,Verdana,arial; +} + +.notebook_insert_link +{ +/* border:1px solid black; */ +/* background-color:#c1e3ef; */ + width:200px; +/* background:orange; */ + float:right; + padding:3px 3px 1px 3px; + margin:0px 5px 30px 5px; + text-align:right; + overflow:hidden; + height:38px; +} + +.select_entry +{ +/* width:400px; */ + padding:2px; +/* border:1px solid #6495ED; */ +} +.input_entry, .talk_input_entry +{ + width:400px; + padding:2px; + border:1px solid #6495ED; +} +.textarea_entry, .talk_textarea_entry +{ + width:630px; + height:300px; + padding:2px; + border:1px solid #6495ED; +} +/*.talk_input_entry +{ + border:1px solid #CECECE; +}*/ +.form_entry .talk_textarea_entry +{ + width:400px; + height:200px; + border:1px solid #6495ED; +} +.notebooks_insert_form +{ + width:660px; + margin-left:10px; +} +.notebooks_insert_form .entry_label +{ + display:block; + padding:3px 0px; +/* background:#E6E6FA; */ + width:600px; + font-weight:bold; +} +.form_entry +{ + margin:20px 0px; +} + + +div#footer{ + margin:0px; + color: #000; + height:40px; + background:#b7f18c; + clear:both; +} + +/*div#navigation li{background: url(immagini/tabella1.png) no-repeat left center;}*/ +a.link_menu +{ + font: bold 16px/1.75em Verdana,"Times New Roman",sans-serif; + text-decoration: none; + color:#4169E1; + margin-left:10px; +} + + +/*box contenente i link per tornare nel pannello utente e per sloggarsi*/ +.your_status_box +{ + background:#E6E6FA; + padding:5px; +} + +.login_note +{ + color:#8080a6; + margin:10px; + padding:5px 0px; + border-top:2px solid #8080a6; + border-bottom:2px solid #8080a6; + + font: normal 16px/1.3 sans-serif,Verdana,arial; +} + +/*singolo box contentente un portatile in view all*/ +.notebooks_viewall +{ + clear:both; + clear:right; + margin:40px 0px; + padding:3px; +/* border:2px solid #7dafe7; */ + font: normal 14px/1.5 sans-serif,Verdana,arial; + +} +.model_viewall +{ + margin:40px 10px; +/* background-color:#F7F7F7; */ +/* border:1px solid #CECECE; */ +/* padding:10px; */ +} +.notebook_model +{ +/* background:orange; */ + padding:5px 0px; + margin:0px 5px; + overflow:hidden; + width:100%; +/* margin-bottom:10px; */ + font:normal 14px/1 sans-serif,arial,Verdana; + border-bottom:1px solid #7e0000; +} +.notebook_vendor, .notebook_compatibility, .notebook_kernel, .model_tested_on +{ + margin:5px 0px; +/* background:#eaebec; */ + padding:5px; + width:654px; + overflow:hidden; +/* border-top:2px solid #a4c8f1; */ +} +.inner_label +{ + float:left; + width:300px; +} +.inner_value +{ + float:left; + width:300px; + color:#1f538e; + font-weight:bold; +} +.notebook_description_label +{ +/* background:#B7F18C; */ + padding:5px 0px; + margin:0px 5px; + margin-top:1.5em; +/* margin-bottom:10px; */ + font:bold 14px/1 sans-serif,arial,Verdana; + border-bottom:1px solid #7e0000; +/* border-bottom:1px solid #228B22; */ +} +.notebook_description_value +{ +/* border-top:2px solid #a4c8f1; */ + margin:5px 0px; +/* background:#eaebec; */ + padding:5px 5px; + width:704px; + overflow:hidden; +} +.notebook_view_link +{ + margin-top:10px; +} + + +/*alert string*/ +.alert { + clear:left; + clear:right; + font:bold 12px/1.5 Verdana,arial; + padding:2px; + margin:5px 5px 15px 5px; +/* background:TOMATO; */ +/* border-top:2px solid MAROON; */ +/* border-bottom:2px solid MAROON; */ + color:MAROON; +} + +/*executed operation string*/ +.executed { + font:bold 12px/1.5 Verdana,arial; + padding:5px; + margin:5px 5px 15px 5px; + background:#E0FFFF; + border-top:2px solid #ADD8E6; + border-bottom:2px solid #ADD8E6; + color:#4169E1; +} + +.view_page_top_box +{ + overflow:hidden; + width:664px; +} +/*div that contains the update form*/ +.view_page_update_button +{ + float:right; +} +/*.view_page_update_button input +{ + height:35px; +}*/ +.view_page_update_button form +{ + width:33px; + padding:0px; +} +.view_page_back_button +{ + float:left; + width:50px; +} +/*the update submit button*/ +.update_submit_class +{ + padding:2px; + width:33px; + font:normal 14px/1 sans-serif,Verdana,arial; + cursor:pointer; +} +/*div that contains the link to the history page*/ +.view_page_history_button +{ + float:right; + width:30px; + padding:3px; + margin-left:10px; +/* border:1px solid #a4c8f1; */ +/* height:30px; */ +} +.view_page_history_button a +{ + text-decoration:none; + color:#000; +} + +.page_history +{ + margin:0px; + padding:0px; +} +.page_history_item +{ + list-style-type: none; + padding:5px; + margin:2px; + border-top:1px dashed #a4c8f1; +} +.page_history_current_item +{ + list-style-type: none; + padding:5px; + margin:5px 0px; +/* background:#ADD8E6; */ +} +.history_title +{ + font:normal 14px/1 sans-serif,Verdana; + margin:10px; + padding:3px; +} + +.revision_alert +{ + background:#f1d8d8; + padding:8px; + margin:5px; + margin-bottom:20px; + border-bottom:1px solid #d26262; + border-top:1px solid #d26262; +} + +/*page list in history*/ +.history_page_list, .history_page_list_news { + text-align:left; + font:normal 14px/1 Verdana,arial; + padding:10px; + margin-bottom:15px; +} +.history_page_list_news +{ + background:#C7DAEF; + margin:5px; +} +div.history_page_list a, div.history_page_list_news a { + padding:5px 10px; + border-left:1px outset #000; +/* border:1px outset #708090; */ +/* color:#B0E0E6; */ +/* background:#4169E1; */ +} + +div.history_page_list a.currentPage, div.history_page_list_news a.currentPage +{ + font-weight:bold; + background:#DCDCDC; +} +div.history_page_list_news a +{ + border-left:none; + color:#4169E1; + font-weight:bold; +} + +.viewall_no_items_found +{ + font:normal 14px/1 sans-serif,Verdana,arial; + margin:10px; + padding:5px; +} + + + +.viewall_popup_menu_box { + width:725px; + height:30px; + margin-bottom:0px; + margin-top:10px; + margin-left:0px; +} + +.viewall_popup_menu_status +{ + clear:left; + width:725px; + overflow:hidden; + margin-left:0px; + text-align:center; +} +.viewall_popup_menu_status_item +{ + width:139px; + float:left; + margin-left:3px; + color:#FF4500; + font-weight:bold; + font: bold 13px/1 sans-serif,arial,Verdana; +} + +ul#menuBlock { +/* float:right; */ + float:left; + margin:0px; + padding:0px; + list-style:none; + height:24px; +} + +ul#menuBlock li { + position:relative; + display:block; + float:left; + margin-left:3px; + width:139px; + height:22px; + text-align:center; + background: url('../Img/popup_back.png') no-repeat top left; +/* background:#FFA500; */ + padding-top:3px; +} + +ul#menuBlock li a { + color:#000000; + font: normal 12px/1 sans-serif,Verdana,arial; +} + +ul#menuBlock li ul { + margin:0px; + padding:0px; + list-style:none; + position:absolute; + top:24px; + left:-3px; + display:none; +} + +ul#menuBlock li ul li { + background:#ffef84; + border-top:1px solid #ec8459; +} + + +/*view files with differences*/ +.diff_ext_box +{ + margin:0px 5px 30px 5px; +} +.diff_item_label +{ +/* background:#ADD8E6; */ +/* padding:3px; */ + border-bottom:1px solid black; +} +.diff_item_text +{ + color:#7c7a7a; + background:#F0FFF0; + padding:3px; +} +del +{ + color:red; +} +ins +{ + color:green; +} + + + +/*tree navigation*/ +.position_tree_box +{ + margin:5px 5px 25px 5px; + padding:5px; + font:normal 14px/1 sans-serif,arial,Verdana; + border-top:1px solid #DC143C; + border-bottom:1px solid #DC143C; +} +.position_tree_box a +{ + text-decoration:none; + color:#DC143C; +} +.last_tree_element +{ + font-weight:bold; +} + + + +.td_with_distribution_checkboxes +{ + position:relative; + display:block; +} +.dist_checkboxes_hidden_box +{ + display:none; + position:absolute; + background:#C1E3EF; + top:20px; + left:0px; + width:400px; + padding:3px; +} +.dist_checkboxes_hidden_box_inner +{ + height:150px; + overflow:auto; + z-index:400; +} +.hidden_box_item +{ + margin-bottom:10px; +} +/*wiki code*/ +.code_pre +{ +/* width:650px; */ + max-height:300px; + overflow:auto; + background:#f9f4a7; + padding:5px 0 5px 5px; + font-size:12px; +/* color:#4169E1; */ + border:1px dashed #d4cb3b; +} + +.div_h1 +{ + font:bold 15px/1 sans-serif,arial,Verdana; + border-bottom:1px solid gray; + padding:3px 0px; + margin:10px 0px; + color:gray; +} +.div_h2 +{ + font:bold 14px/1 sans-serif,arial,Verdana; + color:gray; +} +.div_h3 +{ + font:bold 13px/1 sans-serif,arial,Verdana; + color:gray; +} + +.talk_login_notice +{ + margin:5px 5px; + padding:5px; + font:bold 14px/1 sans-serif,arial,Verdana; +/* border:1px solid #4169E1; */ +/* color:#4169E1; */ +/* background:#9acee3; */ +} +.talk_message_item +{ + margin:5px 0px 35px 5px; +} +.talk_message_item_title_date +{ + border-bottom:1px solid gray; + padding-bottom:5px; +/* width:300px; */ +} +.talk_message_item_title +{ + font:bold 14px/1 sans-serif,arial,Verdana; + margin-bottom:5px; +} +.talk_message_item_date +{ + font:normal 12px/1 sans-serif,arial,Verdana; + color:gray; +} +.talk_message_item_content +{ + padding:5px 0px; +} +.talk_form_external_box +{ + margin-bottom:20px; +} + +.model_id +{ + font:normal 12px/1 sans-serif,arial,Verdana; +/* color:gray; */ + margin:5px 3px; + padding:3px; +} + +.top_left_images +{ + height:35px; +} +.top_left_note_image +{ + height:30px; +} +.top_left_images_help +{ + height:30px; + margin-bottom:-10px; +} + +.who_you_are_and_logout, .your_panel_link +{ + margin:5px 0px 15px 0px; + padding:5px 10px; + background-color:#B7F18C; +/* font-weight:bold; */ +/* border-top:1px solid #015512; */ +/* border-bottom:1px solid #015512; */ +} +.your_panel_link +{ + background:#DC143C; +/* color:#FFF; */ +} +.your_panel_link a +{ + font-weight:bold; + color:#FFF; +} + +/*form*/ +.entryLabel { + display:block; + font:bold 12px/1em Verdana,arial; + padding:3px 0px; + margin-top:10px; +/* background:#E6E6FA; */ + width:400px; +} + +.formEntry { + margin:20px 0px; +} + +.formEntry input,.formEntry textarea { + width:400px; + padding:3px; + border: 1px solid #CECECE; +} +.formEntry textarea +{ + height:100px; +} +.formClass { + margin:10px; + margin-right:-40px; + width:400px; +} + +.inputEntry { + margin:10px 0px; + float:left; + width:80px; + height:30px; +} + +.panel_top_box +{ + background-color:#C1E3EF; + margin:5px 5px 35px 5px; + padding:10px; + font:bold 14px/1 sans-serif,arial,Verdana; + border-bottom:1px solid #097fbc; +} +.panel_top_box a +{ + color:#097fbc; +} + +/*list of application in the panel main action*/ +.panelApplicationList +{ + padding:0px; +} +.panelApplicationList li +{ + display:block; + width:200px; + height:30px; + margin:5px; + padding-top:9px; +} + +.panelApplicationList li a +{ + margin:5px; + font: bold 14px/1 sans-serif,Verdana,arial; + color:#097fbc; +} + +.confirm_notice +{ + margin:10px; +/* padding:10px; */ + font:normal 14px/1.5 sans-serif,arial,Verdana; +} + +.meet_item +{ + margin:20px 0px; +} +.meet_item_inner +{ + border-bottom:1px dashed #ed9f4a; + font-weight:bold; +/* color:#8f0754; */ +} +.meet_contrib_link, .contrib_explain_box +{ + margin:10px; +} +.users_contrib_item +{ + margin:10px; + padding:2px 0px; + border-bottom:1px dashed #ed9f4a; +/* color:#8f0754; */ +} +.external_users_contrib +{ + margin-bottom:40px; +} +.contrib_explain_box +{ + font-weight:bold; + margin-bottom:30px; +} +.users_meet_box +{ + margin:25px 30px; + padding:5px 20px; + background:#f6ea99; + border-bottom:1px solid #ed9f4a; + border-top:1px solid #ed9f4a; +} +.delete_account_notice_box +{ + margin:25px 10px; +} +.climb_form_ext_box +{ + margin:25px 10px; +} + +.new_account_title +{ + margin:10px; +} + +.viewall_popup_menu_box_external, .edit_form +{ + clear:left; + clear:right; + margin-bottom:20px; +/* background:#E0FFFF; */ + padding:0px 10px 10px 0px; +} + +.manage_account_link_box +{ + margin:5px 0px; +} + +.login_right_box +{ + margin-bottom:15px; +} + +.mandatory_fields_notice +{ + margin:10px 0px; +} + +.help_tables_of_contents +{ + margin:10px; + padding:10px; +} + +.bottom_licence_notice +{ + font:normal 12px/1.2 sans-serif,arial,Verdana; + padding:10px; + background:#E0FFFF; + margin:25px 0px 5px 0px; +} +.top_licence_notice +{ + clear:left; + clear:right; + font:normal 12px/1.2 sans-serif,arial,Verdana; + padding:10px; + background:#E0FFFF; + margin:25px 0px 5px 0px; + text-align:left; +} + +/*.copyright_notice_box +{ + text-align:right; + font: normal 12px/1 sans-serif,arial,Verdana; + padding:14px; +}*/ + +.copyright_notice_box, .footer_credits_box +{ + width:120px; + float:right; + font: normal 12px/1 sans-serif,arial,Verdana; + padding:14px; + border-left:3px solid #FFF; +} +.footer_credits_box +{ + width:40px; + border-left:3px solid #FFF; +} +.home_objectives_description +{ + margin:5px; + overflow:hidden; + width:100%; +} +.home_objectives_description img +{ + float:left; + margin-right:5px; +} +.home_objectives_title +{ + margin:15px 5px 5px 5px; +/* background:#90EE90; */ + font-weight:bold; + padding:5px 0px; + border-bottom:1px solid #228B22; +} + +.credits_item_title +{ + margin:15px 5px 5px 5px; +/* background:#90EE90; */ + padding:5px; + border-bottom:1px solid #228B22; + font-weight:bold; +} +.credits_item_description +{ + padding:5px; + margin:5px; + overflow:hidden; + width:100%; +} + +.home_container +{ + margin:20px 0px; +} + +.issues_external_box +{ + margin:40px 5px; +} +.issues_viewall_title +{ + margin:10px 2px; + font-weight:bold; +} +.issues_viewall_table +{ + font:normal 14px/1 sans-serif,arial,Verdana; +} +.issues_viewall_table td +{ +/* background:#E6E6FA; */ + padding:5px; +/* border-bottom:1px solid #E6E6FA; */ +} +.issues_viewall_table th +{ + background:#ADD8E6; + border-top:1px solid #4169E1; + border-bottom:1px solid #4169E1; + padding:5px; +} + +.issues_view_title, .issues_view_description_title +{ + font:bold 14px/1 sans-serif,arial,Verdana; + padding:5px 0px; + border-bottom:1px solid black; +} +.issues_view_status_and_priority +{ + margin:20px 0px; + font:normal 12px/1 sans-serif,arial,Verdana; +} +.issues_view_description +{ + margin:20px 0px; +} + +.add_issue_form_title +{ + margin:30px 5px; + font-weight:bold; +} +.add_issue_form +{ + margin:30px 5px; +} + +.contact_div +{ + margin:10px; +} + +.help_external_box +{ + margin:5px; +} +.help_wiki_table thead +{ + text-align:left; +} + +.hardware_element_image +{ + height:50px; +} +.markItUpContainer +{ + z-index:0; +} + +.search_form +{ + clear:both; + margin:5px 5px 35px 5px; +} +.search_form .input_entry_search +{ + width:250px; + border: 1px solid #CECECE; + padding:2px; +} + +.search_result_item +{ + margin:5px 5px 15px 5px; + border-top:1px solid #CECECE; + padding:5px 0px; +} + +.diff_color_notice +{ + background:#f1d8d8; + padding:8px; + margin:5px; + margin-bottom:20px; + border-bottom:1px solid #d26262; + border-top:1px solid #d26262; +} + +.gray_text_notice +{ + color:#7c7a7a; +} +.credits_external_box +{ + margin-bottom:40px; +} +.notebook_model img +{ + float:left; +} +.span_model_name +{ + float:left; + margin-left:10px; + padding-top:5px; +} + +/*dialog*/ +#dialog-form, #delete_dialog +{ + display:none; +} +#suggest_dialog +{ + display:none; +} +#dialog-form table +{ + text-align:left; +} +#dialog-form input +{ + width:300px; + border:1px solid #CECECE; +} +#dialog-form textarea, #delete_dialog textarea +{ + width:300px; + height:100px; + border:1px solid #CECECE; +} +.ask_for_removal_class +{ + float:right; + padding-top:5px; +} +.deletion_motivations_title +{ + margin:15px 5px; + border-bottom:1px solid #D26262; +} + +.deletion_motivations_iternal +{ + margin:15px 5px; + padding:5px; + border:1px dashed #D26262; +} +.deletion_motivations_iternal_message +{ + +} + +.news_external_box +{ + margin:5px; + margin-bottom:40px; +} +.news_item +{ +/* background:#f8f1b2; */ +/* padding:5px; */ + margin:30px 0px; +/* border:1px solid #f99f4f; */ +} +.news_item_title +{ + font-weight:bold; + margin:0px 0px 4px 0px; + padding-bottom:5px; + border-bottom:1px solid #9d1d04; + color:#9d1d04; +} +.news_item_date +{ + font: normal 13px/1 sans-serif,arial,Verdana; +/* color:#e86a17; */ + color:gray; + margin:0px 0px 10px 0px; +} + +.discover_hardware, .download_database +{ + text-align:center; + margin-bottom:5px; +} +.download_database +{ + margin-bottom:30px; +} + +.download_table +{ + margin:10px 0px; + padding:5px; +} +.download_table td +{ + padding:5px 5px; + background:#E0FFFF; +} + +.help_external_box h1 +{ + background:#FFD700; + padding:5px 10px; + color:#800000; + border-top:1px solid #800000; + border-bottom:1px solid #800000; + font:normal 20px/1 sans-serif,arial,Verdana; +} + +.right_box_ext_box +{ + margin:5px; + margin-bottom:300px; +} + +.add_message_form_title +{ + margin:15px 0px; + font-weight:bold; + padding:5px 0px; + color:#4169E1; +} + +.issues_message_item, .issues_message_item_preview, .issues_message_item_hidden, .talk_message_item_hidden +{ + padding:10px; + margin:20px 0px; + background:#eaf2f4; + border-top:1px solid #4169E1; + border-bottom:1px solid #4169E1; +} +.issues_message_item_hidden, .talk_message_item_hidden +{ + background:#FFF; +/* background:#b5d6e0; */ + border-top:1px dashed #bcbcbc; + border-bottom:1px dashed #bcbcbc; +} +.issues_message_item_preview +{ + background:#fffdc2; + border-top:1px dashed #f9a92b; + border-bottom:1px dashed #f9a92b; +} +.talk_message_item_hidden +{ + margin-bottom:40px; +/* background:#f1f1f1; */ +} +.message_view_description +{ + clear:both; + margin-bottom:5px; +} +.message_view_description_hidden +{ + margin-top:5px; +} +.message_preview_notice +{ + margin:3px 3px; + font:bold 14px/1 sans-serif,arial,Verdana; +} +.useful_links_ext div +{ + margin:3px 0px; + padding:1px; + padding-left:20px; + background: url(../Img/link.png) no-repeat left center; +} +.useful_links_ext div a +{ + color:#000; + text-decoration:none; + font:normal 14px/1 sans-serif,arial,Verdana; +} +.issues_message_item_user +{ + overflow:hidden; + font-weight:bold; + margin-bottom:1em; +} +.issues_message_item_user_inner +{ + float:left; + width:500px; +} + +.hide_general +{ + float:right; + margin-left:10px; + font-weight:normal; + text-decoration:none; + color:black; +} +.hide_general img +{ + margin-right:5px; + margin-bottom:-2px; +} +.language_links_box ul +{ + overflow:hidden; + margin:4px 5px 20px 5px; + padding:0px; + list-style-type:none; +} +.language_links_box ul li +{ + float:left; + margin-bottom:10px; + margin-right:10px; + margin-top:5px; +} +.language_links_box ul li a +{ + padding:5px; + text-decoration:none; + color:black; +} +.language_links_box ul li a span +{ + margin-left:3px; +} +.language_links_box a.current_lang +{ + border-top:1px dashed #6495ED; + border-bottom:1px dashed #6495ED; +} + +.talk_numb_ext +{ + clear:both; + text-align:left; + margin-left:10px; +} +.talk_numb_ext a +{ + display:block; + width:150px; + text-align:center; + padding:10px 0px; + text-decoration:none; + color:black; + background: url(../Img/talk_messages.png) no-repeat left center; + margin-bottom:10px; + float:right; + overflow:hidden; +} + +.details_of_hidden_message +{ + display:none; +} +.details_of_hidden_message_inner, .details_of_actions_inner +{ + margin:10px 0px; + background:#fbfbfb; + padding:5px; + border:1px solid #BCBCBC; +} +.details_of_actions_inner +{ + background:#ecfffe; + border:1px solid #7ed0cb; +} + +.md_type +{ + display:none; +} +.hidden_message_view_details +{ + font:normal 12px/1 sans-serif,Verdana,arial; +} +.deleted_message_show +{ + margin:8px 0px 0px 0px; + font:normal 13px/1 sans-serif,arial,Verdana; +} \ No newline at end of file diff --git a/admin/Public/Img/Icons/back.png b/admin/Public/Img/Icons/back.png new file mode 100644 index 0000000..6ceb852 Binary files /dev/null and b/admin/Public/Img/Icons/back.png differ diff --git a/admin/Public/Img/Icons/delete.png b/admin/Public/Img/Icons/delete.png new file mode 100644 index 0000000..9b192fe Binary files /dev/null and b/admin/Public/Img/Icons/delete.png differ diff --git a/admin/Public/Img/Icons/file.png b/admin/Public/Img/Icons/file.png new file mode 100644 index 0000000..443765f Binary files /dev/null and b/admin/Public/Img/Icons/file.png differ diff --git a/admin/Public/Img/Icons/folder.png b/admin/Public/Img/Icons/folder.png new file mode 100644 index 0000000..89fb6d5 Binary files /dev/null and b/admin/Public/Img/Icons/folder.png differ diff --git a/admin/Public/Img/Icons/image.png b/admin/Public/Img/Icons/image.png new file mode 100644 index 0000000..bbc8c82 Binary files /dev/null and b/admin/Public/Img/Icons/image.png differ diff --git a/admin/Public/Img/Icons/index.html b/admin/Public/Img/Icons/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Public/Img/Icons/index.html @@ -0,0 +1 @@ + diff --git a/admin/Public/Js/DisplayTag.js b/admin/Public/Js/DisplayTag.js new file mode 100755 index 0000000..1ba1fb7 --- /dev/null +++ b/admin/Public/Js/DisplayTag.js @@ -0,0 +1,10 @@ + \ No newline at end of file diff --git a/admin/Public/Js/TinyMCE.js b/admin/Public/Js/TinyMCE.js new file mode 100755 index 0000000..b0f994e --- /dev/null +++ b/admin/Public/Js/TinyMCE.js @@ -0,0 +1,34 @@ +tinyMCE.init({ + // General options + mode : "textareas", + theme : "advanced", + editor_selector : "contentArea", +// editor_deselector : "mceNoEditor", + plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template", + + // Theme options + theme_advanced_buttons1 : "justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect", + theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,code", + theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media", + theme_advanced_buttons4 : "styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,template,|,forecolor,backcolor,bold,italic,underline,strikethrough,|,insertdate,inserttime,preview", + theme_advanced_toolbar_location : "top", + theme_advanced_toolbar_align : "left", + theme_advanced_statusbar_location : "bottom", + theme_advanced_resizing : true, + + // Example content CSS (should be your site CSS) + content_css : "../stili_editor.css", + + // Drop lists for link/image/media/template dialogs + template_external_list_url : "lists/template_list.js", + external_link_list_url : "lists/link_list.js", + external_image_list_url : "lists/image_list.js", + media_external_list_url : "lists/media_list.js", + + // Replace values for the template plugin + template_replace_values : { + username : "Some User", + staffid : "991234" + } + }); + diff --git a/admin/Public/Js/functions.js b/admin/Public/Js/functions.js new file mode 100644 index 0000000..5e1f2d8 --- /dev/null +++ b/admin/Public/Js/functions.js @@ -0,0 +1,122 @@ + \ No newline at end of file diff --git a/admin/Public/Js/index.html b/admin/Public/Js/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Public/Js/index.html @@ -0,0 +1 @@ + diff --git a/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png new file mode 100755 index 0000000..82524ab Binary files /dev/null and b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png differ diff --git a/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png new file mode 100755 index 0000000..6aed97a Binary files /dev/null and b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png differ diff --git a/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png new file mode 100755 index 0000000..f11ca67 Binary files /dev/null and b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png differ diff --git a/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png new file mode 100755 index 0000000..68306d1 Binary files /dev/null and b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png differ diff --git a/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png new file mode 100755 index 0000000..f567c28 Binary files /dev/null and b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png differ diff --git a/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png new file mode 100755 index 0000000..29e9965 Binary files /dev/null and b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png differ diff --git a/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png new file mode 100755 index 0000000..9a46d19 Binary files /dev/null and b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png differ diff --git a/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png new file mode 100755 index 0000000..f811f30 Binary files /dev/null and b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png differ diff --git a/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png new file mode 100755 index 0000000..755fe99 Binary files /dev/null and b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png differ diff --git a/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png new file mode 100755 index 0000000..98705f9 Binary files /dev/null and b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png differ diff --git a/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png new file mode 100755 index 0000000..2179078 Binary files /dev/null and b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png differ diff --git a/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png new file mode 100755 index 0000000..de76ce2 Binary files /dev/null and b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png differ diff --git a/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png new file mode 100755 index 0000000..42f8f99 Binary files /dev/null and b/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png differ diff --git a/admin/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css b/admin/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css new file mode 100755 index 0000000..c4ed3ea --- /dev/null +++ b/admin/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css @@ -0,0 +1,315 @@ +/* + * jQuery UI CSS Framework @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } +.ui-helper-clearfix { display: inline-block; } +/* required comment for clearfix to work in Opera \*/ +* html .ui-helper-clearfix { height:1%; } +.ui-helper-clearfix { display:block; } +/* end clearfix */ +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/* + * jQuery UI CSS Framework @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=segoe%20ui,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=3px&bgColorHeader=f9f9f9&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=100&borderColorHeader=cccccc&fcHeader=e69700&iconColorHeader=5fa5e3&bgColorContent=eeeeee&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=0a82eb&bgColorDefault=1484e6&bgTextureDefault=08_diagonals_thick.png&bgImgOpacityDefault=22&borderColorDefault=ffffff&fcDefault=ffffff&iconColorDefault=fcdd4a&bgColorHover=2293f7&bgTextureHover=08_diagonals_thick.png&bgImgOpacityHover=26&borderColorHover=2293f7&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=e69700&bgTextureActive=08_diagonals_thick.png&bgImgOpacityActive=20&borderColorActive=e69700&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=c5ddfc&bgTextureHighlight=07_diagonals_small.png&bgImgOpacityHighlight=25&borderColorHighlight=ffffff&fcHighlight=333333&iconColorHighlight=0b54d5&bgColorError=e69700&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=20&borderColorError=e69700&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=e6b900&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=e69700&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=20&thicknessShadow=0px&offsetTopShadow=6px&offsetLeftShadow=6px&cornerRadiusShadow=3px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: segoe ui, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: segoe ui, Arial, sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #aaaaaa; background: #eeeeee url(images/ui-bg_inset-hard_100_eeeeee_1x100.png) 50% bottom repeat-x; color: #222222; } +.ui-widget-content a { color: #222222; } +.ui-widget-header { border: 1px solid #cccccc; background: #f9f9f9 url(images/ui-bg_highlight-soft_100_f9f9f9_1x100.png) 50% 50% repeat-x; color: #e69700; font-weight: bold; } +.ui-widget-header a { color: #e69700; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #ffffff; background: #1484e6 url(images/ui-bg_diagonals-thick_22_1484e6_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #ffffff; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #2293f7; background: #2293f7 url(images/ui-bg_diagonals-thick_26_2293f7_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } +.ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #e69700; background: #e69700 url(images/ui-bg_diagonals-thick_20_e69700_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #ffffff; background: #c5ddfc url(images/ui-bg_diagonals-small_25_c5ddfc_40x40.png) 50% 50% repeat; color: #333333; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #333333; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #e69700; background: #e69700 url(images/ui-bg_diagonals-thick_20_e69700_40x40.png) 50% 50% repeat; color: #ffffff; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_0a82eb_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_0a82eb_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_5fa5e3_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_fcdd4a_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_0b54d5_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-tl { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; } +.ui-corner-tr { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; } +.ui-corner-bl { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; } +.ui-corner-br { -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } +.ui-corner-top { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; } +.ui-corner-bottom { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } +.ui-corner-right { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } +.ui-corner-left { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; } +.ui-corner-all { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } + +/* Overlays */ +.ui-widget-overlay { background: #e6b900 url(images/ui-bg_flat_0_e6b900_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } +.ui-widget-shadow { margin: 6px 0 0 6px; padding: 0px; background: #e69700 url(images/ui-bg_flat_0_e69700_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; }/* + * jQuery UI Dialog @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog#theming + */ +.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } +.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } +.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } +.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } +.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } +.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } +.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } +.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } +.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } +.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } +.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } +.ui-draggable .ui-dialog-titlebar { cursor: move; } diff --git a/admin/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js b/admin/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js new file mode 100755 index 0000000..7469ef3 --- /dev/null +++ b/admin/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js @@ -0,0 +1,87 @@ +/*! + * jQuery UI 1.8.4 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI + */ +(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.4",plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=0)&&c(a).is(":focusable")}})}})(jQuery); +;/*! + * jQuery UI Widget 1.8.4 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function(b,j){var k=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return k.call(b(this),a,c)})};b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options); +b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}): +this.each(function(){var g=b.data(this,a);if(g){d&&g.option(d);g._init()}else b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}); +this._create();this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}b.each(d,function(f, +h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a= +b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery); +;/* + * jQuery UI Position 1.8.4 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Position + */ +(function(c){c.ui=c.ui||{};var m=/left|center|right/,n=/top|center|bottom/,p=c.fn.position,q=c.fn.offset;c.fn.position=function(a){if(!a||!a.of)return p.apply(this,arguments);a=c.extend({},a);var b=c(a.of),d=(a.collision||"flip").split(" "),e=a.offset?a.offset.split(" "):[0,0],g,h,i;if(a.of.nodeType===9){g=b.width();h=b.height();i={top:0,left:0}}else if(a.of.scrollTo&&a.of.document){g=b.width();h=b.height();i={top:b.scrollTop(),left:b.scrollLeft()}}else if(a.of.preventDefault){a.at="left top";g=h= +0;i={top:a.of.pageY,left:a.of.pageX}}else{g=b.outerWidth();h=b.outerHeight();i=b.offset()}c.each(["my","at"],function(){var f=(a[this]||"").split(" ");if(f.length===1)f=m.test(f[0])?f.concat(["center"]):n.test(f[0])?["center"].concat(f):["center","center"];f[0]=m.test(f[0])?f[0]:"center";f[1]=n.test(f[1])?f[1]:"center";a[this]=f});if(d.length===1)d[1]=d[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(a.at[0]==="right")i.left+=g;else if(a.at[0]==="center")i.left+= +g/2;if(a.at[1]==="bottom")i.top+=h;else if(a.at[1]==="center")i.top+=h/2;i.left+=e[0];i.top+=e[1];return this.each(function(){var f=c(this),k=f.outerWidth(),l=f.outerHeight(),j=c.extend({},i);if(a.my[0]==="right")j.left-=k;else if(a.my[0]==="center")j.left-=k/2;if(a.my[1]==="bottom")j.top-=l;else if(a.my[1]==="center")j.top-=l/2;j.left=parseInt(j.left);j.top=parseInt(j.top);c.each(["left","top"],function(o,r){c.ui.position[d[o]]&&c.ui.position[d[o]][r](j,{targetWidth:g,targetHeight:h,elemWidth:k, +elemHeight:l,offset:e,my:a.my,at:a.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(j,{using:a.using}))})};c.ui.position={fit:{left:function(a,b){var d=c(window);b=a.left+b.elemWidth-d.width()-d.scrollLeft();a.left=b>0?a.left-b:Math.max(0,a.left)},top:function(a,b){var d=c(window);b=a.top+b.elemHeight-d.height()-d.scrollTop();a.top=b>0?a.top-b:Math.max(0,a.top)}},flip:{left:function(a,b){if(b.at[0]!=="center"){var d=c(window);d=a.left+b.elemWidth-d.width()-d.scrollLeft();var e=b.my[0]==="left"? +-b.elemWidth:b.my[0]==="right"?b.elemWidth:0,g=-2*b.offset[0];a.left+=a.left<0?e+b.targetWidth+g:d>0?e-b.targetWidth+g:0}},top:function(a,b){if(b.at[1]!=="center"){var d=c(window);d=a.top+b.elemHeight-d.height()-d.scrollTop();var e=b.my[1]==="top"?-b.elemHeight:b.my[1]==="bottom"?b.elemHeight:0,g=b.at[1]==="top"?b.targetHeight:-b.targetHeight,h=-2*b.offset[1];a.top+=a.top<0?e+b.targetHeight+h:d>0?e+g+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(a,b){if(/static/.test(c.curCSS(a,"position")))a.style.position= +"relative";var d=c(a),e=d.offset(),g=parseInt(c.curCSS(a,"top",true),10)||0,h=parseInt(c.curCSS(a,"left",true),10)||0;e={top:b.top-e.top+g,left:b.left-e.left+h};"using"in b?b.using.call(a,e):d.css(e)};c.fn.offset=function(a){var b=this[0];if(!b||!b.ownerDocument)return null;if(a)return this.each(function(){c.offset.setOffset(this,a)});return q.call(this)}}})(jQuery); +;/* + * jQuery UI Dialog 1.8.4 + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Dialog + * + * Depends: + * jquery.ui.core.js + * jquery.ui.widget.js + * jquery.ui.button.js + * jquery.ui.draggable.js + * jquery.ui.mouse.js + * jquery.ui.position.js + * jquery.ui.resizable.js + */ +(function(c,j){c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",of:window,collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title"); +if(typeof this.originalTitle!=="string")this.originalTitle="";var a=this,b=a.options,d=b.title||a.originalTitle||" ",f=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
        ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(i){a.moveToTop(false, +i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var e=(a.uiDialogTitlebar=c("
        ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i); +return false}).appendTo(e);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id",f).html(d).prependTo(e);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;e.find("*").add(e).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&& +g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog"); +b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,f=d.options;if(f.modal&&!a||!f.stack&&!f.modal)return d._trigger("focus",b);if(f.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ= +f.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show); +a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(f){if(f.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),e=g.filter(":first");g=g.filter(":last");if(f.target===g[0]&&!f.shiftKey){e.focus(1);return false}else if(f.target===e[0]&&f.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._trigger("open");a._isOpen=true;return a}},_createButtons:function(a){var b=this,d=false, +f=c("
        ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("
        ").addClass("ui-dialog-buttonset").appendTo(f);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(e,h){e=c('').text(e).click(function(){h.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&e.button()});f.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(e){return{position:e.position, +offset:e.offset}}var b=this,d=b.options,f=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(e,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",e,a(h))},drag:function(e,h){b._trigger("drag",e,a(h))},stop:function(e,h){d.position=[h.position.left-f.scrollLeft(),h.position.top-f.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g); +b._trigger("dragStop",e,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}a=a===j?this.options.resizable:a;var d=this,f=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:d._minHeight(), +handles:a,start:function(e,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",e,b(h))},resize:function(e,h){d._trigger("resize",e,b(h))},stop:function(e,h){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();d._trigger("resizeStop",e,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight, +a.height)},_position:function(a){var b=[],d=[0,0],f;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,e){if(+b[g]===b[g]){d[g]=b[g];b[g]=e}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a); +f||this.uiDialog.hide()},_setOption:function(a,b){var d=this,f=d.uiDialog,g=f.is(":data(resizable)"),e=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);e=true;break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":f.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case "draggable":b? +d._makeDraggable():f.draggable("destroy");break;case "height":e=true;break;case "maxHeight":g&&f.resizable("option","maxHeight",b);e=true;break;case "maxWidth":g&&f.resizable("option","maxWidth",b);e=true;break;case "minHeight":g&&f.resizable("option","minHeight",b);e=true;break;case "minWidth":g&&f.resizable("option","minWidth",b);e=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&f.resizable("destroy");g&&typeof b==="string"&&f.resizable("option","handles",b);!g&&b!==false&& +d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break;case "width":e=true;break}c.Widget.prototype._setOption.apply(d,arguments);e&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:"auto"}:{minHeight:0,height:Math.max(a.height- +b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.4",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "), +create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){return c(d.target).zIndex()>=c.ui.dialog.overlay.maxZ})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("
        ").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(), +height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight); +b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, +Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& +(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, +a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== +"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, +function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
        a"; +var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, +parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= +false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= +s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, +applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; +else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, +a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== +w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, +cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= +c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); +a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, +function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); +k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), +C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= +e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& +f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; +if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", +e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, +"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, +d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, +e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); +t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| +g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, +CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, +g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, +text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, +setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= +h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== +"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, +h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& +q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; +if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

        ";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); +(function(){var g=s.createElement("div");g.innerHTML="
        ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: +function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= +{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== +"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", +d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? +a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== +1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
        ","
        "],thead:[1,"","
        "],tr:[2,"","
        "],td:[3,"","
        "],col:[2,"","
        "],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
        ","
        "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= +c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, +wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, +prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, +this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); +return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, +""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); +return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", +""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= +c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? +c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= +function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= +Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, +"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= +a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= +a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== +"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
        ").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, +serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), +function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, +global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& +e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? +"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== +false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= +false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", +c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| +d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); +g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== +1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== +"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; +if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== +"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| +c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; +this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= +this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, +e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
        "; +a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); +c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, +d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- +f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": +"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in +e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/admin/Public/Js/markitup/jquery.markitup.js b/admin/Public/Js/markitup/jquery.markitup.js new file mode 100644 index 0000000..ee8f40f --- /dev/null +++ b/admin/Public/Js/markitup/jquery.markitup.js @@ -0,0 +1,559 @@ +// ---------------------------------------------------------------------------- +// markItUp! Universal MarkUp Engine, JQuery plugin +// v 1.1.7 +// Dual licensed under the MIT and GPL licenses. +// ---------------------------------------------------------------------------- +// Copyright (C) 2007-2010 Jay Salvat +// http://markitup.jaysalvat.com/ +// ---------------------------------------------------------------------------- +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// ---------------------------------------------------------------------------- +(function($) { + $.fn.markItUp = function(settings, extraSettings) { + var options, ctrlKey, shiftKey, altKey; + ctrlKey = shiftKey = altKey = false; + + options = { id: '', + nameSpace: '', + root: '', + previewInWindow: '', // 'width=800, height=600, resizable=yes, scrollbars=yes' + previewAutoRefresh: true, + previewPosition: 'after', + previewTemplatePath: '~/templates/preview.html', + previewParserPath: '', + previewParserVar: 'data', + resizeHandle: true, + beforeInsert: '', + afterInsert: '', + onEnter: {}, + onShiftEnter: {}, + onCtrlEnter: {}, + onTab: {}, + markupSet: [ { /* set */ } ] + }; + $.extend(options, settings, extraSettings); + + // compute markItUp! path + if (!options.root) { + $('script').each(function(a, tag) { + miuScript = $(tag).get(0).src.match(/(.*)jquery\.markitup(\.pack)?\.js$/); + if (miuScript !== null) { + options.root = miuScript[1]; + } + }); + } + + return this.each(function() { + var $$, textarea, levels, scrollPosition, caretPosition, caretOffset, + clicked, hash, header, footer, previewWindow, template, iFrame, abort; + $$ = $(this); + textarea = this; + levels = []; + abort = false; + scrollPosition = caretPosition = 0; + caretOffset = -1; + + options.previewParserPath = localize(options.previewParserPath); + options.previewTemplatePath = localize(options.previewTemplatePath); + + // apply the computed path to ~/ + function localize(data, inText) { + if (inText) { + return data.replace(/("|')~\//g, "$1"+options.root); + } + return data.replace(/^~\//, options.root); + } + + // init and build editor + function init() { + id = ''; nameSpace = ''; + if (options.id) { + id = 'id="'+options.id+'"'; + } else if ($$.attr("id")) { + id = 'id="markItUp'+($$.attr("id").substr(0, 1).toUpperCase())+($$.attr("id").substr(1))+'"'; + + } + if (options.nameSpace) { + nameSpace = 'class="'+options.nameSpace+'"'; + } + $$.wrap('
        '); + $$.wrap('
        '); + $$.wrap('
        '); + $$.addClass("markItUpEditor"); + + // add the header before the textarea + header = $('
        ').insertBefore($$); + $(dropMenus(options.markupSet)).appendTo(header); + + // add the footer after the textarea + footer = $('
        ').insertAfter($$); + + // add the resize handle after textarea + if (options.resizeHandle === true && $.browser.safari !== true) { + resizeHandle = $('
        ') + .insertAfter($$) + .bind("mousedown", function(e) { + var h = $$.height(), y = e.clientY, mouseMove, mouseUp; + mouseMove = function(e) { + $$.css("height", Math.max(20, e.clientY+h-y)+"px"); + return false; + }; + mouseUp = function(e) { + $("html").unbind("mousemove", mouseMove).unbind("mouseup", mouseUp); + return false; + }; + $("html").bind("mousemove", mouseMove).bind("mouseup", mouseUp); + }); + footer.append(resizeHandle); + } + + // listen key events + $$.keydown(keyPressed).keyup(keyPressed); + + // bind an event to catch external calls + $$.bind("insertion", function(e, settings) { + if (settings.target !== false) { + get(); + } + if (textarea === $.markItUp.focused) { + markup(settings); + } + }); + + // remember the last focus + $$.focus(function() { + $.markItUp.focused = this; + }); + } + + // recursively build header with dropMenus from markupset + function dropMenus(markupSet) { + var ul = $('
          '), i = 0; + $('li:hover > ul', ul).css('display', 'block'); + $.each(markupSet, function() { + var button = this, t = '', title, li, j; + title = (button.key) ? (button.name||'')+' [Ctrl+'+button.key+']' : (button.name||''); + key = (button.key) ? 'accesskey="'+button.key+'"' : ''; + if (button.separator) { + li = $('
        • '+(button.separator||'')+'
        • ').appendTo(ul); + } else { + i++; + for (j = levels.length -1; j >= 0; j--) { + t += levels[j]+"-"; + } + li = $('
        • '+(button.name||'')+'
        • ') + .bind("contextmenu", function() { // prevent contextmenu on mac and allow ctrl+click + return false; + }).click(function() { + return false; + }).mousedown(function() { + if (button.call) { + eval(button.call)(); + } + setTimeout(function() { markup(button) },1); + return false; + }).hover(function() { + $('> ul', this).show(); + $(document).one('click', function() { // close dropmenu if click outside + $('ul ul', header).hide(); + } + ); + }, function() { + $('> ul', this).hide(); + } + ).appendTo(ul); + if (button.dropMenu) { + levels.push(i); + $(li).addClass('markItUpDropMenu').append(dropMenus(button.dropMenu)); + } + } + }); + levels.pop(); + return ul; + } + + // markItUp! markups + function magicMarkups(string) { + if (string) { + string = string.toString(); + string = string.replace(/\(\!\(([\s\S]*?)\)\!\)/g, + function(x, a) { + var b = a.split('|!|'); + if (altKey === true) { + return (b[1] !== undefined) ? b[1] : b[0]; + } else { + return (b[1] === undefined) ? "" : b[0]; + } + } + ); + // [![prompt]!], [![prompt:!:value]!] + string = string.replace(/\[\!\[([\s\S]*?)\]\!\]/g, + function(x, a) { + var b = a.split(':!:'); + if (abort === true) { + return false; + } + value = prompt(b[0], (b[1]) ? b[1] : ''); + if (value === null) { + abort = true; + } + return value; + } + ); + return string; + } + return ""; + } + + // prepare action + function prepare(action) { + if ($.isFunction(action)) { + action = action(hash); + } + return magicMarkups(action); + } + + // build block to insert + function build(string) { + openWith = prepare(clicked.openWith); + placeHolder = prepare(clicked.placeHolder); + replaceWith = prepare(clicked.replaceWith); + closeWith = prepare(clicked.closeWith); + if (replaceWith !== "") { + block = openWith + replaceWith + closeWith; + } else if (selection === '' && placeHolder !== '') { + block = openWith + placeHolder + closeWith; + } else { + block = openWith + (string||selection) + closeWith; + } + return { block:block, + openWith:openWith, + replaceWith:replaceWith, + placeHolder:placeHolder, + closeWith:closeWith + }; + } + + // define markup to insert + function markup(button) { + var len, j, n, i; + hash = clicked = button; + get(); + + $.extend(hash, { line:"", + root:options.root, + textarea:textarea, + selection:(selection||''), + caretPosition:caretPosition, + ctrlKey:ctrlKey, + shiftKey:shiftKey, + altKey:altKey + } + ); + // callbacks before insertion + prepare(options.beforeInsert); + prepare(clicked.beforeInsert); + if (ctrlKey === true && shiftKey === true) { + prepare(clicked.beforeMultiInsert); + } + $.extend(hash, { line:1 }); + + if (ctrlKey === true && shiftKey === true) { + lines = selection.split(/\r?\n/); + for (j = 0, n = lines.length, i = 0; i < n; i++) { + if ($.trim(lines[i]) !== '') { + $.extend(hash, { line:++j, selection:lines[i] } ); + lines[i] = build(lines[i]).block; + } else { + lines[i] = ""; + } + } + string = { block:lines.join('\n')}; + start = caretPosition; + len = string.block.length + (($.browser.opera) ? n : 0); + } else if (ctrlKey === true) { + string = build(selection); + start = caretPosition + string.openWith.length; + len = string.block.length - string.openWith.length - string.closeWith.length; + len -= fixIeBug(string.block); + } else if (shiftKey === true) { + string = build(selection); + start = caretPosition; + len = string.block.length; + len -= fixIeBug(string.block); + } else { + string = build(selection); + start = caretPosition + string.block.length ; + len = 0; + start -= fixIeBug(string.block); + } + if ((selection === '' && string.replaceWith === '')) { + caretOffset += fixOperaBug(string.block); + + start = caretPosition + string.openWith.length; + len = string.block.length - string.openWith.length - string.closeWith.length; + + caretOffset = $$.val().substring(caretPosition, $$.val().length).length; + caretOffset -= fixOperaBug($$.val().substring(0, caretPosition)); + } + $.extend(hash, { caretPosition:caretPosition, scrollPosition:scrollPosition } ); + + if (string.block !== selection && abort === false) { + insert(string.block); + set(start, len); + } else { + caretOffset = -1; + } + get(); + + $.extend(hash, { line:'', selection:selection }); + + // callbacks after insertion + if (ctrlKey === true && shiftKey === true) { + prepare(clicked.afterMultiInsert); + } + prepare(clicked.afterInsert); + prepare(options.afterInsert); + + // refresh preview if opened + if (previewWindow && options.previewAutoRefresh) { + refreshPreview(); + } + + // reinit keyevent + shiftKey = altKey = ctrlKey = abort = false; + } + + // Substract linefeed in Opera + function fixOperaBug(string) { + if ($.browser.opera) { + return string.length - string.replace(/\n*/g, '').length; + } + return 0; + } + // Substract linefeed in IE + function fixIeBug(string) { + if ($.browser.msie) { + return string.length - string.replace(/\r*/g, '').length; + } + return 0; + } + + // add markup + function insert(block) { + if (document.selection) { + var newSelection = document.selection.createRange(); + newSelection.text = block; + } else { + $$.val($$.val().substring(0, caretPosition) + block + $$.val().substring(caretPosition + selection.length, $$.val().length)); + } + } + + // set a selection + function set(start, len) { + if (textarea.createTextRange){ + // quick fix to make it work on Opera 9.5 + if ($.browser.opera && $.browser.version >= 9.5 && len == 0) { + return false; + } + range = textarea.createTextRange(); + range.collapse(true); + range.moveStart('character', start); + range.moveEnd('character', len); + range.select(); + } else if (textarea.setSelectionRange ){ + textarea.setSelectionRange(start, start + len); + } + textarea.scrollTop = scrollPosition; + textarea.focus(); + } + + // get the selection + function get() { + textarea.focus(); + + scrollPosition = textarea.scrollTop; + if (document.selection) { + selection = document.selection.createRange().text; + if ($.browser.msie) { // ie + var range = document.selection.createRange(), rangeCopy = range.duplicate(); + rangeCopy.moveToElementText(textarea); + caretPosition = -1; + while(rangeCopy.inRange(range)) { // fix most of the ie bugs with linefeeds... + rangeCopy.moveStart('character'); + caretPosition ++; + } + } else { // opera + caretPosition = textarea.selectionStart; + } + } else { // gecko & webkit + caretPosition = textarea.selectionStart; + selection = $$.val().substring(caretPosition, textarea.selectionEnd); + } + return selection; + } + + // open preview window + function preview() { + if (!previewWindow || previewWindow.closed) { + if (options.previewInWindow) { + previewWindow = window.open('', 'preview', options.previewInWindow); + } else { + iFrame = $(''); + if (options.previewPosition == 'after') { + iFrame.insertAfter(footer); + } else { + iFrame.insertBefore(header); + } + previewWindow = iFrame[iFrame.length - 1].contentWindow || frame[iFrame.length - 1]; + } + } else if (altKey === true) { + // Thx Stephen M. Redd for the IE8 fix + if (iFrame) { + iFrame.remove(); + } else { + previewWindow.close(); + } + previewWindow = iFrame = false; + } + if (!options.previewAutoRefresh) { + refreshPreview(); + } + } + + // refresh Preview window + function refreshPreview() { + renderPreview(); + } + + function renderPreview() { + var phtml; + if (options.previewParserPath !== '') { + $.ajax( { + type: 'POST', + url: options.previewParserPath, + data: options.previewParserVar+'='+encodeURIComponent($$.val()), + success: function(data) { + writeInPreview( localize(data, 1) ); + } + } ); + } else { + if (!template) { + $.ajax( { + url: options.previewTemplatePath, + success: function(data) { + writeInPreview( localize(data, 1).replace(//g, $$.val()) ); + } + } ); + } + } + return false; + } + + function writeInPreview(data) { + if (previewWindow.document) { + try { + sp = previewWindow.document.documentElement.scrollTop + } catch(e) { + sp = 0; + } + previewWindow.document.open(); + previewWindow.document.write(data); + previewWindow.document.close(); + previewWindow.document.documentElement.scrollTop = sp; + } + if (options.previewInWindow) { + previewWindow.focus(); + } + } + + // set keys pressed + function keyPressed(e) { + shiftKey = e.shiftKey; + altKey = e.altKey; + ctrlKey = (!(e.altKey && e.ctrlKey)) ? e.ctrlKey : false; + + if (e.type === 'keydown') { + if (ctrlKey === true) { + li = $("a[accesskey="+String.fromCharCode(e.keyCode)+"]", header).parent('li'); + if (li.length !== 0) { + ctrlKey = false; + setTimeout(function() { + li.triggerHandler('mousedown'); + },1); + return false; + } + } + if (e.keyCode === 13 || e.keyCode === 10) { // Enter key + if (ctrlKey === true) { // Enter + Ctrl + ctrlKey = false; + markup(options.onCtrlEnter); + return options.onCtrlEnter.keepDefault; + } else if (shiftKey === true) { // Enter + Shift + shiftKey = false; + markup(options.onShiftEnter); + return options.onShiftEnter.keepDefault; + } else { // only Enter + markup(options.onEnter); + return options.onEnter.keepDefault; + } + } + if (e.keyCode === 9) { // Tab key + if (shiftKey == true || ctrlKey == true || altKey == true) { // Thx Dr Floob. + return false; + } + if (caretOffset !== -1) { + get(); + caretOffset = $$.val().length - caretOffset; + set(caretOffset, 0); + caretOffset = -1; + return false; + } else { + markup(options.onTab); + return options.onTab.keepDefault; + } + } + } + } + + init(); + }); + }; + + $.fn.markItUpRemove = function() { + return this.each(function() { + var $$ = $(this).unbind().removeClass('markItUpEditor'); + $$.parent('div').parent('div.markItUp').parent('div').replaceWith($$); + } + ); + }; + + $.markItUp = function(settings) { + var options = { target:false }; + $.extend(options, settings); + if (options.target) { + return $(options.target).each(function() { + $(this).focus(); + $(this).trigger('insertion', [options]); + }); + } else { + $('textarea').trigger('insertion', [options]); + } + }; +})(jQuery); diff --git a/admin/Public/Js/markitup/sets/bbcode/images/bold.png b/admin/Public/Js/markitup/sets/bbcode/images/bold.png new file mode 100644 index 0000000..889ae80 Binary files /dev/null and b/admin/Public/Js/markitup/sets/bbcode/images/bold.png differ diff --git a/admin/Public/Js/markitup/sets/bbcode/images/clean.png b/admin/Public/Js/markitup/sets/bbcode/images/clean.png new file mode 100644 index 0000000..7e7cefb Binary files /dev/null and b/admin/Public/Js/markitup/sets/bbcode/images/clean.png differ diff --git a/admin/Public/Js/markitup/sets/bbcode/images/code.png b/admin/Public/Js/markitup/sets/bbcode/images/code.png new file mode 100644 index 0000000..63fe6ce Binary files /dev/null and b/admin/Public/Js/markitup/sets/bbcode/images/code.png differ diff --git a/admin/Public/Js/markitup/sets/bbcode/images/fonts.png b/admin/Public/Js/markitup/sets/bbcode/images/fonts.png new file mode 100644 index 0000000..b7960db Binary files /dev/null and b/admin/Public/Js/markitup/sets/bbcode/images/fonts.png differ diff --git a/admin/Public/Js/markitup/sets/bbcode/images/h1.png b/admin/Public/Js/markitup/sets/bbcode/images/h1.png new file mode 100644 index 0000000..9c122e9 Binary files /dev/null and b/admin/Public/Js/markitup/sets/bbcode/images/h1.png differ diff --git a/admin/Public/Js/markitup/sets/bbcode/images/h2.png b/admin/Public/Js/markitup/sets/bbcode/images/h2.png new file mode 100644 index 0000000..fbd8765 Binary files /dev/null and b/admin/Public/Js/markitup/sets/bbcode/images/h2.png differ diff --git a/admin/Public/Js/markitup/sets/bbcode/images/h3.png b/admin/Public/Js/markitup/sets/bbcode/images/h3.png new file mode 100644 index 0000000..c7836cf Binary files /dev/null and b/admin/Public/Js/markitup/sets/bbcode/images/h3.png differ diff --git a/admin/Public/Js/markitup/sets/bbcode/images/italic.png b/admin/Public/Js/markitup/sets/bbcode/images/italic.png new file mode 100644 index 0000000..8482ac8 Binary files /dev/null and b/admin/Public/Js/markitup/sets/bbcode/images/italic.png differ diff --git a/admin/Public/Js/markitup/sets/bbcode/images/link.png b/admin/Public/Js/markitup/sets/bbcode/images/link.png new file mode 100644 index 0000000..25eacb7 Binary files /dev/null and b/admin/Public/Js/markitup/sets/bbcode/images/link.png differ diff --git a/admin/Public/Js/markitup/sets/bbcode/images/list-bullet.png b/admin/Public/Js/markitup/sets/bbcode/images/list-bullet.png new file mode 100644 index 0000000..4a8672b Binary files /dev/null and b/admin/Public/Js/markitup/sets/bbcode/images/list-bullet.png differ diff --git a/admin/Public/Js/markitup/sets/bbcode/images/list-item.png b/admin/Public/Js/markitup/sets/bbcode/images/list-item.png new file mode 100644 index 0000000..8cb4d69 Binary files /dev/null and b/admin/Public/Js/markitup/sets/bbcode/images/list-item.png differ diff --git a/admin/Public/Js/markitup/sets/bbcode/images/list-numeric.png b/admin/Public/Js/markitup/sets/bbcode/images/list-numeric.png new file mode 100644 index 0000000..33b0b8d Binary files /dev/null and b/admin/Public/Js/markitup/sets/bbcode/images/list-numeric.png differ diff --git a/admin/Public/Js/markitup/sets/bbcode/images/paragraph.png b/admin/Public/Js/markitup/sets/bbcode/images/paragraph.png new file mode 100644 index 0000000..95704fb Binary files /dev/null and b/admin/Public/Js/markitup/sets/bbcode/images/paragraph.png differ diff --git a/admin/Public/Js/markitup/sets/bbcode/images/picture.png b/admin/Public/Js/markitup/sets/bbcode/images/picture.png new file mode 100644 index 0000000..4a158fe Binary files /dev/null and b/admin/Public/Js/markitup/sets/bbcode/images/picture.png differ diff --git a/admin/Public/Js/markitup/sets/bbcode/images/preview.png b/admin/Public/Js/markitup/sets/bbcode/images/preview.png new file mode 100644 index 0000000..a9925a0 Binary files /dev/null and b/admin/Public/Js/markitup/sets/bbcode/images/preview.png differ diff --git a/admin/Public/Js/markitup/sets/bbcode/images/quotes.png b/admin/Public/Js/markitup/sets/bbcode/images/quotes.png new file mode 100644 index 0000000..e54ebeb Binary files /dev/null and b/admin/Public/Js/markitup/sets/bbcode/images/quotes.png differ diff --git a/admin/Public/Js/markitup/sets/bbcode/images/stroke.png b/admin/Public/Js/markitup/sets/bbcode/images/stroke.png new file mode 100644 index 0000000..612058a Binary files /dev/null and b/admin/Public/Js/markitup/sets/bbcode/images/stroke.png differ diff --git a/admin/Public/Js/markitup/sets/bbcode/images/underline.png b/admin/Public/Js/markitup/sets/bbcode/images/underline.png new file mode 100644 index 0000000..90d0df2 Binary files /dev/null and b/admin/Public/Js/markitup/sets/bbcode/images/underline.png differ diff --git a/admin/Public/Js/markitup/sets/bbcode/readme.txt b/admin/Public/Js/markitup/sets/bbcode/readme.txt new file mode 100644 index 0000000..745d5dd --- /dev/null +++ b/admin/Public/Js/markitup/sets/bbcode/readme.txt @@ -0,0 +1,11 @@ +Markup language: +BBCode + +Description: +A basic BBCode markup set with Bold, Italic, Underline, Picture, Link, Size, List, Quotes, Code, Clean button, Preview button. + +Install: +- Download the zip file +- Unzip it in your markItUp! sets folder +- Modify your JS link to point at this set.js +- Modify your CSS link to point at this style.css \ No newline at end of file diff --git a/admin/Public/Js/markitup/sets/bbcode/set.js b/admin/Public/Js/markitup/sets/bbcode/set.js new file mode 100644 index 0000000..3d16ea5 --- /dev/null +++ b/admin/Public/Js/markitup/sets/bbcode/set.js @@ -0,0 +1,32 @@ +// ---------------------------------------------------------------------------- +// markItUp! +// ---------------------------------------------------------------------------- +// Copyright (C) 2008 Jay Salvat +// http://markitup.jaysalvat.com/ +// ---------------------------------------------------------------------------- +// BBCode tags example +// http://en.wikipedia.org/wiki/Bbcode +// ---------------------------------------------------------------------------- +// Feel free to add more tags +// ---------------------------------------------------------------------------- +mySettings = { + previewParserPath: '', // path to your BBCode parser + markupSet: [ + {name:'Heading 1', key:'1', openWith:'[h1]', closeWith:'[/h1]' }, + {name:'Heading 2', key:'2', openWith:'[h2]', closeWith:'[/h2]' }, + {name:'Heading 3', key:'3', openWith:'[h3]', closeWith:'[/h3]' }, + {name:'Paragraph', openWith:'[p]', closeWith:'[/p]' }, + {separator:'---------------' }, + {name:'Bold', key:'B', openWith:'[b]', closeWith:'[/b]'}, + {name:'Italic', key:'I', openWith:'[i]', closeWith:'[/i]'}, + {name:'Underline', key:'U', openWith:'[u]', closeWith:'[/u]'}, + {name:'Stroke through', key:'S', openWith:'[del]', closeWith:'[/del]' }, + {separator:'---------------' }, + {name:'Bulleted list', openWith:'[list]\n', closeWith:'\n[/list]'}, + {name:'Numeric list', openWith:'[enum]\n', closeWith:'\n[/enum]'}, + {name:'List item', openWith:'[*] ', closeWith:'[/*]'}, + {separator:'---------------' }, + {name:'Code', openWith:'[code]', closeWith:'[/code]'}, + {name:'Link', key: 'L', openWith:'[a]', closeWith:'[/a]',placeHolder:'http://the_url | the_text'}, + ] +} \ No newline at end of file diff --git a/admin/Public/Js/markitup/sets/bbcode/style.css b/admin/Public/Js/markitup/sets/bbcode/style.css new file mode 100644 index 0000000..4ab6031 --- /dev/null +++ b/admin/Public/Js/markitup/sets/bbcode/style.css @@ -0,0 +1,72 @@ +/* ------------------------------------------------------------------- +// markItUp! +// By Jay Salvat - http://markitup.jaysalvat.com/ +// ------------------------------------------------------------------*/ +.markItUp .markItUpButton1 a { + background-image:url(images/h1.png); +} +.markItUp .markItUpButton2 a { + background-image:url(images/h2.png); +} +.markItUp .markItUpButton3 a { + background-image:url(images/h3.png); +} +.markItUp .markItUpButton4 a { + background-image:url(images/paragraph.png); +} +.markItUp .markItUpButton5 a { + background-image:url(images/bold.png); +} +.markItUp .markItUpButton6 a { + background-image:url(images/italic.png); +} +.markItUp .markItUpButton7 a { + background-image:url(images/underline.png); +} +.markItUp .markItUpButton8 a { + background-image:url(images/stroke.png); +} +.markItUp .markItUpButton9 a { + background-image:url(images/list-bullet.png); +} +.markItUp .markItUpButton10 a { + background-image:url(images/list-numeric.png); +} +.markItUp .markItUpButton11 a { + background-image:url(images/list-item.png); +} +.markItUp .markItUpButton12 a { + background-image:url(images/code.png); +} +.markItUp .markItUpButton13 a { + background-image:url(images/link.png); +} +/*.markItUp .markItUpButton4 a { + background-image:url(images/stroke.png); +}*/ + +/*.markItUp .markItUpButton4 a { + background-image:url(images/picture.png); +}*/ +/*.markItUp .markItUpButton5 a { + background-image:url(images/link.png); +} + +.markItUp .markItUpButton6 a { + background-image:url(images/fonts.png); +} + + +.markItUp .markItUpButton10 a { + background-image:url(images/quotes.png); +} +.markItUp .markItUpButton11 a { + background-image:url(images/code.png); +} + +.markItUp .clean a { + background-image:url(images/clean.png); +} +.markItUp .preview a { + background-image:url(images/preview.png); +}*/ \ No newline at end of file diff --git a/admin/Public/Js/markitup/skins/simple/images/handle.png b/admin/Public/Js/markitup/skins/simple/images/handle.png new file mode 100644 index 0000000..3993b20 Binary files /dev/null and b/admin/Public/Js/markitup/skins/simple/images/handle.png differ diff --git a/admin/Public/Js/markitup/skins/simple/images/menu.png b/admin/Public/Js/markitup/skins/simple/images/menu.png new file mode 100644 index 0000000..44a07af Binary files /dev/null and b/admin/Public/Js/markitup/skins/simple/images/menu.png differ diff --git a/admin/Public/Js/markitup/skins/simple/images/submenu.png b/admin/Public/Js/markitup/skins/simple/images/submenu.png new file mode 100644 index 0000000..03d1977 Binary files /dev/null and b/admin/Public/Js/markitup/skins/simple/images/submenu.png differ diff --git a/admin/Public/Js/markitup/skins/simple/style.css b/admin/Public/Js/markitup/skins/simple/style.css new file mode 100644 index 0000000..4ff830f --- /dev/null +++ b/admin/Public/Js/markitup/skins/simple/style.css @@ -0,0 +1,118 @@ +/* ------------------------------------------------------------------- +// markItUp! Universal MarkUp Engine, JQuery plugin +// By Jay Salvat - http://markitup.jaysalvat.com/ +// ------------------------------------------------------------------*/ +.markItUp * { + margin:0px; padding:0px; + outline:none; +} +.markItUp a:link, +.markItUp a:visited { + color:#000; + text-decoration:none; +} +.markItUp { + width:700px; + margin:5px 0 5px 0; +} +.markItUpContainer { + font:11px Verdana, Arial, Helvetica, sans-serif; +} +.markItUpEditor { + font:12px 'Courier New', Courier, monospace; + padding:5px; + width:640px; + height:300px; + clear:both; display:block; + line-height:18px; + overflow:auto; +} +.markItUpPreviewFrame { + overflow:auto; + background-color:#FFF; + width:99.9%; + height:300px; + margin:5px 0; +} +.markItUpFooter { + width:100%; +} +.markItUpResizeHandle { + overflow:hidden; + width:22px; height:5px; + margin-left:auto; + margin-right:auto; + background-image:url(images/handle.png); + cursor:n-resize; +} +/***************************************************************************************/ +/* first row of buttons */ +.markItUpHeader ul li { + list-style:none; + float:left; + position:relative; +} +.markItUpHeader ul li:hover > ul{ + display:block; +} +.markItUpHeader ul .markItUpDropMenu { + background:transparent url(images/menu.png) no-repeat 115% 50%; + margin-right:5px; +} +.markItUpHeader ul .markItUpDropMenu li { + margin-right:0px; +} +/* next rows of buttons */ +.markItUpHeader ul ul { + display:none; + position:absolute; + top:18px; left:0px; + background:#FFF; + border:1px solid #000; +} +.markItUpHeader ul ul li { + float:none; + border-bottom:1px solid #000; +} +.markItUpHeader ul ul .markItUpDropMenu { + background:#FFF url(images/submenu.png) no-repeat 100% 50%; +} +.markItUpHeader ul .markItUpSeparator { + margin:0 10px; + width:1px; + height:16px; + overflow:hidden; + background-color:#CCC; +} +.markItUpHeader ul ul .markItUpSeparator { + width:auto; height:1px; + margin:0px; +} +/* next rows of buttons */ +.markItUpHeader ul ul ul { + position:absolute; + top:-1px; left:150px; +} +.markItUpHeader ul ul ul li { + float:none; +} +.markItUpHeader ul a { + display:block; + width:16px; height:16px; + text-indent:-10000px; + background-repeat:no-repeat; + padding:3px; + margin:0px; +} +.markItUpHeader ul ul a { + display:block; + padding-left:0px; + text-indent:0; + width:120px; + padding:5px 5px 5px 25px; + background-position:2px 50%; +} +.markItUpHeader ul ul a:hover { + color:#FFF; + background-color:#000; +} diff --git a/admin/Public/Js/stats.js b/admin/Public/Js/stats.js new file mode 100644 index 0000000..7d6be08 --- /dev/null +++ b/admin/Public/Js/stats.js @@ -0,0 +1,35 @@ + +/*************************************************************************** + phpTrafficA @soft.ZoneO.net + Copyright (C) 2004-2008 ZoneO-soft, Butchu (email: "butchu" with the domain "zoneo.net") + + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + More Info About The Licence At http://www.gnu.org/copyleft/gpl.html +****************************************************************************/ + +function encode64(inp){ +var key="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; +var chr1,chr2,chr3,enc3,enc4,i=0,out=""; +while(i127) chr1=88; +chr2=inp.charCodeAt(i++);if(chr2>127) chr2=88; +chr3=inp.charCodeAt(i++);if(chr3>127) chr3=88; +if(isNaN(chr3)) {enc4=64;chr3=0;} else enc4=chr3&63; +if(isNaN(chr2)) {enc3=64;chr2=0;} else enc3=((chr2<<2)|(chr3>>6))&63; +out+=key.charAt((chr1>>2)&63)+key.charAt(((chr1<<4)|(chr2>>4))&63)+key.charAt(enc3)+key.charAt(enc4); +} +return encodeURIComponent(out); +} + +function stats(sid){ +var referer=encode64(document.referrer); +var thispage=encode64(window.location.pathname+location.search); +var date=new Date(); +var time=date.getTime(); +var resolution= screen.width + "x" + screen.height; +document.writeln("\"\"\n"); +} diff --git a/admin/Public/index.html b/admin/Public/index.html new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/admin/Public/index.html @@ -0,0 +1 @@ + diff --git a/admin/README.txt b/admin/README.txt new file mode 100644 index 0000000..4ff6db4 --- /dev/null +++ b/admin/README.txt @@ -0,0 +1,62 @@ + +== Introduction == + +h-admin is a web software that has to be used together with h-source. It is formed by a set of files used to administrate the h-source tables + + +== Installation and configuration == + +In order to use h-source you have to install h-source (you can't use h-admin if you have not installed h-source before). In order to install h-source read the README.txt file inside the h-source package + +In order to use h-admin you have to usa the same database already created for h-source. You have only to add some (5) new tables. + +The new tables that have to be created are written inside the file tables.sql (of the h-admin package). + +After you have created the new tables as indicated inside the tables.sql file, open the Config/Config.php file + +You have to set the following constants: + + DB: name of the database (the database just created for h-source) + USER: database user + PWD: database password + HOST: name of the mysql server (usually localhost) + + DOMAIN_NAME: the domain name of the website (use localhost or create a virtual host in your web server) + +Now you have to copy the extracted h-admin files inside the DocumentRoot of your server. You can choose to leave all the files inside the DocumentRoot or not, see the explanations in this page (http://www.easygiant.org/learn/index/6). + +You have now to assure that the allowOverride directive is active in the configuration file of your Apache server. You have to activate the allowOverride directive for the folder inside which you have saved the h-admin files (and the index.php file). If you have not activated the allowOverride directive, then your URL won't be interpreted by the mod_rewrite module (you won't be able to use h-admin). In a GNU/Linux system the apache configuration file is usually saved at /etc/apache2/apache2.conf. + +Direct your browser to the following URL: + + http://DOMAIN_NAME/ + +where DOMAIN_NAME is the domain name you have previously set (perhaps localhost). You should see the login page of the h-admin software. + +user: admin +password: admin + + +== Learn the EasyGiant PHP framework == + +Since h-admin is an application of the EasyGiant PHP framework you can use the EasyGiant features in order to modify the h-admin source code. Visit www.easygiant.org + + +// h-admin, a web software to build a community of people that want to share their hardware information. +// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt) +// +// This file is part of h-admin +// +// h-admin is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, either version 3 of the License, or +// (at your option) any later version. +// +// h-admin is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with h-admin. If not, see . + diff --git a/admin/h-admin-copyright.txt b/admin/h-admin-copyright.txt new file mode 100644 index 0000000..06d8fc1 --- /dev/null +++ b/admin/h-admin-copyright.txt @@ -0,0 +1,16 @@ +The h-admin software is a PHP software written thanks to the EasyGiant framework (see COPYRIGHT.txt) +Copyright (C) 2010 Antonio Gallo + +h-admin is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +h-admin is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with h-admin. If not, see . + diff --git a/admin/index.php b/admin/index.php new file mode 100755 index 0000000..dc616db --- /dev/null +++ b/admin/index.php @@ -0,0 +1,16 @@ +. + +create table adminusers ( + id_user INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + username VARCHAR(80) binary NOT NULL, + password CHAR(40) binary NOT NULL, + last_failure INT UNSIGNED NOT NULL, + has_confirmed INT UNSIGNED NOT NULL, + unique(username), + index(username, password) +)engine=innodb; + +create table admingroups ( + id_group INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + name VARCHAR(30) binary NOT NULL, + unique(name) +)engine=innodb; + +create table adminusers_groups ( + id_user int(11) UNSIGNED not null, + id_group int(11) UNSIGNED not null, + index group_indx(id_group), + index user_indx(id_user), + foreign key group_fky(id_group) references admingroups (id_group), + foreign key user_fky(id_user) references adminusers (id_user), + unique (id_group,id_user) +)engine=innodb; + + +insert into adminusers (username,password) values ('admin',sha1('admin')); + + +CREATE TABLE adminsessions ( + uid CHAR(32) NOT NULL, + token CHAR(32) NOT NULL, + id_user INT UNSIGNED NOT NULL, + creation_date INT UNSIGNED NOT NULL, + user_agent CHAR(32) NOT NULL, + INDEX(uid) +)engine=innodb; + + +create table accesses ( + id int(12) not null auto_increment primary key, + ip char(20) not null,data char(10) not null, + ora char(8) not null, + username varchar(30) not null +); diff --git a/config.xml b/config.xml new file mode 100644 index 0000000..8f87304 --- /dev/null +++ b/config.xml @@ -0,0 +1,681 @@ + + + + + + TopLink + Help + + + + + + TopLink + Aiuto + + + + + + TopLink + Ayuda + + + + + + TopLink + Télécharger + + + + + + TopLink + Βοήθεια + + + + + + + + TopLink + FAQ + + + + + + TopLink + FAQ + + + + + + TopLink + FAQ + + + + + + TopLink + FAQ + + + + + + TopLink + FAQ + + + + + + + + + raw + If you insert a new printer to h-node, please try to verify if the printer tracks users (see here) and fill the entry named "does it adopt any techniques to track users?" +
          + + ]]> + + + + + raw + Se inserite una nuova stampante nel database di h-node per favore provate a controllare se traccia gli utenti (leggete qui) e riempite il campo denominato "adotta qualche tecnica per tracciare gli utenti?" +
          + + ]]> + + + + + raw + Si inserta una nueva impresora a h-node, por favor verifique si la impresora rastrea a los usuarios (vea aquí) y llene la entrada "¿adopta alguna técnica para rastrear a los usuarios?" +
          + + ]]> + + + + + raw + Si vous ajoutez une nouvelle imprimante à h-node, veuillez essayer de vérifier si l'imprimante surveille les utilisateurs (voir ici) et remplir l'entrée intitulée "utilise-t-elle des techniques pour surveiller les utilisateurs ?" +
          + + ]]> + + + + + + + + raw +
          discover_hardware
          + + ]]> +
          +
          +
          + + + raw + Support freedom
          + ]]> + + + raw + supported by
          +
          + +
          + + ]]> + + + raw + subscribe to our +
          + +
          + + ]]>
          + +
          + + + raw + client for h-node +
          Please help in the development of the client for h-node (h-client project). See here and here +
          + + ]]>
          + +
          + + + raw + related projects +
          Please help in the development of the IsMyHWOK software, a different h-node client +
          + + ]]>
          + +
          + + + raw + download the source code +
          + +
          + + ]]>
          + +
          + + + raw + + useful links: + + + + + ]]> + + + + + + raw + Support freedom + ]]> + + + raw + supportato da +
          + +
          + + ]]>
          +
          + + raw + iscriviti alla nostra +
          + +
          + + ]]>
          + +
          + + + raw + client per h-node +
          Puoi aiutare nello sviluppo del client per h-node (progetto h-client). Leggi qui e qui +
          + + ]]>
          + +
          + + + raw + progetti correlati +
          Puoi aiutare nello sviluppo del software IsMyHWOK, un diverso client per h-node +
          + + ]]>
          + +
          + + + raw + scarica il codice sorgente +
          + +
          + + ]]>
          + +
          + + + raw + + link utili: + + + + + ]]> + + +
          + + + raw + Support freedom + ]]> + + + raw + con el apoyo de +
          + +
          + + ]]>
          +
          + + raw + suscríbase a nuestra +
          + +
          + + ]]>
          + +
          + + + raw + cliente para h-node +
          Por favor ayude en el desarrollo del cliente de h-node (proyecto h-client). Vea aquí y aquí +
          + + ]]>
          + +
          + + + raw + proyectos relacionados +
          Por favor ayuda en el desarrollo del programa IsMyHWOK, un cliente diferente para h-node +
          + + ]]>
          + +
          + + + raw + descargue el código fuente +
          + +
          + + ]]>
          + +
          + + + raw + + link utili: + + + + + ]]> + + +
          + + + +
          + + + + raw + guidelines on how to compile a hardware device page ]]> + + + + + raw + guida su come compilare una pagina di hardware ]]> + + + + + + + raw + learn how to find it ]]> + + + + + raw + scopri come individuarlo ]]> + + + + + raw + aprenda como encontrarlo ]]> + + + + + + + raw + discover all the wiki tags ]]> + + + + + raw + scopri tutti i tag della wiki ]]> + + + + + raw + mostrar todas las etiquetas del wiki ]]> + + + + + raw + voir tous les tags wiki ]]> + + + + + raw + Wiki-Elemente ]]> + + + + + raw + Wiki-Elemente ]]> + + + +
          +
          + + + + + + raw + Beware + this device tracks you down! +
          + See more about it +

          ]]> +
          +
          +
          + + + raw + Fai attenzione questo device utilizza delle tecniche per tracciare gli utenti! +
          + più informazioni +

          ]]> +
          +
          +
          +
          +
          +
          + + + + raw + how to understand if, and how, it tracks users ]]> + + + + + raw + come capire se e come tiene traccia degli utenti ]]> + + + +
          + +
          + + + + +
          + + + + raw + learn how to find it ]]> + + + + + raw + scopri come individuarlo ]]> + + + + + raw + aprenda como encontrarlo ]]> + + + +
          +
          + +
          + + + + raw + learn how to fill this entry ]]> + + + + + raw + guida su come scegliere questo campo ]]> + + + +
          +
          +
          + diff --git a/dafare.txt b/dafare.txt new file mode 100755 index 0000000..48e42d1 --- /dev/null +++ b/dafare.txt @@ -0,0 +1,12 @@ +da fare: + +mettere coppie controller,action ->non mettere generic,history - generic,revision + + + + +togliere link in wiki? + +mettere le coppie che sono accessibili controller,action + +controllo username (ctype_alnum) in users e adminusers diff --git a/h-node-schema-dump.sql b/h-node-schema-dump.sql new file mode 100644 index 0000000..400b3ba --- /dev/null +++ b/h-node-schema-dump.sql @@ -0,0 +1,614 @@ +-- MySQL dump 10.13 Distrib 5.5.62, for debian-linux-gnu (x86_64) +-- +-- Host: localhost Database: h_node_website +-- ------------------------------------------------------ +-- Server version 5.5.62-0ubuntu0.14.04.1 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `accesses` +-- + +DROP TABLE IF EXISTS `accesses`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `accesses` ( + `id` int(12) NOT NULL AUTO_INCREMENT, + `ip` char(20) NOT NULL, + `data` char(10) NOT NULL, + `ora` char(8) NOT NULL, + `username` varchar(30) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM AUTO_INCREMENT=693 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `admingroups` +-- + +DROP TABLE IF EXISTS `admingroups`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `admingroups` ( + `id_group` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`id_group`), + UNIQUE KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `adminsessions` +-- + +DROP TABLE IF EXISTS `adminsessions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `adminsessions` ( + `uid` char(32) NOT NULL, + `token` char(32) NOT NULL, + `id_user` int(10) unsigned NOT NULL, + `creation_date` int(10) unsigned NOT NULL, + `user_agent` char(32) NOT NULL, + KEY `uid` (`uid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `adminusers` +-- + +DROP TABLE IF EXISTS `adminusers`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `adminusers` ( + `id_user` int(10) unsigned NOT NULL AUTO_INCREMENT, + `username` varchar(80) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `password` char(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `last_failure` int(10) unsigned NOT NULL, + `has_confirmed` int(10) unsigned NOT NULL, + PRIMARY KEY (`id_user`), + UNIQUE KEY `username` (`username`), + KEY `username_2` (`username`,`password`) +) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `adminusers_groups` +-- + +DROP TABLE IF EXISTS `adminusers_groups`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `adminusers_groups` ( + `id_user` int(11) unsigned NOT NULL, + `id_group` int(11) unsigned NOT NULL, + UNIQUE KEY `id_group` (`id_group`,`id_user`), + KEY `group_indx` (`id_group`), + KEY `user_indx` (`id_user`), + CONSTRAINT `adminusers_groups_ibfk_1` FOREIGN KEY (`id_group`) REFERENCES `admingroups` (`id_group`), + CONSTRAINT `adminusers_groups_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `adminusers` (`id_user`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `boxes` +-- + +DROP TABLE IF EXISTS `boxes`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `boxes` ( + `id_box` int(11) NOT NULL AUTO_INCREMENT, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `title` varchar(150) NOT NULL, + `message` text NOT NULL, + PRIMARY KEY (`id_box`) +) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `deletion` +-- + +DROP TABLE IF EXISTS `deletion`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `deletion` ( + `id_del` int(10) unsigned NOT NULL AUTO_INCREMENT, + `created_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `object` char(15) NOT NULL, + `message` text NOT NULL, + `id_hard` int(10) unsigned NOT NULL, + `id_duplicate` int(10) unsigned NOT NULL, + PRIMARY KEY (`id_del`) +) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `distros` +-- + +DROP TABLE IF EXISTS `distros`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `distros` ( + `id_distro` int(10) unsigned NOT NULL AUTO_INCREMENT, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `clean_name` varchar(200) CHARACTER SET utf8 NOT NULL, + `full_name` varchar(200) CHARACTER SET utf8 NOT NULL, + `id_order` int(10) unsigned NOT NULL, + `active` tinyint(1) NOT NULL DEFAULT '1', + PRIMARY KEY (`id_distro`) +) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `hardware` +-- + +DROP TABLE IF EXISTS `hardware`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `hardware` ( + `id_hard` int(10) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(50) NOT NULL, + `kernel` varchar(100) NOT NULL, + `vendor` varchar(50) NOT NULL, + `model` varchar(200) NOT NULL, + `created_by` int(11) NOT NULL, + `updated_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_date` datetime NOT NULL, + `compatibility` char(15) NOT NULL, + `description` text NOT NULL, + `distribution` varchar(300) NOT NULL, + `video_card_type` varchar(100) NOT NULL, + `video_card_works` varchar(30) NOT NULL, + `wifi_type` varchar(100) NOT NULL, + `wifi_works` varchar(30) NOT NULL, + `comm_year` char(15) NOT NULL, + `ask_for_del` char(4) NOT NULL DEFAULT 'no', + `deleted` char(4) NOT NULL DEFAULT 'no', + `pci_id` char(10) NOT NULL, + `subtype` char(25) NOT NULL DEFAULT 'not-specified', + `driver` varchar(50) NOT NULL, + `interface` char(15) NOT NULL DEFAULT 'not-specified', + `bios` char(20) NOT NULL DEFAULT 'not-specified', + `webcam_type` varchar(100) NOT NULL, + `webcam_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `sound_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `bluetooth_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `fingerprint_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `architecture` char(15) NOT NULL DEFAULT 'not-specified', + `other_names` text NOT NULL, + `approved` char(4) NOT NULL DEFAULT 'yes', + `cleared` char(3) NOT NULL DEFAULT 'no', + `ethernet_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `sd_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `can_free_systems_be_installed` varchar(30) NOT NULL DEFAULT 'not-specified', + `it_tracks_users` varchar(30) NOT NULL DEFAULT 'not-specified', + `prevent_wifi` char(20) NOT NULL DEFAULT 'not-specified', + PRIMARY KEY (`id_hard`) +) ENGINE=InnoDB AUTO_INCREMENT=2228 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `hardware_users` +-- + +DROP TABLE IF EXISTS `hardware_users`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `hardware_users` ( + `id_user` int(11) unsigned NOT NULL, + `id_hard` int(11) unsigned NOT NULL, + UNIQUE KEY `id_user` (`id_user`,`id_hard`), + KEY `hard_indx` (`id_hard`), + KEY `user_indx` (`id_user`), + CONSTRAINT `hardware_users_ibfk_1` FOREIGN KEY (`id_hard`) REFERENCES `hardware` (`id_hard`), + CONSTRAINT `hardware_users_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `regusers` (`id_user`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `history` +-- + +DROP TABLE IF EXISTS `history`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `history` ( + `id_history` int(11) NOT NULL AUTO_INCREMENT, + `created_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `type` char(15) NOT NULL, + `action` char(15) NOT NULL, + `id` int(10) unsigned NOT NULL, + `message` text NOT NULL, + `gr` char(15) NOT NULL, + PRIMARY KEY (`id_history`) +) ENGINE=MyISAM AUTO_INCREMENT=10015 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `issues` +-- + +DROP TABLE IF EXISTS `issues`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `issues` ( + `id_issue` int(10) unsigned NOT NULL AUTO_INCREMENT, + `created_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_date` datetime NOT NULL, + `topic` char(35) NOT NULL, + `title` varchar(100) NOT NULL, + `message` text NOT NULL, + `priority` char(15) NOT NULL, + `status` char(15) NOT NULL, + `notice` text NOT NULL, + `deleted` char(4) NOT NULL DEFAULT 'no', + PRIMARY KEY (`id_issue`) +) ENGINE=InnoDB AUTO_INCREMENT=384 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `messages` +-- + +DROP TABLE IF EXISTS `messages`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `messages` ( + `id_mes` int(11) NOT NULL AUTO_INCREMENT, + `created_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `message` text NOT NULL, + `id_issue` int(10) unsigned NOT NULL, + `deleted` char(4) NOT NULL DEFAULT 'no', + `has_read` char(4) NOT NULL DEFAULT 'no', + PRIMARY KEY (`id_mes`) +) ENGINE=MyISAM AUTO_INCREMENT=1049 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `news` +-- + +DROP TABLE IF EXISTS `news`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `news` ( + `id_news` int(10) unsigned NOT NULL AUTO_INCREMENT, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `title` varchar(150) NOT NULL, + `message` text NOT NULL, + PRIMARY KEY (`id_news`) +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `params` +-- + +DROP TABLE IF EXISTS `params`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `params` ( + `id_par` int(10) unsigned NOT NULL AUTO_INCREMENT, + `updating` char(4) NOT NULL DEFAULT 'no', + `boxes_xml` text NOT NULL, + PRIMARY KEY (`id_par`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `profile` +-- + +DROP TABLE IF EXISTS `profile`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `profile` ( + `id_prof` int(10) unsigned NOT NULL AUTO_INCREMENT, + `created_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_date` datetime NOT NULL, + `real_name` varchar(100) NOT NULL, + `where_you_are` varchar(100) NOT NULL, + `birth_date` varchar(100) NOT NULL, + `fav_distro` varchar(100) NOT NULL, + `projects` text NOT NULL, + `publish_mail` char(4) NOT NULL DEFAULT 'no', + `description` text NOT NULL, + `website` varchar(100) NOT NULL, + `send_notification` char(4) NOT NULL DEFAULT 'yes', + PRIMARY KEY (`id_prof`) +) ENGINE=InnoDB AUTO_INCREMENT=4780 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `regaccesses` +-- + +DROP TABLE IF EXISTS `regaccesses`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `regaccesses` ( + `id` int(12) NOT NULL AUTO_INCREMENT, + `ip` char(20) NOT NULL, + `data` char(10) NOT NULL, + `ora` char(8) NOT NULL, + `username` varchar(30) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM AUTO_INCREMENT=47196 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `reggroups` +-- + +DROP TABLE IF EXISTS `reggroups`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `reggroups` ( + `id_group` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`id_group`), + UNIQUE KEY `name` (`name`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `regsessions` +-- + +DROP TABLE IF EXISTS `regsessions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `regsessions` ( + `uid` char(32) NOT NULL, + `token` char(32) NOT NULL, + `id_user` int(10) unsigned NOT NULL, + `creation_date` int(10) unsigned NOT NULL, + `user_agent` char(32) NOT NULL, + KEY `uid` (`uid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `regusers` +-- + +DROP TABLE IF EXISTS `regusers`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `regusers` ( + `id_user` int(10) unsigned NOT NULL AUTO_INCREMENT, + `username` varchar(80) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `password` char(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `last_failure` int(10) unsigned NOT NULL, + `has_confirmed` int(10) unsigned NOT NULL, + `e_mail` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `confirmation_token` char(32) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `creation_time` int(10) unsigned NOT NULL, + `temp_field` char(32) NOT NULL, + `deleted` char(4) NOT NULL DEFAULT 'no', + `forgot_token` char(32) NOT NULL, + `forgot_time` int(10) unsigned NOT NULL, + `blocked` char(4) NOT NULL DEFAULT 'no', + PRIMARY KEY (`id_user`), + UNIQUE KEY `username` (`username`), + KEY `username_2` (`username`,`password`) +) ENGINE=InnoDB AUTO_INCREMENT=5863 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `regusers_groups` +-- + +DROP TABLE IF EXISTS `regusers_groups`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `regusers_groups` ( + `id_user` int(11) unsigned NOT NULL, + `id_group` int(11) unsigned NOT NULL, + UNIQUE KEY `id_group` (`id_group`,`id_user`), + KEY `group_indx` (`id_group`), + KEY `user_indx` (`id_user`), + CONSTRAINT `regusers_groups_ibfk_1` FOREIGN KEY (`id_group`) REFERENCES `reggroups` (`id_group`), + CONSTRAINT `regusers_groups_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `regusers` (`id_user`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `revisions` +-- + +DROP TABLE IF EXISTS `revisions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `revisions` ( + `id_rev` int(10) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(50) NOT NULL, + `kernel` varchar(100) NOT NULL, + `vendor` varchar(50) NOT NULL, + `model` varchar(200) NOT NULL, + `created_by` int(11) NOT NULL, + `updated_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_date` datetime NOT NULL, + `compatibility` char(15) NOT NULL, + `description` text NOT NULL, + `distribution` varchar(300) NOT NULL, + `video_card_type` varchar(100) NOT NULL, + `video_card_works` varchar(30) NOT NULL, + `wifi_type` varchar(100) NOT NULL, + `wifi_works` varchar(30) NOT NULL, + `comm_year` char(15) NOT NULL, + `id_hard` int(10) unsigned NOT NULL, + `pci_id` char(10) NOT NULL, + `subtype` char(25) NOT NULL DEFAULT 'not-specified', + `driver` varchar(50) NOT NULL, + `interface` char(15) NOT NULL DEFAULT 'not-specified', + `bios` char(20) NOT NULL DEFAULT 'not-specified', + `webcam_type` varchar(100) NOT NULL, + `webcam_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `sound_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `bluetooth_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `fingerprint_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `architecture` char(15) NOT NULL DEFAULT 'not-specified', + `other_names` text NOT NULL, + `approved` char(4) NOT NULL DEFAULT 'yes', + `cleared` char(3) NOT NULL DEFAULT 'no', + `ethernet_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `sd_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `can_free_systems_be_installed` varchar(30) NOT NULL DEFAULT 'not-specified', + `it_tracks_users` varchar(30) NOT NULL DEFAULT 'not-specified', + `prevent_wifi` char(20) NOT NULL DEFAULT 'not-specified', + PRIMARY KEY (`id_rev`) +) ENGINE=InnoDB AUTO_INCREMENT=4166 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `talk` +-- + +DROP TABLE IF EXISTS `talk`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `talk` ( + `id_talk` int(10) unsigned NOT NULL AUTO_INCREMENT, + `created_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `title` varchar(100) NOT NULL, + `message` text NOT NULL, + `id_hard` int(10) unsigned NOT NULL, + `deleted` char(4) NOT NULL DEFAULT 'no', + PRIMARY KEY (`id_talk`) +) ENGINE=InnoDB AUTO_INCREMENT=712 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `vendors` +-- + +DROP TABLE IF EXISTS `vendors`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `vendors` ( + `id_vendor` int(10) unsigned NOT NULL AUTO_INCREMENT, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_date` datetime NOT NULL, + `vendorid` char(4) NOT NULL, + `clean_name` varchar(200) CHARACTER SET utf8 NOT NULL, + `full_name` varchar(200) CHARACTER SET utf8 NOT NULL, + `bus` enum('PCI','USB') DEFAULT NULL, + PRIMARY KEY (`id_vendor`), + UNIQUE KEY `bus` (`bus`,`vendorid`) +) ENGINE=InnoDB AUTO_INCREMENT=9846 DEFAULT CHARSET=latin1; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `wiki` +-- + +DROP TABLE IF EXISTS `wiki`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wiki` ( + `id_wiki` int(10) unsigned NOT NULL AUTO_INCREMENT, + `created_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_date` datetime NOT NULL, + `title` varchar(200) NOT NULL, + `title_clean` varchar(200) NOT NULL, + `page` text NOT NULL, + `deleted` char(3) NOT NULL DEFAULT 'no', + `blocked` char(3) NOT NULL DEFAULT 'no', + `is_main` char(3) NOT NULL DEFAULT 'no', + PRIMARY KEY (`id_wiki`) +) ENGINE=InnoDB AUTO_INCREMENT=205 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `wiki_revisions` +-- + +DROP TABLE IF EXISTS `wiki_revisions`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wiki_revisions` ( + `id_rev` int(10) unsigned NOT NULL AUTO_INCREMENT, + `created_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_date` datetime NOT NULL, + `title` varchar(200) NOT NULL, + `title_clean` varchar(200) NOT NULL, + `page` text NOT NULL, + `id_wiki` int(10) unsigned NOT NULL, + PRIMARY KEY (`id_rev`) +) ENGINE=InnoDB AUTO_INCREMENT=698 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `wiki_talk` +-- + +DROP TABLE IF EXISTS `wiki_talk`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wiki_talk` ( + `id_talk` int(10) unsigned NOT NULL AUTO_INCREMENT, + `created_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `title` varchar(100) NOT NULL, + `message` text NOT NULL, + `id_wiki` int(10) unsigned NOT NULL, + `deleted` char(4) NOT NULL DEFAULT 'no', + PRIMARY KEY (`id_talk`) +) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `wiki_users` +-- + +DROP TABLE IF EXISTS `wiki_users`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wiki_users` ( + `id_user` int(11) unsigned NOT NULL, + `id_wiki` int(11) unsigned NOT NULL, + UNIQUE KEY `id_user` (`id_user`,`id_wiki`), + KEY `wiki_indx` (`id_wiki`), + KEY `user_indx` (`id_user`), + CONSTRAINT `wiki_users_ibfk_1` FOREIGN KEY (`id_wiki`) REFERENCES `wiki` (`id_wiki`), + CONSTRAINT `wiki_users_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `regusers` (`id_user`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2021-08-01 20:15:05 diff --git a/h-source-copyright.txt b/h-source-copyright.txt new file mode 100755 index 0000000..26a08e8 --- /dev/null +++ b/h-source-copyright.txt @@ -0,0 +1,16 @@ +The h-source software is a PHP software written thanks to the EasyGiant framework (see COPYRIGHT.txt) +Copyright (C) 2010 Antonio Gallo + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see . + diff --git a/h-source/.htaccess b/h-source/.htaccess deleted file mode 100755 index 95ab62f..0000000 --- a/h-source/.htaccess +++ /dev/null @@ -1,5 +0,0 @@ -RewriteEngine On - -RewriteCond %{REQUEST_FILENAME} !-f -RewriteCond %{REQUEST_FILENAME} !-d -RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] diff --git a/h-source/Application/Controllers/AcquisitioncardsController.php b/h-source/Application/Controllers/AcquisitioncardsController.php deleted file mode 100644 index e373682..0000000 --- a/h-source/Application/Controllers/AcquisitioncardsController.php +++ /dev/null @@ -1,131 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class AcquisitioncardsController extends GenericController -{ - - public function __construct($model, $controller, $queryString) - { - - $worksOptions = Acquisitioncards::$select; - $worksField = 'compatibility'; - $interfaceOptions = Acquisitioncards::$interface; - - parent::__construct($model, $controller, $queryString); - - //load the model - $this->model('HardwareModel'); - $this->model('RevisionsModel'); - $this->model('AcquisitioncardsModel'); - $this->model('TalkModel'); - - $this->mod = $this->m['AcquisitioncardsModel']; - - $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; - $this->m['HardwareModel']->type = 'acquisition-card'; - - $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); - - $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,compatibility,pci_id,interface,driver,other_names','sanitizeAll'); - - $argKeys = array( - 'page:forceNat' => 1, - 'history_page:forceNat' => 1, - 'vendor:sanitizeString' => 'undef', - 'comm_year:sanitizeString' => 'undef', - 'compatibility:sanitizeString' => 'undef', - 'interface:sanitizeString' => 'undef', - 'sort-by:sanitizeString' => 'compatibility-desc', - 'search_string:sanitizeString' => 'undef' - ); - - $this->setArgKeys($argKeys); - - $data['title'] = 'Acquisition cards'; - - $data['intefaceOptions'] = $interfaceOptions; - $data['worksOptions'] = $worksOptions; - $data['worksField'] = $worksField; - - $data['notFoundString'] = "No acquisition card found"; - - $this->append($data); - } - - public function catalogue($lang = 'en') - { - $this->shift(1); - - $whereArray = array( - 'type' => $this->mod->type, - 'vendor' => $this->viewArgs['vendor'], - 'comm_year' => $this->viewArgs['comm_year'], - 'compatibility' => $this->viewArgs['compatibility'], - 'interface' => $this->viewArgs['interface'], - ); - - $this->mod->setWhereQueryClause($whereArray); - - parent::catalogue($lang); - } - - public function view($lang = 'en', $id = 0, $name = null) - { - parent::view($lang, $id, $name); - } - - public function history($lang = 'en', $id = 0) - { - parent::history($lang, $id); - } - - public function revision($lang = 'en', $id_rev = 0) - { - parent::revision($lang, $id_rev); - } - - public function insert($lang = 'en', $token = '') - { - parent::insert($lang, $token); - } - - public function update($lang = 'en', $token = '') - { - parent::update($lang, $token); - } - - public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) - { - parent::differences($lang, $id_hard, $id_rev); - } - - public function climb($lang = 'en', $id_rev = 0, $token = '') - { - parent::climb($lang, $id_rev, $token); - } - - public function talk($lang = 'en', $id_hard = 0, $token = '') - { - parent::talk($lang, $id_hard, $token); - } - -} diff --git a/h-source/Application/Controllers/BaseController.php b/h-source/Application/Controllers/BaseController.php deleted file mode 100644 index ac2be1f..0000000 --- a/h-source/Application/Controllers/BaseController.php +++ /dev/null @@ -1,303 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class BaseController extends Controller -{ - - protected $lang; - protected $islogged = 'no'; - protected $ismoderator = false; - protected $isadmin = false; - protected $querySanitized = true; - protected $token = 'token'; - protected $_updating = 'no'; - - protected $_configXml = null; - - protected $_topMenuClasses = array( - "home" => null, - "hardware" => null, - "credits" => null, - "issues" => null, - "contact" => null, - "search" => null, - "news" => null, - "download" => null, - "help" => null, - "wiki" => null, - "faq" => null, - "project" => null, - ); - - public function __construct($model, $controller, $queryString) { - parent::__construct($model, $controller, $queryString); - - header("Cache-Control: no-cache"); - - $this->model('BoxesModel'); - $this->model('HistoryModel'); - $this->model('ParamsModel'); - $this->model('UsersModel'); - - $this->load('header'); - $this->load('footer','last'); - - $this->session('registered'); - $this->s['registered']->checkStatus(); - - $data['username'] = null; - $data['user_groups'] = null; - $data['islogged'] = 'no'; - $data['token'] = 'token'; - $data['ismoderator'] = false; - $data['isadmin'] = false; - - if ($this->s['registered']->status['status'] === 'logged') - { - $data['username'] = $this->s['registered']->status['user']; - $groups = $this->s['registered']->status['groups']; - $groups[] = 'registered'; - $data['user_groups'] = implode(',',$groups); - - $data['islogged'] = 'yes'; - $this->islogged = $data['islogged']; - - $data['token'] = $this->s['registered']->status['token']; - $this->token = $data['token']; - - $data['ismoderator'] = in_array('moderator',$this->s['registered']->status['groups']) ? true : false; - $this->ismoderator = $data['ismoderator']; - - $data['isadmin'] = in_array('admin',$this->s['registered']->status['groups']) ? true : false; - $this->isadmin = $data['isadmin']; - } - - $data['lang'] = 'en'; - $this->lang = 'en'; - - if (isset($this->_queryString[0])) - { - $lang = (strcmp($this->_queryString[0],'') !== 0) ? $this->_queryString[0] : 'en'; - $data['lang'] = Lang::sanitize($lang); - $this->lang = $data['lang']; - Lang::$current = $data['lang']; - } - - $data['langIcon'] = Lang::getIcon(Lang::$current); - $data['langLabel'] = Lang::getLabel(Lang::$current); - - //set desktop or mobile version - Version::set(); - //subfolder of the Views folder where to look for view files - Params::$viewSubfolder = Version::getViewSubfolder(); - - $data['tm'] = $this->_topMenuClasses; - - $this->_queryString = $this->sanitizeQueryString($this->_queryString); - - $data['querySanitized'] = $this->querySanitized; - $data['queryString'] = Url::createUrl($this->_queryString); - - //check ft they are updating the website - $updating = $this->m['ParamsModel']->select('updating')->where(array('id_par'=>1))->toList('updating')->send(); - - $data['updating_flag'] = 'no'; - if (count($updating)>0) - { - $data['updating_flag'] = $updating[0]; - $this->_updating = $data['updating_flag']; - } - - //get the configuration xml - $xmlRes = $this->m['ParamsModel']->select('boxes_xml')->where(array('id_par'=>1))->toList('boxes_xml')->send(); - if (count($xmlRes)>0) - { - $configXml = htmlspecialchars_decode($xmlRes[0],ENT_QUOTES); - - if (Website::$useXmlConfigFile) - { - $xmlConfigFile = rtrim(Website::$xmlConfigFileFolder,'/') . '/config.xml'; - if (@simplexml_load_file($xmlConfigFile)) - { - $this->_configXml = simplexml_load_file($xmlConfigFile); - } - } - else - { - if (@simplexml_load_string($configXml)) - { - $this->_configXml = simplexml_load_string($configXml); - } - } - } - - //elements of the top menu from the config.xml file - //help link - $mod = new BoxParser($this->getBox(array("top_menu","help_page_link"))); - $data["topMenuHelpLink"] = $mod->modules[0]->render($this->_topMenuClasses["help"]); - //faq link - $mod = new BoxParser($this->getBox(array("top_menu","faq_link"))); - $data["topMenuFaqLink"] = $mod->modules[0]->render($this->_topMenuClasses["faq"]); - - //link to the "discover your hardware" wiki page - $data['discoverYourHardwareLink'] = $this->getModule(array('right_column','discover_your_hardware')); - - Distributions::setAllowedList(); - - $this->append($data); - } - - //get the right box from the configuration xml - protected function getBox($xmlPath,$xmlString = null) - { - if (!isset($xmlString)) - { - $xmlString = $this->_configXml; - } - - if (is_array($xmlPath)) - { - if (isset($xmlString)) - { - $tempXml = $xmlString->{$xmlPath[0]}; - if (count($xmlPath) === 1) - { - if (isset($tempXml->{$this->lang})) - { - return $tempXml->{$this->lang}->asXml(); - } - else if (isset($tempXml->{"en"})) - { - return $tempXml->{"en"}->asXml(); - } - else - { - return null; - } - } - else - { - array_shift($xmlPath); - return $this->getBox($xmlPath,$tempXml); - } - } - } - return null; - } - -// get the HTML of a module from the xml configuration string -// $xmlPath: array conitaining the path - protected function getModule($xmlPath) - { - $tracksHelpLabel = null; - $xml = $this->getBox($xmlPath); - if ($xml) - { - $box_news = new BoxParser($xml); - $tracksHelpLabel = $box_news->render(); - } - return $tracksHelpLabel; - } - - protected function right($lang = 'en') - { - $hard = new HardwareModel(); - - $data['stat'] = $hard->clear()->select('type,count(*) AS numb')->where(array('-deleted'=>'no','cleared'=>'no'))->groupBy('type')->toList('type','aggregate.numb')->send(); - - $logged = $this->s['registered']->getUsersLogged(); - - $data['numbLogged'] = count($logged); - - //render the boxes inside the right column - $data['htmlRightBox'] = $this->getModule(array('right_column')); - - $data['language_links'] = $this->buildLanguageLinks($this->lang); - - $data['lastModif'] = $this->m['HistoryModel'] - ->clear()->select() - ->inner('hardware') - ->on('hardware.id_hard=history.id') - ->where(array('type'=>'hardware','gr'=>'registered','deleted'=>'no','cleared'=>'no',)) - ->orderBy('id_history desc') - ->limit(5) - ->send(); - - $this->append($data); - $this->load('right'); - } - - protected function sanitizeQueryString($queryArray) - { - $resArray = array(); - foreach ($queryArray as $item) - { - if (preg_match('/^[a-zA-Z0-9\-\_\.\+\s]+$/',$item)) - { - $resArray[] = sanitizeAll($item); - } - else - { - $this->querySanitized = false; - return array('en'); - } - } - return $resArray; - } - - protected function buildLanguageLinks($lang) - { - $status = $this->_queryString; - $cPage = $this->querySanitized ? $this->currPage : $this->baseUrl."/home/index"; - - $mobileDataRole = Version::get() === "mobile" ? "data-role='listview'" : null; - - $link = "\n"; - return $link; - } - - protected function cleverLoad($file) - { - $fileInt = $file."_".$this->lang; - if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . Params::$viewSubfolder . DS . ucwords($this->controller) . DS . $fileInt . '.php')) - { - $this->load($fileInt); - } - else - { - $this->load($file); - } - } - -} diff --git a/h-source/Application/Controllers/BluetoothController.php b/h-source/Application/Controllers/BluetoothController.php deleted file mode 100644 index eae4b74..0000000 --- a/h-source/Application/Controllers/BluetoothController.php +++ /dev/null @@ -1,131 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class BluetoothController extends GenericController -{ - - public function __construct($model, $controller, $queryString) - { - - $worksOptions = Bluetooth::$select; - $worksField = 'bluetooth_works'; - $interfaceOptions = Bluetooth::$interface; - - parent::__construct($model, $controller, $queryString); - - //load the model - $this->model('HardwareModel'); - $this->model('RevisionsModel'); - $this->model('BluetoothModel'); - $this->model('TalkModel'); - - $this->mod = $this->m['BluetoothModel']; - - $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; - $this->m['HardwareModel']->type = 'bluetooth'; - - $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); - - $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,bluetooth_works,pci_id,interface,driver,other_names','sanitizeAll'); - - $argKeys = array( - 'page:forceNat' => 1, - 'history_page:forceNat' => 1, - 'vendor:sanitizeString' => 'undef', - 'comm_year:sanitizeString' => 'undef', - 'bluetooth_works:sanitizeString' => 'undef', - 'interface:sanitizeString' => 'undef', - 'sort-by:sanitizeString' => 'bluetooth-works', - 'search_string:sanitizeString' => 'undef' - ); - - $this->setArgKeys($argKeys); - - $data['title'] = 'Bluetooth'; - - $data['intefaceOptions'] = $interfaceOptions; - $data['worksOptions'] = $worksOptions; - $data['worksField'] = $worksField; - - $data['notFoundString'] = "No bluetooth devices found"; - - $this->append($data); - } - - public function catalogue($lang = 'en') - { - $this->shift(1); - - $whereArray = array( - 'type' => $this->mod->type, - 'vendor' => $this->viewArgs['vendor'], - 'comm_year' => $this->viewArgs['comm_year'], - 'bluetooth_works' => $this->viewArgs['bluetooth_works'], - 'interface' => $this->viewArgs['interface'], - ); - - $this->mod->setWhereQueryClause($whereArray); - - parent::catalogue($lang); - } - - public function view($lang = 'en', $id = 0, $name = null) - { - parent::view($lang, $id, $name); - } - - public function history($lang = 'en', $id = 0) - { - parent::history($lang, $id); - } - - public function revision($lang = 'en', $id_rev = 0) - { - parent::revision($lang, $id_rev); - } - - public function insert($lang = 'en', $token = '') - { - parent::insert($lang, $token); - } - - public function update($lang = 'en', $token = '') - { - parent::update($lang, $token); - } - - public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) - { - parent::differences($lang, $id_hard, $id_rev); - } - - public function climb($lang = 'en', $id_rev = 0, $token = '') - { - parent::climb($lang, $id_rev, $token); - } - - public function talk($lang = 'en', $id_hard = 0, $token = '') - { - parent::talk($lang, $id_hard, $token); - } - -} diff --git a/h-source/Application/Controllers/ClientController.php b/h-source/Application/Controllers/ClientController.php deleted file mode 100644 index 51966c9..0000000 --- a/h-source/Application/Controllers/ClientController.php +++ /dev/null @@ -1,55 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class ClientController extends BaseController -{ - - public function __construct($model, $controller, $queryString) - { - parent::__construct($model, $controller, $queryString); - } - - public function licenseinfo($lang = 'en') - { - header ("Content-Type:text/xml"); - - $data["xml"] = "\n"; - - $this->append($data); - $this->clean(); - $this->load("license"); - } - - public function userinfo($lang = 'en') - { - header ("Content-Type:text/xml"); - - $this->s['registered']->checkStatus(); - - $data['user_status'] = strcmp($this->islogged,'yes') === 0 ? 'logged' : 'not-logged'; - - $this->append($data); - $this->clean(); - $this->load('info'); - } - -} \ No newline at end of file diff --git a/h-source/Application/Controllers/ContactController.php b/h-source/Application/Controllers/ContactController.php deleted file mode 100644 index 197ec9a..0000000 --- a/h-source/Application/Controllers/ContactController.php +++ /dev/null @@ -1,43 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class ContactController extends BaseController -{ - - public function __construct($model, $controller, $queryString) - { - - $this->_topMenuClasses['contact'] = " class='currentitem ui-btn-active'"; - - parent::__construct($model, $controller, $queryString); - - $data['title'] = 'contact - '.Website::$generalName; - $this->append($data); - } - - public function index($lang = 'en') - { - $this->cleverLoad('index'); - $this->right(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Controllers/CreditsController.php b/h-source/Application/Controllers/CreditsController.php deleted file mode 100644 index 4dbcc4a..0000000 --- a/h-source/Application/Controllers/CreditsController.php +++ /dev/null @@ -1,43 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class CreditsController extends BaseController -{ - - public function __construct($model, $controller, $queryString) - { - - $this->_topMenuClasses['credits'] = " class='currentitem ui-btn-active'"; - - parent::__construct($model, $controller, $queryString); - - $data['title'] = 'credits - '.Website::$generalName; - $this->append($data); - } - - public function index($lang = 'en') - { - $this->cleverLoad('index'); - $this->right(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Controllers/DownloadController.php b/h-source/Application/Controllers/DownloadController.php deleted file mode 100644 index b221095..0000000 --- a/h-source/Application/Controllers/DownloadController.php +++ /dev/null @@ -1,275 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class DownloadController extends BaseController -{ - - public function __construct($model, $controller, $queryString) - { - - $this->_topMenuClasses['download'] = " class='currentitem'"; - - parent::__construct($model, $controller, $queryString); - - $this->model('HardwareModel'); - - $data['title'] = 'download - '.Website::$generalName; - $this->append($data); - } - - public function index($lang = 'en') - { - $this->cleverLoad('index'); - $this->right($lang); - } - - //get the xml of the archive - private function getXml($res) - { - $xml = null; - $xml = "\n"; - $xml .= "\n"; - $xml .= "\t\n"; - $xml .= "\t\th-node project\n"; - $xml .= "\t\t".Website::$generalName."\n"; - $xml .= "\t\t".date("Y-m-d H:i:s")."\n"; - $xml .= "\t\t".License::getInsideXml()."\n"; - $xml .= "\t\n"; - - foreach ($res as $row) - { - $type = $row['hardware']['type']; - $xml .= "\t\n"; - - $xml .= "\t\t".$row['hardware']['id_hard']."\n"; - $xml .= "\t\t".$row['hardware']['type']."\n"; - - if ($type === 'notebook' or $type === 'printer' or $type === 'host-controller' ) - { - $xml .= "\t\t".$row['hardware']['subtype']."\n"; - } - if ($type === 'notebook') - { - $xml .= "\t\t".translate($row['hardware']['architecture'])."\n"; - $xml .= "\t\t".$row['hardware']['bios']."\n"; - $xml .= "\t\t".$row['hardware']['can_free_systems_be_installed']."\n"; - $xml .= "\t\t".$row['hardware']['prevent_wifi']."\n"; - } - - $xml .= "\t\t".$row['hardware']['model']."\n"; - - if ($type !== 'notebook') - { - $xml .= "\t\t\n"; - $xml .= "\t\t".$row['hardware']['pci_id']."\n"; - } - - $xml .= "\t\t".$row['hardware']['vendor']."\n"; - $xml .= "\t\t".$row['hardware']['kernel']."\n"; - $xml .= "\t\t".$row['hardware']['distribution']."\n"; - $xml .= "\t\t".$row['hardware']['comm_year']."\n"; - - if ($type !== 'notebook') - { - $xml .= "\t\t".$row['hardware']['interface']."\n"; - } - - if ($type === 'notebook' or $type === 'printer' or $type === 'scanner') - { - $xml .= "\t\t".$row['hardware']['compatibility']."\n"; - } - else if ($type === '3G-card' or $type === 'wifi') - { - $xml .= "\t\t".$row['hardware']['wifi_works']."\n"; - } - else if ($type === 'soundcard') - { - $xml .= "\t\t".$row['hardware']['sound_card_works']."\n"; - } - else if ($type === 'bluetooth') - { - $xml .= "\t\t".$row['hardware']['bluetooth_works']."\n"; - } - else if ($type === 'webcam') - { - $xml .= "\t\t".$row['hardware']['webcam_works']."\n"; - } - else if ($type === 'videocard') - { - $xml .= "\t\t".$row['hardware']['video_card_works']."\n"; - } - else if ($type === 'acquisition-card' or $type === 'modem' or $type === 'RAID-adapter' or $type === 'host-controller') - { - $xml .= "\t\t".$row['hardware']['compatibility']."\n"; - } - else if ($type === 'fingerprint-reader') - { - $xml .= "\t\t".$row['hardware']['fingerprint_works']."\n"; - } - else if ($type === 'ethernet-card') - { - $xml .= "\t\t".$row['hardware']['ethernet_card_works']."\n"; - } - else if ($type === 'sd-card-reader') - { - $xml .= "\t\t".$row['hardware']['sd_card_works']."\n"; - } - - if ($type === 'printer') - { - $xml .= "\t\t".$row['hardware']['it_tracks_users']."\n"; - } - - if ($type === 'notebook') - { - $xml .= "\t\t".$row['hardware']['wifi_type']."\n"; - $xml .= "\t\t".$row['hardware']['video_card_type']."\n"; - $xml .= "\t\t".$row['hardware']['webcam_type']."\n"; - $xml .= "\t\t".$row['hardware']['wifi_works']."\n"; - $xml .= "\t\t".$row['hardware']['video_card_works']."\n"; - $xml .= "\t\t".$row['hardware']['webcam_works']."\n"; - } - - if ($type !== "notebook") - { - $xml .= "\t\t".$row['hardware']['driver']."\n"; - } - - $xml .= "\t\t\n"; - - $xml .= "\t\t".$this->baseUrl."/".Hardware::getControllerFromType($type)."/view/".$this->lang."/".$row['hardware']['id_hard']."/".encodeUrl($row['hardware']['model'])."\n"; - $xml .= "\t\t".$this->baseUrl."/".Hardware::getControllerFromType($type)."/view/".$this->lang."/".$row['hardware']['id_hard']."\n"; - $xml .= "\t\t".$this->baseUrl."/".Hardware::getControllerFromType($type)."/history/".$this->lang."/".$row['hardware']['id_hard']."\n"; - - $xml .= "\t\n"; - } - - $xml .= "\n"; - - return $xml; - } - - protected function printXml($lang = 'en', $whereArray) - { - header ("Content-Type:text/xml"); - -// header("Content-Type: application/force-download"); -// header("Content-Type: application/octet-stream"); -// header("Content-Type: application/download"); - - $filename = array_key_exists('type',$whereArray) ? $whereArray['type'] : "all"; - header("Content-Disposition: attachment; filename=h-node-".$filename.".xml;"); - - $res = $this->m['HardwareModel']->clear()->select()->where($whereArray)->aWhere(array("cleared"=>"no"))->orderBy("type,hardware.id_hard")->send(); - - $data['xml'] = $this->getXml($res); - - $this->append($data); - $this->clean(); - $this->load('xml'); - } - - public function all($lang = 'en') - { - $this->printXml($lang, array('-deleted'=>'no')); - } - - public function notebooks($lang = 'en') - { - $this->printXml($lang, array('type'=>'notebook','-deleted'=>'no')); - } - - public function wifi($lang = 'en') - { - $this->printXml($lang, array('type'=>'wifi','-deleted'=>'no')); - } - - public function videocards($lang = 'en') - { - $this->printXml($lang, array('type'=>'videocard','-deleted'=>'no')); - } - - public function printers($lang = 'en') - { - $this->printXml($lang, array('type'=>'printer','-deleted'=>'no')); - } - - public function scanners($lang = 'en') - { - $this->printXml($lang, array('type'=>'scanner','-deleted'=>'no')); - } - - public function threegcards($lang = 'en') - { - $this->printXml($lang, array('type'=>'3G-card','-deleted'=>'no')); - } - - public function soundcards($lang = 'en') - { - $this->printXml($lang, array('type'=>'soundcard','-deleted'=>'no')); - } - - public function webcams($lang = 'en') - { - $this->printXml($lang, array('type'=>'webcam','-deleted'=>'no')); - } - - public function bluetooth($lang = 'en') - { - $this->printXml($lang, array('type'=>'bluetooth','-deleted'=>'no')); - } - - public function acquisitioncards($lang = 'en') - { - $this->printXml($lang, array('type'=>'acquisition-card','-deleted'=>'no')); - } - - public function fingerprintreaders($lang = 'en') - { - $this->printXml($lang, array('type'=>'fingerprint-reader','-deleted'=>'no')); - } - - public function ethernetcards($lang = 'en') - { - $this->printXml($lang, array('type'=>'ethernet-card','-deleted'=>'no')); - } - - public function sdcardreaders($lang = 'en') - { - $this->printXml($lang, array('type'=>'sd-card-reader','-deleted'=>'no')); - } - - public function modems($lang = 'en') - { - $this->printXml($lang, array('type'=>'modem','-deleted'=>'no')); - } - - public function raidadapters($lang = 'en') - { - $this->printXml($lang, array('type'=>'RAID-adapter','-deleted'=>'no')); - } - - public function hostcontrollers($lang = 'en') - { - $this->printXml($lang, array('type'=>'host-controller','-deleted'=>'no')); - } -} diff --git a/h-source/Application/Controllers/EthernetcardsController.php b/h-source/Application/Controllers/EthernetcardsController.php deleted file mode 100644 index 0425122..0000000 --- a/h-source/Application/Controllers/EthernetcardsController.php +++ /dev/null @@ -1,131 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class EthernetcardsController extends GenericController -{ - - public function __construct($model, $controller, $queryString) - { - - $worksOptions = Ethernetcards::$select; - $worksField = 'ethernet_card_works'; - $interfaceOptions = Ethernetcards::$interface; - - parent::__construct($model, $controller, $queryString); - - //load the model - $this->model('HardwareModel'); - $this->model('RevisionsModel'); - $this->model('EthernetcardsModel'); - $this->model('TalkModel'); - - $this->mod = $this->m['EthernetcardsModel']; - - $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; - $this->m['HardwareModel']->type = 'ethernet-card'; - - $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); - - $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,ethernet_card_works,pci_id,interface,driver,other_names','sanitizeAll'); - - $argKeys = array( - 'page:forceNat' => 1, - 'history_page:forceNat' => 1, - 'vendor:sanitizeString' => 'undef', - 'comm_year:sanitizeString' => 'undef', - 'ethernet_card_works:sanitizeString' => 'undef', - 'interface:sanitizeString' => 'undef', - 'sort-by:sanitizeString' => 'ethernet-works', - 'search_string:sanitizeString' => 'undef' - ); - - $this->setArgKeys($argKeys); - - $data['title'] = 'Ethernet cards'; - - $data['intefaceOptions'] = $interfaceOptions; - $data['worksOptions'] = $worksOptions; - $data['worksField'] = $worksField; - - $data['notFoundString'] = "No ethernet devices found"; - - $this->append($data); - } - - public function catalogue($lang = 'en') - { - $this->shift(1); - - $whereArray = array( - 'type' => $this->mod->type, - 'vendor' => $this->viewArgs['vendor'], - 'comm_year' => $this->viewArgs['comm_year'], - 'ethernet_card_works' => $this->viewArgs['ethernet_card_works'], - 'interface' => $this->viewArgs['interface'], - ); - - $this->mod->setWhereQueryClause($whereArray); - - parent::catalogue($lang); - } - - public function view($lang = 'en', $id = 0, $name = null) - { - parent::view($lang, $id, $name); - } - - public function history($lang = 'en', $id = 0) - { - parent::history($lang, $id); - } - - public function revision($lang = 'en', $id_rev = 0) - { - parent::revision($lang, $id_rev); - } - - public function insert($lang = 'en', $token = '') - { - parent::insert($lang, $token); - } - - public function update($lang = 'en', $token = '') - { - parent::update($lang, $token); - } - - public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) - { - parent::differences($lang, $id_hard, $id_rev); - } - - public function climb($lang = 'en', $id_rev = 0, $token = '') - { - parent::climb($lang, $id_rev, $token); - } - - public function talk($lang = 'en', $id_hard = 0, $token = '') - { - parent::talk($lang, $id_hard, $token); - } - -} diff --git a/h-source/Application/Controllers/FaqController.php b/h-source/Application/Controllers/FaqController.php deleted file mode 100644 index 45ebab2..0000000 --- a/h-source/Application/Controllers/FaqController.php +++ /dev/null @@ -1,41 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class FaqController extends WikiController -{ - - public function __construct($model, $controller, $queryString) - { - $this->_topMenuClasses['faq'] = " class='currentitem'"; - - parent::__construct($model, $controller, $queryString); - - $this->_topMenuClasses['wiki'] = null; - - $data['tm'] = $this->_topMenuClasses; - - $data['title'] = 'FAQ page - '.Website::$generalName; - - $this->append($data); - } - -} \ No newline at end of file diff --git a/h-source/Application/Controllers/FingerprintreadersController.php b/h-source/Application/Controllers/FingerprintreadersController.php deleted file mode 100644 index c3de0d7..0000000 --- a/h-source/Application/Controllers/FingerprintreadersController.php +++ /dev/null @@ -1,131 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class FingerprintreadersController extends GenericController -{ - - public function __construct($model, $controller, $queryString) - { - - $worksOptions = Fingerprintreaders::$select; - $worksField = 'fingerprint_works'; - $interfaceOptions = Fingerprintreaders::$interface; - - parent::__construct($model, $controller, $queryString); - - //load the model - $this->model('HardwareModel'); - $this->model('RevisionsModel'); - $this->model('FingerprintreadersModel'); - $this->model('TalkModel'); - - $this->mod = $this->m['FingerprintreadersModel']; - - $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; - $this->m['HardwareModel']->type = 'fingerprint-reader'; - - $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); - - $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,fingerprint_works,pci_id,interface,driver,other_names','sanitizeAll'); - - $argKeys = array( - 'page:forceNat' => 1, - 'history_page:forceNat' => 1, - 'vendor:sanitizeString' => 'undef', - 'comm_year:sanitizeString' => 'undef', - 'fingerprint_works:sanitizeString' => 'undef', - 'interface:sanitizeString' => 'undef', - 'sort-by:sanitizeString' => 'fingerprint-works', - 'search_string:sanitizeString' => 'undef' - ); - - $this->setArgKeys($argKeys); - - $data['title'] = 'Fingerprint reader'; - - $data['intefaceOptions'] = $interfaceOptions; - $data['worksOptions'] = $worksOptions; - $data['worksField'] = $worksField; - - $data['notFoundString'] = "No fingerprint readers found"; - - $this->append($data); - } - - public function catalogue($lang = 'en') - { - $this->shift(1); - - $whereArray = array( - 'type' => $this->mod->type, - 'vendor' => $this->viewArgs['vendor'], - 'comm_year' => $this->viewArgs['comm_year'], - 'fingerprint_works' => $this->viewArgs['fingerprint_works'], - 'interface' => $this->viewArgs['interface'], - ); - - $this->mod->setWhereQueryClause($whereArray); - - parent::catalogue($lang); - } - - public function view($lang = 'en', $id = 0, $name = null) - { - parent::view($lang, $id, $name); - } - - public function history($lang = 'en', $id = 0) - { - parent::history($lang, $id); - } - - public function revision($lang = 'en', $id_rev = 0) - { - parent::revision($lang, $id_rev); - } - - public function insert($lang = 'en', $token = '') - { - parent::insert($lang, $token); - } - - public function update($lang = 'en', $token = '') - { - parent::update($lang, $token); - } - - public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) - { - parent::differences($lang, $id_hard, $id_rev); - } - - public function climb($lang = 'en', $id_rev = 0, $token = '') - { - parent::climb($lang, $id_rev, $token); - } - - public function talk($lang = 'en', $id_hard = 0, $token = '') - { - parent::talk($lang, $id_hard, $token); - } - -} diff --git a/h-source/Application/Controllers/GenericController.php b/h-source/Application/Controllers/GenericController.php deleted file mode 100644 index 00848c3..0000000 --- a/h-source/Application/Controllers/GenericController.php +++ /dev/null @@ -1,1001 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class GenericController extends BaseController -{ - - protected $_controllerName = null; //as in the URL - - public $orderPopup; - - public function __construct($model, $controller, $queryString) { - - $this->_topMenuClasses['hardware'] = " class='currentitem ui-btn-active'"; - - parent::__construct($model, $controller, $queryString); - - $this->model('VendorsModel'); - - $popup = new Popup(); - $popup->name = gtext('sort by'); - - $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('compatibility')); - $popValues = array('last-inserted','alphabetically','alphabetically-desc','compatibility'); - - switch ($this->controller) - { - case 'printers': - $popup->itemsName = $popNames; - $popup->itemsValue = $popValues; - break; - case 'notebooks': - $popup->itemsName = $popNames; - $popup->itemsValue = $popValues; - break; - case 'scanners': - $popup->itemsName = $popNames; - $popup->itemsValue = $popValues; - break; - case 'wifi': - $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('wifi works')); - $popValues = array('last-inserted','alphabetically','alphabetically-desc','wifi-works'); - $popup->itemsName = $popNames; - $popup->itemsValue = $popValues; - break; - case 'videocards': - $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('video card works')); - $popValues = array('last-inserted','alphabetically','alphabetically-desc','video-card-works'); - $popup->itemsName = $popNames; - $popup->itemsValue = $popValues; - break; - case 'threegcards': - $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('wifi works')); - $popValues = array('last-inserted','alphabetically','alphabetically-desc','wifi-works'); - $popup->itemsName = $popNames; - $popup->itemsValue = $popValues; - break; - case 'soundcards': - $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('sound card works')); - $popValues = array('last-inserted','alphabetically','alphabetically-desc','sound-card-works'); - $popup->itemsName = $popNames; - $popup->itemsValue = $popValues; - break; - case 'webcams': - $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('webcam works')); - $popValues = array('last-inserted','alphabetically','alphabetically-desc','webcam-works'); - $popup->itemsName = $popNames; - $popup->itemsValue = $popValues; - break; - case 'bluetooth': - $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('bluetooth works')); - $popValues = array('last-inserted','alphabetically','alphabetically-desc','bluetooth-works'); - $popup->itemsName = $popNames; - $popup->itemsValue = $popValues; - break; - case 'acquisitioncards': - $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('compatibility desc')); - $popValues = array('last-inserted','alphabetically','alphabetically-desc','compatibility-desc'); - $popup->itemsName = $popNames; - $popup->itemsValue = $popValues; - break; - case 'fingerprintreaders': - $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('fingerprint works')); - $popValues = array('last-inserted','alphabetically','alphabetically-desc','fingerprint-works'); - $popup->itemsName = $popNames; - $popup->itemsValue = $popValues; - break; - case 'ethernetcards': - $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('ethernet works')); - $popValues = array('last-inserted','alphabetically','alphabetically-desc','ethernet-works'); - $popup->itemsName = $popNames; - $popup->itemsValue = $popValues; - break; - case 'sdcardreaders': - $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('sdcard works')); - $popValues = array('last-inserted','alphabetically','alphabetically-desc','sdcard-works'); - $popup->itemsName = $popNames; - $popup->itemsValue = $popValues; - break; - case 'modems': - $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('compatibility desc')); - $popValues = array('last-inserted','alphabetically','alphabetically-desc','compatibility-desc'); - $popup->itemsName = $popNames; - $popup->itemsValue = $popValues; - break; - case 'raidadapters': - $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('compatibility desc')); - $popValues = array('last-inserted','alphabetically','alphabetically-desc','compatibility-desc'); - $popup->itemsName = $popNames; - $popup->itemsValue = $popValues; - break; - case 'hostcontrollers': - $popNames = array(gtext('last inserted'),gtext('alphabetically'),gtext('alphabetically desc'),gtext('compatibility desc')); - $popValues = array('last-inserted','alphabetically','alphabetically-desc','compatibility-desc'); - $popup->itemsName = $popNames; - $popup->itemsValue = $popValues; - break; - default: - array_pop($popNames); - array_pop($popValues); - $popup->itemsName = $popNames; - $popup->itemsValue = $popValues; - break; - } - - $this->orderPopup = $popup; - -// $data['howToCompileLabel'] = null; - $data['isApproved'] = true; - - $data['tracksHelpLabel'] = $this->getModule(array('devices',$this->controller,'form','it_tracks_users')); - $data['howToCompileLabel'] = $this->getModule(array('devices','all','form','how_to_compile')); - $data['modelNameLabel'] = $this->getModule(array('devices','all','form','model_name_entry_help_label')); - $data['vendoridProductidLabel'] = $this->getModule(array('devices','not_notebook','form','vendorid_productid_label')); - $data['descriptionLabel'] = $this->getModule(array('devices','all','form','description_entry_help_label')); - $data['preventWifiLabel'] = $this->getModule(array('devices','notebook','form','prevent_wifi_label')); - - $this->append($data); - } - - protected function insert($lang = 'en', $token = '') - { - $this->shift(2); - - if ( strcmp($this->_updating,'no') !== 0 ) $this->redirect('users/login/'.$this->lang,0); - - $clean['token'] = sanitizeAlphanum($token); - - $data['descriptionPreview'] = null; //contains the HTML of the preview of the description entry - - $data['notice'] = null; - $data['submission_response'] = 'error'; - - $data['tree'] = $this->getSpecHardLink() . " » " . " ".gtext("Insert").""; - - $this->s['registered']->checkStatus(); - - if ($this->s['registered']->status['status'] === 'logged' or Website::$allowAnonymousSubmission === "yes") - { -// if (!$this->s['registered']->checkCsrf($clean['token'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'wrong token..'); - -// if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); - - if (isset($_POST['insertAction'])) - { - if ($this->checkDist()) - { - $pci_id = $this->request->post('pci_id','','sanitizeAll'); - $interface = $this->request->post('interface','not-defined','sanitizeAll'); - - if ($this->checkVendorId($interface)) - { - if (strcmp($this->m['HardwareModel']->type,'notebook') !== 0) - { - $this->m['HardwareModel']->values['vendor'] = sanitizeAll($this->m['VendorsModel']->getName($pci_id,$interface)); - - $this->m['HardwareModel']->databaseConditions['insert']['+checkUnique'] = 'pci_id|VendorID:ProductID is already present in the database. This means that the device you are trying to insert is already in the database. See here: '.$this->getAlreadyExixtsLink($pci_id); - } - - //insert the new device - $this->m['HardwareModel']->updateTable('insert'); - - if ($this->m['HardwareModel']->queryResult) - { - if (strcmp($this->controller,'notebooks') === 0) - { - @session_start(); - $_SESSION['notebook_inserted'] = 'yes'; - } - - $data['submission_response'] = 'executed'; - } - - $this->viewRedirect($this->m['HardwareModel']->lastId); - - } - } - } - - $data['descriptionPreview'] = $this->getPreview(); - - $data['notice'] = $this->m['HardwareModel']->notice; - - $data['submitName'] = "insertAction"; - $data['hiddenInput'] = null; - - $data['values'] = $this->m['HardwareModel']->getFormValues('insert','sanitizeHtml'); - $this->append($data); - - if (!isset($_POST['from_client'])) - { - $this->load('top_left'); - $this->load('license_notice'); - $this->load('form'); - $this->load('bottom_left'); - $this->right(); - } - else - { - header ("Content-Type:text/xml"); - $this->clean(); - $this->load('xml_response'); - } - } - else - { - $this->redirect("users/login/".$this->lang."?redirect=".$this->controller."/catalogue/".$this->lang,0); - } - } - - public function del($lang = 'en', $token = '') - { - header('Content-type: text/html; charset=UTF-8'); - - $this->shift(2); - - $this->clean(); - - $clean['token'] = sanitizeAlphanum($token); - - if ($this->s['registered']->status['status'] === 'logged') - { - if (!$this->s['registered']->checkCsrf($clean['token'])) die("wrong token"); - - if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) die("your account has been blocked"); - - $clean['id_user'] = (int)$this->s['registered']->status['id_user']; - $clean['id_hard'] = $this->request->post('id_hard',0,'forceInt'); - - $this->model("DeletionModel"); - - $numb = $this->m['DeletionModel']->where(array("id_hard"=>$clean['id_hard'],"created_by"=>$clean['id_user']))->rowNumber(); - - if ($numb === 0) - { - $id_dup = $this->request->post('id_duplicate',0,'forceInt'); - $object = $this->request->post('object','','sanitizeAll'); - - if ($id_dup === 0 and strcmp($object,'duplication') === 0) - { - echo "you have no specified the device duplicated by this model"; - } - else - { - $this->m['DeletionModel']->setFields('id_hard:forceInt,object,message,id_duplicate:forceInt','sanitizeAll'); - $this->m['DeletionModel']->values['created_by'] = $clean['id_user']; - - $this->m['DeletionModel']->updateTable('insert'); - if ($this->m['DeletionModel']->queryResult) - { - $hard = new HardwareModel(); - $c = $hard->where(array('id_hard'=>$clean['id_hard'],'ask_for_del'=>'yes'))->rowNumber(); - if ($c < 1) - { - $hard->db->update('hardware','ask_for_del',array('yes'),'id_hard='.$clean['id_hard']); - } - echo "operation executed"; - } - else - { - echo "one error occurred, please try later"; - } - } - } - else - { - echo "you have already asked for the deletion of this device"; - } - } - } - - protected function update($lang = 'en', $token = '') - { - $this->shift(2); - - $clean['token'] = sanitizeAlphanum($token); - - $data['descriptionPreview'] = null; //contains the HTML of the preview of the description entry - - $data['notice'] = null; - $data['submission_response'] = 'error'; - - $this->s['registered']->checkStatus(); - - if (isset($_POST['id_hard'])) - { - //get the id - $clean['id_hard'] = isset($_POST['id_hard']) ? (int)$_POST['id_hard'] : 0; - - if ($this->s['registered']->status['status'] === 'logged') - { - if (!$this->s['registered']->checkCsrf($clean['token'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'wrong token..'); - - if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); - - if ($this->m['HardwareModel']->isCleared($clean['id_hard'])) $this->redirect('generic/cleared/'.$this->lang,0); - - $deleted = $this->m['HardwareModel']->select("hardware.deleted")->where(array("id_hard"=>$clean['id_hard']))->limit(1)->toList('deleted')->send(); - - if (strcmp($deleted[0],'no') === 0) - { - $ne_name = $this->m['HardwareModel']->getTheModelName($clean['id_hard']); - $name = encodeUrl($ne_name); - $data['name'] = $name; - $data['ne_name'] = $ne_name; - $data['tree'] = $this->getSpecHardLink() . " » " . $this->getViewLink($clean['id_hard'],$ne_name) . " » ".gtext("Edit").""; - - if (isset($_POST['updateAction'])) - { - if ($this->checkDist()) - { - $pci_id = $this->request->post('pci_id','','sanitizeAll'); - $interface = $this->request->post('interface','not-defined','sanitizeAll'); - - if ($this->checkVendorId($interface)) - { - if (strcmp($this->m['HardwareModel']->type,'notebook') !== 0) - { - $this->m['HardwareModel']->values['vendor'] = sanitizeAll($this->m['VendorsModel']->getName($pci_id,$interface)); - - $this->m['HardwareModel']->databaseConditions['update']['+checkUniqueCompl'] = 'pci_id|VendorID:ProductID is already present in the database. This means that the device you are trying to insert is already in the database. See here: '.$this->getAlreadyExixtsLink($pci_id); - } - - //carry out the update database action - $this->m['HardwareModel']->updateTable('update'); - - if ($this->m['HardwareModel']->queryResult) - { - $data['submission_response'] = 'executed'; - } - $this->viewRedirect($this->m['HardwareModel']->lastId); - } - } - } - - $data['descriptionPreview'] = $this->getPreview(); - - $data['notice'] = $this->m['HardwareModel']->notice; - - $data['id_hard'] = $clean['id_hard']; - $data['submitName'] = "updateAction"; - // echo $this->m['HardwareModel']->fields; - $data['values'] = $this->m['HardwareModel']->getFormValues('update','sanitizeHtml'); - $data['hiddenInput'] = "\n"; - - $this->append($data); - - if (!isset($_POST['from_client'])) - { - $this->load('top_left'); - $this->load('license_notice'); - $this->load('form'); - $this->load('bottom_left'); - $this->right(); - } - else - { - header ("Content-Type:text/xml"); - $this->clean(); - $this->load('xml_response'); - } - } - else - { - $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'deleted..'); - } - } - else - { - $this->redirect("users/login/".$this->lang."?redirect=".$this->controller."/view/".$this->lang."/".$clean['id_hard'],0); - } - } - else - { - $this->redirect($this->controller.'/catalogue/'.$this->lang); - } - } - - //get the preview of the description entry - protected function getPreview() - { - if (isset($_POST['previewAction'])) - { - $this->m['HardwareModel']->result = false; - return $this->request->post('description','','sanitizeHtml'); - } - return null; - } - - protected function checkVendorId($interface) - { - if (strcmp($this->m['HardwareModel']->type,'notebook') === 0) return true; - - if (array_key_exists('pci_id',$_POST)) - { - if (strcmp($_POST['pci_id'],"") !== 0) - { - if (preg_match('/^[a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}$/',$_POST['pci_id'])) - { - if ($this->m['VendorsModel']->check($_POST['pci_id'],$interface)) - { - return true; - } - else - { - $this->m['HardwareModel']->result = false; - $this->m['HardwareModel']->notice = "
          Your vendor has not been found.

          Your vendorid code is not present in the list. If it is a USB device, please choose the right interface (USB), otherwise the system will check inside the PCI ID vendors' list. If it is not a USB device, and you are not sure about the right interface, choose not-defined, and it should work fine (the system will check inside the PCI ID vendors' list if you choose an interface other than USB).

          If your vendor has not been found yet, please open an issue here in order to ask the insertion of your vendor.

          If your vendor has not been found you could also send your PCI ID or USB ID to the PCI ID repository (http://pciids.sourceforge.net/) or to the USB ID repository (http://www.linux-usb.org/usb-ids.html).
          \n"; - return false; - } - } - else - { - $this->m['HardwareModel']->result = false; - $this->m['HardwareModel']->notice = "
          VendorID:ProductID has to have the following format: [a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}
          "; - } - } - else - { - $this->m['HardwareModel']->result = false; - $this->m['HardwareModel']->notice = "
          Vendorid:Productid code not defined..
          \n"; - return false; - } - } - $this->m['HardwareModel']->result = false; - return false; - } - - protected function checkDist() - { - if (array_key_exists('distribution',$_POST)) - { - if (strcmp($_POST['distribution'],"") !== 0) - { - if (Distributions::check($_POST['distribution'])) - { - return true; - } - else - { - $this->m['HardwareModel']->result = false; - $this->m['HardwareModel']->notice = "
          Distribution not allowed..
          \n"; - return false; - } - } - else - { - $this->m['HardwareModel']->result = false; - $this->m['HardwareModel']->notice = "
          Distribution not defined..
          \n"; - return false; - } - } - $this->m['HardwareModel']->result = false; - return false; - } - - protected function viewRedirect($id) - { - $clean['id'] = (int)$id; - - if ($this->m['HardwareModel']->queryResult) - { - if (!isset($_POST['from_client'])) - { - $name = encodeUrl($this->m['HardwareModel']->getTheModelName($clean['id'])); - $this->redirect($this->controller.'/view/'.$this->lang.'/'.$clean['id'].'/'.$name.$this->viewStatus); - } - } - } - - //load the view files - protected function loadViewAll($viewName = null) - { - $this->load('top_left'); - $viewArray = explode(',',$viewName); - foreach ($viewArray as $viewFile) - { - $this->load($viewFile); - } - $this->load('bottom_left'); - $this->right(); - } - - protected function catalogue($lang = 'en') - { - $data['title'] = $this->controller.' - '.Website::$generalName; - - Params::$nullQueryValue = 'undef'; - - $data['tree'] = plural($this->controller); - - //look for a string in the model name or in the other_names if the string is different from undef - if (strcmp($this->viewArgs['search_string'],"undef") !== 0) - { - $nWhere = array( - 'OR' => array( - 'model' => "like '%".$this->viewArgs['search_string']."%'", - 'other_names' => "like '%".$this->viewArgs['search_string']."%'", - ), - ); - $this->mod->aWhere($nWhere); - } - - $this->mod->aWhere(array("deleted"=>"no","cleared"=>"no")); - - $this->mod->popupBuild(); - $popup = $this->mod->popupArray; - $popup['sort-by'] = $this->orderPopup; - - $this->helper('Popup',$this->controller.'/catalogue/'.$this->lang,$popup,'inclusive','page'); - - $this->h['Popup']->allString = gtext("All"); - - //create the HTML of the popup - $data['popup'] = $this->h['Popup']->render(); - - if (strcmp($this->controller,'notebooks') === 0) - { - $this->mod->popupArray = array(); - $this->mod->morePopups(); - $this->mod->popupBuild(); - $this->h['Popup']->popupArray = $this->mod->popupArray; - $data['popupMore'] = $this->h['Popup']->render(); - } - - $this->mod->orderBy = getOrderByClause($this->viewArgs['sort-by']); - $recordNumber = $this->mod->rowNumber(); - - $data['recordNumber'] = $recordNumber; - - //load the Pages helper - $this->helper('Pages',$this->controller.'/catalogue/'.$this->lang,'page'); - $page = $this->viewArgs['page']; - //set the limit clause - $this->mod->limit = $this->h['Pages']->getLimit($page,$recordNumber,10); - - $data['table'] = $this->mod->getAll(); -// echo $this->mod->getQuery(); - - $data['pageList'] = $this->h['Pages']->render($page-3,7); - $data['numberOfPages'] = $this->h['Pages']->getNumbOfPages(); - - $data['topNotice'] = $this->getModule(array('devices',$this->controller,'catalogue')); - - $data['popupLabel'] = $this->mod->getPopupLabel($this->viewArgs); - - $data["search_string_form_value"] = strcmp($this->viewArgs['search_string'],Params::$nullQueryValue) === 0 ? "" : $this->viewArgs['search_string']; - - //set search_string to undef to clean the model name filter - $temp = $this->viewArgs; - $temp['page'] = 1; - $temp['search_string'] = "undef"; - $data['clearViewStatus'] = Url::createUrl($temp); - - $this->append($data); - - $this->loadViewAll('catalogue'); - } - - protected function passWhoAskedForDeletion($id_hard) - { - $clean['id_hard'] = (int)$id_hard; - - $deletion = new DeletionModel(); - $data['deletion'] = $deletion->select()->where(array('id_hard'=>$clean['id_hard']))->send(); - $data['deletionUsers'] = $deletion->getList($data['deletion'],'created_by'); - - $this->append($data); - } - - public function cleared($lang = 'en') - { - $data['title'] = 'page permanently deleted - '.Website::$generalName; - - $data['tree'] = "device page permanently deleted"; - - $this->append($data); - - $this->loadViewAll('cleared'); - } - - protected function view($lang = 'en', $id_hard = 0, $name = null) - { - $this->shift(3); - - //set the history_page to 1 in the viewStatus - $this->viewArgs['history_page'] = 1; - $this->buildStatus(); - - $clean['id_hard'] = (int)$id_hard; - $data['id_hard'] = $clean['id_hard']; - $data['ne_name'] = null; - $data['name'] = null; - $data['tree'] = null; - $data['isDeleted'] = false; - - $data['md_javascript'] = "moderator_dialog(\"devicehide\",\"device\");moderator_dialog(\"deviceshow\",\"device\");moderator_dialog(\"deviceapprove\",\"device_app\");moderator_dialog(\"deviceclear\",\"device_cl\");"; - - if ($this->m['HardwareModel']->isCleared($clean['id_hard'])) $this->redirect('generic/cleared/'.$this->lang,0); - - if ($this->mod->checkType($clean['id_hard'])) - { - $this->mod->setWhereQueryClause(array("id_hard" => $clean['id_hard'])); - $data['table'] = $this->mod->getAll(); - - if (count($data['table']) > 0) - { - - $data['talk_number'] = $this->m['TalkModel']->select('count(*) as numb,id_hard')->where(array('id_hard'=>$clean['id_hard'],'deleted'=>'no'))->rowNumber(); - - $data['ne_name'] = $data['table'][0]['hardware']['model']; - $data['name'] = encodeUrl($data['ne_name']); - $data['title'] = $data['ne_name'].' - '.Website::$generalName; - $data['tree'] = $this->getSpecHardLink() . " » ".$data['ne_name'].""; - $data['isDeleted'] = $this->m['HardwareModel']->isDeleted($clean['id_hard']); - $data['isApproved'] = strcmp($data['table'][0]['hardware']['approved'],'yes') === 0 ? true : false; - - $data['tracksHelpTop'] = $this->getModule(array('devices',$this->controller,'page','it_tracks_users')); - $data['tracksHelpLabel'] = $this->getModule(array('devices',$this->controller,'form','it_tracks_users')); - - $this->passWhoAskedForDeletion($clean['id_hard']); - } - - $this->append($data); - - @session_start(); - if ( isset($_SESSION['notebook_inserted']) and strcmp($this->controller,'notebooks') === 0 ) - { - $viewFilesList = 'suggest_dialog,dialog,page,if_page_deleted,moderator_dialog'; - unset($_SESSION['notebook_inserted']); - } - else - { - $viewFilesList = 'dialog,page,if_page_deleted,moderator_dialog'; - } - - $this->loadViewAll($viewFilesList); - } - else - { -// $this->redirect($this->_controller.'/'.); - } - } - - protected function history($lang = 'en', $id = 0) - { - $this->shift(2); - $clean['id'] = (int)$id; - $data['id'] = $clean['id']; - $data['ne_name'] = $this->m['HardwareModel']->getTheModelName($clean['id']); - $data['name'] = encodeUrl($data['ne_name']); - $data['tree'] = $this->getSpecHardLink() . " » " . $this->getViewLink($clean['id'],$data['ne_name'])." » ".gtext("History").""; - - $data['title'] = 'history - '.Website::$generalName; - - $data['isDeleted'] = $this->m['HardwareModel']->isDeleted($clean['id']); - - if ($this->m['HardwareModel']->isCleared($clean['id'])) $this->redirect('generic/cleared/'.$this->lang,0); - - //get the first revision - $res = $this->m['RevisionsModel']->db->select('revisions','id_rev','id_hard='.$clean['id'],null,'id_rev',1); - if (count($res) > 0) - { - $data['firstRev'] = $res[0]['revisions']['id_rev']; - } - - $res1 = $this->m['HardwareModel']->db->select('hardware','update_date,updated_by','id_hard='.$clean['id']); - - $this->m['RevisionsModel']->setWhereQueryClause(array('id_hard' => $clean['id'])); - - //load the Pages helper - $this->helper('Pages',$this->controller.'/history/'.$this->lang.'/'.$clean['id'],'history_page'); - //get the number of records - $recordNumber = $this->m['RevisionsModel']->rowNumber(); - $page = $this->viewArgs['history_page']; - //set the limit clause - $this->m['RevisionsModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,20); - $res2 = $this->m['RevisionsModel']->getFields('update_date,updated_by,id_rev'); - - $data['pageList'] = $this->h['Pages']->render($page-3,7); - - - $data['rev1'] = $res1; - $data['rev2'] = $res2; - - $this->passWhoAskedForDeletion($clean['id']); - - $this->append($data); - $this->loadViewAll('history,if_page_deleted'); - } - - protected function revision($lang = 'en', $id_rev = 0) - { - $this->shift(2); - $clean['id_rev'] = (int)$id_rev; - - $this->m['RevisionsModel']->setWhereQueryClause(array("id_rev" => $clean['id_rev'])); - $data['table'] = $this->m['RevisionsModel']->getAll(); - - $data['id_hard'] = 0; - $data['updated_by'] = null; - $data['update_date'] = null; - $data['name'] = null; - $data['ne_name'] = null; - $data['tree'] = null; - $data['isDeleted'] = false; - $data['title'] = 'revision - '.Website::$generalName; - - if (count($data['table']) > 0) - { - $data['id_hard'] = (int)$data['table'][0]['revisions']['id_hard']; - - if ($this->m['HardwareModel']->isCleared($data['id_hard'])) $this->redirect('generic/cleared/'.$this->lang,0); - - $data['ne_name'] = $this->m['HardwareModel']->getTheModelName($data['id_hard']); - $data['name'] = encodeUrl($data['ne_name']); - $data['tree'] = $this->getSpecHardLink() . " » " . $this->getViewLink($data['id_hard'],$data['ne_name'])." » " . $this->getHistoryLink($data['id_hard']) . " » ".gtext("Revision").""; - - $data['updated_by'] = $data['table'][0]['revisions']['updated_by']; - $data['update_date'] = $data['table'][0]['revisions']['update_date']; - - $data['isDeleted'] = $this->m['HardwareModel']->isDeleted($data['id_hard']); - } - - $this->append($data); - $this->loadViewAll('page'); - } - - protected function differences($lang = 'en', $id_hard = 0, $id_rev = 0) - { - $this->shift(3); - - $data['title'] = 'differences - '.Website::$generalName; - - $clean['id_hard'] = (int)$id_hard; - $clean['id_rev'] = (int)$id_rev; - - $data['id_hard'] = $clean['id_hard']; - $ne_name = $this->m['HardwareModel']->getTheModelName((int)$data['id_hard']); - $data['name'] = encodeUrl($ne_name); - $data['tree'] = $this->getSpecHardLink() . " » " . $this->getViewLink($data['id_hard'],$ne_name)." » " . $this->getHistoryLink($clean['id_hard']) . " » ".gtext("Differences").""; - - $data['isDeleted'] = $this->m['HardwareModel']->isDeleted($clean['id_hard']); - $data['showDiff'] = false; - - $diffArray = array(); - - if ($this->m['HardwareModel']->isCleared($clean['id_hard'])) $this->redirect('generic/cleared/'.$this->lang,0); - - if (strcmp($clean['id_hard'],0) !== 0 and strcmp($clean['id_rev'],0) !== 0) - { - $this->m['RevisionsModel']->setWhereQueryClause(array('id_hard' => $clean['id_hard'],'id_rev' => '<='.$clean['id_rev'])); - $this->m['RevisionsModel']->limit = 2; - $res = $this->m['RevisionsModel']->getAll(); - if (count($res) > 1) - { - $newArray = $res[0]['revisions']; - $oldArray = $res[1]['revisions']; - - $data['update_new'] = $newArray['update_date']; - $data['update_old'] = $oldArray['update_date']; - $data['updated_by'] = $newArray['updated_by']; - - $diffArray = $this->mod->getDiffArray($oldArray, $newArray); - - $data['showDiff'] = true; - } - } - else if (strcmp($clean['id_hard'],0) !== 0 and strcmp($clean['id_rev'],0) === 0) - { - $this->mod->setWhereQueryClause(array('id_hard' => $clean['id_hard'])); - $lastRes = $this->mod->getAll(); - - if (count($lastRes) > 0) - { - $this->m['RevisionsModel']->setWhereQueryClause(array('id_hard' => $clean['id_hard'])); - $this->m['RevisionsModel']->limit = 1; - $revRes = $this->m['RevisionsModel']->getAll(); - - if (count($revRes) > 0) - { - $newArray = $lastRes[0]['hardware']; - $oldArray = $revRes[0]['revisions']; - - $data['update_new'] = $newArray['update_date']; - $data['update_old'] = $oldArray['update_date']; - $data['updated_by'] = $newArray['updated_by']; - - $diffArray = $this->mod->getDiffArray($oldArray, $newArray); - - $data['showDiff'] = true; - } - } - - } - - $data['fieldsWithBreaks'] = $this->mod->fieldsWithBreaks; - $data['diffArray'] = $diffArray; - - $this->append($data); - $this->loadViewAll('differences'); - } - - protected function climb($lang = 'en', $id_rev = 0, $token = '') - { - $this->shift(3); - - $data['title'] = 'make current - '.Website::$generalName; - - $clean['token'] = sanitizeAlphanum($token); - - $clean['id_rev'] = (int)$id_rev; - $clean['id_hard'] = (int)$this->m['RevisionsModel']->getIdHard($clean['id_rev']); - - if ($this->m['HardwareModel']->isCleared($clean['id_hard'])) $this->redirect('generic/cleared/'.$this->lang,0); - - if ($clean['id_hard'] !== 0) - { - $deleted = $this->m['HardwareModel']->select("hardware.deleted")->where(array("id_hard"=>$clean['id_hard']))->limit(1)->toList('deleted')->send(); - - $data['isDeleted'] = $this->m['HardwareModel']->isDeleted($clean['id_hard']); - - $data['id_rev'] = $clean['id_rev']; - $data['id_hard'] = $clean['id_hard']; - $data['ne_name'] = $this->m['HardwareModel']->getTheModelName($clean['id_hard']); - $data['name'] = encodeUrl($data['ne_name']); - $data['tree'] = $this->getSpecHardLink() . " » " . $this->getViewLink($data['id_hard'],$data['ne_name'])." » " . $this->getHistoryLink($clean['id_hard']) . " » make current"; - - $data['notice'] = null; - $this->s['registered']->checkStatus(); - - if ($this->s['registered']->status['status'] === 'logged') - { - if (!$this->s['registered']->checkCsrf($clean['token'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'wrong token..'); - - if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); - - if ($this->m['HardwareModel']->isDeleted($clean['id_hard'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'this device page has been deleted..'); - - if (isset($_POST['confirmAction'])) - { - $this->m['HardwareModel']->makeCurrent($clean['id_rev']); - - $this->viewRedirect($this->m['HardwareModel']->lastId); - - $data['notice'] = $this->m['HardwareModel']->notice; - } - - $this->append($data); - $this->loadViewAll('climb'); - } - else - { - $this->redirect("users/login/".$this->lang."?redirect=".$this->controller."/view/".$this->lang."/".$clean['id_hard'],0); - } - } - } - - protected function talk($lang = 'en', $id_hard = 0, $token = 'token') - { - $this->shift(3); - - $this->m['TalkModel']->setFields('title,message','sanitizeAll'); - - $data['title'] = 'talk - '.Website::$generalName; - - $clean['token'] = sanitizeAlphanum($token); - $clean['id_hard'] = (int)$id_hard; - $data['id_hard'] = $clean['id_hard']; - $data['ne_name'] = $this->m['HardwareModel']->getTheModelName($clean['id_hard']); - $data['name'] = encodeUrl($data['ne_name']); - $data['tree'] = $this->getSpecHardLink() . " » " . $this->getViewLink($clean['id_hard'],$data['ne_name'])." » ".gtext("Talk").""; - - $data['isDeleted'] = $this->m['HardwareModel']->isDeleted($clean['id_hard']); - - if ($this->m['HardwareModel']->isCleared($clean['id_hard'])) $this->redirect('generic/cleared/'.$this->lang,0); - - if (isset($_POST['insertAction'])) - { - if ($this->s['registered']->status['status'] === 'logged') - { - if (!$this->s['registered']->checkCsrf($clean['token'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'wrong token..'); - - if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); - - if ($this->m['HardwareModel']->isDeleted($clean['id_hard'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'this device page has been deleted..'); - - $this->m['TalkModel']->values['created_by'] = $this->s['registered']->status['id_user']; - $this->m['TalkModel']->values['id_hard'] = $clean['id_hard']; - - $this->m['TalkModel']->updateTable('insert'); - } - } - - //if preview - if (isset($_POST['previewAction'])) - { - if ($this->s['registered']->status['status'] === 'logged') - { - if (!$this->s['registered']->checkCsrf($clean['token'])) $this->redirect($this->controller.'/catalogue/'.$this->lang,2,'wrong token..'); - - $data['preview_message'] = $this->request->post('message','','sanitizeHtml'); - $this->m['TalkModel']->result = false; - } - } - - $data['table'] = $this->m['TalkModel']->select()->where(array('id_hard'=>$clean['id_hard']))->orderBy('id_talk')->send(); - - $data['values'] = $this->m['TalkModel']->getFormValues('insert','sanitizeHtml'); - $data['notice'] = $this->m['TalkModel']->notice; - -// javascript for moderator - $data['md_javascript'] = "moderator_dialog(\"hide\",\"talk\");moderator_dialog(\"show\",\"talk\");"; - $data['go_to'] = $this->currPage."/".$this->lang."/".$clean['id_hard']; - - $this->passWhoAskedForDeletion($clean['id_hard']); - - $this->append($data); - $this->loadViewAll('talk,if_page_deleted,moderator_dialog'); - } - - //get the link to the device page from vendorid:productid code - protected function getAlreadyExixtsLink($code) - { - $hw = new HardwareModel(); - $info = $hw->getModelByCode($code); - - if ($info) - { - return $this->getViewLink($info['id_hard'],$info['model'],Hardware::getControllerFromType($info['type'])); - } - return ''; - } - - protected function getViewLink($id,$ne_name,$controller = null) - { - $contr = isset($controller) ? $controller : $this->controller; - - return "lang.'/'.$id.'/'.encodeUrl($ne_name).$this->viewStatus."'>".$ne_name.""; - } - - protected function getHistoryLink($id) - { - return "controller.'/history/'.$this->lang.'/'.$id.'/'.$this->viewStatus."'>".gtext("History").""; - } - - protected function getSpecHardLink() - { - return "controller.'/catalogue/'.$this->lang.$this->viewStatus."'>".plural($this->controller).""; - } - - protected function goToLoginForm() - { - if ($this->querySanitized) - { - $this->redirect("users/login/".$this->lang."?redirect=".$this->controller."/".$this->action.Url::createUrl($this->_queryString)); - } - else - { - $this->redirect("users/login/".$this->lang."?redirect=home/index".Url::createUrl($this->_queryString)); - } - } - -} diff --git a/h-source/Application/Controllers/HardwareController.php b/h-source/Application/Controllers/HardwareController.php deleted file mode 100644 index a75c4fe..0000000 --- a/h-source/Application/Controllers/HardwareController.php +++ /dev/null @@ -1,43 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class HardwareController extends BaseController -{ - - public function __construct($model, $controller, $queryString) - { - - $this->_topMenuClasses['hardware'] = " class='currentitem ui-btn-active'"; - - parent::__construct($model, $controller, $queryString); - - $data['title'] = 'hardware - '.Website::$generalName; - $this->append($data); - } - - public function catalogue($lang = 'en') - { - $this->load('left'); - $this->right(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Controllers/HelpController.php b/h-source/Application/Controllers/HelpController.php deleted file mode 100644 index 658b547..0000000 --- a/h-source/Application/Controllers/HelpController.php +++ /dev/null @@ -1,41 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class HelpController extends WikiController -{ - - public function __construct($model, $controller, $queryString) - { - $this->_topMenuClasses['help'] = " class='currentitem'"; - - parent::__construct($model, $controller, $queryString); - - $this->_topMenuClasses['wiki'] = null; - - $data['tm'] = $this->_topMenuClasses; - - $data['title'] = 'help page - '.Website::$generalName; - - $this->append($data); - } - -} \ No newline at end of file diff --git a/h-source/Application/Controllers/HistoryController.php b/h-source/Application/Controllers/HistoryController.php deleted file mode 100644 index e50b7e1..0000000 --- a/h-source/Application/Controllers/HistoryController.php +++ /dev/null @@ -1,650 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class HistoryController extends BaseController -{ - - public static $typeTable = array( - 'message' => 'message', - 'talk' => 'talk', - 'user' => 'user', - 'issue' => 'issue', - 'wiki_talk' => 'wiki talk', - 'page' => 'wiki page', - 'page_del' => 'wiki page', - 'device' => 'device page', - 'device_app' => 'device page', - 'device_cl' => 'device page', - 'issue_del' => 'issue', //registered - 'issue_ins' => 'issue', //registered - 'message_ins' => 'message', //registered - 'talk_ins' => 'talk', //registered - 'wiki_talk_ins' => 'wiki talk',//registered - 'hardware' => 'hardware', //registered - 'wiki' => 'wiki', //registered - ); - - public static $actionTable = array( - 'hide' => 'hide', - 'show' => 'show', - 'block' => 'block', - 'unblock' => 'unblock', - 'open' => 'open', - 'close' => 'close', - 'pageblock' => 'block', - 'pageunblock' => 'unblock', - 'pagehide' => 'hide', - 'pageshow' => 'show', - 'devicehide' => 'hide', - 'deviceshow' => 'show', - 'deviceapprove' => 'approve', - 'deviceclear' => 'perm deleted', - 'issuehide' => 'hide', - 'issueshow' => 'show', - 'insert' => 'insert', //registered - 'update' => 'update', //registered - ); - - protected $strings = array( - - 'hide' => array( - - 'action' => 'hide', - 'check_status' => 'no', - 'to_status' => 'yes', - 'exec_string' => 'The message has been hidden. Just reload the page', - 'error_string' => 'Error: the message is already hidden', - - ), - - 'show' => array( - - 'action' => 'show', - 'check_status' => 'yes', - 'to_status' => 'no', - 'exec_string' => 'The message is no more hidden. Just reload the page', - 'error_string' => 'Error: the message is already visible', - - ), - - 'block' => array( - - 'action' => 'block', - 'check_status' => 'no', - 'to_status' => 'yes', - 'exec_string' => 'The user has been blocked. Just reload the page', - 'error_string' => 'Error: the user is already blocked', - - ), - - 'unblock' => array( - - 'action' => 'unblock', - 'check_status' => 'yes', - 'to_status' => 'no', - 'exec_string' => 'The user is no more blocked. Just reload the page', - 'error_string' => 'Error: the user is already un-blocked', - - ), - - 'open' => array( - - 'action' => 'open', - 'check_status' => 'closed', - 'to_status' => 'opened', - 'exec_string' => 'The issue has been opened. Just reload the page', - 'error_string' => 'Error: the issue is already opened', - - ), - - 'close' => array( - - 'action' => 'close', - 'check_status' => 'opened', - 'to_status' => 'closed', - 'exec_string' => 'The issue has been closed. Just reload the page', - 'error_string' => 'Error: the issue is already closed', - - ), - - 'pageblock' => array( - - 'action' => 'pageblock', - 'check_status' => 'no', - 'to_status' => 'yes', - 'exec_string' => 'The wiki page has been blocked. Just reload the page', - 'error_string' => 'Error: the wiki page is already blocked', - - ), - - 'pageunblock' => array( - - 'action' => 'pageunblock', - 'check_status' => 'yes', - 'to_status' => 'no', - 'exec_string' => 'The wiki page is no more blocked. Just reload the page', - 'error_string' => 'Error: the wiki page is already un-blocked', - - ), - - 'pagehide' => array( - - 'action' => 'pagehide', - 'check_status' => 'no', - 'to_status' => 'yes', - 'exec_string' => 'The wiki page has been hidden. Just reload the page', - 'error_string' => 'Error: the wiki page is already hidden', - - ), - - 'pageshow' => array( - - 'action' => 'pageshow', - 'check_status' => 'yes', - 'to_status' => 'no', - 'exec_string' => 'The wiki page is no more hidden. Just reload the page', - 'error_string' => 'Error: the wiki page is already visible', - - ), - - 'issuehide' => array( - - 'action' => 'issuehide', - 'check_status' => 'no', - 'to_status' => 'yes', - 'exec_string' => 'The issue has been hidden. Just reload the page', - 'error_string' => 'Error: the issue is already hidden', - - ), - - 'issueshow' => array( - - 'action' => 'issueshow', - 'check_status' => 'yes', - 'to_status' => 'no', - 'exec_string' => 'The issue is no more hidden. Just reload the page', - 'error_string' => 'Error: the issue is already visible', - - ), - - 'devicehide' => array( - - 'action' => 'devicehide', - 'check_status' => 'no', - 'to_status' => 'yes', - 'exec_string' => 'The device page has been hidden. Just reload the page', - 'error_string' => 'Error: the device page is already hidden', - 'allowed_only_if' => array('cleared'=>'no'), - - ), - - 'deviceshow' => array( - - 'action' => 'deviceshow', - 'check_status' => 'yes', - 'to_status' => 'no', - 'exec_string' => 'The device page is no more hidden. Just reload the page', - 'error_string' => 'Error: the device page is already visible', - 'allowed_only_if' => array('cleared'=>'no'), - - ), - - 'deviceapprove' => array( - - 'action' => 'deviceapprove', - 'check_status' => 'no', - 'to_status' => 'yes', - 'exec_string' => 'The device page has been approved. Just reload the page', - 'error_string' => 'Error: the device page is already approved', - 'allowed_only_if' => array('cleared'=>'no'), - - ), - - 'deviceclear' => array( - - 'action' => 'deviceclear', - 'check_status' => 'no', - 'to_status' => 'yes', - 'exec_string' => 'The device page has been permanently deleted. Just reload the page', - 'error_string' => 'Error: the device page has already been permanently deleted', - 'method' => 'permanentlyDelete', - - ), - ); - - protected $types = array( - - 'message' => array( - - 'clean_type' => 'message', - 'model_name' => 'MessagesModel', - 'id_name' => 'id_mes', - 'field_name' => 'deleted', - 'actions' => array('hide','show'), - 'group' => 'moderator', - - ), - - 'talk' => array( - - 'clean_type' => 'talk', - 'model_name' => 'TalkModel', - 'id_name' => 'id_talk', - 'field_name' => 'deleted', - 'actions' => array('hide','show'), - 'group' => 'moderator', - - ), - - 'user' => array( - - 'clean_type' => 'user', - 'model_name' => 'UsersModel', - 'id_name' => 'id_user', - 'field_name' => 'blocked', - 'actions' => array('block','unblock'), - 'group' => 'admin', - - ), - - 'issue' => array( - - 'clean_type' => 'issue', - 'model_name' => 'IssuesModel', - 'id_name' => 'id_issue', - 'field_name' => 'status', - 'actions' => array('open','close'), - 'group' => 'moderator', - 'types_to_show' => 'issue,issue_del', - - ), - - 'wiki_talk' => array( - - 'clean_type' => 'wiki_talk', - 'model_name' => 'WikitalkModel', - 'id_name' => 'id_talk', - 'field_name' => 'deleted', - 'actions' => array('hide','show'), - 'group' => 'moderator', - - ), - - //page blocked or not - 'page' => array( - - 'clean_type' => 'page', - 'model_name' => 'WikiModel', - 'id_name' => 'id_wiki', - 'field_name' => 'blocked', - 'actions' => array('pageblock','pageunblock'), - 'group' => 'admin', - 'types_to_show' => 'page,page_del', - - ), - - //page hidden or not - 'page_del' => array( - - 'clean_type' => 'page_del', - 'model_name' => 'WikiModel', - 'id_name' => 'id_wiki', - 'field_name' => '-deleted', - 'actions' => array('pagehide','pageshow'), - 'group' => 'admin', - - ), - - //issue hidden or not - 'issue_del' => array( - - 'clean_type' => 'issue_del', - 'model_name' => 'IssuesModel', - 'id_name' => 'id_issue', - 'field_name' => 'deleted', - 'actions' => array('issuehide','issueshow'), - 'group' => 'moderator', - - ), - - //device page blocked or not - 'device' => array( - - 'clean_type' => 'device', - 'model_name' => 'HardwareModel', - 'id_name' => 'id_hard', - 'field_name' => '-deleted', - 'actions' => array('devicehide','deviceshow'), - 'group' => 'admin', - 'types_to_show' => 'device_app,device,device_cl', - - ), - - //device page approved - 'device_app' => array( - - 'clean_type' => 'device_app', - 'model_name' => 'HardwareModel', - 'id_name' => 'id_hard', - 'field_name' => 'approved', - 'actions' => array('deviceapprove'), - 'group' => 'admin', - - ), - - //device page cleared - 'device_cl' => array( - - 'clean_type' => 'device_cl', - 'model_name' => 'HardwareModel', - 'id_name' => 'id_hard', - 'field_name' => 'cleared', - 'actions' => array('deviceclear'), - 'group' => 'admin', - - ), - ); - - public function __construct($model, $controller, $queryString) - { - parent::__construct($model, $controller, $queryString); - - $this->model('HistoryModel'); - $this->model('UsersModel'); - - } - - public function hide($lang = 'en', $token = '') - { - $this->generic($lang, $token, 'hide'); - } - - public function show($lang = 'en', $token = '') - { - $this->generic($lang, $token, 'show'); - } - - public function block($lang = 'en', $token = '') - { - $this->generic($lang, $token, 'block'); - } - - public function unblock($lang = 'en', $token = '') - { - $this->generic($lang, $token, 'unblock'); - } - - public function open($lang = 'en', $token = '') - { - $this->generic($lang, $token, 'open'); - } - - public function close($lang = 'en', $token = '') - { - $this->generic($lang, $token, 'close'); - } - - public function pageblock($lang = 'en', $token = '') - { - $this->generic($lang, $token, 'pageblock'); - } - - public function pageunblock($lang = 'en', $token = '') - { - $this->generic($lang, $token, 'pageunblock'); - } - - public function pagehide($lang = 'en', $token = '') - { - $this->generic($lang, $token, 'pagehide'); - } - - public function pageshow($lang = 'en', $token = '') - { - $this->generic($lang, $token, 'pageshow'); - } - - public function devicehide($lang = 'en', $token = '') - { - $this->generic($lang, $token, 'devicehide'); - } - - public function deviceshow($lang = 'en', $token = '') - { - $this->generic($lang, $token, 'deviceshow'); - } - - public function deviceapprove($lang = 'en', $token = '') - { - $this->generic($lang, $token, 'deviceapprove'); - } - - public function deviceclear($lang = 'en', $token = '') - { - $this->generic($lang, $token, 'deviceclear'); - } - - public function issuehide($lang = 'en', $token = '') - { - $this->generic($lang, $token, 'issuehide'); - } - - public function issueshow($lang = 'en', $token = '') - { - $this->generic($lang, $token, 'issueshow'); - } - - protected function generic($lang = 'en', $token = '', $action = 'hide') - { - header('Content-type: text/html; charset=UTF-8'); - - $this->shift(2); - - $this->clean(); - - $clean['token'] = sanitizeAlphanum($token); - - if ($this->s['registered']->status['status'] === 'logged') - { - if (!$this->s['registered']->checkCsrf($clean['token'])) die("wrong token"); - - if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) die("your account has been blocked"); - - $clean['id_user'] = (int)$this->s['registered']->status['id_user']; - $clean['id'] = $this->request->post('id',0,'forceInt'); - $type = $this->request->post('type','','sanitizeAll'); - $message = $this->request->post('message',''); - - $modelName = 'error'; - - if (array_key_exists($type,$this->types)) - { - if (in_array($action,$this->types[$type]['actions'])) - { - $clean['group'] = $this->types[$type]['group']; - if (in_array($clean['group'],$this->s['registered']->status['groups'])) - { - $modelName = $this->types[$type]['model_name']; - $clean['type'] = $this->types[$type]['clean_type']; - $clean['id_name'] = $this->types[$type]['id_name']; - $clean['field_name'] = $this->types[$type]['field_name']; - - //load the right model - $this->model($modelName); - $model = $this->m[$modelName]; - - $model->select()->where(array($clean['id_name'] => $clean['id'],$clean['field_name'] => $this->strings[$action]['check_status'])); - - if (isset($this->strings[$action]['allowed_only_if']) and is_array($this->strings[$action]['allowed_only_if'])) - { - $model->aWhere($this->strings[$action]['allowed_only_if']); - } - - $count = $model->rowNumber(); - - if ($count > 0) - { - if (eg_strlen($message) < 500) - { - //drop the - char if present - $clean['field_name'] = str_replace('-',null,$clean['field_name']); - - //hide the message - $model->values = array($clean['field_name'] => $this->strings[$action]['to_status']); - - if (isset($this->strings[$action]['method'])) - { - call_user_func(array($model, $this->strings[$action]['method']),$clean['id']); - } - else - { - $model->pUpdate($clean['id']); - } - - if ($model->queryResult) - { - $this->m['HistoryModel']->setFields('id:forceInt,type,message','sanitizeAll'); - $this->m['HistoryModel']->values['created_by'] = $clean['id_user']; - $this->m['HistoryModel']->values['gr'] = $clean['group']; - $this->m['HistoryModel']->values['action'] = $this->strings[$action]['action']; - $this->m['HistoryModel']->updateTable('insert'); - - echo $this->strings[$action]['exec_string']; - } - else - { - echo "error: one error occurred, please retry later"; - } - } - else - { - echo "error: the message has too many characters or wrong type"; - } - } - else - { - echo $this->strings[$action]['error_string']; - } - } - } - } - } - } - - public function viewall($lang = 'en', $type = 'message', $id = 0) - { - header('Content-type: text/html; charset=UTF-8'); - - $this->shift(3); - - $this->clean(); - - if ($this->s['registered']->status['status'] === 'logged') - { - if (!$this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) - { - $clean['id'] = (int)$id; - if (array_key_exists($type,$this->types)) - { - $clean['group'] = $this->types[$type]['group']; - if (in_array($clean['group'],$this->s['registered']->status['groups'])) - { - $clean['type'] = $this->types[$type]['clean_type']; - $clean['typeInWhereClause'] = "'".$clean['type']."'"; - - if (array_key_exists('types_to_show',$this->types[$type])) - { - $clean['typeInWhereClause'] = "'".implode("','",explode(',',$this->types[$type]['types_to_show']))."'"; - } - - switch ($clean['type']) - { - case 'user': - $data['object'] = 'user'; - $data['box_class'] = 'details_of_actions_inner_user'; - break; - case 'page': - $data['object'] = 'wiki page'; - $data['box_class'] = 'details_of_actions_inner_user'; - break; - case 'device': - $data['object'] = 'device page'; - $data['box_class'] = 'details_of_actions_inner_user'; - break; - case 'device_app': - $data['object'] = 'device page'; - $data['box_class'] = 'details_of_actions_inner_user'; - break; - case 'page_del': - $data['object'] = 'wiki page'; - $data['box_class'] = 'details_of_actions_inner_user'; - break; - case 'issue': - $data['object'] = 'issue'; - $data['box_class'] = 'details_of_actions_inner_user'; - break; - default: - $data['object'] = 'message'; - $data['box_class'] = 'details_of_actions_inner'; - break; - } - - $data['res'] = $this->m['HistoryModel'] - ->select() - ->where( - array - ( - 'id'=>$clean['id'], - 'type'=>"in(".$clean['typeInWhereClause'].")", - 'gr'=>$clean['group']) - ) - ->send(); -// echo $this->m['HistoryModel']->getQuery(); - - $data['md_action'] = array( - 'hide' => 'hidden', - 'show' => 'restored', - 'block' => 'blocked', - 'unblock' => 'un-blocked', - 'open' => 'opened again', - 'close' => 'closed', - 'pageblock' => 'blocked', - 'pageunblock' => 'un-blocked', - 'pagehide' => 'hidden', - 'pageshow' => 'restored', - 'devicehide' => 'hidden', - 'deviceshow' => 'restored', - 'deviceapprove' => 'approved', - 'deviceclear' => 'permanently deleted', - 'issuehide' => 'hidden', - 'issueshow' => 'restored', - ); - - $this->append($data); - $this->load('viewall'); - } - } - } - } - } - -} \ No newline at end of file diff --git a/h-source/Application/Controllers/HomeController.php b/h-source/Application/Controllers/HomeController.php deleted file mode 100644 index 3c47547..0000000 --- a/h-source/Application/Controllers/HomeController.php +++ /dev/null @@ -1,47 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class HomeController extends BaseController -{ - - public function __construct($model, $controller, $queryString) - { - - $this->_topMenuClasses['home'] = " class='currentitem ui-btn-active'"; - - parent::__construct($model, $controller, $queryString); - - $data['title'] = 'home - '.Website::$generalName; - $this->append($data); - } - - public function index($lang = 'en') - { -// get the news container - $data['htmlNewsBox'] = $this->getModule(array('top_news')); - - $this->append($data); - $this->cleverLoad('left'); - $this->right($lang); - } - -} \ No newline at end of file diff --git a/h-source/Application/Controllers/HostcontrollersController.php b/h-source/Application/Controllers/HostcontrollersController.php deleted file mode 100644 index 3655aa1..0000000 --- a/h-source/Application/Controllers/HostcontrollersController.php +++ /dev/null @@ -1,137 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class HostcontrollersController extends GenericController -{ - - public function __construct($model, $controller, $queryString) - { - - $worksOptions = Hostcontrollers::$select; - $worksField = 'compatibility'; - $interfaceOptions = Hostcontrollers::$interface; - - parent::__construct($model, $controller, $queryString); - - //load the model - $this->model('HardwareModel'); - $this->model('RevisionsModel'); - $this->model('HostcontrollersModel'); - $this->model('TalkModel'); - - $this->mod = $this->m['HostcontrollersModel']; - - $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; - $this->m['HardwareModel']->type = 'host-controller'; - - $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); - - $this->m['HardwareModel']->strongConditions['insert']["+++++checkIsStrings|".Hostcontrollers::subtypeList()] = "subtype"; - - $this->m['HardwareModel']->strongConditions['update'] = $this->m['HardwareModel']->strongConditions['insert']; - - $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,compatibility,pci_id,interface,driver,subtype,other_names','sanitizeAll'); - - $argKeys = array( - 'page:forceNat' => 1, - 'history_page:forceNat' => 1, - 'vendor:sanitizeString' => 'undef', - 'comm_year:sanitizeString' => 'undef', - 'compatibility:sanitizeString' => 'undef', - 'subtype:sanitizeString' => 'undef', - 'sort-by:sanitizeString' => 'compatibility-desc', - 'search_string:sanitizeString' => 'undef' - ); - - $this->setArgKeys($argKeys); - - $data['title'] = 'Host controller'; - - $data['intefaceOptions'] = $interfaceOptions; - $data['worksOptions'] = $worksOptions; - $data['worksField'] = $worksField; - - $data['notFoundString'] = "No Host Controller found"; - - $data['subtypeHelpLabel'] = "PCMCIA, USB, Firewire, HECI"; - - $this->append($data); - } - - public function catalogue($lang = 'en') - { - $this->shift(1); - - $whereArray = array( - 'type' => $this->mod->type, - 'vendor' => $this->viewArgs['vendor'], - 'comm_year' => $this->viewArgs['comm_year'], - 'compatibility' => $this->viewArgs['compatibility'], - 'subtype' => $this->viewArgs['subtype'], - ); - - $this->mod->setWhereQueryClause($whereArray); - - parent::catalogue($lang); - } - - public function view($lang = 'en', $id = 0, $name = null) - { - parent::view($lang, $id, $name); - } - - public function history($lang = 'en', $id = 0) - { - parent::history($lang, $id); - } - - public function revision($lang = 'en', $id_rev = 0) - { - parent::revision($lang, $id_rev); - } - - public function insert($lang = 'en', $token = '') - { - parent::insert($lang, $token); - } - - public function update($lang = 'en', $token = '') - { - parent::update($lang, $token); - } - - public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) - { - parent::differences($lang, $id_hard, $id_rev); - } - - public function climb($lang = 'en', $id_rev = 0, $token = '') - { - parent::climb($lang, $id_rev, $token); - } - - public function talk($lang = 'en', $id_hard = 0, $token = '') - { - parent::talk($lang, $id_hard, $token); - } - -} diff --git a/h-source/Application/Controllers/ImageController.php b/h-source/Application/Controllers/ImageController.php deleted file mode 100644 index 6774b4a..0000000 --- a/h-source/Application/Controllers/ImageController.php +++ /dev/null @@ -1,41 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class ImageController extends Controller { - - public function captcha() - { - session_start(); - - $params = array( - 'fontPath' => ROOT.'/External/Fonts/FreeFont/FreeMono.ttf', - 'boxHeight' => 100, - 'boxWidth' => 200, - 'undulation'=> true, - 'align' => false - ); - - $captcha = new Image_Gd_Captcha($params); - $captcha->render(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Controllers/IssuesController.php b/h-source/Application/Controllers/IssuesController.php deleted file mode 100644 index 6f7b74b..0000000 --- a/h-source/Application/Controllers/IssuesController.php +++ /dev/null @@ -1,203 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class IssuesController extends BaseController -{ - - public function __construct($model, $controller, $queryString) - { - - $this->_topMenuClasses['issues'] = " class='currentitem'"; - - parent::__construct($model, $controller, $queryString); - - $this->model('IssuesModel'); - $this->model('MessagesModel'); - $this->model('UsersModel'); - - $argKeys = array( - 'page:forceNat' => 1, - 'token:sanitizeAlphanum' => $this->token, - ); - - $this->setArgKeys($argKeys); - - $data['title'] = 'issues - '.Website::$generalName; - $this->append($data); - } - - public function viewall($lang = 'en') - { - $this->shift(1); - - $this->m['IssuesModel']->setFields('title,topic,priority,message','sanitizeAll'); - - $data['preview_message'] = null; - - if (isset($_POST['insertAction'])) - { - if ($this->s['registered']->status['status'] === 'logged') - { - if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect('home/index/'.$this->lang,2,'wrong token..'); - - if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); - - //set the page to 1 in the viewStatus - $this->viewArgs['page'] = 1; - $this->buildStatus(); - - $clean['id_user'] = (int)$this->s['registered']->status['id_user']; - - $this->m['IssuesModel']->values['created_by'] = $clean['id_user']; - $this->m['IssuesModel']->values['status'] = 'opened'; - $this->m['IssuesModel']->values['update_date'] = date('Y-m-d H:i:s'); - $this->m['IssuesModel']->updateTable('insert'); - - } - } - - //if preview - if (isset($_POST['previewAction'])) - { - if ($this->s['registered']->status['status'] === 'logged') - { - if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect('home/index/'.$this->lang,2,'wrong token..'); - - $data['preview_message'] = $this->request->post('message','','sanitizeHtml'); - $this->m['IssuesModel']->result = false; - } - } - - $data['notice'] = $this->m['IssuesModel']->notice; - - $this->viewArgs['token'] = $this->token; - $this->buildStatus(); - - $this->m['IssuesModel']->setForm('issues/viewall/'.$this->lang.$this->viewStatus."#form",array('previewAction'=>'preview','insertAction'=>'submit')); - - $values = $this->m['IssuesModel']->getFormValues('insert','sanitizeHtml'); - - $data['form'] = $this->m['IssuesModel']->form->render($values); - - //load the Pages helper - $this->helper('Pages',$this->controller.'/viewall/'.$this->lang,'page'); - //get the number of records - $this->m['IssuesModel']->from('issues')->left('messages')->using('id_issue')->groupBy('issues.id_issue')->orderBy('issues.update_date desc'); - - if ($this->islogged === "no") - { - $this->m['IssuesModel']->where(array("n!issues.deleted"=>"no")); - } - - $recordNumber = $this->m['IssuesModel']->rowNumber(); - $page = $this->viewArgs['page']; - //set the limit clause - $this->m['IssuesModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); - $data['table'] = $this->m['IssuesModel']->select('issues.*,messages.message,count(*) as numb_mess')->send(); - - $data['pageList'] = $this->h['Pages']->render($page-4,10); - - $this->append($data); - $this->load('viewall'); - $this->right(); - } - - public function view($lang = 'en', $id_issue = 0) - { - $this->m['MessagesModel']->setFields('message','sanitizeAll'); - - $this->shift(2); - - $clean['id_issue'] = (int)$id_issue; - $data['id_issue'] = $clean['id_issue']; - $data['preview_message'] = null; - - //if submit - if (isset($_POST['insertAction'])) - { - if ($this->s['registered']->status['status'] === 'logged') - { - if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect('home/index/'.$this->lang,2,'wrong token..'); - - if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); - - $clean['id_user'] = (int)$this->s['registered']->status['id_user']; - - $this->m['MessagesModel']->values['created_by'] = $clean['id_user']; - $this->m['MessagesModel']->values['id_issue'] = $clean['id_issue']; - $this->m['MessagesModel']->updateTable('insert'); - - if ($this->m['MessagesModel']->queryResult) - { - $this->m['IssuesModel']->values = array('update_date' => date('Y-m-d H:i:s')); - $this->m['IssuesModel']->update($clean['id_issue']); - - $domainName = rtrim(Url::getRoot(),"/"); - header('Refresh: 0;url='.$domainName.$_SERVER['REQUEST_URI']); - exit; - } - } - } - - //if preview - if (isset($_POST['previewAction'])) - { - if ($this->s['registered']->status['status'] === 'logged') - { - if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect('home/index/'.$this->lang,2,'wrong token..'); - - $data['preview_message'] = $this->request->post('message','','sanitizeHtml'); - $this->m['MessagesModel']->result = false; - } - } - - $data['notice'] = $this->m['MessagesModel']->notice; - - $this->viewArgs['token'] = $this->token; - $this->buildStatus(); - - //create the form - $this->m['MessagesModel']->setForm('issues/view/'.$this->lang."/".$clean['id_issue'].$this->viewStatus."#form",array('previewAction'=>'preview','insertAction'=>'submit')); - - $values = $this->m['MessagesModel']->getFormValues('insert','sanitizeHtml'); - - $data['form'] = $this->m['MessagesModel']->form->render($values); - - //retrieve the values from the table - $data['table'] = $this->m['IssuesModel']->select()->where(array('id_issue'=>$clean['id_issue']))->send(); - -// javascript for moderator - $data['md_javascript'] = "moderator_dialog(\"hide\",\"message\");moderator_dialog(\"show\",\"message\");moderator_dialog(\"open\",\"issue\");moderator_dialog(\"close\",\"issue\");moderator_dialog(\"issuehide\",\"issue_del\");moderator_dialog(\"issueshow\",\"issue_del\");"; - $data['go_to'] = $this->currPage."/".$this->lang."/".$clean['id_issue']; - - if (count($data['table']) > 0) - { - $data['messages'] = $this->m['MessagesModel']->select()->where(array('id_issue'=>$clean['id_issue']))->send(); - - $this->append($data); - $this->load('view'); - $this->load('moderator_dialog'); - $this->right(); - } - } - -} diff --git a/h-source/Application/Controllers/MeetController.php b/h-source/Application/Controllers/MeetController.php deleted file mode 100644 index 808b951..0000000 --- a/h-source/Application/Controllers/MeetController.php +++ /dev/null @@ -1,338 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class MeetController extends BaseController -{ - private $whereArray = array( - 'has_confirmed' => 0, - 'deleted' => 'no', - ); - - public function __construct($model, $controller, $queryString) - { - parent::__construct($model, $controller, $queryString); - - $this->model('ProfileModel'); - $this->model('HardwareModel'); - $this->model('IssuesModel'); - $this->model('MessagesModel'); - $this->model('TalkModel'); - $this->model('WikiModel'); - $this->model('WikitalkModel'); - - $argKeys = array( - 'page:forceNat' => 1, - ); - - $this->setArgKeys($argKeys); - - $data['title'] = 'meet - '.Website::$generalName; - $this->append($data); - } - - //public page of the user - public function user($lang = 'en', $user = '') - { - $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; - $data['title'] = "meet ".$clean['user']." - ".Website::$generalName; - - $this->shift(2); - - if ($this->m['UsersModel']->userExists($clean['user'])) - { - $clean['id_user'] = (int)$this->m['UsersModel']->getUserId($clean['user']); - $data['meet_id_user'] = $clean['id_user']; - - $data['isBlocked'] = $this->m['UsersModel']->isBlocked($clean['id_user']); - - $this->whereArray['username'] = $clean['user']; - - $data['table'] = $this->m['ProfileModel']->select('regusers.e_mail,regusers.username,profile.*')->from('regusers inner join profile')->on('regusers.id_user = profile.created_by')->where($this->whereArray)->send(); - - $data['meet_username'] = $clean['user']; - -// javascript for moderator - $data['md_javascript'] = "moderator_dialog(\"block\",\"user\");moderator_dialog(\"unblock\",\"user\");"; - - $this->append($data); - $this->load('meet'); - $this->load('moderator_dialog'); - $this->right(); - } - - } - - //contributions menu - public function contributions($lang = 'en', $user = '') - { - $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; - $data['title'] = $clean['user']." contributions - ".Website::$generalName; - - $this->shift(2); - - if ($this->m['UsersModel']->userExists($clean['user'])) - { - $clean['id_user'] = (int)$this->m['UsersModel']->getUserId($clean['user']); - - $this->whereArray['username'] = $clean['user']; - - $data['meet_username'] = $clean['user']; - - $hardNumb = $this->m['HardwareModel']->select()->where($this->whereArray)->rowNumber(); - - $issuesNumb = $this->m['IssuesModel']->select('id_issue')->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->rowNumber(); - - $messNumb = $this->m['MessagesModel']->select('id_mes,messages.id_issue,messages.creation_date')->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->rowNumber(); - - $talkNumb = $this->m['TalkModel']->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->rowNumber(); - - $wikiNumb = $this->m['WikiModel']->where($this->whereArray)->rowNumber(); - - $wikiTalkNumb = $this->m['WikitalkModel']->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->rowNumber(); - - $data['hasHardware'] = $hardNumb > 0 ? true : false; - $data['hasIssues'] = $issuesNumb > 0 ? true : false; - $data['hasMessages'] = $messNumb > 0 ? true : false; - $data['hasTalk'] = $talkNumb > 0 ? true : false; - $data['hasWiki'] = $wikiNumb > 0 ? true : false; - $data['hasWikiTalk'] = $wikiTalkNumb > 0 ? true : false; - - $this->append($data); - $this->load('contributions'); - $this->right(); - } - - } - - //hardware contributions - public function hardware($lang = 'en', $user = '') - { - $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; - $data['title'] = "hardware contributions - ".Website::$generalName; - - $this->shift(2); - - if ($this->m['UsersModel']->userExists($clean['user'])) - { - $this->whereArray['username'] = $clean['user']; - - $data['table'] = $this->m['HardwareModel']->select('hardware.*,regusers.username')->where($this->whereArray)->send(); - - $data['meet_username'] = $clean['user']; - - $data['tree_last_string'] = "hardware contributions"; - $data['page_explanation_title'] = "hardware contributions of"; - - $this->append($data); - $this->load('list_template'); - $this->right(); - } - - } - - //issues opened - public function issues($lang = 'en', $user = '') - { - $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; - $data['title'] = "issues submitted - ".Website::$generalName; - - $this->shift(2); - - if ($this->m['UsersModel']->userExists($clean['user'])) - { - //load the Pages helper - $this->helper('Pages','meet/issues/'.$this->lang.'/'.$clean['user'],'page'); - - $clean['id_user'] = (int)$this->m['UsersModel']->getUserId($clean['user']); - - $this->m['IssuesModel']->select('id_issue')->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->orderBy('id_issue desc'); - - $recordNumber = $this->m['IssuesModel']->rowNumber(); - $page = $this->viewArgs['page']; - - $this->m['IssuesModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,20); - - $data['table'] = $this->m['IssuesModel']->select('id_issue,creation_date,title')->send(); - - $data['pageList'] = $this->h['Pages']->render($page-3,7); - - $data['meet_username'] = $clean['user']; - - $data['tree_last_string'] = "issues opened"; - $data['page_explanation_title'] = "issues opened by"; - - $this->append($data); - $this->load('list_template'); - $this->right(); - } - - } - - //messages submitted - public function messages($lang = 'en', $user = '') - { - $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; - $data['title'] = "messages submitted - ".Website::$generalName; - - $this->shift(2); - - if ($this->m['UsersModel']->userExists($clean['user'])) - { - //load the Pages helper - $this->helper('Pages','meet/messages/'.$this->lang.'/'.$clean['user'],'page'); - - $clean['id_user'] = (int)$this->m['UsersModel']->getUserId($clean['user']); - - $this->m['MessagesModel']->from('messages inner join issues')->on('messages.id_issue=issues.id_issue')->select('id_mes,messages.id_issue,messages.creation_date,title')->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->orderBy('id_mes desc'); - - $recordNumber = $this->m['MessagesModel']->rowNumber(); - $page = $this->viewArgs['page']; - - $this->m['MessagesModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,20); - - $data['table'] = $this->m['MessagesModel']->send(); - - $data['meet_username'] = $clean['user']; - - $data['tree_last_string'] = "messages submitted"; - $data['page_explanation_title'] = "messages submitted by"; - - $data['pageList'] = $this->h['Pages']->render($page-3,7); - - $this->append($data); - $this->load('list_template'); - $this->right(); - } - } - - //messages in the talk page of the devices - public function talk($lang = 'en', $user = '') - { - $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; - $data['title'] = "talk messages submitted - ".Website::$generalName; - - $this->shift(2); - - if ($this->m['UsersModel']->userExists($clean['user'])) - { - //load the Pages helper - $this->helper('Pages','meet/talk/'.$this->lang.'/'.$clean['user'],'page'); - - $clean['id_user'] = (int)$this->m['UsersModel']->getUserId($clean['user']); - - $this->m['TalkModel']->inner('hardware')->using('id_hard')->select('talk.*,hardware.*')->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->orderBy('id_talk desc'); - - $recordNumber = $this->m['TalkModel']->rowNumber(); - $page = $this->viewArgs['page']; - - $this->m['TalkModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,20); - - $data['table'] = $this->m['TalkModel']->send(); - - $data['meet_username'] = $clean['user']; - - $data['tree_last_string'] = "talk messages (hardware pages)"; - $data['page_explanation_title'] = "talk messages (hardware pages) submitted by"; - - $data['pageList'] = $this->h['Pages']->render($page-3,7); - - $this->append($data); - $this->load('list_template'); - $this->right(); - } - } - - //hardware contributions - public function wiki($lang = 'en', $user = '') - { - $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; - $data['title'] = "wiki contributions - ".Website::$generalName; - - $this->shift(2); - - if ($this->m['UsersModel']->userExists($clean['user'])) - { - //load the Pages helper - $this->helper('Pages','meet/wiki/'.$this->lang.'/'.$clean['user'],'page'); - - $this->whereArray['username'] = $clean['user']; - - $data['table'] = $this->m['WikiModel']->select('wiki.*,regusers.username')->where($this->whereArray)->orderBy('wiki.id_wiki desc'); - - $recordNumber = $this->m['WikiModel']->rowNumber(); - $page = $this->viewArgs['page']; - - $this->m['WikiModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); - - $data['table'] = $this->m['WikiModel']->send(); - - $data['meet_username'] = $clean['user']; - - $data['tree_last_string'] = "wiki contributions"; - $data['page_explanation_title'] = "wiki contributions of"; - - $data['pageList'] = $this->h['Pages']->render($page-5,11); - - $this->append($data); - $this->load('list_template'); - $this->right(); - } - - } - - //messages in the talk page of the wiki pages - public function wikitalk($lang = 'en', $user = '') - { - $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; - $data['title'] = "talk messages submitted - ".Website::$generalName; - - $this->shift(2); - - if ($this->m['UsersModel']->userExists($clean['user'])) - { - //load the Pages helper - $this->helper('Pages','meet/wikitalk/'.$this->lang.'/'.$clean['user'],'page'); - - $clean['id_user'] = (int)$this->m['UsersModel']->getUserId($clean['user']); - - $this->m['WikitalkModel']->where(array('created_by'=>$clean['id_user'],'deleted'=>'no'))->orderBy('id_talk desc'); - - $recordNumber = $this->m['WikitalkModel']->rowNumber(); - $page = $this->viewArgs['page']; - - $this->m['WikitalkModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,20); - - $data['table'] = $this->m['WikitalkModel']->send(); - - $data['meet_username'] = $clean['user']; - - $data['tree_last_string'] = "talk messages (wiki pages)"; - $data['page_explanation_title'] = "talk messages (wiki pages) submitted by"; - - $data['pageList'] = $this->h['Pages']->render($page-3,7); - - $this->append($data); - $this->load('list_template'); - $this->right(); - } - } -} \ No newline at end of file diff --git a/h-source/Application/Controllers/ModemsController.php b/h-source/Application/Controllers/ModemsController.php deleted file mode 100644 index 2b308b6..0000000 --- a/h-source/Application/Controllers/ModemsController.php +++ /dev/null @@ -1,131 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class ModemsController extends GenericController -{ - - public function __construct($model, $controller, $queryString) - { - - $worksOptions = Modems::$select; - $worksField = 'compatibility'; - $interfaceOptions = Modems::$interface; - - parent::__construct($model, $controller, $queryString); - - //load the model - $this->model('HardwareModel'); - $this->model('RevisionsModel'); - $this->model('ModemsModel'); - $this->model('TalkModel'); - - $this->mod = $this->m['ModemsModel']; - - $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; - $this->m['HardwareModel']->type = 'modem'; - - $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); - - $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,compatibility,pci_id,interface,driver,other_names','sanitizeAll'); - - $argKeys = array( - 'page:forceNat' => 1, - 'history_page:forceNat' => 1, - 'vendor:sanitizeString' => 'undef', - 'comm_year:sanitizeString' => 'undef', - 'compatibility:sanitizeString' => 'undef', - 'interface:sanitizeString' => 'undef', - 'sort-by:sanitizeString' => 'compatibility-desc', - 'search_string:sanitizeString' => 'undef' - ); - - $this->setArgKeys($argKeys); - - $data['title'] = 'Modems'; - - $data['intefaceOptions'] = $interfaceOptions; - $data['worksOptions'] = $worksOptions; - $data['worksField'] = $worksField; - - $data['notFoundString'] = "No modems found"; - - $this->append($data); - } - - public function catalogue($lang = 'en') - { - $this->shift(1); - - $whereArray = array( - 'type' => $this->mod->type, - 'vendor' => $this->viewArgs['vendor'], - 'comm_year' => $this->viewArgs['comm_year'], - 'compatibility' => $this->viewArgs['compatibility'], - 'interface' => $this->viewArgs['interface'], - ); - - $this->mod->setWhereQueryClause($whereArray); - - parent::catalogue($lang); - } - - public function view($lang = 'en', $id = 0, $name = null) - { - parent::view($lang, $id, $name); - } - - public function history($lang = 'en', $id = 0) - { - parent::history($lang, $id); - } - - public function revision($lang = 'en', $id_rev = 0) - { - parent::revision($lang, $id_rev); - } - - public function insert($lang = 'en', $token = '') - { - parent::insert($lang, $token); - } - - public function update($lang = 'en', $token = '') - { - parent::update($lang, $token); - } - - public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) - { - parent::differences($lang, $id_hard, $id_rev); - } - - public function climb($lang = 'en', $id_rev = 0, $token = '') - { - parent::climb($lang, $id_rev, $token); - } - - public function talk($lang = 'en', $id_hard = 0, $token = '') - { - parent::talk($lang, $id_hard, $token); - } - -} diff --git a/h-source/Application/Controllers/MyController.php b/h-source/Application/Controllers/MyController.php deleted file mode 100644 index 69b8da7..0000000 --- a/h-source/Application/Controllers/MyController.php +++ /dev/null @@ -1,214 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class MyController extends BaseController -{ - - public function __construct($model, $controller, $queryString) { - parent::__construct($model, $controller, $queryString); - - $this->model('UsersModel'); - $this->model('ProfileModel'); - - $argKeys = array( - 'token:sanitizeAlphanum' => 'token' - ); - - $this->setArgKeys($argKeys); - - $data['title'] = 'my panel'; - $this->append($data); - } - - public function home($lang = 'en') - { - $this->shift(1); - - $data['title'] = 'my panel - '.Website::$generalName; - - $this->s['registered']->check(); - - $clean['id_user'] = (int)$this->s['registered']->status['id_user']; - $data['username'] = $this->m['UsersModel']->getUser($clean['id_user']); - - $data['userBlocked'] = $this->m['UsersModel']->isBlocked($clean['id_user']); - - $this->append($data); - $this->load('panel'); - $this->right($this->lang); - } - - public function password($lang = 'en') - { - $this->shift(1); - - $data['title'] = 'password - '.Website::$generalName; - - $this->s['registered']->check(); - - if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect($this->controller.'/home/'.$this->lang,2,'wrong token..'); - - $this->m['UsersModel']->setFields('password:sha1','none'); - - $this->m['UsersModel']->strongConditions['update'] = array('checkEqual'=>'password,confirmation'); - - $data['notice'] = null; - - $clean['id_user'] = (int)$this->s['registered']->status['id_user']; - - if (isset($_POST['updateAction'])) { - $pass = $this->s['registered']->getPassword(); - if (sha1($_POST['old']) === $pass) - { - $this->m['UsersModel']->updateTable('update',$clean['id_user']); - $data['notice'] = $this->m['UsersModel']->notice; - if ($this->m['UsersModel']->queryResult) - { - $this->s['registered']->logout(); - $this->redirect('home/index/'.$this->lang,2,'logout'); - } - } - else - { - $data['notice'] = "
          The old password is wrong
          \n"; - } - } - - $values = $this->m['UsersModel']->selectId($clean['id_user']); - $values['old'] = ''; - $values['confirmation'] = ''; - - $action = array('updateAction'=>'save'); - $form = new Form_Form('my/password/'.$this->lang.$this->viewStatus,$action); - $form->setEntry('old','Password'); - $form->entry['old']->labelString = 'old password:'; - $form->setEntry('password','Password'); - $form->setEntry('confirmation','Password'); - $data['form'] = $form->render($values,'old,password,confirmation'); - - $this->append($data); - - $this->load('password'); - $this->right(); - } - - public function email($lang = 'en') - { - $this->shift(1); - - $data['title'] = 'email - '.Website::$generalName; - - $this->s['registered']->check(); - - if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect($this->controller.'/home/'.$this->lang,2,'wrong token..'); - - $this->m['UsersModel']->setFields('e_mail','sanitizeAll'); - - $this->m['UsersModel']->strongConditions['update'] = array('checkMail'=>'e_mail'); - - $this->m['UsersModel']->databaseConditions['update'] = array('checkUniqueCompl'=>'e_mail'); - - $data['notice'] = null; - - $clean['id_user'] = (int)$this->s['registered']->status['id_user']; - - $this->m['UsersModel']->updateTable('update',$clean['id_user']); - $data['notice'] = $this->m['UsersModel']->notice; - - $values = $this->m['UsersModel']->selectId($clean['id_user']); - - $action = array('updateAction'=>'save'); - $form = new Form_Form('my/email/'.$this->lang.$this->viewStatus,$action); - $form->setEntry('e_mail','InputText'); - $form->entry['e_mail']->labelString = 'your e-mail address:'; - $data['form'] = $form->render($values,'e_mail'); - - $this->append($data); - - $this->load('email'); - $this->right(); - } - - public function profile($lang = 'en') - { - $this->shift(1); - - $data['title'] = 'profile - '.Website::$generalName; - - $this->s['registered']->check(); - - if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect($this->controller.'/home/'.$this->lang,2,'wrong token..'); - - $this->m['ProfileModel']->setFields('real_name,website,where_you_are,birth_date,fav_distro,projects,publish_mail,send_notification,description','sanitizeAll'); - - $clean['id_user'] = (int)$this->s['registered']->status['id_user']; - - $res = $this->m['ProfileModel']->db->select('profile','id_prof','created_by='.$clean['id_user']); - $clean['id_prof'] = (int)$res[0]['profile']['id_prof']; - - $this->m['ProfileModel']->values['update_date'] = date('Y-m-d H:i:s'); - $this->m['ProfileModel']->updateTable('update',$clean['id_prof']); - $data['notice'] = $this->m['ProfileModel']->notice; - - $values = $this->m['ProfileModel']->getFormValues('update','sanitizeHtml',$clean['id_prof']); - - $this->m['ProfileModel']->setForm('my/profile/'.$this->lang.$this->viewStatus,array('updateAction'=>'save'),'POST'); - $data['form'] = $this->m['ProfileModel']->form->render($values); - - $this->append($data); - - $this->load('profile'); - $this->right(); - } - - public function goodbye($lang = 'en') - { - $data['title'] = 'delete - '.Website::$generalName; - - session_start(); - - $this->shift(1); - - $this->s['registered']->check(); - - if (!$this->s['registered']->checkCsrf($this->viewArgs['token'])) $this->redirect($this->controller.'/home/'.$this->lang,2,'wrong token..'); - - $clean['id_user'] = (int)$this->s['registered']->status['id_user']; - - if (isset($_POST['closeAction'])) - { - $this->s['registered']->logout(); - $this->m['UsersModel']->close($clean['id_user']); - - if ($this->m['UsersModel']->queryResult) - { - $this->redirect('users/notice/'.$this->lang); - } - - } - - $this->append($data); - $this->load('goodbye'); - $this->right(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Controllers/NewsController.php b/h-source/Application/Controllers/NewsController.php deleted file mode 100644 index 1d500c9..0000000 --- a/h-source/Application/Controllers/NewsController.php +++ /dev/null @@ -1,67 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class NewsController extends BaseController -{ - - public function __construct($model, $controller, $queryString) - { - - $this->_topMenuClasses['news'] = " class='currentitem'"; - - parent::__construct($model, $controller, $queryString); - - $this->model('NewsModel'); - - $data['title'] = 'news - '.Website::$generalName; - $this->append($data); - } - - public function index($lang = 'en') - { - $argKeys = array( - 'page:forceNat' => 1, - ); - - $this->setArgKeys($argKeys); - - $this->shift(1); - - $this->helper('Pages',$this->controller.'/index/'.$this->lang,'page'); - $this->h['Pages']->nextString = 'older news'; - $this->h['Pages']->previousString = 'latest news'; - $page = $this->viewArgs['page']; - $recordNumber = $this->m['NewsModel']->rowNumber(); - $data['recordNumber'] = $recordNumber; - - //set the limit clause - $limit = $this->h['Pages']->getLimit($page,$recordNumber,10); - - $data['table'] = $this->m['NewsModel']->select()->limit($limit)->send(); - $data['pageList'] = $this->h['Pages']->render($page,0); - - $this->append($data); - $this->load('index'); - $this->right($lang); - } - -} \ No newline at end of file diff --git a/h-source/Application/Controllers/NotebooksController.php b/h-source/Application/Controllers/NotebooksController.php deleted file mode 100644 index 1daf894..0000000 --- a/h-source/Application/Controllers/NotebooksController.php +++ /dev/null @@ -1,159 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class NotebooksController extends GenericController -{ - - public function __construct($model, $controller, $queryString) - { - - parent::__construct($model, $controller, $queryString); - - //load the model - $this->model('HardwareModel'); - $this->model('RevisionsModel'); - $this->model('NotebooksModel'); - $this->model('TalkModel'); - - $this->mod = $this->m['NotebooksModel']; - - $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; - $this->m['HardwareModel']->type = 'notebook'; - - //hardware conditions - $this->m['HardwareModel']->strongConditions['update'] = array( - "checkIsStrings|".Notebooks::vendorsList() => "vendor", - "checkNotEmpty" => "model|you have to fill the model name entry", - "checkMatch|".Hardware::$regExpressions['model'] => "model|characters not allowed in the model name entry", - "+checkIsStrings|".Notebooks::compatibilityList() => "compatibility", - "checkLength|190" => "model", - "+checkLength|299" => "distribution", - "++checkIsStrings|".Hardware::getCommYears() => "comm_year", - "+++checkIsStrings|".Notebooks::$subtypeSelect => "subtype", - "++++checkIsStrings|".Notebooks::wifiList() => "wifi_works", - "+++++checkIsStrings|".Notebooks::videoList() => "video_card_works", - "++++++checkIsStrings|".Notebooks::biosList() => "bios", - "+++++++checkIsStrings|".Notebooks::webcamList() => "webcam_works", - "++++++++checkIsStrings|".Notebooks::architectureList() => "architecture", - "+++++++++checkIsStrings|".Notebooks::installableList() => "can_free_systems_be_installed", - "++++++++++checkIsStrings|".Notebooks::preventWifiList() => "prevent_wifi", - ); - - $this->m['HardwareModel']->strongConditions['insert'] = $this->m['HardwareModel']->strongConditions['update']; - - $this->m['HardwareModel']->softConditions['update'] = array( - "checkMatch|".Hardware::$regExpressions['kernel'] => "kernel|characters not allowed in the kernel entry", - "checkLength|40000" => "description", - "++checkLength|99" => "video_card_type,wifi_type", - "+++checkLength|99" => "kernel", - "+checkMatch|/^[a-zA-Z0-9\-\_\.\+\s\/\,\:\;\(\)\[\]]+$/" => "video_card_type|only the following characters are allowed for the videocard entry: a-z A-Z 0-9 - _ . + / , : ; ( ) [ ]", - "++checkMatch|/^[a-zA-Z0-9\-\_\.\+\s\/\,\:\;\(\)\[\]]+$/" => "wifi_type|only the following characters are allowed for the wifi entry: a-z A-Z 0-9 - _ . + / , : ; ( ) [ ]", - "+++checkMatch|/^[a-zA-Z0-9\-\_\.\+\s\/\,\:\;\(\)\[\]]+$/" => "webcam_type|only the following characters are allowed for the webcam entry: a-z A-Z 0-9 - _ . + / , : ; ( ) [ ]", - ); - - $this->m['HardwareModel']->softConditions['insert'] = $this->m['HardwareModel']->softConditions['update']; - - $this->m['HardwareModel']->setFields('vendor,model,compatibility,kernel,description,distribution,video_card_type,video_card_works,wifi_type,wifi_works,comm_year,subtype,bios,can_free_systems_be_installed,webcam_type,webcam_works,architecture,prevent_wifi','sanitizeAll'); - - $argKeys = array( - 'page:forceNat' => 1, - 'history_page:forceNat' => 1, - 'vendor:sanitizeString' => 'undef', - 'compatibility:sanitizeString' => 'undef', - 'comm_year:sanitizeString' => 'undef', - 'subtype:sanitizeString' => 'undef', - 'sort-by:sanitizeString' => 'compatibility', - 'bios:sanitizeString' => 'undef', - 'architecture:sanitizeString' => 'undef', - 'search_string:sanitizeString' => 'undef' - ); - - $this->setArgKeys($argKeys); - - $data['worksField'] = 'compatibility'; - - $data['notFoundString'] = "No notebooks found"; - - $data['title'] = 'Notebooks'; - $this->append($data); - } - - public function catalogue($lang = 'en') - { - $this->shift(1); - - $whereArray = array( - 'type' => $this->mod->type, - 'vendor' => $this->viewArgs['vendor'], - 'comm_year' => $this->viewArgs['comm_year'], - 'subtype' => $this->viewArgs['subtype'], - 'compatibility' => $this->viewArgs['compatibility'], - 'bios' => $this->viewArgs['bios'], - 'architecture' => $this->viewArgs['architecture'], - ); - - $this->mod->setWhereQueryClause($whereArray); - - parent::catalogue($lang); - } - - public function view($lang = 'en', $id = 0, $name = null) - { - parent::view($lang, $id, $name); - } - - public function history($lang = 'en', $id = 0) - { - parent::history($lang, $id); - } - - public function revision($lang = 'en', $id_rev = 0) - { - parent::revision($lang, $id_rev); - } - - public function insert($lang = 'en', $token = '') - { - parent::insert($lang, $token); - } - - public function update($lang = 'en', $token = '') - { - parent::update($lang, $token); - } - - public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) - { - parent::differences($lang, $id_hard, $id_rev); - } - - public function climb($lang = 'en', $id_rev = 0, $token = '') - { - parent::climb($lang, $id_rev, $token); - } - - public function talk($lang = 'en', $id_hard = 0, $token = '') - { - parent::talk($lang, $id_hard, $token); - } - -} diff --git a/h-source/Application/Controllers/PrintersController.php b/h-source/Application/Controllers/PrintersController.php deleted file mode 100644 index 8610314..0000000 --- a/h-source/Application/Controllers/PrintersController.php +++ /dev/null @@ -1,154 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class PrintersController extends GenericController -{ - - public function __construct($model, $controller, $queryString) - { - - parent::__construct($model, $controller, $queryString); - - //load the model - $this->model('HardwareModel'); - $this->model('RevisionsModel'); - $this->model('PrintersModel'); - $this->model('TalkModel'); - - $this->mod = $this->m['PrintersModel']; - - $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; - $this->m['HardwareModel']->type = 'printer'; - - //hardware conditions - $this->m['HardwareModel']->strongConditions['update'] = array( - "checkNotEmpty" => "model|you have to fill the model name entry", - "checkMatch|".Hardware::$regExpressions['model'] => "model|characters not allowed in the model name entry", - "+checkMatch|".Hardware::$regExpressions['vendorid_productid'] => "pci_id|VendorID:ProductID has to have the following format: [a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}", - "checkLength|190" => "model", - "+checkLength|299" => "distribution", - "+checkIsStrings|".Printer::compatibilityList() => "compatibility", - "++checkIsStrings|".Hardware::getCommYears() => "comm_year", - "+++checkIsStrings|".Printer::$interface => "interface", - "++++checkIsStrings|".Printer::$subtype => "subtype", - "+++++checkIsStrings|".Printer::$trackSelect => "it_tracks_users", - ); - - $this->m['HardwareModel']->strongConditions['insert'] = $this->m['HardwareModel']->strongConditions['update']; - - $this->m['HardwareModel']->softConditions['update'] = array( - "checkMatch|".Hardware::$regExpressions['kernel'] => "kernel|characters not allowed in the kernel entry", - "checkLength|40000" => "description", - "+checkLength|49" => "driver", - "++checkLength|99" => "kernel", - "++checkMatch|".Hardware::$regExpressions['driver'] => "driver|only the following characters are allowed for the driver entry: a-z A-Z 0-9 - _ . + s / , : ; ( ) [ ]", - "+++checkLength|1000" => "other_names|the other names entry exceeds the value of 1000 characters", - ); - - $this->m['HardwareModel']->softConditions['insert'] = $this->m['HardwareModel']->softConditions['update']; - - $this->m['HardwareModel']->setFields('model,kernel,description,compatibility,distribution,comm_year,pci_id,driver,interface,subtype,other_names,it_tracks_users','sanitizeAll'); - - $argKeys = array( - 'page:forceNat' => 1, - 'history_page:forceNat' => 1, - 'vendor:sanitizeString' => 'undef', - 'compatibility:sanitizeString' => 'undef', - 'comm_year:sanitizeString' => 'undef', - 'interface:sanitizeString' => 'undef', - 'sort-by:sanitizeString' => 'compatibility', - 'search_string:sanitizeString' => 'undef' - ); - - $this->setArgKeys($argKeys); - - $data['title'] = 'printers'; - - $data['intefaceOptions'] = Printer::$interface; - $data['worksOptions'] = Printer::$compatibility; - $data['worksField'] = 'compatibility'; - - $data['notFoundString'] = "No printers found"; - - $data['subtypeHelpLabel'] = "laser, inkjet, .."; - - $this->append($data); - } - - public function catalogue($lang = 'en') - { - $this->shift(1); - - $whereArray = array( - 'type' => $this->mod->type, - 'vendor' => $this->viewArgs['vendor'], - 'compatibility' => $this->viewArgs['compatibility'], - 'comm_year' => $this->viewArgs['comm_year'], - 'interface' => $this->viewArgs['interface'], - ); - - $this->mod->setWhereQueryClause($whereArray); - - parent::catalogue($lang); - } - - public function view($lang = 'en', $id = 0, $name = null) - { - parent::view($lang, $id, $name); - } - - public function history($lang = 'en', $id = 0) - { - parent::history($lang, $id); - } - - public function revision($lang = 'en', $id_rev = 0) - { - parent::revision($lang, $id_rev); - } - - public function insert($lang = 'en', $token = '') - { - parent::insert($lang, $token); - } - - public function update($lang = 'en', $token = '') - { - parent::update($lang, $token); - } - - public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) - { - parent::differences($lang, $id_hard, $id_rev); - } - - public function climb($lang = 'en', $id_rev = 0, $token = '') - { - parent::climb($lang, $id_rev, $token); - } - - public function talk($lang = 'en', $id_hard = 0, $token = '') - { - parent::talk($lang, $id_hard, $token); - } - -} diff --git a/h-source/Application/Controllers/ProjectController.php b/h-source/Application/Controllers/ProjectController.php deleted file mode 100644 index 234fb59..0000000 --- a/h-source/Application/Controllers/ProjectController.php +++ /dev/null @@ -1,42 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class ProjectController extends BaseController -{ - - public function __construct($model, $controller, $queryString) - { - $this->_topMenuClasses['project'] = " class='currentitem ui-btn-active'"; - - parent::__construct($model, $controller, $queryString); - - $data['title'] = 'project - '.Website::$generalName; - $this->append($data); - } - - public function index($lang = 'en') - { - $this->cleverLoad('index'); - $this->right(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Controllers/RaidadaptersController.php b/h-source/Application/Controllers/RaidadaptersController.php deleted file mode 100644 index be248b4..0000000 --- a/h-source/Application/Controllers/RaidadaptersController.php +++ /dev/null @@ -1,131 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class RaidadaptersController extends GenericController -{ - - public function __construct($model, $controller, $queryString) - { - - $worksOptions = Raidadapters::$select; - $worksField = 'compatibility'; - $interfaceOptions = Raidadapters::$interface; - - parent::__construct($model, $controller, $queryString); - - //load the model - $this->model('HardwareModel'); - $this->model('RevisionsModel'); - $this->model('RaidadaptersModel'); - $this->model('TalkModel'); - - $this->mod = $this->m['RaidadaptersModel']; - - $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; - $this->m['HardwareModel']->type = 'RAID-adapter'; - - $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); - - $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,compatibility,pci_id,interface,driver,other_names','sanitizeAll'); - - $argKeys = array( - 'page:forceNat' => 1, - 'history_page:forceNat' => 1, - 'vendor:sanitizeString' => 'undef', - 'comm_year:sanitizeString' => 'undef', - 'compatibility:sanitizeString' => 'undef', - 'interface:sanitizeString' => 'undef', - 'sort-by:sanitizeString' => 'compatibility-desc', - 'search_string:sanitizeString' => 'undef' - ); - - $this->setArgKeys($argKeys); - - $data['title'] = 'Acquisition cards'; - - $data['intefaceOptions'] = $interfaceOptions; - $data['worksOptions'] = $worksOptions; - $data['worksField'] = $worksField; - - $data['notFoundString'] = "No RAID adapter found"; - - $this->append($data); - } - - public function catalogue($lang = 'en') - { - $this->shift(1); - - $whereArray = array( - 'type' => $this->mod->type, - 'vendor' => $this->viewArgs['vendor'], - 'comm_year' => $this->viewArgs['comm_year'], - 'compatibility' => $this->viewArgs['compatibility'], - 'interface' => $this->viewArgs['interface'], - ); - - $this->mod->setWhereQueryClause($whereArray); - - parent::catalogue($lang); - } - - public function view($lang = 'en', $id = 0, $name = null) - { - parent::view($lang, $id, $name); - } - - public function history($lang = 'en', $id = 0) - { - parent::history($lang, $id); - } - - public function revision($lang = 'en', $id_rev = 0) - { - parent::revision($lang, $id_rev); - } - - public function insert($lang = 'en', $token = '') - { - parent::insert($lang, $token); - } - - public function update($lang = 'en', $token = '') - { - parent::update($lang, $token); - } - - public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) - { - parent::differences($lang, $id_hard, $id_rev); - } - - public function climb($lang = 'en', $id_rev = 0, $token = '') - { - parent::climb($lang, $id_rev, $token); - } - - public function talk($lang = 'en', $id_hard = 0, $token = '') - { - parent::talk($lang, $id_hard, $token); - } - -} diff --git a/h-source/Application/Controllers/RssController.php b/h-source/Application/Controllers/RssController.php deleted file mode 100644 index 0a74695..0000000 --- a/h-source/Application/Controllers/RssController.php +++ /dev/null @@ -1,64 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class RssController extends SpecialController -{ - - public function __construct($model, $controller, $queryString) - { - parent::__construct($model, $controller, $queryString); - - $data['title'] = 'RSS - '.Website::$generalName; - $this->append($data); - } - - public function modifications($lang = 'en') - { - header ("Content-Type:application/rss+xml"); - parent::modifications($lang); - - $data['statusnetText'] = null; - $this->append($data); - - $this->clean(); - $this->load('modifications'); - } - - //RSS feeds for identi.ca or StatusNet - public function statusnet($lang = 'en') - { - $this->modifications($lang); - - $data['statusnetText'] = Website::$statusnetGroupText; - $this->append($data); - } - - public function notapproved($lang = 'en') - { - $this->shift(1); - - $this->pagelist($lang,'notapproved'); - $this->clean(); - $this->load('notapproved'); - } - -} \ No newline at end of file diff --git a/h-source/Application/Controllers/ScannersController.php b/h-source/Application/Controllers/ScannersController.php deleted file mode 100644 index 80dc229..0000000 --- a/h-source/Application/Controllers/ScannersController.php +++ /dev/null @@ -1,127 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class ScannersController extends GenericController -{ - - public function __construct($model, $controller, $queryString) - { - - parent::__construct($model, $controller, $queryString); - - //load the model - $this->model('HardwareModel'); - $this->model('RevisionsModel'); - $this->model('ScannersModel'); - $this->model('TalkModel'); - - $this->mod = $this->m['ScannersModel']; - - $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; - $this->m['HardwareModel']->type = 'scanner'; - - $this->m['HardwareModel']->setConditions(Printer::compatibilityList(),'compatibility',Printer::$interface); - - $this->m['HardwareModel']->setFields('model,kernel,description,compatibility,distribution,comm_year,pci_id,driver,interface,other_names','sanitizeAll'); - - $argKeys = array( - 'page:forceNat' => 1, - 'history_page:forceNat' => 1, - 'vendor:sanitizeString' => 'undef', - 'compatibility:sanitizeString' => 'undef', - 'comm_year:sanitizeString' => 'undef', - 'interface:sanitizeString' => 'undef', - 'sort-by:sanitizeString' => 'compatibility', - 'search_string:sanitizeString' => 'undef' - ); - - $this->setArgKeys($argKeys); - - $data['title'] = 'scanners'; - - $data['intefaceOptions'] = Printer::$interface; - $data['worksOptions'] = Printer::$compatibility; - $data['worksField'] = 'compatibility'; - - $data['notFoundString'] = "No scanners found"; - - $this->append($data); - } - - public function catalogue($lang = 'en') - { - $this->shift(1); - - $whereArray = array( - 'type' => $this->mod->type, - 'vendor' => $this->viewArgs['vendor'], - 'compatibility' => $this->viewArgs['compatibility'], - 'comm_year' => $this->viewArgs['comm_year'], - 'interface' => $this->viewArgs['interface'], - ); - - $this->mod->setWhereQueryClause($whereArray); - - parent::catalogue($lang); - } - - public function view($lang = 'en', $id = 0, $name = null) - { - parent::view($lang, $id, $name); - } - - public function history($lang = 'en', $id = 0) - { - parent::history($lang, $id); - } - - public function revision($lang = 'en', $id_rev = 0) - { - parent::revision($lang, $id_rev); - } - - public function insert($lang = 'en', $token = '') - { - parent::insert($lang, $token); - } - - public function update($lang = 'en', $token = '') - { - parent::update($lang, $token); - } - - public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) - { - parent::differences($lang, $id_hard, $id_rev); - } - - public function climb($lang = 'en', $id_rev = 0, $token = '') - { - parent::climb($lang, $id_rev, $token); - } - - public function talk($lang = 'en', $id_hard = 0, $token = '') - { - parent::talk($lang, $id_hard, $token); - } - -} diff --git a/h-source/Application/Controllers/SdcardreadersController.php b/h-source/Application/Controllers/SdcardreadersController.php deleted file mode 100644 index 9d156cf..0000000 --- a/h-source/Application/Controllers/SdcardreadersController.php +++ /dev/null @@ -1,131 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class SdcardreadersController extends GenericController -{ - - public function __construct($model, $controller, $queryString) - { - - $worksOptions = Sdcardreaders::$select; - $worksField = 'sd_card_works'; - $interfaceOptions = Sdcardreaders::$interface; - - parent::__construct($model, $controller, $queryString); - - //load the model - $this->model('HardwareModel'); - $this->model('RevisionsModel'); - $this->model('SdcardreadersModel'); - $this->model('TalkModel'); - - $this->mod = $this->m['SdcardreadersModel']; - - $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; - $this->m['HardwareModel']->type = 'sd-card-reader'; - - $this->m['HardwareModel']->setConditions($worksOptions,$worksField,$interfaceOptions); - - $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,sd_card_works,pci_id,interface,driver,other_names','sanitizeAll'); - - $argKeys = array( - 'page:forceNat' => 1, - 'history_page:forceNat' => 1, - 'vendor:sanitizeString' => 'undef', - 'comm_year:sanitizeString' => 'undef', - 'sd_card_works:sanitizeString' => 'undef', - 'interface:sanitizeString' => 'undef', - 'sort-by:sanitizeString' => 'sdcard-works', - 'search_string:sanitizeString' => 'undef' - ); - - $this->setArgKeys($argKeys); - - $data['title'] = 'SD card readers'; - - $data['intefaceOptions'] = $interfaceOptions; - $data['worksOptions'] = $worksOptions; - $data['worksField'] = $worksField; - - $data['notFoundString'] = "No SD card readers found"; - - $this->append($data); - } - - public function catalogue($lang = 'en') - { - $this->shift(1); - - $whereArray = array( - 'type' => $this->mod->type, - 'vendor' => $this->viewArgs['vendor'], - 'comm_year' => $this->viewArgs['comm_year'], - 'sd_card_works' => $this->viewArgs['sd_card_works'], - 'interface' => $this->viewArgs['interface'], - ); - - $this->mod->setWhereQueryClause($whereArray); - - parent::catalogue($lang); - } - - public function view($lang = 'en', $id = 0, $name = null) - { - parent::view($lang, $id, $name); - } - - public function history($lang = 'en', $id = 0) - { - parent::history($lang, $id); - } - - public function revision($lang = 'en', $id_rev = 0) - { - parent::revision($lang, $id_rev); - } - - public function insert($lang = 'en', $token = '') - { - parent::insert($lang, $token); - } - - public function update($lang = 'en', $token = '') - { - parent::update($lang, $token); - } - - public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) - { - parent::differences($lang, $id_hard, $id_rev); - } - - public function climb($lang = 'en', $id_rev = 0, $token = '') - { - parent::climb($lang, $id_rev, $token); - } - - public function talk($lang = 'en', $id_hard = 0, $token = '') - { - parent::talk($lang, $id_hard, $token); - } - -} diff --git a/h-source/Application/Controllers/SearchController.php b/h-source/Application/Controllers/SearchController.php deleted file mode 100644 index 1892f70..0000000 --- a/h-source/Application/Controllers/SearchController.php +++ /dev/null @@ -1,267 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class SearchController extends BaseController -{ - - public function __construct($model, $controller, $queryString) - { - - $this->_topMenuClasses['search'] = " class='currentitem'"; - - parent::__construct($model, $controller, $queryString); - - $this->model('HardwareModel'); - - $data['title'] = 'search - '.Website::$generalName; - $this->append($data); - } - - public function form($lang = 'en') - { - $this->cleverLoad('form'); - $this->right(); - } - - public function results($lang = 'en') - { - Params::$nullQueryValue = 'undef'; - - $argKeys = array( - 'page:forceNat' => 1, - 'action:sanitizeAlphanum' => 'search', - 'type:sanitizeString' => 'notebook', - 'model:sanitizeString' => 'undef', - ); - - $this->setArgKeys($argKeys); - - $this->shift(1); - - if (strcmp($this->viewArgs['action'],'search') === 0) - { - Params::$whereClauseSymbolArray = array('like'); - - $this->m['HardwareModel']->logicalOperators = array('AND','OR'); - - $whereClause = array( - 'type' => $this->viewArgs['type'], - 'level1' => array( - 'model' => "like '%".$this->viewArgs['model']."%'", - 'other_names' => "like '%".$this->viewArgs['model']."%'", - ), -// 'model' => "like '%".$this->viewArgs['model']."%'", -// 'other_names' => "like '%".$this->viewArgs['model']."%'", - '-deleted' => "no", - 'cleared' => "no", - ); - - $recordNumber = $this->m['HardwareModel']->clear()->where($whereClause)->orderBy("id_hard desc")->rowNumber(); - - $data['recordNumber'] = $recordNumber; - - //load the Pages helper - $this->helper('Pages',$this->controller.'/results/'.$this->lang,'page'); - $page = $this->viewArgs['page']; - //set the limit clause - $limit = $this->h['Pages']->getLimit($page,$recordNumber,10); - - $data['table'] = $this->m['HardwareModel']->clear()->select('id_hard,model,type,comm_year,other_names')->where($whereClause)->limit($limit)->orderBy("id_hard desc")->send(); -// echo $this->m['HardwareModel']->getQuery(); - - $data['pageList'] = $this->h['Pages']->render($page-3,7); - - $this->append($data); - $this->cleverLoad('results'); - $this->right(); - } - - } - - public function pciid($lang = 'en') - { - if (isset($_POST['pciid'])) - { - $clean['pciid'] = $this->request->post('pciid','','sanitizePciid'); - $data['table'] = $this->m['HardwareModel']->clear()->select()->where(array('pci_id'=>$clean['pciid']))->send(); - $data['recordNumber'] = 0; - - $this->append($data); - $this->cleverLoad('results'); - $this->right(); - } - } - - public function lspci($lang = 'en') - { - if (isset($_POST['lspci'])) - { - $data['notice'] = null; - - $lspci = $this->request->post('lspci','','sanitizeHtml'); - $lspciResult = array(); - $flag = true; - - if (strlen($lspci)<50000) - { - $lspci = nl2br($lspci); - $lspciArray = explode('
          ',$lspci); - reset($lspciArray); - while(current($lspciArray) !== false) - { - $item = current($lspciArray); - if( preg_match( '/Slot\:(.*)([0-9a-zA-Z]{2}\:[0-9a-zA-Z]{2}\.[0-9a-zA-Z]{1})/i', $item ) ) -// if (stristr($item,'Slot')) - { - $temp = array(); -// class - if (next($lspciArray) !== false) - { - $item = trim(current($lspciArray)); - if( preg_match( '/Class\:(.*)\[(.*)\]/i', $item, $matches ) ) - { - $temp['className'] = sanitizeAll($matches[1]); - $temp['classId'] = sanitizeAll($matches[2]); - } - else - { - $temp['className'] = "unknown"; - $temp['classId'] = "unknown"; - } - } - else - { - $flag = false; - break; - } - -// vendor - if (next($lspciArray) !== false) - { - $item = trim(current($lspciArray)); - if( preg_match( '/Vendor\:(.*)\[(.*)\]/i', $item, $matches ) ) - { - $temp['vendorName'] = sanitizeAll($matches[1]); - $temp['vendorId'] = sanitizeAll($matches[2]); - } - else - { - $temp['vendorName'] = "unknown"; - $temp['vendorId'] = "unknown"; - } - } - else - { - $flag = false; - break; - } - -// device - if (next($lspciArray) !== false) - { - $item = trim(current($lspciArray)); - if( preg_match( '/Device\:(.*)\[(.*)\]/i', $item, $matches ) ) - { - $temp['deviceName'] = sanitizeAll($matches[1]); - $temp['deviceId'] = sanitizeAll($matches[2]); - } - else - { - $temp['deviceName'] = "unknown"; - $temp['deviceId'] = "unknown"; - } - } - else - { - $flag = false; - break; - } - - $lspciResult[] = $temp; - } - next($lspciArray); - } - if (count($lspciResult) === 0 or $flag === false) - { - $data['notice'] = "
          ".gtext('the text submitted by you does not seem to be the lspci -vmmnn output. Please check the text and try again')."
          \n"; - $flag = false; - } - } - else - { - $data['notice'] = "
          the lspci output is too long
          \n"; - $flag = false; - } - - $data['flag'] = $flag; - - $data['table'] = array(); - $data['notFoundDevices'] = array(); - - if ($flag) - { - $lspciFiltered = array(); - $vendorIDProductIDArray = array(); - foreach ($lspciResult as $device) - { - if (array_key_exists($device['classId'],Hardware::$deviceClasses)) - { - $vendorIDProductIDArray[] = sanitizePciid($device['vendorId'].":".$device['deviceId']); - $lspciFiltered[] = $device; - } - } - if (count($vendorIDProductIDArray) > 0) - { - $whereString = "'".implode("','",$vendorIDProductIDArray)."'"; - $data['table'] = $this->m['HardwareModel']->select()->where(array('pci_id'=>"in($whereString)"))->send(); - - $foundPciidArray = $this->m['HardwareModel'] - ->select('pci_id') - ->where(array('pci_id'=>"in($whereString)")) - ->toList('pci_id') - ->send(); - - $notFoundDevices = array(); //list of devices not found inside the database - $notFoundPciIdList = array(); //to check that it does not take the same device twice - - foreach ($lspciFiltered as $device) - { - if (!in_array($device['vendorId'].":".$device['deviceId'],$foundPciidArray)) - { - if (!in_array($device['vendorId'].":".$device['deviceId'],$notFoundPciIdList)) - { - $notFoundDevices[] = $device; - $notFoundPciIdList[] = $device['vendorId'].":".$device['deviceId']; - } - } - } - - $data['notFoundDevices'] = $notFoundDevices; - } - - } - $this->append($data); - $this->cleverLoad('lspci_results'); - $this->right(); - } - } -} \ No newline at end of file diff --git a/h-source/Application/Controllers/SoundcardsController.php b/h-source/Application/Controllers/SoundcardsController.php deleted file mode 100644 index fff5e77..0000000 --- a/h-source/Application/Controllers/SoundcardsController.php +++ /dev/null @@ -1,127 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class SoundcardsController extends GenericController -{ - - public function __construct($model, $controller, $queryString) - { - - parent::__construct($model, $controller, $queryString); - - //load the model - $this->model('HardwareModel'); - $this->model('RevisionsModel'); - $this->model('SoundcardsModel'); - $this->model('TalkModel'); - - $this->mod = $this->m['SoundcardsModel']; - - $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; - $this->m['HardwareModel']->type = 'soundcard'; - - $this->m['HardwareModel']->setConditions(Soundcards::$audioSelect,'sound_card_works',Soundcards::$interface); - - $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,sound_card_works,pci_id,interface,driver,other_names','sanitizeAll'); - - $argKeys = array( - 'page:forceNat' => 1, - 'history_page:forceNat' => 1, - 'vendor:sanitizeString' => 'undef', - 'comm_year:sanitizeString' => 'undef', - 'sound_card_works:sanitizeString' => 'undef', - 'interface:sanitizeString' => 'undef', - 'sort-by:sanitizeString' => 'sound-card-works', - 'search_string:sanitizeString' => 'undef' - ); - - $this->setArgKeys($argKeys); - - $data['title'] = 'Soundcard'; - - $data['intefaceOptions'] = Soundcards::$interface; - $data['worksOptions'] = Soundcards::$audioSelect; - $data['worksField'] = 'sound_card_works'; - - $data['notFoundString'] = "No sound cards found"; - - $this->append($data); - } - - public function catalogue($lang = 'en') - { - $this->shift(1); - - $whereArray = array( - 'type' => $this->mod->type, - 'vendor' => $this->viewArgs['vendor'], - 'comm_year' => $this->viewArgs['comm_year'], - 'sound_card_works' => $this->viewArgs['sound_card_works'], - 'interface' => $this->viewArgs['interface'], - ); - - $this->mod->setWhereQueryClause($whereArray); - - parent::catalogue($lang); - } - - public function view($lang = 'en', $id = 0, $name = null) - { - parent::view($lang, $id, $name); - } - - public function history($lang = 'en', $id = 0) - { - parent::history($lang, $id); - } - - public function revision($lang = 'en', $id_rev = 0) - { - parent::revision($lang, $id_rev); - } - - public function insert($lang = 'en', $token = '') - { - parent::insert($lang, $token); - } - - public function update($lang = 'en', $token = '') - { - parent::update($lang, $token); - } - - public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) - { - parent::differences($lang, $id_hard, $id_rev); - } - - public function climb($lang = 'en', $id_rev = 0, $token = '') - { - parent::climb($lang, $id_rev, $token); - } - - public function talk($lang = 'en', $id_hard = 0, $token = '') - { - parent::talk($lang, $id_hard, $token); - } - -} diff --git a/h-source/Application/Controllers/SpecialController.php b/h-source/Application/Controllers/SpecialController.php deleted file mode 100644 index 4acbb5e..0000000 --- a/h-source/Application/Controllers/SpecialController.php +++ /dev/null @@ -1,216 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class SpecialController extends BaseController -{ - - public function __construct($model, $controller, $queryString) - { - parent::__construct($model, $controller, $queryString); - - $this->model('HistoryModel'); - $this->model('HardwareModel'); - - $data['title'] = gtext('last modifications').' - '.Website::$generalName; - $this->append($data); - - Params::$nullQueryValue = 'undef'; - - $this->setArgKeys(array('page:forceNat'=>1,'username:sanitizeAll'=>'undef')); - } - - protected function last($lang = 'en',$action = 'modifications') - { - switch ($action) - { - case 'modactions': - $data['title'] = 'last moderations - '.Website::$generalName; - $data['viewTitle'] = 'List of actions carried out by moderators'; - $data['user_status'] = 'MODERATOR'; - - $whereClauseArray = array( - 'gr' => 'moderator', - ); - - $viewFile = 'modactions'; - - break; - case 'adminactions': - $data['title'] = 'last admin actions - '.Website::$generalName; - $data['viewTitle'] = 'List of actions carried out by administrators'; - $data['user_status'] = 'ADMINISTRATOR'; - - $whereClauseArray = array( - 'gr' => 'admin', - ); - - $viewFile = 'modactions'; - - break; - - case 'usersactions': - $data['title'] = 'last registered users actions - '.Website::$generalName; - $data['viewTitle'] = 'List of actions carried out by registered users'; - $data['user_status'] = 'USER'; - - $whereClauseArray = array( - 'gr' => 'registered', - ); - - $viewFile = 'modactions'; - - break; - } - $whereClauseArray['username'] = $this->viewArgs['username']; - - $this->helper('Pages','special/'.$this->action.'/'.$this->lang,'page'); - - $this->m['HistoryModel']->clear()->left('regusers')->on('history.created_by=regusers.id_user')->select("history.*,regusers.username")->where($whereClauseArray)->orderBy('id_history desc'); - - $recordNumber = $this->m['HistoryModel']->rowNumber(); - $page = $this->viewArgs['page']; - - $this->m['HistoryModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); - - $data['table'] = $this->m['HistoryModel']->send(); - -// echo $this->m['HistoryModel']->getQuery(); - - $data['pageList'] = $this->h['Pages']->render($page-5,11); - - //the value of the filter - $data['filterValue'] = strcmp($this->viewArgs['username'],'undef') === 0 ? null : $this->viewArgs['username']; - - $this->append($data); - $this->load($viewFile); - $this->right(); - } - - public function modifications($lang = 'en') - { - $this->shift(1); - - $data['title'] = 'last modifications - '.Website::$generalName; - - $whereClauseArray = array( - 'gr' => 'registered', - 'type' => 'hardware', - 'deleted' => 'no', - 'cleared' => 'no', - ); - - $this->helper('Pages','special/'.$this->action.'/'.$this->lang,'page'); - - $this->m['HistoryModel']->clear()->select('history.*,hardware.*')->inner('hardware')->on('hardware.id_hard=history.id')->where($whereClauseArray)->orderBy('id_history desc'); - - $recordNumber = $this->m['HistoryModel']->rowNumber(); - $page = $this->viewArgs['page']; - - $this->m['HistoryModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); - - $data['table'] = $this->m['HistoryModel']->send(); - - $data['pageList'] = $this->h['Pages']->render($page-5,11); - - $this->append($data); - $this->load('modifications'); - $this->right(); - } - - public function modactions($lang = 'en') - { - $this->shift(1); - - $this->s['registered']->check('moderator'); - - $this->last($lang = 'en','modactions'); - } - - public function adminactions($lang = 'en') - { - $this->shift(1); - - $this->s['registered']->check('admin'); - - $this->last($lang = 'en','adminactions'); - } - - public function usersactions($lang = 'en') - { - $this->shift(1); - - $this->s['registered']->check('moderator'); - - $this->last($lang = 'en','usersactions'); - } - - protected function pagelist($lang = 'en', $type) - { - switch ($type) - { - case 'deleted': - $whereArray = array('-deleted'=>'yes','approved'=>'yes'); - $data['titleString'] = 'hidden device pages'; - break; - case 'notapproved': - $whereArray = array('approved'=>'no'); - $data['titleString'] = 'Device pages that have to be approved'; - break; - } - - $this->helper('Pages','special/'.$this->action.'/'.$this->lang,'page'); - - $this->m['HardwareModel']->clear()->select()->where($whereArray)->orderBy('id_hard desc'); - - $recordNumber = $this->m['HardwareModel']->rowNumber(); - $page = $this->viewArgs['page']; - - $this->m['HardwareModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); - - $data['table'] = $this->m['HardwareModel']->send(); - - $data['pageList'] = $this->h['Pages']->render($page-5,11); - - $this->append($data); - $this->load('pages_deleted'); - $this->right(); - } - - public function deleted($lang = 'en') - { - $this->shift(1); - - $this->s['registered']->check('admin'); - - $this->pagelist($lang,'deleted'); - } - - public function notapproved($lang = 'en') - { - $this->shift(1); - - $this->s['registered']->check('admin'); - - $this->pagelist($lang,'notapproved'); - } - -} \ No newline at end of file diff --git a/h-source/Application/Controllers/ThreegcardsController.php b/h-source/Application/Controllers/ThreegcardsController.php deleted file mode 100644 index 3824fe0..0000000 --- a/h-source/Application/Controllers/ThreegcardsController.php +++ /dev/null @@ -1,127 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class ThreegcardsController extends GenericController -{ - - public function __construct($model, $controller, $queryString) - { - - parent::__construct($model, $controller, $queryString); - - //load the model - $this->model('HardwareModel'); - $this->model('RevisionsModel'); - $this->model('ThreegcardsModel'); - $this->model('TalkModel'); - - $this->mod = $this->m['ThreegcardsModel']; - - $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; - $this->m['HardwareModel']->type = '3G-card'; - - $this->m['HardwareModel']->setConditions(Wifi::$wifiSelect,'wifi_works',ThreeGcards::interfaceList()); - - $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,wifi_works,pci_id,interface,driver,other_names','sanitizeAll'); - - $argKeys = array( - 'page:forceNat' => 1, - 'history_page:forceNat' => 1, - 'vendor:sanitizeString' => 'undef', - 'comm_year:sanitizeString' => 'undef', - 'wifi_works:sanitizeString' => 'undef', - 'interface:sanitizeString' => 'undef', - 'sort-by:sanitizeString' => 'wifi-works', - 'search_string:sanitizeString' => 'undef' - ); - - $this->setArgKeys($argKeys); - - $data['title'] = '3G card'; - - $data['intefaceOptions'] = Wifi::$interface; - $data['worksOptions'] = Wifi::$wifiSelect; - $data['worksField'] = 'wifi_works'; - - $data['notFoundString'] = "No 3G cards found"; - - $this->append($data); - } - - public function catalogue($lang = 'en') - { - $this->shift(1); - - $whereArray = array( - 'type' => $this->mod->type, - 'vendor' => $this->viewArgs['vendor'], - 'comm_year' => $this->viewArgs['comm_year'], - 'wifi_works' => $this->viewArgs['wifi_works'], - 'interface' => $this->viewArgs['interface'], - ); - - $this->mod->setWhereQueryClause($whereArray); - - parent::catalogue($lang); - } - - public function view($lang = 'en', $id = 0, $name = null) - { - parent::view($lang, $id, $name); - } - - public function history($lang = 'en', $id = 0) - { - parent::history($lang, $id); - } - - public function revision($lang = 'en', $id_rev = 0) - { - parent::revision($lang, $id_rev); - } - - public function insert($lang = 'en', $token = '') - { - parent::insert($lang, $token); - } - - public function update($lang = 'en', $token = '') - { - parent::update($lang, $token); - } - - public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) - { - parent::differences($lang, $id_hard, $id_rev); - } - - public function climb($lang = 'en', $id_rev = 0, $token = '') - { - parent::climb($lang, $id_rev, $token); - } - - public function talk($lang = 'en', $id_hard = 0, $token = '') - { - parent::talk($lang, $id_hard, $token); - } - -} diff --git a/h-source/Application/Controllers/UsersController.php b/h-source/Application/Controllers/UsersController.php deleted file mode 100644 index 741eaf4..0000000 --- a/h-source/Application/Controllers/UsersController.php +++ /dev/null @@ -1,352 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class UsersController extends BaseController -{ - - public function __construct($model, $controller, $queryString) - { - parent::__construct($model, $controller, $queryString); - - $this->model('UsersModel'); - $this->model('ProfileModel'); - $this->model('HardwareModel'); - - $data['title'] = 'Login'; - $this->append($data); - } - - public function login($lang = 'en') - { - $data = array(); - - if ( strcmp($this->_updating,'no') === 0 ) - { - $data['flag'] = isset($type) ? 'setted' : null; - - $data['title'] = 'Login - '.Website::$generalName; - - $redirect = $this->request->get('redirect','','sanitizeAll'); - - $data['action'] = Url::getRoot("users/login/".$this->lang."?redirect=$redirect"); - - $data['notice'] = null; - - $this->s['registered']->checkStatus(); - - if ($this->s['registered']->status['status']=='logged') { //check if already logged - $this->redirect('home/index/'.Lang::$current,3,'You are already logged...'); - die(); - } - if (isset($_POST['username']) and isset($_POST['password'])) - { - $username = ctype_alnum($_POST['username']) ? sanitizeAll($_POST['username']) : ''; - $choice = $this->s['registered']->login($username,$_POST['password']); - - switch($choice) { - case 'logged': - $this->redirect('home/index/'.Lang::$current,3,'You are already logged...'); - break; - case 'accepted': - if (strcmp($redirect,'') !== 0) - { - $redirect = html_entity_decode($redirect,ENT_QUOTES,DEFAULT_CHARSET); - $domainName = rtrim(Url::getRoot(),"/"); - header('Location:'.$domainName."/".$redirect); - } - else - { - $this->redirect('home/index/'.Lang::$current,0); - } - break; - case 'login-error': - $data['notice'] = '
          Wrong username or password
          '; - break; - case 'wait': - $data['notice'] = '
          You have to wait 5 seconds before you can try to login another time
          '; - break; - } - } - } - - $this->append($data); - $this->load('login'); - } - - public function logout($lang = 'en') - { - $res = $this->s['registered']->logout(); - - if ($res === 'not-logged') - { - $data['notice'] = "
          You can't logout because you are not logged...
          \n"; - } - else if ($res === 'was-logged') - { - $this->redirect('home/index/'.Lang::$current,0); - } - else if ($res === 'error') - { - - } - - $this->append($data); - $this->load('logout'); - } - - public function add($lang = 'en') - { - $data['title'] = 'create account - '.Website::$generalName; - - if ( strcmp($this->_updating,'no') === 0 ) - { - //start session for captcha - session_start(); - - if ( isset($_SESSION['status']) ) unset($_SESSION['status']); - - $this->shift(1); - - $this->m['UsersModel']->strongConditions['insert'] = array( - "checkAlphanum" => "username", - "checkLength|35" => "username", - "checkMail" => "e_mail", - "+checkLength|60" => "e_mail", - "checkEqual" => "password,confirmation", - "checkMatch|/^[a-zA-Z0-9\_\-\!]+$/" => "password,confirmation|characters allowed for the password: a-z A-Z 0-9 - _ !" - ); - - $this->m['UsersModel']->databaseConditions['insert'] = array( - "checkUnique" => "username", - "+checkUnique" => "e_mail" - ); - - if ($this->s['registered']->status['status'] === 'logged') - { - $this->redirect('home/index/'.$this->lang,2,'you are already logged..'); - } - else - { - $data['notice'] = null; - - $this->m['UsersModel']->setFields('username:sanitizeAll,e_mail:sanitizeAll,password:sha1','none'); - - $this->m['UsersModel']->updateTable('insert'); - - $data['notice'] = $this->m['UsersModel']->notice; - - $values = $this->m['UsersModel']->getFormValues('insert','sanitizeHtml'); - $values['confirmation'] = ''; - - $data['values'] = $values; - - $this->append($data); - - $this->load('add'); - $this->right(); - } - } - else - { - $this->redirect('users/login/'.$this->lang,0); - } - } - - public function confirm($lang = 'en', $id_user = 0, $confirmation_token = '') - { - $data['title'] = 'confirm account - '.Website::$generalName; - - if ( strcmp($this->_updating,'no') === 0 ) - { - if ($this->s['registered']->status['status'] === 'logged') - { - $this->redirect('home/index/'.$this->lang,2,'you are already logged..'); - } - else - { - $clean['id_user'] = (int)$id_user; - $clean['confirmation_token'] = sanitizeAlphanum($confirmation_token); - - $data['status_confirm'] = false; - - $res = $this->m['UsersModel']->select('id_user,creation_time')->where(array("id_user"=>$clean['id_user'],"confirmation_token"=>$clean['confirmation_token'],"has_confirmed"=>1,"deleted"=>"no"))->send(); - - // echo $this->m['UsersModel']->getQuery(); - - if (count($res) > 0) - { - $now = time(); - $checkTime = $res[0]['regusers']['creation_time'] + Account::$confirmTime; - if ($checkTime > $now) - { - $this->m['UsersModel']->values = array('has_confirmed' => 0, 'creation_time' => 0); - if ($this->m['UsersModel']->update($clean['id_user'])) - { - $data['status_confirm'] = true; - - //ad a record in the profile table - $this->m['ProfileModel']->values = array('created_by' => $clean['id_user']); - $this->m['ProfileModel']->insert(); - - } - } - } - - // var_dump($data['status_confirm']); - - $this->append($data); - $this->load('confirmation'); - $this->right(); - } - } - else - { - $this->redirect('users/login/'.$this->lang,0); - } - } - - public function change($lang = 'en', $id_user = 0, $forgot_token = '') - { - session_start(); - - $data['title'] = 'change password - '.Website::$generalName; - - if ( strcmp($this->_updating,'no') === 0 ) - { - if ($this->s['registered']->status['status'] === 'logged') - { - $this->redirect('home/index/'.$this->lang,2,'you are already logged..'); - } - else - { - $clean['id_user'] = (int)$id_user; - $clean['forgot_token'] = sanitizeAlphanum($forgot_token); - - $res = $this->m['UsersModel']->select('username,id_user,forgot_time,e_mail')->where(array("id_user"=>$clean['id_user'],"forgot_token"=>$clean['forgot_token'],"has_confirmed"=>0,"deleted"=>"no"))->send(); - - if (count($res) > 0) - { - $now = time(); - $checkTime = $res[0]['regusers']['forgot_time'] + Account::$confirmTime; - if ($checkTime > $now) - { - $username = $res[0]['regusers']['username']; - $email = $res[0]['regusers']['e_mail']; - - $newPassword = generateString(10); - $this->m['UsersModel']->values = array('password' => sha1($newPassword), 'forgot_time' => 0); - if ($this->m['UsersModel']->update($clean['id_user'])) - { - $result = Account::sendpassword($username,$email,$newPassword); - - if ($result) - { - $_SESSION['status'] = 'sent_new_password'; - } - else - { - $_SESSION['status'] = 'sent_new_password_error'; - } - - $hed = new HeaderObj(DOMAIN_NAME); - $hed->redirect('users/notice/'.Lang::$current,1); - - } - } - } - - $this->append($data); - $this->load('change'); - $this->right(); - } - } - else - { - $this->redirect('users/login/'.$this->lang,0); - } - } - - public function forgot($lang = 'en') - { - $data['title'] = 'request password - '.Website::$generalName; - - if ( strcmp($this->_updating,'no') === 0 ) - { - session_start(); - - if ( isset($_SESSION['status']) ) unset($_SESSION['status']); - - $this->shift(1); - - if ($this->s['registered']->status['status'] === 'logged') - { - $this->redirect('home/index/'.$this->lang,2,'you are already logged..'); - } - else - { - $data['notice'] = null; - - if (isset($_POST['forgotAction'])) - { - if (isset($_POST['username'])) - { - $this->m['UsersModel']->forgot($_POST['username']); - $data['notice'] = $this->m['UsersModel']->notice; - } - } - - $this->append($data); - - $this->load('forgot'); - $this->right(); - } - } - else - { - $this->redirect('users/login/'.$this->lang,0); - } - } - - public function notice($lang = 'en') - { - $data['title'] = 'notice - '.Website::$generalName; - - if ( strcmp($this->_updating,'no') === 0 ) - { - session_start(); - if ($this->s['registered']->status['status'] === 'logged') - { - $this->redirect('home/index/'.$this->lang,2,'you are already logged..'); - } - else - { - $this->load('notice'); - $this->right(); - } - } - else - { - $this->redirect('users/login/'.$this->lang,0); - } - } - -} \ No newline at end of file diff --git a/h-source/Application/Controllers/VideocardsController.php b/h-source/Application/Controllers/VideocardsController.php deleted file mode 100644 index a27e723..0000000 --- a/h-source/Application/Controllers/VideocardsController.php +++ /dev/null @@ -1,127 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class VideocardsController extends GenericController -{ - - public function __construct($model, $controller, $queryString) - { - - parent::__construct($model, $controller, $queryString); - - //load the model - $this->model('HardwareModel'); - $this->model('RevisionsModel'); - $this->model('VideocardsModel'); - $this->model('TalkModel'); - - $this->mod = $this->m['VideocardsModel']; - - $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; - $this->m['HardwareModel']->type = 'videocard'; - - $this->m['HardwareModel']->setConditions(Videocard::videoList(),'video_card_works',Videocard::$interface); - - $this->m['HardwareModel']->setFields('model,kernel,description,distribution,video_card_works,comm_year,pci_id,interface,driver,other_names','sanitizeAll'); - - $argKeys = array( - 'page:forceNat' => 1, - 'history_page:forceNat' => 1, - 'vendor:sanitizeString' => 'undef', - 'comm_year:sanitizeString' => 'undef', - 'video_card_works:sanitizeString' => 'undef', - 'interface:sanitizeString' => 'undef', - 'sort-by:sanitizeString' => 'video-card-works', - 'search_string:sanitizeString' => 'undef' - ); - - $this->setArgKeys($argKeys); - - $data['title'] = 'Videocards'; - - $data['intefaceOptions'] = Videocard::$interface; - $data['worksOptions'] = Videocard::$videoSelect; - $data['worksField'] = 'video_card_works'; - - $data['notFoundString'] = "No video cards found"; - - $this->append($data); - } - - public function catalogue($lang = 'en') - { - $this->shift(1); - - $whereArray = array( - 'type' => $this->mod->type, - 'vendor' => $this->viewArgs['vendor'], - 'comm_year' => $this->viewArgs['comm_year'], - 'video_card_works' => $this->viewArgs['video_card_works'], - 'interface' => $this->viewArgs['interface'], - ); - - $this->mod->setWhereQueryClause($whereArray); - - parent::catalogue($lang); - } - - public function view($lang = 'en', $id = 0, $name = null) - { - parent::view($lang, $id, $name); - } - - public function history($lang = 'en', $id = 0) - { - parent::history($lang, $id); - } - - public function revision($lang = 'en', $id_rev = 0) - { - parent::revision($lang, $id_rev); - } - - public function insert($lang = 'en', $token = '') - { - parent::insert($lang, $token); - } - - public function update($lang = 'en', $token = '') - { - parent::update($lang, $token); - } - - public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) - { - parent::differences($lang, $id_hard, $id_rev); - } - - public function climb($lang = 'en', $id_rev = 0, $token = '') - { - parent::climb($lang, $id_rev, $token); - } - - public function talk($lang = 'en', $id_hard = 0, $token = '') - { - parent::talk($lang, $id_hard, $token); - } - -} diff --git a/h-source/Application/Controllers/WebcamsController.php b/h-source/Application/Controllers/WebcamsController.php deleted file mode 100644 index 41807ed..0000000 --- a/h-source/Application/Controllers/WebcamsController.php +++ /dev/null @@ -1,127 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class WebcamsController extends GenericController -{ - - public function __construct($model, $controller, $queryString) - { - - parent::__construct($model, $controller, $queryString); - - //load the model - $this->model('HardwareModel'); - $this->model('RevisionsModel'); - $this->model('WebcamsModel'); - $this->model('TalkModel'); - - $this->mod = $this->m['WebcamsModel']; - - $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; - $this->m['HardwareModel']->type = 'webcam'; - - $this->m['HardwareModel']->setConditions(Webcams::$select,'webcam_works',Webcams::$interface); - - $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,webcam_works,pci_id,interface,driver,other_names','sanitizeAll'); - - $argKeys = array( - 'page:forceNat' => 1, - 'history_page:forceNat' => 1, - 'vendor:sanitizeString' => 'undef', - 'comm_year:sanitizeString' => 'undef', - 'webcam_works:sanitizeString' => 'undef', - 'interface:sanitizeString' => 'undef', - 'sort-by:sanitizeString' => 'webcam-works', - 'search_string:sanitizeString' => 'undef' - ); - - $this->setArgKeys($argKeys); - - $data['title'] = 'Webcam'; - - $data['intefaceOptions'] = Webcams::$interface; - $data['worksOptions'] = Webcams::$select; - $data['worksField'] = 'webcam_works'; - - $data['notFoundString'] = "No webcams found"; - - $this->append($data); - } - - public function catalogue($lang = 'en') - { - $this->shift(1); - - $whereArray = array( - 'type' => $this->mod->type, - 'vendor' => $this->viewArgs['vendor'], - 'comm_year' => $this->viewArgs['comm_year'], - 'webcam_works' => $this->viewArgs['webcam_works'], - 'interface' => $this->viewArgs['interface'], - ); - - $this->mod->setWhereQueryClause($whereArray); - - parent::catalogue($lang); - } - - public function view($lang = 'en', $id = 0, $name = null) - { - parent::view($lang, $id, $name); - } - - public function history($lang = 'en', $id = 0) - { - parent::history($lang, $id); - } - - public function revision($lang = 'en', $id_rev = 0) - { - parent::revision($lang, $id_rev); - } - - public function insert($lang = 'en', $token = '') - { - parent::insert($lang, $token); - } - - public function update($lang = 'en', $token = '') - { - parent::update($lang, $token); - } - - public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) - { - parent::differences($lang, $id_hard, $id_rev); - } - - public function climb($lang = 'en', $id_rev = 0, $token = '') - { - parent::climb($lang, $id_rev, $token); - } - - public function talk($lang = 'en', $id_hard = 0, $token = '') - { - parent::talk($lang, $id_hard, $token); - } - -} diff --git a/h-source/Application/Controllers/WifiController.php b/h-source/Application/Controllers/WifiController.php deleted file mode 100644 index 8bf4c72..0000000 --- a/h-source/Application/Controllers/WifiController.php +++ /dev/null @@ -1,127 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class WifiController extends GenericController -{ - - public function __construct($model, $controller, $queryString) - { - - parent::__construct($model, $controller, $queryString); - - //load the model - $this->model('HardwareModel'); - $this->model('RevisionsModel'); - $this->model('WifiModel'); - $this->model('TalkModel'); - - $this->mod = $this->m['WifiModel']; - - $this->m['HardwareModel']->id_user = $this->s['registered']->status['id_user']; - $this->m['HardwareModel']->type = 'wifi'; - - $this->m['HardwareModel']->setConditions(Wifi::$wifiSelect,'wifi_works',ThreeGcards::interfaceList()); - - $this->m['HardwareModel']->setFields('model,kernel,description,distribution,comm_year,wifi_works,pci_id,interface,driver,other_names','sanitizeAll'); - - $argKeys = array( - 'page:forceNat' => 1, - 'history_page:forceNat' => 1, - 'vendor:sanitizeString' => 'undef', - 'comm_year:sanitizeString' => 'undef', - 'wifi_works:sanitizeString' => 'undef', - 'interface:sanitizeString' => 'undef', - 'sort-by:sanitizeString' => 'wifi-works', - 'search_string:sanitizeString' => 'undef' - ); - - $this->setArgKeys($argKeys); - - $data['title'] = 'Wifi'; - - $data['intefaceOptions'] = Wifi::$interface; - $data['worksOptions'] = Wifi::$wifiSelect; - $data['worksField'] = 'wifi_works'; - - $data['notFoundString'] = "No wifi cards found"; - - $this->append($data); - } - - public function catalogue($lang = 'en') - { - $this->shift(1); - - $whereArray = array( - 'type' => $this->mod->type, - 'vendor' => $this->viewArgs['vendor'], - 'comm_year' => $this->viewArgs['comm_year'], - 'wifi_works' => $this->viewArgs['wifi_works'], - 'interface' => $this->viewArgs['interface'], - ); - - $this->mod->setWhereQueryClause($whereArray); - - parent::catalogue($lang); - } - - public function view($lang = 'en', $id = 0, $name = null) - { - parent::view($lang, $id, $name); - } - - public function history($lang = 'en', $id = 0) - { - parent::history($lang, $id); - } - - public function revision($lang = 'en', $id_rev = 0) - { - parent::revision($lang, $id_rev); - } - - public function insert($lang = 'en', $token = '') - { - parent::insert($lang, $token); - } - - public function update($lang = 'en', $token = '') - { - parent::update($lang, $token); - } - - public function differences($lang = 'en', $id_hard = 0, $id_rev = 0) - { - parent::differences($lang, $id_hard, $id_rev); - } - - public function climb($lang = 'en', $id_rev = 0, $token = '') - { - parent::climb($lang, $id_rev, $token); - } - - public function talk($lang = 'en', $id_hard = 0, $token = '') - { - parent::talk($lang, $id_hard, $token); - } - -} diff --git a/h-source/Application/Controllers/WikiController.php b/h-source/Application/Controllers/WikiController.php deleted file mode 100644 index f3da19f..0000000 --- a/h-source/Application/Controllers/WikiController.php +++ /dev/null @@ -1,644 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class WikiController extends BaseController -{ - - public function __construct($model, $controller, $queryString) { - - $this->_topMenuClasses['wiki'] = " class='currentitem'"; - - parent::__construct($model, $controller, $queryString); - - $this->model('UsersModel'); - $this->model('WikiModel'); - $this->model('WikirevisionsModel'); - $this->model('WikitalkModel'); - - $this->m['WikiModel']->id_user = (int)$this->s['registered']->status['id_user']; - } - - public function insert($lang = 'en') - { - $this->shift(1); - - $data['pagePreview'] = null; - - $data['title'] = 'insert a wiki page - '.Website::$generalName; - - $this->m['WikiModel']->setFields('title,page','sanitizeAll'); - - $data['notice'] = null; - - $this->s['registered']->checkStatus(); - - if ($this->s['registered']->status['status'] === 'logged') - { - if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); - - if (isset($_POST['insertAction'])) - { - //insert the new wiki page - $this->m['WikiModel']->updateTable('insert'); - - if ($this->m['WikiModel']->queryResult) - { - $domainName = rtrim(Url::getRoot(),"/"); - header('Location: '.$domainName.'/wiki/page/'.$this->lang.'/'.$this->m['WikiModel']->lastTitleClean); - die(); - } - } - - $data['pagePreview'] = $this->getPreview(); - - $data['notice'] = $this->m['WikiModel']->notice; - - $data['submitName'] = "insertAction"; - $data['hiddenInput'] = null; - - $data['values'] = $this->m['WikiModel']->getFormValues('insert','sanitizeHtml'); - $this->append($data); - - $this->load('form'); - $this->load('bottom_left'); - $this->right(); - } - else - { - $this->redirect("users/login/".$this->lang."?redirect=".$this->controller."/insert/".$this->lang,0); - } - } - - public function update($lang = 'en') - { - $this->shift(1); - - $data['pagePreview'] = null; - - $data['title'] = 'update a wiki page - '.Website::$generalName; - - $this->m['WikiModel']->setFields('title,page','sanitizeAll'); - - $data['notice'] = null; - $this->s['registered']->checkStatus(); - - if (isset($_POST['id_wiki'])) - { - //get the id - $clean['id_wiki'] = (int)$_POST['id_wiki']; - $title = $this->m['WikiModel']->getTheModelName($clean['id_wiki']); - - if ($this->s['registered']->status['status'] === 'logged') - { - - if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); - - if ($this->m['WikiModel']->isBlocked($clean['id_wiki'])) $this->redirect('wiki/page/'.$this->lang,2,'this page has been blocked..'); - - if ($this->m['WikiModel']->isDeleted($clean['id_wiki'])) $this->redirect('wiki/page/'.$this->lang,2,'this page has been deleted..'); - - $deleted = $this->m['WikiModel']->select("wiki.deleted")->where(array("id_wiki"=>$clean['id_wiki']))->limit(1)->toList('wiki.deleted')->send(); - - $data['tree_name'] = $title; - - if (isset($_POST['updateAction'])) - { - //carry out the update database action - $this->m['WikiModel']->updateTable('update'); - - if ($this->m['WikiModel']->queryResult) - { - $domainName = rtrim(Url::getRoot(),"/"); - header('Location: '.$domainName.'/wiki/page/'.$this->lang.'/'.$this->m['WikiModel']->lastTitleClean); - die(); - } - } - - $data['pagePreview'] = $this->getPreview(); - - $data['notice'] = $this->m['WikiModel']->notice; - - $data['id_wiki'] = $clean['id_wiki']; - $data['submitName'] = "updateAction"; - - $data['values'] = $this->m['WikiModel']->getFormValues('update','sanitizeHtml'); - $data['hiddenInput'] = "\n"; - - $this->append($data); - - $this->load('form'); - $this->load('bottom_left'); - $this->right(); - } - else - { - $domainName = rtrim(Url::getRoot(),"/"); - header('Location: '.$domainName."/users/login/".$this->lang."?redirect=".$this->controller."/page/".$this->lang."/".titleForRedirect($title)); - die(); - } - } - else - { - $this->redirect($this->controller.'/page/'.$this->lang); - } - } - - //get the preview of the description entry - protected function getPreview() - { - if (isset($_POST['previewAction'])) - { - $this->m['WikiModel']->result = false; - return $this->request->post('page','','sanitizeHtml'); - } - return null; - } - - public function page($lang = 'en', $title_clean = null) - { - $this->shift(2); - - $data['title'] = 'main page - '.Website::$generalName; - $clean['title_clean'] = sanitizeAll($title_clean); - - $data['isDeleted'] = false; - $data['isBlocked'] = false; - - if (isset($title_clean)) - { - $res = $this->m['WikiModel']->select()->where(array('title_clean'=>$clean['title_clean']))->orderBy('id_wiki desc')->limit(1)->send(); - - if ( count($res) > 0 ) - { - $data['table'] = $res; - $data['tree_name'] = $res[0]['wiki']['title']; - $data['title'] = $res[0]['wiki']['title'] . ' - ' . Website::$generalName; - $data['isDeleted'] = $this->m['WikiModel']->isDeleted($res[0]['wiki']['id_wiki']); - $data['isBlocked'] = $this->m['WikiModel']->isBlocked($res[0]['wiki']['id_wiki']); - - if ( count($res) < 2 ) - { - $data['talk_number'] = $this->m['WikitalkModel']->select('count(*) as numb,id_wiki')->where(array('id_wiki'=>$res[0]['wiki']['id_wiki'],'deleted'=>'no'))->rowNumber(); - - $viewFile = 'wiki_page'; - $data['id_wiki'] = $res[0]['wiki']['id_wiki']; - } - else - { - $viewFile = 'select'; - } - } - else - { - $rev = new WikirevisionsModel(); - $res_rev = $rev->select()->where(array('title_clean'=>$clean['title_clean']))->orderBy('id_rev desc')->limit(1)->send(); - if ( count($res_rev) > 0 ) - { - $clean['idWiki'] = $rev->getIdPage($res_rev[0]['wiki_revisions']['id_rev']); - $newTitle = $this->m['WikiModel']->getTheModelName($clean['idWiki']); - $n = titleForRedirect($newTitle); - $domainName = rtrim(Url::getRoot(),"/"); - header('Location: '.$domainName.'/wiki/page/'.$this->lang.'/'.$n); - die(); - } - else - { - $viewFile = 'not_found'; - } - } - } - else - { - $this->redirect('wiki/page/'.$this->lang.'/Main-Page'); - } - - $data['md_javascript'] = "moderator_dialog(\"pageblock\",\"page\");moderator_dialog(\"pageunblock\",\"page\");moderator_dialog(\"pagehide\",\"page_del\");moderator_dialog(\"pageshow\",\"page_del\");"; - - $this->append($data); - - $this->load($viewFile); - $this->load('bottom_left'); - $this->load('moderator_dialog'); - $this->right(); - } - - public function history($lang = 'en', $id = 0) - { - $argKeys = array( - 'page:forceNat' => 1, - ); - - $this->setArgKeys($argKeys); - $this->shift(2); - - $clean['id'] = (int)$id; - $data['id'] = $clean['id']; - $data['tree_name'] = $this->m['WikiModel']->getTheModelName($clean['id']); - $data['isBlocked'] = $this->m['WikiModel']->isBlocked($clean['id']); - $data['isDeleted'] = $this->m['WikiModel']->isDeleted($clean['id']); - - $data['title'] = 'history - '.Website::$generalName; - - //get the first revision - $res = $this->m['WikirevisionsModel']->db->select('revisions','id_rev','id_wiki='.$clean['id'],null,'id_rev',1); - if (count($res) > 0) - { - $data['firstRev'] = $res[0]['wiki_revisions']['id_rev']; - } - - $res1 = $this->m['WikiModel']->db->select('wiki','update_date,created_by','id_wiki='.$clean['id']); - - $this->m['WikirevisionsModel']->setWhereQueryClause(array('id_wiki' => $clean['id'])); - - //load the Pages helper - $this->helper('Pages',$this->controller.'/history/'.$this->lang.'/'.$clean['id'],'page'); - //get the number of records - $recordNumber = $this->m['WikirevisionsModel']->rowNumber(); - $page = $this->viewArgs['page']; - //set the limit clause - $this->m['WikirevisionsModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,20); - $res2 = $this->m['WikirevisionsModel']->getFields('update_date,created_by,id_rev'); - - $data['pageList'] = $this->h['Pages']->render($page-3,7); - - $data['rev1'] = $res1; - $data['rev2'] = $res2; - - $this->append($data); - $this->load('history'); - $this->load('bottom_left'); - $this->right(); - } - - public function revision($lang = 'en', $id_rev = 0) - { - $argKeys = array( - 'page:forceNat' => 1, - ); - - $this->setArgKeys($argKeys); - $this->shift(2); - - $clean['id_rev'] = (int)$id_rev; - - $this->m['WikirevisionsModel']->setWhereQueryClause(array("id_rev" => $clean['id_rev'])); - $data['table'] = $this->m['WikirevisionsModel']->getAll(); - - $data['id_wiki'] = 0; - $data['created_by'] = null; - $data['update_date'] = null; - $data['tree_name'] = null; - $data['tree'] = null; - $data['tree'] = null; - $data['title'] = 'revision - '.Website::$generalName; - $data['isDeleted'] = false; - - if (count($data['table']) > 0) - { - $data['id_wiki'] = (int)$data['table'][0]['wiki_revisions']['id_wiki']; - $data['isDeleted'] = $this->m['WikiModel']->isDeleted($data['id_wiki']); - $data['tree_name'] = $this->m['WikiModel']->getTheModelName($data['id_wiki']); - $data['tree'] = $this->getSpecPageLink() . " » " . "toWikiPage($data['id_wiki'])."'>".$data['tree_name'].""." » " . $this->getHistoryLink($data['id_wiki']) . " » ".gtext('Revision'); - - $data['created_by'] = $data['table'][0]['wiki_revisions']['created_by']; - $data['update_date'] = $data['table'][0]['wiki_revisions']['update_date']; - } - - $this->append($data); - $this->load('wiki_page'); - $this->load('bottom_left'); - $this->right(); - } - - public function differences($lang = 'en', $id_wiki = 0, $id_rev = 0) - { - $this->shift(3); - - $data['title'] = 'differences - '.Website::$generalName; - - $clean['id_wiki'] = (int)$id_wiki; - $clean['id_rev'] = (int)$id_rev; - - $data['id_wiki'] = $clean['id_wiki']; - $tree_name = $this->m['WikiModel']->getTheModelName((int)$clean['id_wiki']); - $data['tree_name'] = $tree_name; - $data['tree'] = $this->getSpecPageLink() . " » " . "toWikiPage($clean['id_wiki'])."'>".$data['tree_name']."" ." » " . $this->getHistoryLink($data['id_wiki']) . " » ".gtext('Differences'); - - $data['isDeleted'] = $this->m['WikiModel']->isDeleted($clean['id_wiki']); - $data['showDiff'] = false; - - $diffArray = array(); - - if (strcmp($clean['id_wiki'],0) !== 0 and strcmp($clean['id_rev'],0) !== 0) - { - $this->m['WikirevisionsModel']->where(array('id_wiki' => $clean['id_wiki'],'id_rev' => '<='.$clean['id_rev'])); - $this->m['WikirevisionsModel']->limit = 2; - $res = $this->m['WikirevisionsModel']->getAll(); - if (count($res) > 1) - { - $newArray = $res[0]['wiki_revisions']; - $oldArray = $res[1]['wiki_revisions']; - - $data['update_new'] = $newArray['update_date']; - $data['update_old'] = $oldArray['update_date']; - $data['created_by'] = $newArray['created_by']; - - $diffArray = $this->m['WikiModel']->getDiffArray($oldArray, $newArray); - - $data['showDiff'] = true; - } - } - else if (strcmp($clean['id_wiki'],0) !== 0 and strcmp($clean['id_rev'],0) === 0) - { - $this->m['WikiModel']->where(array('id_wiki' => $clean['id_wiki'])); - $lastRes = $this->m['WikiModel']->getAll(); - - if (count($lastRes) > 0) - { - $this->m['WikirevisionsModel']->setWhereQueryClause(array('id_wiki' => $clean['id_wiki'])); - $this->m['WikirevisionsModel']->limit = 1; - $revRes = $this->m['WikirevisionsModel']->getAll(); - - if (count($revRes) > 0) - { - $newArray = $lastRes[0]['wiki']; - $oldArray = $revRes[0]['wiki_revisions']; - - $data['update_new'] = $newArray['update_date']; - $data['update_old'] = $oldArray['update_date']; - $data['created_by'] = $newArray['created_by']; - - $diffArray = $this->m['WikiModel']->getDiffArray($oldArray, $newArray); - - $data['showDiff'] = true; - } - } - - } - - $data['fieldsWithBreaks'] = $this->m['WikiModel']->fieldsWithBreaks; - $data['diffArray'] = $diffArray; - - $this->append($data); - $this->load('differences'); - $this->load('bottom_left'); - $this->right(); - } - - public function climb($lang = 'en', $id_rev = 0) - { - $this->shift(2); - - $this->m['WikiModel']->setFields('title,page','sanitizeAll'); - - $data['title'] = 'make current - '.Website::$generalName; - - $clean['id_rev'] = (int)$id_rev; - $clean['id_wiki'] = (int)$this->m['WikirevisionsModel']->getIdPage($clean['id_rev']); - - if ($clean['id_wiki'] !== 0) - { - - $data['isDeleted'] = $this->m['WikiModel']->isDeleted($clean['id_wiki']); - - $data['id_rev'] = $clean['id_rev']; - $data['id_wiki'] = $clean['id_wiki']; - $data['tree_name'] = $this->m['WikiModel']->getTheModelName($clean['id_wiki']); - $data['name'] = $data['tree_name']; - $data['tree'] = $this->getSpecPageLink() . " » " . "toWikiPage($clean['id_wiki'])."'>".$data['tree_name'].""." » " . $this->getHistoryLink($clean['id_wiki']) . " » " . gtext('Make current'); - - $data['notice'] = null; - $this->s['registered']->checkStatus(); - - if ($this->s['registered']->status['status'] === 'logged') - { - if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); - - if ($this->m['WikiModel']->isBlocked($clean['id_wiki'])) $this->redirect('wiki/page/'.$this->lang,2,'this page has been blocked..'); - - if ($this->m['WikiModel']->isDeleted($clean['id_wiki'])) $this->redirect('wiki/page/'.$this->lang,2,'this page has been deleted..'); - - if (isset($_POST['confirmAction'])) - { - $this->m['WikiModel']->makeCurrent($clean['id_rev']); - - if ($this->m['WikiModel']->queryResult) - { - $domainName = rtrim(Url::getRoot(),"/"); - header('Location: '.$domainName.'/wiki/page/'.$this->lang.'/'.$this->m['WikiModel']->lastTitleClean); - die(); - } - - $data['notice'] = $this->m['WikiModel']->notice; - } - - $this->append($data); - $this->load('climb'); - $this->load('bottom_left'); - $this->right(); - } - else - { - $this->redirect("users/login/".$this->lang."?redirect=".$this->controller."/page/".$this->lang."/".encodeUrl($data['tree_name']),0); - } - } - } - - public function talk($lang = 'en', $id_wiki = 0) - { - $this->shift(2); - - $this->m['WikitalkModel']->setFields('title,message','sanitizeAll'); - - $data['title'] = 'talk - '.Website::$generalName; - - $clean['id_wiki'] = (int)$id_wiki; - $data['id_wiki'] = $clean['id_wiki']; - $data['tree_name'] = $this->m['WikiModel']->getTheModelName($clean['id_wiki']); - $data['isBlocked'] = $this->m['WikiModel']->isBlocked($clean['id_wiki']); - $data['isDeleted'] = $this->m['WikiModel']->isDeleted($clean['id_wiki']); - - $data['tree'] = $this->getSpecPageLink() . " » " . "toWikiPage($clean['id_wiki'])."'>".$data['tree_name'].""." » ".gtext('Talk'); - - if (isset($_POST['insertAction'])) - { - if ($this->s['registered']->status['status'] === 'logged') - { - if ($this->m['UsersModel']->isBlocked($this->s['registered']->status['id_user'])) $this->redirect('my/home/'.$this->lang,2,'your account has been blocked..'); - - if ($this->m['WikiModel']->isBlocked($clean['id_wiki'])) $this->redirect('wiki/page/'.$this->lang,2,'this page has been blocked..'); - - if ($this->m['WikiModel']->isDeleted($clean['id_wiki'])) $this->redirect('wiki/page/'.$this->lang,2,'this page has been deleted..'); - - $this->m['WikitalkModel']->values['created_by'] = $this->s['registered']->status['id_user']; - $this->m['WikitalkModel']->values['id_wiki'] = $clean['id_wiki']; - - $this->m['WikitalkModel']->updateTable('insert'); - -// if ($this->m['WikitalkModel']->queryResult) -// { -// header('Refresh: 0;url='.$_SERVER['REQUEST_URI']); -// die(); -// } - } - } - - $data['table'] = $this->m['WikitalkModel']->select()->where(array('id_wiki'=>$clean['id_wiki']))->orderBy('id_talk')->send(); - - $data['values'] = $this->m['WikitalkModel']->getFormValues('insert','sanitizeHtml'); - $data['notice'] = $this->m['WikitalkModel']->notice; - -// javascript for moderator - $data['md_javascript'] = "moderator_dialog(\"hide\",\"wiki_talk\");moderator_dialog(\"show\",\"wiki_talk\");"; - $data['go_to'] = $this->currPage."/".$this->lang."/".$clean['id_wiki']; - - $this->append($data); - $this->load('talk'); - $this->load('moderator_dialog'); - $this->right(); - } - - public function pages($lang = 'en') - { - $data['topString'] = 'list of pages'; - $data['title'] = gtext('list of pages').' - '.Website::$generalName; - - $this->setArgKeys(array('page:forceNat'=>1)); - - $this->shift(1); - - $this->helper('Pages','wiki/pages/'.$this->lang,'page'); - - $this->m['WikiModel']->clear()->select()->where(array('-deleted'=>'no'))->orderBy('id_wiki desc'); - - $recordNumber = $this->m['WikiModel']->rowNumber(); - $page = $this->viewArgs['page']; - - $this->m['WikiModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); - - $data['table'] = $this->m['WikiModel']->send(); - - $data['pageList'] = $this->h['Pages']->render($page-7,15); - - $this->append($data); - $this->load('pages'); - $this->right(); - } - - protected function see($lang = 'en', $status = 'blocked') - { - $this->s['registered']->check('admin'); - - switch ($status) - { - case 'deleted': - $data['topString'] = 'list of deleted pages'; - $data['title'] = gtext('list of deleted pages').' - '.Website::$generalName; - $whereClause = '-deleted'; - break; - case 'blocked': - $data['topString'] = 'list of blocked pages'; - $data['title'] = gtext('list of blocked pages').' - '.Website::$generalName; - $whereClause = 'blocked'; - break; - } - - $this->setArgKeys(array('page:forceNat'=>1)); - - $this->shift(1); - - $this->helper('Pages','wiki/'.$status.'/'.$this->lang,'page'); - - $this->m['WikiModel']->clear()->select()->where(array($whereClause=>'yes'))->orderBy('id_wiki desc'); - - $recordNumber = $this->m['WikiModel']->rowNumber(); - $page = $this->viewArgs['page']; - - $this->m['WikiModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); - - $data['table'] = $this->m['WikiModel']->send(); - - $data['pageList'] = $this->h['Pages']->render($page-7,15); - - $this->append($data); - $this->load('pages'); - $this->right(); - } - - public function deleted($lang = 'en') - { - $this->see($lang,'deleted'); - } - - public function blocked($lang = 'en') - { - $this->see($lang,'blocked'); - } - - //print all the modifications to the wiki - public function modifications($lang = 'en') - { - $data['title'] = gtext('last modifications').' - '.Website::$generalName; - - $this->setArgKeys(array('page:forceNat'=>1)); - - $this->shift(1); - - $whereClauseArray = array( - 'gr' => 'registered', - 'type' => 'wiki', - ); - - $this->helper('Pages','wiki/modifications/'.$this->lang,'page'); - - $this->m['HistoryModel']->clear()->select()->where($whereClauseArray)->orderBy('id_history desc'); - - $recordNumber = $this->m['HistoryModel']->rowNumber(); - $page = $this->viewArgs['page']; - - $this->m['HistoryModel']->limit = $this->h['Pages']->getLimit($page,$recordNumber,30); - - $data['table'] = $this->m['HistoryModel']->send(); - - $data['pageList'] = $this->h['Pages']->render($page-7,15); - - $this->append($data); - $this->load('modifications'); - $this->right(); - } - - protected function getViewLink($ne_name) - { - return "controller.'/page/'.$this->lang.'/'.encodeUrl($ne_name)."'>".$ne_name.""; - } - - protected function getHistoryLink($id) - { - return "controller.'/history/'.$this->lang.'/'.$id."'>".gtext('History').""; - } - - protected function getSpecPageLink() - { - return "controller.'/page/'.$this->lang."/Main-Page'>".ucfirst($this->controller).""; - } - -} \ No newline at end of file diff --git a/h-source/Application/Hooks/AfterInitialization.php b/h-source/Application/Hooks/AfterInitialization.php deleted file mode 100755 index a369309..0000000 --- a/h-source/Application/Hooks/AfterInitialization.php +++ /dev/null @@ -1,10 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Distributions -{ - - public static $allowed = array(); - - public static $allowed_active = array(); - - public static function getList() - { - return implode(' , ',array_keys(self::$allowed)); - } - - //fill the $allowed property with the list of allowed distros from the distros MySQL table - public static function setAllowedList() - { - $distros = new DistrosModel(); - - self::$allowed = $distros->clear()->toList("clean_name","full_name")->orderBy("id_order")->send(); - self::$allowed_active = $distros->clear()->where(array('active'=>'1'))->toList("clean_name","full_name")->orderBy("id_order")->send(); - } - - public static function getName($distList = '') - { - $returnString = null; - $returnArray = array(); - $distArray = explode(',',$distList); - foreach ($distArray as $dist) - { - $dist = trim($dist); - if (array_key_exists($dist,self::$allowed)) - { - $returnArray[] = self::$allowed[$dist]; - } - } - return implode("
          ",$returnArray); - } - - public static function check($distString) - { - $distArray = explode(',',$distString); - - $allowedArray = array_keys(self::$allowed); - - foreach ($distArray as $dist) - { - $dist = trim($dist); - if (!in_array($dist,$allowedArray)) return false; - } - - return true; - } - - public static function getFormHtml() - { - $str = "
          "; - $str .= "
          "; - foreach (self::$allowed_active as $value => $label) - { - $str .= "
          $label
          "; - } - $str .= "
          "; - $str .= ""; - $str .= ""; - $str .= "
          "; - - return $str; - } - -} diff --git a/h-source/Application/Include/hardware.php b/h-source/Application/Include/hardware.php deleted file mode 100644 index bd83987..0000000 --- a/h-source/Application/Include/hardware.php +++ /dev/null @@ -1,576 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - - -function translate($string) -{ - return Hardware::translate($string); -} - -function translate_and_gtext($string) -{ - return gtext(translate($string)); -} - -class Hardware -{ - - public static $translations = array( - "amd64" => 'x86-64/amd64', - "PC-Card" => 'PCMCIA/PC-Card', - "works_with_3D" => "works with 3D acceleration", - "works_without_3D" => "works, but without 3D acceleration", - "does_not_work" => "it does not work", - "can-be-installed" => "can be installed", - "pcmcia-controller" => "PCMCIA Controller", - "usb-controller" => "USB Controller", - "firewire-controller" => "Firewire Controller", - "heci-controller" => "HECI Controller", - ); - - public static $regExpressions = array( - "kernel" => "/^[a-zA-Z0-9\-\_\.\+\s\(\)\,]+$/", - "driver" => "/^[a-zA-Z0-9\-\_\.\+\s\/\,\:\;\(\)\[\]]+$/", - "vendorid_productid" => "/^[a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}$/", - "model" => "/^[a-zA-Z0-9\-\_\.\+\s\(\)\@\[\]\/\,\']+$/", - ); - - public static function translate($string) - { - if (array_key_exists($string,self::$translations)) - { - return self::$translations[$string]; - } - return $string; - } - - //classId => controller - public static $deviceClasses = array( - '0403' => 'soundcards', - '0280' => 'wifi', - '0300' => 'videocards', - '0200' => 'ethernetcards', - '0400' => 'acquisitioncards', - '0401' => 'acquisitioncards', - '0480' => 'acquisitioncards', - '0805' => 'sdcardreaders', - '0703' => 'modems', - '0104' => 'raidadapters', - '0c00' => 'hostcontrollers', - '0c03' => 'hostcontrollers', - '0780' => 'hostcontrollers', - '0607' => 'hostcontrollers', - '0e00' => 'raidadapters', - ); - - public static $icons = array( - 'notebook' => 'H2O/computer-laptop_22.png', - 'wifi' => 'H2O/network-wireless_22.png', - 'videocard' => 'Crystal/1282042976_hardware.png', - 'printer' => 'H2O/printer_22.png', - 'scanner' => 'H2O/scanner_22.png', - '3G-card' => 'Crystal/usb_22.png', - 'soundcard' => 'H2O/audio-card_22.png', - 'webcam' => 'H2O/camera-web_22.png', - 'bluetooth' => 'H2O/preferences-system-bluetooth-22.png', - 'acquisition-card' => 'Crystal/cam_mount-22.png', - 'fingerprint-reader' => 'fingerprint_icon-22.png', - 'ethernet-card' => 'H2O/network-wired_22.png', - 'sd-card-reader' => 'H2O/media-flash-sd-mmc_22.png', - 'modem' => 'Crystal/modem_22.png', - 'RAID-adapter' => 'Crystal/1282042976_hardware.png', - 'host-controller' => 'Crystal/1282042976_hardware.png', - ); - - public static $typeToController = array( - 'notebook' => 'notebooks', - 'wifi' => 'wifi', - 'videocard' => 'videocards', - 'printer' => 'printers', - 'scanner' => 'scanners', - '3G-card' => 'threegcards', - 'soundcard' => 'soundcards', - 'webcam' => 'webcams', - 'bluetooth' => 'bluetooth', - 'acquisition-card' => 'acquisitioncards', - 'fingerprint-reader' => 'fingerprintreaders', - 'ethernet-card' => 'ethernetcards', - 'sd-card-reader' => 'sdcardreaders', - 'modem' => 'modems', - 'RAID-adapter' => 'raidadapters', - 'host-controller' => 'hostcontrollers', - ); - - public static $typeToWorksField = array( - 'notebook' => 'compatibility', - 'wifi' => 'wifi_works', - 'videocard' => 'video_card_works', - 'printer' => 'compatibility', - 'scanner' => 'compatibility', - '3G-card' => 'wifi_works', - 'soundcard' => 'sound_card_works', - 'webcam' => 'webcam_works', - 'bluetooth' => 'bluetooth_works', - 'acquisition-card' => 'compatibility', - 'fingerprint-reader' => 'fingerprint_works', - 'ethernet-card' => 'ethernet_card_works', - 'sd-card-reader' => 'sd_card_works', - 'modem' => 'compatibility', - 'RAID-adapter' => 'compatibility', - 'host-controller' => 'compatibility', - ); - - public static function getTypes() - { - return implode(',',array_keys(self::$typeToController)); - } - - public static function getControllerFromType($type) - { - if (array_key_exists($type,self::$typeToController)) - { - return self::$typeToController[$type]; - } - return null; - } - - public static function getWorksFieldFromType($type) - { - if (array_key_exists($type,self::$typeToWorksField)) - { - return self::$typeToWorksField[$type]; - } - return null; - } - - //get the type from the controller - public static function getTypeFromController($controller) - { - $temp = array_flip(self::$typeToController); - if (array_key_exists($controller,$temp)) - { - return $temp[$controller]; - } - return null; - } - - public static function getTypeFromClass($class) - { - if (array_key_exists($class,self::$deviceClasses)) - { - return self::getTypeFromController(self::$deviceClasses[$class]); - } - return null; - } - - public static function getIconFromType($type) - { - if (array_key_exists($type,self::$icons)) - { - return Url::getRoot()."Public/Img/".self::$icons[$type]; - } - return null; - } - - public static function getIconFromController($controller) - { - if ($type = self::getTypeFromController($controller)) - { - return self::getIconFromType($type); - } - return null; - } - - public static function getIconFromClass($class) - { - if (array_key_exists($class,self::$deviceClasses)) - { - return self::getIconFromController(self::$deviceClasses[$class]); - } - return null; - } - - //get the list of the allowed years of commercialization - public static function getCommYears() - { - $currentYear = (int)date("Y"); - $allowed = 'not-specified'; - - for ($i=$currentYear;$i>1991;$i--) - { - $allowed .= ",$i"; - } - return $allowed; - } - - public static $trackSelect = 'not-specified,no,yes'; - -} - -class Printer extends Hardware -{ - - public static $compatibility = array( - "A-Full" => "A-Full", - "B-Partial" => "B-Partial", - "C-None" => "C-None", - ); - - public static $interface = "not-specified,USB,Serial,Parallel,Firewire,SCSI,Ethernet"; - - public static $subtype = "not-specified,laser,inkjet,other"; - - public static function compatibilityList() - { - return implode(',',array_values(self::$compatibility)); - } - -} - -class Wifi extends Hardware -{ - - public static $interface = array( - "not-specified" => "not-specified", - "USB" => "USB", - "PCI" => "PCI", - "PCI-E" => "PCI-E", - "mini-PCI" => "mini-PCI", - "mini-PCI-E" => "mini-PCI-E", - "ExpressCard" => "ExpressCard", - "Ethernet" => "Ethernet", - "PCMCIA/PC-Card" => "PC-Card", - ); - - public static $interfaceReverse = array( - "not-specified" => "not-specified", - "USB" => "USB", - "PCI" => "PCI", - "PCI-E" => "PCI-E", - "mini-PCI" => "mini-PCI", - "mini-PCI-E" => "mini-PCI-E", - "ExpressCard" => "ExpressCard", - "Ethernet" => "Ethernet", - "PC-Card" => "PCMCIA/PC-Card", - ); - - public static $wifiSelect = 'yes,no'; - - public static function interfaceList() - { - return implode(',',array_values(self::$interface)); - } -} - -class Videocard extends Hardware -{ - - public static $videoSelect = array( - "works with 3D acceleration" => "works_with_3D", - "works, but without 3D acceleration" => "works_without_3D", - "it does not work" => "does_not_work", - ); - - public static $videoReverse = array( - "works_with_3D" => "works with 3D acceleration", - "works_without_3D" => "works, but without 3D acceleration", - "does_not_work" => "it does not work", - ); - - public static $interface = "not-specified,PCI,AGP,PCI-E,ISA,MCA,VLB"; - - public static function videoList() - { - return implode(',',array_values(self::$videoSelect)); - } -} - - -class Notebooks extends Hardware -{ - - public static $vendors = array( - "Acer" => "Acer", - "Apple" => "Apple", - "Asus" => "Asus", - "BenQ" => "BenQ", - "Blue Light" => "Blue-Light", - "CLEVO CO." => "CLEVO-CO", - "Compal Electronics" => "Compal-Electronics", - "COMPAQ" => "COMPAQ", - "Dell" => "Dell", - "emachines" => "emachines", - "FUJITSU" => "FUJITSU", - "Garlach44" => "Garlach44", - "Gateway" => "Gateway", - "Google" => "Google", - "Hasee" => "Hasee", - "Hewlett Packard" => "Hewlett-Packard", - "IBM" => "IBM", - "Intel" => "Intel", - "Lanix" => "Lanix", - "Lemote" => "Lemote", - "Lenovo" => "Lenovo", - "LG" => "LG", - "Libiquity" => "Libiquity", - "Minifree" => "Minifree", - "msi" => "msi", - "Olimex" => "Olimex", - "One Laptop per Child (Non-Profit)" => "One-Laptop-per-Child-Non-Profit", - "Openpandora Ltd." => "Openpandora-Ltd", - "Oracle" => "Oracle", - "Packard Bell" => "Packard-Bell", - "Panasonic" => "Panasonic", - "Philco" => "Philco", - "Philips" => "Philips", - "Positivo" => "Positivo", - "Purism" => "Purism", - "Qbex" => "Qbex", - "SAMSUNG" => "SAMSUNG", - "Slimbook" => "Slimbook", - "Sony" => "Sony", - "System76" => "System76", - "ThinkPenguin" => "ThinkPenguin", - "Thomson" => "Thomson", - "TOSHIBA" => "TOSHIBA", - "ZaReason, Inc" => "ZaReason-Inc", - ); - - public static $compatibility = array( - "A Platinum" => "A-platinum", - "B Gold" => "B-gold", - "C Silver" => "C-silver", - "D Bronze" => "D-bronze", - "E Garbage" => "E-garbage" - ); - - public static $subtypeSelect = 'notebook,netbook,tablet,not-specified'; - - public static $architectureSelect = array( - "not specified" => 'not-specified', - "x86" => 'x86', - "x86-64/amd64" => 'amd64', - "MIPS" => 'MIPS', - "ARM" => 'ARM', - ); - - public static $biosSelect = array( - "not specified" => 'not-specified', - "no" => 'no', - "yes" => 'yes', - "can be installed" => 'can-be-installed', - ); - - public static $preventWifiSelect = array( - "not specified" => 'not-specified', - "no" => 'no', - "yes (please specify in the description entry)" => 'yes', - ); - - public static $installableSelect = array( - "not specified" => 'not-specified', - "no (please specify in the description entry)" => 'no', - "yes" => 'yes', - ); - -// public static $installableSelect = 'not-specified,no,yes'; - - public static $videoSelect = array( - "not specified" => 'not-specified', - "yes, with 3D acceleration" => "yes_with_3D", - "yes, but without 3D acceleration" => "yes_without_3D", - "it does not work" => "no", - ); - - public static $videoReverse = array( - "yes_with_3D" => "works with 3D acceleration", - "yes_without_3D" => "works, but without 3D acceleration", - "no" => "it does not work", - 'not-specified' => "not specified how it works", - "" => "" - ); - - public static $wifiSelect = array( - "not specified" => 'not-specified', - 'yes' => 'yes', - 'no' => 'no', - 'there is no wifi card' => 'no-wifi-card', - ); - - public static $wifiReverse = array( - "yes" => "it works", - "no" => "it does not work", - 'not-specified' => "not specified how it works", - 'no-wifi-card' => 'there is no wifi card', - "" => "" - ); - - public static $webcamSelect = array( - 'not specified' => 'not-specified', - 'it works' => 'yes', - 'it does not work' => 'no', - 'there is no webcam' => 'there-is-no-webcam', - ); - - public static $webcamReverse = array( - "yes" => "it works", - "no" => "it does not work", - 'not-specified' => "not specified how it works", - 'there-is-no-webcam' => 'there is no webcam', - ); - - public static function videoList() - { - return implode(',',array_values(self::$videoSelect)); - } - - public static function wifiList() - { - return implode(',',array_values(self::$wifiSelect)); - } - - public static function webcamList() - { - return implode(',',array_values(self::$webcamSelect)); - } - - public static function vendorsList() - { - return implode(',',array_values(self::$vendors)); - } - - public static function compatibilityList() - { - return implode(',',array_values(self::$compatibility)); - } - - public static function architectureList() - { - return implode(',',array_values(self::$architectureSelect)); - } - - public static function biosList() - { - return implode(',',array_values(self::$biosSelect)); - } - - public static function preventWifiList() - { - return implode(',',array_values(self::$preventWifiSelect)); - } - - public static function installableList() - { - return implode(',',array_values(self::$installableSelect)); - } -} - -class ThreeGcards extends Wifi -{ - - public static $select = 'yes,no'; - - -} - -class Soundcards extends Hardware -{ - - public static $audioSelect = 'yes,no'; - - public static $interface = "not-specified,PCI,ISA,USB,Firewire,Parallel,PCI-E,PCMCIA"; - -} - -class Webcams extends Hardware -{ - - public static $select = 'yes,no'; - - public static $interface = "not-specified,USB,Firewire,Parallel,Wifi,Serial"; - -} - -class Bluetooth extends Hardware -{ - - public static $select = 'yes,no'; - - public static $interface = "not-specified,USB,PCI,PCI-E,mini-PCI,mini-PCI-E,ExpressCard,PC-Card"; - -} - -class Acquisitioncards extends Hardware -{ - - public static $select = 'yes,no'; - - public static $interface = "not-specified,USB,PCI,PCI-E,mini-PCI,mini-PCI-E,ExpressCard,PC-Card,Firewire,Parallel,Serial"; - -} - -class Fingerprintreaders extends Acquisitioncards -{ - -} - -class Ethernetcards extends Acquisitioncards -{ - -} - -class Sdcardreaders extends Acquisitioncards -{ - -} - -class Modems extends Acquisitioncards -{ - -} - -class Raidadapters extends Acquisitioncards -{ - -} - -class PCMCIAControllers extends Acquisitioncards -{ - -} - -class Hostcontrollers extends Acquisitioncards -{ - - public static $subtype = array( - "PCMCIA Controller" => "pcmcia-controller", - "USB Controller" => "usb-controller", - "Firewire Controller" => "firewire-controller", - "HECI Controller" => "heci-controller", - ); - - public static function subtypeList() - { - return implode(',',array_values(self::$subtype)); - } - -} diff --git a/h-source/Application/Include/languages.php b/h-source/Application/Include/languages.php deleted file mode 100644 index 2d59c6a..0000000 --- a/h-source/Application/Include/languages.php +++ /dev/null @@ -1,2363 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Lang -{ - public static $allowed = array('en','es','fr','it','de','gr','pt'); - public static $current = 'en'; - - public static $complete = array( - 'en' => 'gb.png,English', - 'es' => 'es.png,Español', - 'fr' => 'fr.png,Français', - 'it' => 'it.png,Italiano', - 'de' => 'de.png,Deutsch', - 'gr' => 'gr.png,Ελληνικά', - 'pt' => 'pt.png,Português', - ); - - //$pos=0: icon, $pos=1:lang name - public static function getLangInfo($langCode,$pos) - { - if (array_key_exists($langCode,self::$complete)) - { - $all = explode(',',self::$complete[$langCode]); - return $all[$pos]; - } - return $langCode; - } - - public static function getLabel($langCode) - { - return self::getLangInfo($langCode,1); - } - - public static function getIcon($langCode) - { - return self::getLangInfo($langCode,0); - } - - public static $i18n = array( - 'it' => array - ( - /*0001*/"Search one device in the archive" => "Cerca un dispositivo nell'archivio", - /*0002*/"hardware type" => "tipo di hardware", - /*0003*/"the model name contains" => "il nome del modello contiene", - /*0004*/"List of issues" => "Lista di questioni", - /*0005*/"TITLE" => "TITOLO", - /*0006*/"TOPIC" => "ARGOMENTO", - /*0007*/"OPENED BY" => "APERTO DA", - /*0008*/"DATE" => "DATA", - /*0009*/"REPLIES" => "MESSAGGI", - /*0010*/"PRIORITY" => "PRIORITÀ", - /*0011*/"STATUS" => "STATO", - /*0012*/"You have to" => "Devi eseguire il", - /*0013*/"in order to submit an issue" => "per poter aprire una nuova questione", - /*0014*/"in order to add a message" => "per poter inviare un messaggio", - /*0015*/"Description" => "Descrizione", - /*0016*/"Messages" => "Messaggi", - /*0017*/"this message has been deleted" => "questo messaggio è stato cancellato", - /*0018*/"in order to submit a message to this issue" => "per aggiungere un messaggio a questa questione", - /*0019*/"model name" => "nome del modello", - /*0020*/"model type" => "tipo di device", - /*0021*/"year of commercialization" => "anno di commercializzazione", - /*0022*/"Results of the search" => "Risultati della ricerca", - /*0023*/"page list" => "pagine", - /*0024*/"No devices found" => "Non è stato trovato alcun device", - /*0025*/"vendor" => "marca", - /*0026*/"compatibility" => "compatibilità", - /*0027*/"year" => "anno", - /*0028*/"subtype" => "sottotipo", - /*0029*/"sort by" => "ordina per", - /*0030*/"interface" => "interfaccia", - /*0031*/"does it work?" => "funziona?", - /*0032*/"preview of the message" => "anteprima del messaggio", - /*0033*/"preview of the new issue message" => "anteprima del testo della questione", - /*0034*/"Add a message to this issue" => "Aggiungi un messaggio a questa questione", - /*0035*/"Add a new issue" => "Aggiungi una nuova questione", - /*0036*/"MESSAGE" => "MESSAGGIO", - /*0037*/"there are no messages" => "non ci sono messaggi", - /*0038*/"No notebooks found" => "Non è stato trovato alcun notebook", - /*0039*/"subtype (notebook, netbook, tablet)" => "sottotipo (notebook, netbook, tablet)", - /*0040*/"compatibility with free software" => "compatibilità con il software libero", - /*0041*/"view the other specifications" => "guarda le altre specifiche", - /*0042*/"model" => "modello", - /*0043*/"model id" => "id del modello", - /*0044*/"tested on" => "testato con", - /*0045*/"tested with the following kernel libre" => "testato con il seguente kernel libre", - /*0046*/"video card model" => "modello di scheda video", - /*0047*/"wifi model" => "modello di scheda wifi", - /*0048*/"GNU/Linux distribution used for the test" => "distribuzione GNU/Linux usata per il test", - /*0049*/"does the video card work?" => "funziona la scheda video?", - /*0050*/"does the wifi card work?" => "funziona la scheda wifi?", - /*0051*/"Description: (write here all the useful information)" => "Descrizione (scrivi sotto tutte le informazioni utili)", - /*0052*/"discover all the wiki tags" => "scopri tutti i tag della wiki", - /*0053*/"Fields marked with * are mandatory" => "I campi marcati con * sono obbligatori", - /*0054*/"No printers found" => "Non è stata trovata alcuna stampante", - /*0055*/"interface" => "interfaccia", - /*0056*/"VendorID:ProductID code of the device" => "codice VendorID:ProductID del prodotto", - /*0057*/"free driver used" => "driver liberi usati", - /*0058*/"set not-specified if not sure" => "seleziona not-specified se non sei sicuro/a", - /*0059*/"see the help page or leave blank if you are not sure" => "guarda nella pagina di help o lascia vuoto se non sei sicuro/a", - /*0060*/"No scanners found" => "Non sono è stato trovato alcuno scanner", - /*0061*/"No video cards found" => "Non è stata trovata alcuna scheda grafica", - /*0062*/"how does it work with free software?" => "come funziona con il software libero?", - /*0063*/"No wifi cards found" => "Non è stata trovata alcuna scheda wifi", - /*0064*/"does it work with free software?" => "funziona con il software libero?", - /*0065*/"differences in the entry" => "differenze nel campo", - /*0066*/"No 3G cards found" => "Non è stata trovata alcuna scheda 3G", - /*0067*/"Please specify in the below description entry the Internet Service Provider (ISP) and the country where the service is provided" => "Per favore specifica nel sottostante campo descrizione l'Internet Service Provider (ISP) e il Paese dove il servizio viene fornito", - /*0068*/"webcam model" => "modello di webcam", - /*0069*/"does it have a free BIOS?" => "ha il BIOS libero?", - /*0070*/"does the webcam work?" => "funziona la webcam?", - /*0071*/"Current revision" => "Revisione corrente", - /*0072*/"Hello" => "Ciao", - /*0073*/"Your" => "il ", - /*0074*/"control panel" => "pannello di controllo", - /*0075*/"create new account" => "crea un account", - /*0076*/"request new password" => "richiedi nuova password", - /*0077*/"website statistics" => "statistiche del sito", - /*0078*/"hardware in the database" => "hardware nel database", - /*0079*/"users logged" => "utenti loggati", - /*0080*/"Watch your public profile" => "Guarda il tuo profilo pubblico", - /*0081*/"Edit your profile" => "Modifica il tuo profilo", - /*0082*/"Change your e-mail address" => "Cambia il tuo indirizzo e-mail", - /*0083*/"Change your password" => "Cambia la tua password", - /*0084*/"Delete your account" => "Chiudi il tuo account", - /*0085*/"choose the username" => "scegli lo username", - /*0086*/"characters allowed" => "caratteri ammessi", - /*0087*/"your e-mail address" => "il tuo indirizzo e-mail", - /*0088*/"necessary to confirm the registration" => "necessario per confermare la registrazione", - /*0089*/"choose the password" => "scegli la password", - /*0090*/"confirm the password" => "conferma la password", - /*0091*/"write the code above" => "scrivi il codice mostrato sopra", - /*0092*/"write your username" => "scrivi il tuo username", - /*0093*/"Actions carried out by moderators" => "Azioni compiute dai moderatori", - /*0094*/"meet" => "conosci", - /*0095*/"Public profile of" => "Profilo pubblico di", - /*0096*/"See all the contributions of" => "Guarda tutti i contributi di ", - /*0097*/"My website" => "Il mio sito personale", - /*0098*/"My real name" => "Il mio vero nome", - /*0099*/"My e-mail address" => "Il mio indirizzo e-mail", - /*0100*/"I'm from" => "Vengo da", - /*0101*/"Birthdate" => "Sono nato il", - /*0102*/"My favourite distribution" => "La mia distribuzione favorita", - /*0103*/"Free software projects I'm working on" => "Progetti di software libero con i quali collaboro", - /*0104*/"My description" => "La mia descrizione", - /*0105*/"contributions" => "contributi", - /*0106*/"contributions of" => "contributi di", - /*0107*/"No sound cards found" => "Non è stata trovata alcuna scheda audio", - /*0108*/"LAST UPDATE" => "ULTIMA MODIFICA", - /*0109*/"search by" => "cerca per", - /*0110*/"analyze the output of the lspci command" => "analizza l'output del comando lscpi", - /*0111*/"paste the output of the lspci command" => "incolla l'output del comand lspci", - /*0112*/"works, but without 3D acceleration" => "funziona, ma senza accelerazione 3D", - /*0113*/"the text submitted by you does not seem to be the lspci -vmmnn output. Please check the text and try again" => "il testo che hai inviato non sembra l'output del comando lspci -vmmnn. Per favore ricontrolla il testo e riprova", - /*0114*/"Search form" => "Form della ricerca", - /*0115*/"write here the output of lspci -vmmnn" => "scrivi qui l'output del comando lspci -vmmnn", - /*0116*/"The following devices has been found in the database" => "I seguenti device sono stati trovati nel database", - /*0117*/"yes" => "sì", - /*0118*/"no" => "no", - /*0119*/"The following devices has not been found in the database" => "I seguenti device non sono stati trovati nel database", - /*0120*/"can you please insert them?" => "puoi gentilmente inserirli?", - /*0121*/"No webcams found" => "Non è stata trovata alcuna webcam", - /*0122*/"Download the xml file of all the database" => "Scarica il file xml di tutto il database", - /*0123*/"Download the xml file of all the notebooks in the database" => "Scarica il file xml di tutti i notebook presenti nel database", - /*0124*/"Download the xml file of all the wifi cards in the database" => "Scarica il file xml di tutte le schede wifi presenti nel database", - /*0125*/"Download the xml file of all the video cards in the database" => "Scarica il file xml di tutte le schede video presenti nel database", - /*0126*/"Download the xml file of all the printers in the database" => "Scarica il file xml di tutte le stampanti presenti nel database", - /*0127*/"Download the xml file of all the 3G cards in the database" => "Scarica il file xml di tutte le schede 3G presenti nel database", - /*0128*/"Download the xml file of all the sound cards in the database" => "Scarica il file xml di tutte le schede audio presenti nel database", - /*0129*/"Download the xml file of all the webcams in the database" => "Scarica il file xml di tutte le webcam presenti nel database", - /*0130*/"You can download all the h-node database in one unique xml file in order to parse its contents by means of some proper script (for example a Python or Perl or PHP script)" => "Puoi scaricare l'intero database di h-node in un unico file xml per analizzarne i contenuti utilizzando uno script appropriato (ad esempio uno script Python o Perl o PHP)", - /*0131*/"Download the h-node hardware database in xml format" => "Scarica il database dell'hardware di h-node in formato xml", - /*0132*/"Database modifications" => "Modifiche al database", - /*0133*/"List of the database modifications carried out by users" => "Lista delle modifiche apportate al database dagli utenti", - /*0134*/"the model" => "il modello", - /*0135*/"has been inserted by" => "è stato inserito da", - /*0136*/"has been updated by" => "è stato modificato da", - /*0137*/"at" => "alle ore", - /*0138*/"last modifications" => "ultime modifiche", - /*0139*/"watch all modifications" => "guarda tutte le modifiche", - /*0140*/"the title" => "il titolo", - /*0141*/"the text of the wiki page" => "il testo della pagina", - /*0142*/"the wiki page has not been found" => "la pagina della wiki non è stata trovata", - /*0143*/"Page not-found" => "Pagina non trovata", - /*0144*/"Insert" => "Inserisci", - /*0145*/"Update" => "Modifica", - /*0146*/"History" => "History", - /*0147*/"Revision" => "Revisione", - /*0148*/"Differences" => "Differenze", - /*0149*/"Insert a new wiki page" => "Inserisci una nuova pagina nella wiki", - /*0150*/"Edit the wiki page" => "Modifica la pagina della wiki", - /*0151*/"Make current" => "Rendi revisione corrente", - /*0152*/"I want to make this revision the current revision" => "Voglio che questa revisione diventi quella corrente", - /*0153*/"Confirm" => "Conferma", - /*0154*/"Make this revision the current revision of the page" => "Rendi questa revisione la revisione corrente della pagina", - /*0155*/"This wiki page has been deleted" => "Questa pagina della wiki è stata cancellata", - /*0156*/"Talk" => "Discussione", - /*0157*/"Talk page of the wiki page" => "Pagina di discussione della pagina della wiki", - /*0158*/"a page with the same title already exists" => "esiste già una pagina con questo titolo", - /*0159*/"title is too long" => "il titolo è troppo lungo", - /*0160*/"the page text is too long" => "il testo della pagina è troppo lungo", - /*0161*/"History of the wiki page" => "History della pagina della wiki", - /*0162*/"Would you like to insert it?" => "Vuoi inserirla?", - /*0163*/"Wiki modifications" => "Modifiche alla Wiki", - /*0164*/"List of the wiki modifications carried out by users" => "Lista delle modifiche apportate alla Wiki dagli utenti", - /*0165*/"list of pages" => "lista delle pagine", - /*0166*/"List of wiki pages" => "Lista delle pagine della wiki", - /*0167*/"This wiki page has been blocked" => "Questa pagina della wiki è stata bloccata", - /*0168*/"unblock the wiki page" => "sblocca la pagina", - /*0169*/"block the wiki page" => "blocca la pagina", - /*0170*/"show the wiki page" => "mostra la pagina della wiki", - /*0171*/"hide the wiki page" => "nascondi la pagina della wiki", - /*0172*/"list of deleted pages" => "lista delle pagine cancellate", - /*0173*/"restore the wiki page" => "ripristina la pagina", - /*0174*/"delete the wiki page" => "cancella la pagina", - /*0175*/"list of blocked pages" => "lista delle pagine bloccate", - /*0176*/"special pages" => "pagine speciali", - /*0177*/"Actions carried out by administrators" => "Azioni compiute dagli amministratori", - /*0178*/"No bluetooth devices found" => "Non è stato trovato alcun dispositivo bluetooth", - /*0179*/"learn how to find it" => "scopri come individuarlo", - /*0180*/"Download the xml file of all the bluetooth devices in the database" => "Scarica il file xml di tutti i dispositivi bluetooth presenti nel database", - /*0181*/"License information" => "Informazioni sulla licenza", - /*0182*/"No acquisition card found" => "Non è stata trovata alcuna scheda d'acquisizione", - /*0183*/"No fingerprint readers found" => "Non è stato trovato alcun lettore di impronte digitali", - /*0184*/"Download the xml file of all the acquisition cards in the database" => "Scarica il file xml di tutte le schede di acquisizione presenti nel database", - /*0185*/"Download the xml file of all the fingerprint readers in the database" => "Scarica il file xml di tutti i lettori di impronte digitali presenti nel database", - /*0186*/"architecture" => "architettura", - /*0187*/"Add here the device name as written on the device itself or on the device box. Add it only if it is different from the model name already inserted inside the above entry. Add the new name in such a way that there is one name per row." => "Aggiungi qui il nome del dispositivo così com'è scritto sul dispositivo stesso o sulla confezione. Aggiungi tale nome solo se è diverso dal nome del modello già inserito nel campo precedente. Aggiungi il nuovo nome in modo che ci sia un nome per riga.", - /*0188*/"Write here the model name obtained by the lspci or lsusb command." => "Scrivi qui il nome del modello ottenuto dal comando lspci o dal comando lsusb.", - /*0189*/"This is the name of the chipset of your device." => "Questo è il nome del chipset del tuo dispositivo.", - /*0190*/"possible other names of the device" => "eventuali altri nomi del dispositivo", - /*0191*/"Description entry preview" => "Anteprima del campo descrizione", - /*0192*/"Page preview" => "Anteprima della pagina", - /*0193*/"This device page has been hidden" => "La pagina di questo dispositivo è stata nascosta", - /*0194*/"restore the device page" => "ripristina la pagina", - /*0195*/"hide the device page" => "nascondi la pagina", - /*0196*/"Download the xml file of all the scanners in the database" => "Scarica il file xml di tutti gli scanner presenti nel database", - /*0197*/"Special pages for administrators" => "Pagine speciali per gli amministratori", - /*0198*/"Special pages for moderators" => "Pagine speciali per i moderatori", - /*0199*/"see the page" => "guarda la pagina", - /*0200*/"hidden device pages" => "pagine nascoste di dispositivi", - /*0201*/"panel" => "pannello", - /*0202*/"List of hidden device pages" => "Lista di pagine nascoste di dispositivi", - /*0203*/"approve the device page" => "approva la pagina del dispositivo", - /*0204*/"This device page has not been approved yet" => "La pagina del dispositivo non è ancora stata approvata", - /*0205*/"Device pages that have to be approved" => "Pagine di dispositivi da approvare", - /*0206*/"The device page has to be approved by an administrator of the website" => "La pagina del dispositivo deve essere approvata da un amministratore del sito", - /*0207*/"permanently delete the device page" => "cancella definitivamente la pagina", - /*0208*/"This page has been permanently deleted by an administrator of the website" => "Questa pagina è stata definitivamente cancellata da un amministratore del sito", - /*0209*/"No ethernet devices found" => "Non è stata trovata alcuna scheda ethernet", - /*0210*/"free BIOS" => "BIOS libero?", - /*0211*/"You are not a registered user or you have not logged in. Your contribution won't be published until an administrator approves it. If you want your contributions to be automatically published please log in or create an account." => "Noi sei un utente registrato oppure non hai eseguito il login. Il tuo contributo non verrà pubblicato finché un amministratore non l'avrà approvato. Se desideri che il tuo contributo sia automaticamente pubblicato per favore esegui il login oppure crea un account.", - /*0212*/"has been inserted by an anonymous user, it has to be approved by an administrator in order to be published" => "è stato inserito da un utente anonimo, deve essere approvato da un amministratore per essere pubblicato", - /*0213*/"you can also subscribe to the feed in order to receive the new modifications that need a moderation" => "puoi anche iscriverti al feed per ricevere le nuove modifiche che richiedono una moderazione", - /*0214*/"you need javascript enabled in order to correctly use the language's tabs (see below)" => "deve abilitare Javascript per usare correttamente le schede della lingua (vedi sotto)", - /*0215*/"yes" => "sì", - /*0216*/"works with 3D acceleration" => "funziona con accelerazione 3D", - /*0217*/"works, but without 3D acceleration" => "funziona, ma senza accelerazione 3D", - /*0218*/"it does not work" => "non funziona", - /*0219*/"Notebooks, netbooks, tablet PC" => "Notebooks, netbooks, tablet PC", - /*0220*/"Wifi cards" => "Schede wifi", - /*0221*/"Video cards" => "Schede video", - /*0222*/"Printers and multifunction" => "Stampanti e multifunzione", - /*0223*/"Scanners" => "Scanner", - /*0224*/"3G cards" => "Schede 3G", - /*0225*/"Sound cards" => "Schede audio", - /*0226*/"Webcams" => "Webcam", - /*0227*/"Bluetooth devices" => "Dispositivi bluetooth", - /*0228*/"TV/Video/FM acquisition cards" => "Schede di acquisizione TV/Video/FM", - /*0229*/"Fingerprint readers" => "Lettori di impronte digitali", - /*0230*/"Ethernet cards" => "Schede ethernet", - /*0231*/"Hardware" => "Hardware", - /*0232*/"Issues" => "Questioni", - /*0233*/"Search" => "Cerca", - /*0234*/"News" => "Notizie", - /*0235*/"Download" => "Scarica", - /*0236*/"Help" => "Aiuto", - /*0237*/"List of" => "Lista di", - /*0238*/"talk messages" => "messaggi", - /*0239*/"History" => "Revisioni", - /*0240*/"Revision" => "Revisione", - /*0241*/"This is an old revision of this page, as edited by" => "Questa è una vecchia revisione della pagina, così come è stata modificata da", - /*0242*/"It may differ significantly from the" => "Può differire significativamente dalla", - /*0243*/"Differences between the revision of" => "Differenze tra la revisione del", - /*0244*/"created by" => "creata da", - /*0245*/"and the revision of" => "e la revisione del", - /*0246*/"Notice: the text in red has been deleted from the previous revision, the text in green has been added in this revision and the text in gray has not been changed." => "Nota: il testo in rosso è stato cancellato dalla revisione precedente, il testo in verde è stato aggiunto in questa revisione e il testo in grigio non è stato cambiato", - /*0247*/"Insert" => "Inserisci", - /*0248*/"Edit" => "Modifica", - /*0249*/"Talk page" => "Pagina di discussione", - /*0250*/"Download the xml file of all the ethernet cards in the database" => "Scarica il file xml di tutte le schede ethernet presenti nel database", - /*0251*/"No SD card readers found" => "Non è stato trovato alcun lettore di schede SD", - /*0252*/"SD card readers" => "Lettori di schede SD", - /*0253*/"Download the xml file of all the SD card readers in the database" => "Scarica il file xml di tutti i lettori di schede SD presenti nel database", - /*0254*/"There are no devices in the database with the vendorid:productid code specified by you." => "Non ci sono dispositivi nel database con il codice vendorid:productid da te specificato", - /*0255*/"Would you like to add it to the database?" => "Vorresti inserirlo nel database?", - /*0256*/"can free operating systems be installed?" => "possono essere installati sistemi operativi liberi?", - /*0257*/"This issue has been deleted" => "Questa questione è stata cancellata", - /*0258*/"hidden for those who are not moderators" => "Nascosto per coloro che non sono moderatori", - /*0259*/"This issue is hidden for all the users that are not moderators" => "Questa questione è nascosta per tutti gli utenti non moderatori", - /*0260*/"hide the issue" => "nascondi la questione", - /*0261*/"show the issue" => "mostra la questione", - /*0262*/"open the issue again" => "apri nuovamente la questione", - /*0263*/"close the issue" => "chiudi la questione", - /*0264*/"This issue is closed" => "Questa questione è stata chiusa", - /*0265*/"This issue is opened" => "Questa questione è aperta", - /*0266*/"does it adopt any techniques to track users?" => "adotta qualche tecnica per tracciare gli utenti?", - /*0267*/"Actions carried out by users" => "Azioni compiute dagli utenti", - /*0268*/"No modems found" => "Non è stato trovato alcun modem", - /*0269*/"Download the xml file of all the modems in the database" => "Scarica il file xml di tutti i modem presenti nel database", - /*0270*/"Modems and ADSL cards" => "Modem e schede ADSL", - /*0271*/"Table of contents" => "Indice dei contenuti", - /*0272*/"by" => "creato da", - /*0273*/"Add a message" => "Aggiungi un messaggio", - /*0274*/"Save" => "Salva", - /*0275*/"Revision of the wiki page" => "Revisione della pagina della wiki", - /*0276*/"Preview" => "Anteprima", - /*0277*/"January" => "gennaio", - /*0278*/"February" => "febbraio", - /*0279*/"March" => "marzo", - /*0280*/"April" => "aprile", - /*0281*/"May" => "maggio", - /*0282*/"June" => "giugno", - /*0283*/"July" => "luglio", - /*0284*/"August" => "agosto", - /*0285*/"September" => "settembre", - /*0286*/"October" => "ottobre", - /*0287*/"November" => "novembre", - /*0288*/"December" => "dicembre", - /*0289*/"not-specified" => "non specificato", - /*0290*/"last-inserted" => "ultimo inserito", - /*0291*/"last inserted" => "ultimo inserito", - /*0292*/"alphabetically" => "alfabeticamente", - /*0293*/"alphabetically-desc" => "alfabeticamente decresc", - /*0294*/"alphabetically desc" => "alfabeticamente decresc", - /*0295*/"undef" => "tutti", - /*0296*/"All" => "Tutti", - /*0297*/"inkjet" => "getto d'inchiostro", - /*0298*/"A-Full" => "A-Piena", - /*0299*/"B-Partial" => "B-Parziale", - /*0300*/"C-None" => "C-Nessuna", - /*0301*/"A-platinum" => "A-platino", - /*0302*/"B-gold" => "B-oro", - /*0303*/"C-silver" => "C-argento", - /*0304*/"D-bronze" => "D-bronzo", - /*0305*/"E-garbage" => "E-spazzatura", - /*0306*/"not specified how it works" => "non è stato specificato come funziona", - /*0307*/"there is no wifi card" => "la scheda wifi non è presente", - /*0308*/"there is no webcam" => "la webcam non è presente", - /*0309*/"it works" => "funziona", - /*0310*/"does_not_work" => "non funziona", - /*0311*/"works_without_3D" => "funziona senza 3D", - /*0312*/"works_with_3D" => "funziona con 3D", - /*0313*/"list of languages" => "elenco delle lingue", - /*0314*/"Choose the language" => "Scegli la lingua", - /*0315*/"back" => "indietro", - /*0316*/"next" => "successivi", - /*0317*/"previous" => "precedenti", - /*0318*/"type" => "tipo", - /*0319*/"contact us" => "contattaci", - /*0320*/"credits" => "crediti", - /*0321*/"desktop version" => "versione desktop", - /*0322*/"RAID adapters" => "Adattatori RAID", - /*0323*/"No RAID adapter found" => "Nessun adattatore RAID è stato trovato", - /*0324*/"Download the xml file of all the RAID adapters in the database" => "Scarica il file xml di tutti gli adattatori RAID presenti nel database", - /*0325*/"No PCMCIA Controller found" => "Nessun controller PCMCIA è stato trovato", - /*0326*/"PCMCIA Controllers" => "Controller PCMCIA", - /*0327*/"Download the xml file of all the PCMCIA Controllers in the database" => "Scarica il file xml di tutti i Controller PCMCIA presenti nel database", - /*0328*/"notebook" => "notebook", - /*0329*/"netbook" => "netbook", - /*0330*/"motherboard" => "scheda madre", - /*0331*/"tablet" => "tablet", - /*0332*/"netbooks" => "netbook", - /*0333*/"Notebooks" => "Notebook", - /*0334*/"tablet PC" => "PC tablet", - /*0335*/"motherboards" => "schede madri", - /*0336*/"Write a comma-separated list of kernel versions" => "Scrivi una lista di kernel separati da virgole", - /*0337*/"Example" => "Esempio", - /*0338*/"free boot firmware?" => "firmware per boot libero?", - /*0339*/"can be installed" => "può essere installato", - /*0340*/"does it have a free boot firmware (BIOS,UEFI,...) ?" => "ha un firmware per il boot (BIOS, UEFI,..) libero?", - /*0341*/"Hello,\n\nyou have registered an account at"=>"Ciao,\n\nhai richiesto l'attivazione di un account al sito", - /*0342*/"with the following data:\nusername: " => "con i seguenti dati:\nusername: ", - /*0343*/"in order to confirm the registration of the new account please follow the link below" => "per confermare la registrazione per favore segui il link sottostante", - /*0344*/"If you don't want to confirm the account registration\nthen wait one hour and your username and e-mail will be deleted from the database" => "Se non vuoi confermare la registrazione dell'account\naspetta un ora e il tuo username e la tua e-mail verranno cancellati dal nostro database", - /*0345*/"If you received this e-mail for error, please simply disregard this message" => "Se hai ricevuto questa e-mail per errore, per favore cancellala", - /*0346*/"account registration" => "registrazione account", - /*0347*/"Host Controllers" => "Host Controller", - /*0348*/"No Host Controller found" => "Non è stato trovato alcun host controller", - /*0349*/"Download the xml file of all the Host Controllers in the database" => "Scarica il file xml di tutti gli Host Controller presenti nel database", - /*0350*/"PCMCIA Controller" => "Controller PCMCIA", - /*0351*/"USB Controller" => "Controller USB", - /*0352*/"Firewire Controller" => "Controller Firewire", - /*0353*/"HECI Controller" => "Controller HECI", - /*0354*/"device type" => "tipo di dispositivo", - /*0355*/"Thanks for your contribution!" => "Grazie per il tuo contributo!", - /*0356*/"does the device prevent installing wifi cards not-approved by the vendor?" => "il dispositivo impedisce l'installazione di schede wifi non approvate dal rivenditore/distributore?", - /*0357*/"see the details inside the description entry" => "guarda i dettagli all'interno del campo descrizione", - /*0358*/"Thanks for helping the h-node project and the free software movement!" => "Grazie per aver aiutato il progetto h-node e il movimento del software libero!", - /*0359*/"You have just inserted a new notebook into the database. Can you please insert its devices separately too? Thanks!" => "Hai appena inserito un nuovo portatile. Potresti gentilmente inserire separatamente anche i suoi dispositivi?", - /*0360*/"insert" => "inserisci", - /*0361*/"List of allowed fully free distributions" => "Lista delle distribuzioni completamente libere ammesse", - /*0362*/"Insert a new distro" => "Inserisci una nuova distribuzione", - /*0363*/"DISTRO-CODE" => "CODICE DISTRIBUZIONE", - ), - 'es' => array - ( - /*0001*/"Search one device in the archive" => "Busque un dispositivo en el archivo", - /*0002*/"hardware type" => "tipo de hardware", - /*0003*/"the model name contains" => "el nombre del modelo contiene", - /*0004*/"List of issues" => "Lista de incidencias", - /*0005*/"TITLE" => "TITULO", - /*0006*/"TOPIC" => "ARGUMENTO", - /*0007*/"OPENED BY" => "ABIERTO POR", - /*0008*/"DATE" => "FECHA", - /*0009*/"REPLIES" => "RESPUESTAS", - /*0010*/"PRIORITY" => "PRIORIDAD", - /*0011*/"STATUS" => "ESTADO", - /*0012*/"You have to" => "Tiene que", - /*0013*/"in order to submit an issue" => "para poder agregar una incidencia", - /*0014*/"in order to add a message" => "para poder agregar un mensaje", - /*0015*/"Description" => "Descripción", - /*0016*/"Messages" => "Mensajes", - /*0017*/"this message has been deleted" => "este mensaje ha sido borrado", - /*0018*/"in order to submit a message to this issue" => "para poder agregar un mensaje a esta incidencia", - /*0019*/"model name" => "nombre del modelo", - /*0020*/"model type" => "tipo de modelo", - /*0021*/"year of commercialization" => "año de comercialización", - /*0022*/"Results of the search" => "Resultado de la búsqueda", - /*0023*/"page list" => "página", - /*0024*/"No devices found" => "No se encontró ningún dispositivo", - /*0025*/"vendor" => "fabricante", - /*0026*/"compatibility" => "compatibilidad", - /*0027*/"year" => "año", - /*0028*/"subtype" => "subtipo", - /*0029*/"sort by" => "ordenar por", - /*0030*/"interface" => "interfaz", - /*0031*/"does it work?" => "¿funciona?", - /*0032*/"preview of the message" => "vista previa del mensaje", - /*0033*/"preview of the new issue message" => "vista previa del mensaje de la incidencia", - /*0034*/"Add a message to this issue" => "Agregue un mensaje a esta incidencia", - /*0035*/"Add a new issue" => "Agregue una nueva incidencia", - /*0036*/"MESSAGE" => "MENSAJE", - /*0037*/"there are no messages" => "no hay mensajes", - /*0038*/"No notebooks found" => "No se encontró ningún computador portátil", - /*0039*/"subtype (notebook, netbook, tablet)" => "subtipo (portátil, subportátil, tablet)", - /*0040*/"compatibility with free software" => "compatibilidad con software libre", - /*0041*/"view the other specifications" => "ver otras especificaciones", - /*0042*/"model" => "modelo", - /*0043*/"model id" => "id del modelo", - /*0044*/"tested on" => "probado con", - /*0045*/"tested with the following kernel libre" => "probado con el siguiente kernel libre", - /*0046*/"video card model" => "modelo de tarjeta de video", - /*0047*/"wifi model" => "modelo de tarjeta de red inalámbrica", - /*0048*/"GNU/Linux distribution used for the test" => "distribución GNU/Linux usada para la prueba", - /*0049*/"does the video card work?" => "¿funciona la tarjeta de video?", - /*0050*/"does the wifi card work?" => "¿funciona la tarjeta de red inalámbrica?", - /*0051*/"Description: (write here all the useful information)" => "Descripción (escriba aquí toda la información útil)", - /*0052*/"discover all the wiki tags" => "mostrar todas las etiquetas del wiki", - /*0053*/"Fields marked with * are mandatory" => "Campos marcados con * son obligatorios", - /*0054*/"No printers found" => "No se encontró ninguna impresora", - /*0055*/"interface" => "interfaz", - /*0056*/"VendorID:ProductID code of the device" => "código VendorID:ProductID del dispositivo", - /*0057*/"free driver used" => "driver libre usado", - /*0058*/"set not-specified if not sure" => "seleccione not-specified si no esta seguro/a", - /*0059*/"see the help page or leave blank if you are not sure" => "vea la página de ayuda o deje vacío si no esta seguro/a", - /*0060*/"No scanners found" => "No se encontró ningún escáner", - /*0061*/"No video cards found" => "No se encontró ninguna tarjeta de video", - /*0062*/"how does it work with free software?" => "¿como funciona con software libre?", - /*0063*/"No wifi cards found" => "No se encontró ninguna tarjeta de red inalámbrica", - /*0064*/"does it work with free software?" => "¿funciona con software libre?", - /*0065*/"differences in the entry" => "diferencias en el campo", - /*0066*/"No 3G cards found" => "No se encontró ninguna tarjeta 3G", - /*0067*/"Please specify in the below description entry the Internet Service Provider (ISP) and the country where the service is provided" => "Por favor especifique en el campo de descripción inferior el Proveedor de Internet (ISP) y el país donde se provee el servicio", - /*0068*/"webcam model" => "modelo de cámara web", - /*0069*/"does it have a free BIOS?" => "¿tiene BIOS libre?", - /*0070*/"does the webcam work?" => "¿funciona la cámara web?", - /*0071*/"Current revision" => "Revisión actual", - /*0072*/"Hello" => "Hola", - /*0073*/"Your" => "Su", - /*0074*/"control panel" => "panel de control", - /*0075*/"create new account" => "crear una cuenta", - /*0076*/"request new password" => "solicitar nueva contraseña", - /*0077*/"website statistics" => "estadísticas del sito", - /*0078*/"hardware in the database" => "hardware en la base de datos", - /*0079*/"users logged" => "usuarios en línea", - /*0080*/"Watch your public profile" => "Ver su perfil público", - /*0081*/"Edit your profile" => "Editar su perfil", - /*0082*/"Change your e-mail address" => "Cambiar su dirección de correo electrónico", - /*0083*/"Change your password" => "Cambiar su contraseña", - /*0084*/"Delete your account" => "Borrar su cuenta", - /*0085*/"choose the username" => "elija su nombre de usuario", - /*0086*/"characters allowed" => "caracteres permitidos", - /*0087*/"your e-mail address" => "su dirección de correo electrónico", - /*0088*/"necessary to confirm the registration" => "necesario para confirmar el registro", - /*0089*/"choose the password" => "elija la contraseña", - /*0090*/"confirm the password" => "confirme la contraseña", - /*0091*/"write the code above" => "escriba el código mostrado en la parte superior", - /*0092*/"write your username" => "escriba su nombre de usuario", - /*0093*/"Actions carried out by moderators" => "Acciones efectuadas por los moderadores", - /*0094*/"meet" => "conoce a", - /*0095*/"Public profile of" => "Perfil público de", - /*0096*/"See all the contributions of" => "Ver todas las contribuciones de", - /*0097*/"My website" => "Mi sitio web", - /*0098*/"My real name" => "Mi nombre real", - /*0099*/"My e-mail address" => "Mi dirección de correo electrónico", - /*0100*/"I'm from" => "Soy de", - /*0101*/"Birthdate" => "Fecha de nacimiento", - /*0102*/"My favourite distribution" => "Mi distribución favorita", - /*0103*/"Free software projects I'm working on" => "Proyectos de Software Libre en los que colaboro", - /*0104*/"My description" => "Mi descripción", - /*0105*/"contributions" => "contribuciones", - /*0106*/"contributions of" => "contribuciones de", - /*0107*/"No sound cards found" => "No se encontró ninguna tarjeta de audio", - /*0108*/"LAST UPDATE" => "ÚLTIMA MODIFICACIÓN", - /*0109*/"search by" => "buscar por", - /*0110*/"analyze the output of the lspci command" => "analice la salida de la orden lscpi", - /*0111*/"paste the output of the lspci command" => "pegue la salida de la orden lspci", - /*0112*/"works, but without 3D acceleration" => "funciona, pero sin aceleración 3D", - /*0113*/"the text submitted by you does not seem to be the lspci -vmmnn output. Please check the text and try again" => "el texto insertado no parece ser la salida de la orden lspci -vmmnn. Por favor revise el texto e intente nuevamente", - /*0114*/"Search form" => "Formulario de búsqueda", - /*0115*/"write here the output of lspci -vmmnn" => "escriba aquí la salida de la orden lspci -vmmnn", - /*0116*/"The following devices has been found in the database" => "Los siguientes dispositivos han sido encontrados en la base de datos", - /*0117*/"yes" => "si", - /*0118*/"no" => "no", - /*0119*/"The following devices has not been found in the database" => "Los siguientes dispositivos no han sido encontrados en la base de datos", - /*0120*/"can you please insert them?" => "¿podría insertarlos?", - /*0121*/"No webcams found" => "No se encontró ninguna cámara web", - /*0122*/"Download the xml file of all the database" => "Descargue el archivo xml de toda la base de datos", - /*0123*/"Download the xml file of all the notebooks in the database" => "Descargue el archivo xml de todos los computadores portátiles presentes en la base de datos", - /*0124*/"Download the xml file of all the wifi cards in the database" => "Descargue el archivo xml de todas las tarjetas de red inalámbrica presentes en la base de datos", - /*0125*/"Download the xml file of all the video cards in the database" => "Descargue el archivo xml de todas las tarjetas de video presentes en la base de datos", - /*0126*/"Download the xml file of all the printers in the database" => "Descargue el archivo xml de todas las impresoras presentes en la base de datos", - /*0127*/"Download the xml file of all the 3G cards in the database" => "Descargue el archivo xml de todas las tarjetas 3G presentes en la base de datos", - /*0128*/"Download the xml file of all the sound cards in the database" => "Descargue el archivo xml de todas las tarjetas de audio presentes en la base de datos", - /*0129*/"Download the xml file of all the webcams in the database" => "Descargue el archivo xml de todas las cámaras web presentes en la base de datos", - /*0130*/"You can download all the h-node database in one unique xml file in order to parse its contents by means of some proper script (for example a Python or Perl or PHP script)" => "Puede descargar toda la base de datos de h-node en un archivo xml único para poder analizar su contenido por medio de otro script apropiado (por ejemplo un script en Python, Perl o PHP)", - /*0131*/"Download the h-node hardware database in xml format" => "Descargue la base de datos de h-node en formato xml", - /*0132*/"Database modifications" => "Modificaciones a la base de datos", - /*0133*/"List of the database modifications carried out by users" => "Lista de modificaciones realizada por los usuarios", - /*0134*/"the model" => "el modelo", - /*0135*/"has been inserted by" => "ha sido agregado por", - /*0136*/"has been updated by" => "ha sido modificado por", - /*0137*/"at" => "en", - /*0138*/"last modifications" => "últimas modificaciones", - /*0139*/"watch all modifications" => "ver todas las modificaciones", - /*0140*/"the title" => "el titulo", - /*0141*/"the text of the wiki page" => "el texto de la página", - /*0142*/"the wiki page has not been found" => "la página del wiki no ha sido encontrada", - /*0143*/"Page not-found" => "Página no encontrada", - /*0144*/"Insert" => "Agregar", - /*0145*/"Update" => "Actualizar", - /*0146*/"History" => "Historial", - /*0147*/"Revision" => "Revisión", - /*0148*/"Differences" => "Diferencias", - /*0149*/"Insert a new wiki page" => "Agregar una página nueva al wiki", - /*0150*/"Edit the wiki page" => "Editar la página del wiki", - /*0151*/"Make current" => "Hacer revisión actual", - /*0152*/"I want to make this revision the current revision" => "Quiero hacer ésta revisión la revisión actual", - /*0153*/"Confirm" => "Confirmar", - /*0154*/"Make this revision the current revision of the page" => "Hacer esta revisión la revisión actual de la página", - /*0155*/"This wiki page has been deleted" => "Ésta página del wiki ha sido borrada", - /*0156*/"Talk" => "Discusión", - /*0157*/"Talk page of the wiki page" => "Página de discusión de la página del wiki", - /*0158*/"a page with the same title already exists" => "una página con el mismo titulo ya existe", - /*0159*/"title is too long" => "el titulo es demasiado largo", - /*0160*/"the page text is too long" => "el texto de la página es demasiado largo", - /*0161*/"History of the wiki page" => "Historial de la página del wiki", - /*0162*/"Would you like to insert it?" => "¿Le gustaría agregarlo?", - /*0163*/"Wiki modifications" => "Modificaciones al wiki", - /*0164*/"List of the wiki modifications carried out by users" => "Lista de modificaciones aportadas al wiki por los usuarios", - /*0165*/"list of pages" => "lista de páginas", - /*0166*/"List of wiki pages" => "Lista de las páginas del wiki", - /*0167*/"This wiki page has been blocked" => "Ésta página del wiki ha sido bloqueada", - /*0168*/"unblock the wiki page" => "desbloquear la página", - /*0169*/"block the wiki page" => "bloquear la página", - /*0170*/"show the wiki page" => "mostrar la página del wiki", - /*0171*/"hide the wiki page" => "esconder la página del wiki", - /*0172*/"list of deleted pages" => "lista de las páginas borradas", - /*0173*/"restore the wiki page" => "restaurar la página", - /*0174*/"delete the wiki page" => "borrar la página", - /*0175*/"list of blocked pages" => "lista de las páginas bloqueadas", - /*0176*/"special pages" => "páginas especiales", - /*0177*/"Actions carried out by administrators" => "Acciones realizadas por administradores", - /*0178*/"No bluetooth devices found" => "No se encontró ningún dispositivo bluetooth", - /*0179*/"learn how to find it" => "aprenda como encontrarlo", - /*0180*/"Download the xml file of all the bluetooth devices in the database" => "Descargue el archivo xml de todas los dispositivos bluetooth presentes en la base de datos", - /*0181*/"License information" => "Información de licencia", - /*0182*/"No acquisition card found" => "No se encontró ninguna tarjeta de adquisición", - /*0183*/"No fingerprint readers found" => "No se encontró ningún lector de huellas digitales", - /*0184*/"Download the xml file of all the acquisition cards in the database" => "Descargue el archivo xml de todas las tarjetas de adquisición presentes en la base de datos", - /*0185*/"Download the xml file of all the fingerprint readers in the database" => "Descargue el archivo xml de todas los lectores de huellas digitales presentes en la base de datos", - /*0186*/"architecture" => "arquitectura", - /*0187*/"Add here the device name as written on the device itself or on the device box. Add it only if it is different from the model name already inserted inside the above entry. Add the new name in such a way that there is one name per row." => "Inserte aquí el nombre del dispositivo como esta escrito en el dispositivo o la caja del dispositivo. Inserte solo y si es diferente del model name que ya se encuentra dentro de la entrada superior. Inserte de manera que exista un nombre diferente en cada linea", - /*0188*/"Write here the model name obtained by the lspci or lsusb command." => "Escriba aquí el nombre del modelo obtenido por la orden lspci o lsusb.", - /*0189*/"This is the name of the chipset of your device." => "Este es el nombre del chipset de tu dispositivo.", - /*0190*/"possible other names of the device" => "otros posibles nombres del dispositivo", - /*0191*/"Description entry preview" => "Vista previa de la descripción", - /*0192*/"Page preview" => "Vista previa", - /*0193*/"This device page has been hidden" => "La página del dispositivo ha sido escondida", - /*0194*/"restore the device page" => "restaure la página del dispositivo", - /*0195*/"hide the device page" => "esconda la página del dispositivo", - /*0196*/"Download the xml file of all the scanners in the database" => "Descargue el archivo xml de todos los escáneres presentes en la base de datos", - /*0197*/"Special pages for administrators" => "Páginas especiales para administradores", - /*0198*/"Special pages for moderators" => "Páginas especiales para moderadores", - /*0199*/"see the page" => "ver la página", - /*0200*/"hidden device pages" => "página escondida del dispositivo", - /*0201*/"panel" => "panel", - /*0202*/"List of hidden device pages" => "Lista de páginas de dispositivos escondidos", - /*0203*/"approve the device page" => "apruebe la página del dispositivo", - /*0204*/"This device page has not been approved yet" => "Esta página del dispositivo aun no ha sido aprobada", - /*0205*/"Device pages that have to be approved" => "Páginas de dispositivos para ser aprobadas", - /*0206*/"The device page has to be approved by an administrator of the website" => "La página del dispositivo tiene que ser aprobada por un administrador del sito", - /*0207*/"permanently delete the device page" => "eliminar la página del dispositivo permanentemente", - /*0208*/"This page has been permanently deleted by an administrator of the website" => "Esta página ha sido permanentemente eliminada por un administrador del sitio", - /*0209*/"No ethernet devices found" => "No se encontró ningún dispositivo ethernet", - /*0210*/"free BIOS" => "¿BIOS libre?", - /*0211*/"You are not a registered user or you have not logged in. Your contribution won't be published until an administrator approves it. If you want your contributions to be automatically published please log in or create an account." => "No es un usuario registrado o no ha iniciado sesión. Su contribución no será publicada hasta que un administrador la apruebe. Si quiere que sus contribuciones sean publicadas automáticamente por favor inicie sesión o cree una cuenta.", - /*0212*/"has been inserted by an anonymous user, it has to be approved by an administrator in order to be published" => "ha sido agregado por un usuario anónimo, tiene que ser aprobado por un administrador para ser publicado", - /*0213*/"you can also subscribe to the feed in order to receive the new modifications that need a moderation" => "puede también suscribirse al feed para recibir las nuevas modificaciones que necesitan moderación", - /*0214*/"you need javascript enabled in order to correctly use the language's tabs (see below)" => "necesita javascript habilitado para poder usar correctamente las pestañas de idioma (vea debajo)", - /*0215*/"yes" => "si", - /*0216*/"works with 3D acceleration" => "funciona con aceleración 3D", - /*0217*/"works, but without 3D acceleration" => "funciona, pero sin aceleración 3D", - /*0218*/"it does not work" => "no funciona", - /*0219*/"Notebooks, netbooks, tablet PC" => "Computadores portátiles, subportátiles, tablet PC", - /*0220*/"Wifi cards" => "Tarjetas de red inalámbrica", - /*0221*/"Video cards" => "Tarjetas de video", - /*0222*/"Printers and multifunction" => "Impresoras y multifuncionales", - /*0223*/"Scanners" => "Escáners", - /*0224*/"3G cards" => "Tarjetas 3G", - /*0225*/"Sound cards" => "Tarjetas de audio", - /*0226*/"Webcams" => "Cámaras web", - /*0227*/"Bluetooth devices" => "Dispositivos bluetooth", - /*0228*/"TV/Video/FM acquisition cards" => "Tarjetas de adquisición TV/Video/FM", - /*0229*/"Fingerprint readers" => "Lectores de huellas digitales", - /*0230*/"Ethernet cards" => "Tarjetas de ethernet", - /*0231*/"Hardware" => "Hardware", - /*0232*/"Issues" => "Incidencias", - /*0233*/"Search" => "Búsqueda", - /*0234*/"News" => "Noticias", - /*0235*/"Download" => "Descarga", - /*0236*/"Help" => "Ayuda", - /*0237*/"List of" => "Lista de", - /*0238*/"talk messages" => "mensajes", - /*0239*/"History" => "Historial", - /*0240*/"Revision" => "Revisión", - /*0241*/"This is an old revision of this page, as edited by" => "Esta es una revisión anterior de esta página, editada por", - /*0242*/"It may differ significantly from the" => "Puede diferir significantemente de la", - /*0243*/"Differences between the revision of" => "Diferencias entre las revisiones de", - /*0244*/"created by" => "creado por", - /*0245*/"and the revision of" => "y la revisión de", - /*0246*/"Notice: the text in red has been deleted from the previous revision, the text in green has been added in this revision and the text in gray has not been changed." => "Nota: el texto en rojo ha sido borrado de la revisión anterior, el texto en verde ha sido agregado en esta revisión y el texto en gris no ha sido cambiado", - /*0247*/"Insert" => "Insertar", - /*0248*/"Edit" => "Editar", - /*0249*/"Talk page" => "Página de discusión", - /*0250*/"Download the xml file of all the ethernet cards in the database" => "Descargue el archivo xml de todas las tarjetas de ethernet presentes en la base de datos", - /*0251*/"No SD card readers found" => "No se encontró ningún lector de tarjetas SD", - /*0252*/"SD card readers" => "Lectores de tarjetas SD", - /*0253*/"Download the xml file of all the SD card readers in the database" => "Descargue el archivo xml de todos los lectores de tarjetas SD presentes en la base de datos", - /*0254*/"There are no devices in the database with the vendorid:productid code specified by you." => "No hay dispositivos en la base de datos con el código vendorid:productid que ha especificado", - /*0255*/"Would you like to add it to the database?" => "¿Le gustaría agregarlo a la base de datos?", - /*0256*/"can free operating systems be installed?" => "¿puede ser instalado un sistema libre?", - /*0257*/"This issue has been deleted" => "Esta incidencia ha sido eliminada", - /*0258*/"hidden for those who are not moderators" => "Oculta para aquellos que no son moderadores", - /*0259*/"This issue is hidden for all the users that are not moderators" => "Esta incidencia está oculta para todos los usuarios que no son moderadores", - /*0260*/"hide the issue" => "esconder la incidencia", - /*0261*/"show the issue" => "mostrar la incidencia", - /*0262*/"open the issue again" => "abrir nuevamente la incidencia", - /*0263*/"close the issue" => "cerrar la incidencia", - /*0264*/"This issue is closed" => "Esta incidencia está cerrada", - /*0265*/"This issue is opened" => "Esta incidencia está abierta", - /*0266*/"does it adopt any techniques to track users?" => "¿adopta alguna técnica para rastrear a los usuarios?", - /*0267*/"Actions carried out by users" => "Acciones realizadas por usuarios", - /*0268*/"No modems found" => "No se encontró ningún modem", - /*0269*/"Download the xml file of all the modems in the database" => "Descargue el archivo xml de todos los modems presentes en la base de datos", - /*0270*/"Modems and ADSL cards" => "Modems y tarjetas ADSL", - /*0271*/"Table of contents" => "Tabla de contenido", - /*0272*/"by" => "creado por", - /*0273*/"Add a message" => "Agregar un mensaje", - /*0274*/"Save" => "Guardar", - /*0275*/"Revision of the wiki page" => "Revisión de la página del wiki", - /*0276*/"Preview" => "Vista previa", - /*0277*/"January" => "Enero", - /*0278*/"February" => "Febrero", - /*0279*/"March" => "Marzo", - /*0280*/"April" => "Abril", - /*0281*/"May" => "Mayo", - /*0282*/"June" => "Junio", - /*0283*/"July" => "Julio", - /*0284*/"August" => "Agosto", - /*0285*/"September" => "Septiembre", - /*0286*/"October" => "Octubre", - /*0287*/"November" => "Noviembre", - /*0288*/"December" => "Diciembre", - /*0289*/"not-specified" => "no especificado", - /*0290*/"last-inserted" => "último insertado", - /*0291*/"last inserted" => "último insertado", - /*0292*/"alphabetically" => "alfabéticamente", - /*0293*/"alphabetically-desc" => "alfabéticamente descendiente", - /*0294*/"alphabetically desc" => "alfabéticamente descendiente", - /*0295*/"undef" => "sin definir", - /*0296*/"All" => "Todo", - /*0297*/"inkjet" => "inyección de tinta", - /*0298*/"A-Full" => "A-Completa", - /*0299*/"B-Partial" => "B-Parcial", - /*0300*/"C-None" => "C-Ninguna", - /*0301*/"A-platinum" => "A-platino", - /*0302*/"B-gold" => "B-oro", - /*0303*/"C-silver" => "C-plata", - /*0304*/"D-bronze" => "D-bronce", - /*0305*/"E-garbage" => "E-basura", - /*0306*/"not specified how it works" => "sin especificar como funciona", - /*0307*/"there is no wifi card" => "no hay tarjeta de red inalámbrica presente", - /*0308*/"there is no webcam" => "no hay cámara web presente", - /*0309*/"it works" => "funciona", - /*0310*/"does_not_work" => "no funciona", - /*0311*/"works_without_3D" => "funciona sin 3D", - /*0312*/"works_with_3D" => "funciona con 3D", - /*0313*/"list of languages" => "lista de idiomas", - /*0314*/"Choose the language" => "Seleccione un idioma", - /*0315*/"back" => "regresar", - /*0316*/"next" => "siguiente", - /*0317*/"previous" => "anterior", - /*0318*/"type" => "tipo", - /*0319*/"contact us" => "contacto", - /*0320*/"credits" => "créditos", - /*0321*/"desktop version" => "versión de escritorio", - /*0322*/"RAID adapters" => "Adaptador RAID", - /*0323*/"No RAID adapter found" => "No se encontró ningún adaptador RAID", - /*0324*/"Download the xml file of all the RAID adapters in the database" => "Descargue el archivo xml de todos los adaptadores RAID presentes en la base de datos", - /*0325*/"No PCMCIA Controller found" => "No se encontró ningún controlador PCMCIA", - /*0326*/"PCMCIA Controllers" => "Controlador PCMCIA", - /*0327*/"Download the xml file of all the PCMCIA Controllers in the database" => "Descargue el archivo xml de todos los controladores PCMCIA presentes en la base de datos", - /*0328*/"notebook" => "computadores portátiles", - /*0329*/"netbook" => "netbook", - /*0330*/"motherboard" => "tarjeta madre", - /*0331*/"tablet" => "tablet", - /*0332*/"netbooks" => "netbook", - /*0333*/"Notebooks" => "Computador portátil", - /*0334*/"tablet PC" => "PC tablet", - /*0335*/"motherboards" => "tarjetas madre", - /*0336*/"Write a comma-separated list of kernel versions" => "Escriba una lista de núcleos separada por comas", - /*0337*/"Example" => "Ejemplo", - /*0338*/"free boot firmware?" => "¿firmware boot libre?", - /*0339*/"can be installed" => "puede ser instalado", - /*0340*/"does it have a free boot firmware (BIOS,UEFI,...) ?" => "¿tiene un firmware boot (BIOS, UEFI,..) libre?", - /*0341*/"Hello,\n\nyou have registered an account at"=>"Hola,\n\nha registrado una cuenta en el sitio", - /*0342*/"with the following data:\nusername: " => "con la siguiente información:\nusername: ", - /*0343*/"in order to confirm the registration of the new account please follow the link below" => "para poder confirmar el registro de la nueva cuenta por favor siga el siguiente enlace", - /*0344*/"If you don't want to confirm the account registration\nthen wait one hour and your username and e-mail will be deleted from the database" => "Si no quiere confirmar el registro de la cuenta\nentonces espere una hora, su usuario y correo electrónico serán borrados de la base de datos", - /*0345*/"If you received this e-mail for error, please simply disregard this message" => "Si recibió este correo electrónico por error, por favor haga caso omiso del mensaje", - /*0346*/"account registration" => "registro de cuenta", - /*0347*/"Host Controllers" => "Controlador de Host", - /*0348*/"No Host Controller found" => "No se encontró ningún controlador de host", - /*0349*/"Download the xml file of all the Host Controllers in the database" => "Descargue el archivo xml de todos los controladores de host presentes en la base de datos", - /*0350*/"PCMCIA Controller" => "Controlador PCMCIA", - /*0351*/"USB Controller" => "Controlador USB", - /*0352*/"Firewire Controller" => "Controlador Firewire", - /*0353*/"HECI Controller" => "Controlador HECI", - /*0354*/"device type" => "tipo de dispositivo", - /*0355*/"Thanks for your contribution!" => "¡Gracias por su contribución!", - /*0356*/"does the device prevent installing wifi cards not-approved by the vendor?" => "¿el dispositivo evita la instalación de tarjetas inalámbricas no aprobadas por el distribuidor?", - /*0357*/"see the details inside the description entry" => "vea los detalles dentro del campo de descripción", - /*0358*/"Thanks for helping the h-node project and the free software movement!" => "¡Gracias por ayudar al proyecto h-node y al movimiento de software libre!", - /*0359*/"You have just inserted a new notebook into the database. Can you please insert its devices separately too? Thanks!" => "Ha agregado un nuevo computador portátil dentro de la base de datos. ¿Podría agregar los dispositivos por separado también? ¡Gracias!", - /*0360*/"insert" => "insertar", - /*0361*/"List of allowed fully free distributions" => "Lista de distribuciones completamente libres permitidas", - /*0362*/"Insert a new distro" => "Inserte una nueva distribución", - /*0363*/"DISTRO-CODE" => "CÓDIGO DE DISTRIBUCIÓN", - /*0364*/"Login form:" => "Inicio de sesión:", - /*0365*/"username" => "usuario", - /*0366*/"password" => "contraseña", - /*0367*/"login" => "entrar", - /*0367*/"JavaScript license information" => "información de licencia JavaScript", - ), - 'fr' => array - ( - /*0001*/"Search one device in the archive" => "Chercher un périphérique dans les archives", - /*0002*/"hardware type" => "type de matériel", - /*0003*/"the model name contains" => "le nom du modèle contient", - /*0004*/"List of issues" => "Liste des problèmes", - /*0005*/"TITLE" => "TITRE", - /*0006*/"TOPIC" => "SUJET", - /*0007*/"OPENED BY" => "OUVERT PAR", - /*0008*/"DATE" => "DATE", - /*0009*/"REPLIES" => "REPONSES", - /*0010*/"PRIORITY" => "PRIORITE", - /*0011*/"STATUS" => "STATUS", - /*0012*/"You have to" => "Vous devez", - /*0013*/"in order to submit an issue" => "pour pouvoir soumettre un problème", - /*0014*/"in order to add a message" => "pour pouvoir envoyer un message", - /*0015*/"Description" => "Description", - /*0016*/"Messages" => "Messages", - /*0017*/"this message has been deleted" => "ce message a été supprimé", - /*0018*/"in order to submit a message to this issue" => "pour pouvoir envoyer un message concernant ce problème", - /*0019*/"model name" => "nom de modèle", - /*0020*/"model type" => "type de modèle", - /*0021*/"year of commercialization" => "année de commercialisation", - /*0022*/"Results of the search" => "Resultat de la recherche", - /*0023*/"page list" => "liste de page", - /*0024*/"No devices found" => "Aucun périphérique trouvé", - /*0025*/"vendor" => "vendeur", - /*0026*/"compatibility" => "compatibilitée", - /*0027*/"year" => "année", - /*0028*/"subtype" => "sous-type", - /*0029*/"sort by" => "afficher par", - /*0030*/"interface" => "interface", - /*0031*/"does it work?" => "cela fonctionne-t-il ?", - /*0032*/"preview of the message" => "prévisualisation du message", - /*0033*/"preview of the new issue message" => "prévisualisation du message du nouveau problème", - /*0034*/"Add a message to this issue" => "Ajouter un message à ce problème", - /*0035*/"Add a new issue" => "Ajouter un nouveau problème", - /*0036*/"MESSAGE" => "MESSAGE", - /*0037*/"there are no messages" => "Il n'y a pas de messages", - /*0038*/"No notebooks found" => "Aucun notebook trouvé", - /*0039*/"subtype (notebook, netbook, tablet)" => "sous-type (notebook, netbook, tablet)", - /*0040*/"compatibility with free software" => "compatibilitée avec le logiciel libre", - /*0041*/"view the other specifications" => "voir les autres spécifications", - /*0042*/"model" => "modèle", - /*0043*/"model id" => "ID du modèle", - /*0044*/"tested on" => "testé sur", - /*0045*/"tested with the following kernel libre" => "testé avec le kernel libre suivant", - /*0046*/"video card model" => "modèle de carte vidéo", - /*0047*/"wifi model" => "modèle de carte wifi", - /*0048*/"GNU/Linux distribution used for the test" => "Distribution GNU/Linux utilisée pour le test", - /*0049*/"does the video card work?" => "La carte graphique fonctionne-t-elle ?", - /*0050*/"does the wifi card work?" => "La carte wifi fonctionne-t-elle ?", - /*0051*/"Description: (write here all the useful information)" => "Description (écrivez ici toutes les informations utiles)", - /*0052*/"discover all the wiki tags" => "voir tous les tags wiki", - /*0053*/"Fields marked with * are mandatory" => "Les champs marqués avec * sont obligatoires", - /*0054*/"No printers found" => "Aucun imprimante trouvée", - /*0055*/"interface" => "interface", - /*0056*/"VendorID:ProductID code of the device" => "VendorID:ProductID du périphérique", - /*0057*/"free driver used" => "pilote libre utilisé", - /*0058*/"set not-specified if not sure" => "définir comme non-spécifié en cas de doute", - /*0059*/"see the help page or leave blank if you are not sure" => "voir la page d'aide ou laisser blanc si vous n'êtes pas sur(e)", - /*0060*/"No scanners found" => "Aucun scanneur trouvé", - /*0061*/"No video cards found" => "Aucun carte graphique trouvée", - /*0062*/"how does it work with free software?" => "A quel point cela fonctionne-t-il avec du logiciel libre ?", - /*0063*/"No wifi cards found" => "Aucune carte wifi trouvée", - /*0064*/"does it work with free software?" => "cela fonctionne-t-il avec le logiciel libre ?", - /*0065*/"differences in the entry" => "differences dans l'entrée", - /*0066*/"No 3G cards found" => "Aucune carte 3G trouvée", - /*0067*/"Please specify in the below description entry the Internet Service Provider (ISP) and the country where the service is provided" => "Merci de préciser dans cette description le fournisseur d'accès et le pays dans lequel le service est fourni", - /*0068*/"webcam model" => "modèle de webcam", - /*0069*/"does it have a free BIOS?" => "a-t-il un BIOS libre ?", - /*0070*/"does the webcam work?" => "la webcam fonctionne t'elle ?", - /*0071*/"Current revision" => "Révision actuelle", - /*0072*/"Hello" => "Bonjour", - /*0073*/"Your" => "Votre", - /*0074*/"control panel" => "panneau de contrôle", - /*0075*/"create new account" => "créer un compte", - /*0076*/"request new password" => "demander un nouveau mot de passe", - /*0077*/"website statistics" => "statistiques du site", - /*0078*/"hardware in the database" => "hardware dans la base de données", - /*0079*/"users logged" => "utilisateurs connectés", - /*0080*/"Watch your public profile" => "Voir votre profil public", - /*0081*/"Edit your profile" => "Éditer votre profil", - /*0082*/"Change your e-mail address" => "Changer votre adresse e-mail", - /*0083*/"Change your password" => "Changer votre mot de passe", - /*0084*/"Delete your account" => "Supprimer votre compte", - /*0085*/"choose the username" => "choisissez le nom d'utilisateur", - /*0086*/"characters allowed" => "caractères autorisés", - /*0087*/"your e-mail address" => "votre adresse e-mail", - /*0088*/"necessary to confirm the registration" => "nécessaire pour confirmer la création", - /*0089*/"choose the password" => "choisissez le mot de passe", - /*0090*/"confirm the password" => "confirmez le mot de passe", - /*0091*/"write the code above" => "écrivez le code ci-dessous", - /*0092*/"write your username" => "écrivez votre nom d'utilisateur", - /*0093*/"Actions carried out by moderators" => "Actions gérées par les modérateurs", - /*0094*/"meet" => "rencontrer", - /*0095*/"Public profile of" => "Profil public de", - /*0096*/"See all the contributions of" => "Voir toute les distributions de", - /*0097*/"My website" => "Mon site web", - /*0098*/"My real name" => "Mon vrai nom", - /*0099*/"My e-mail address" => "Mon adresse e-mail", - /*0100*/"I'm from" => "Je viens de", - /*0101*/"Birthdate" => "Date de naissance", - /*0102*/"My favourite distribution" => "Ma distribution favorite", - /*0103*/"Free software projects I'm working on" => "Les projets de logiciel libre sur lesquels je travaille", - /*0104*/"My description" => "Ma description", - /*0105*/"contributions" => "contributions", - /*0106*/"contributions of" => "contributions de", - /*0107*/"No sound cards found" => "Aucune carte son trouvée", - /*0108*/"LAST UPDATE" => "DERNIERE MISE A JOUR", - /*0109*/"search by" => "cherchez par", - /*0110*/"analyze the output of the lspci command" => "analisez le retour de la commande lspci", - /*0111*/"paste the output of the lspci command" => "copiez le retour de la commande lspci", - /*0112*/"works, but without 3D acceleration" => "fonctionne, mais sans accélération 3D", - /*0113*/"the text submitted by you does not seem to be the lspci -vmmnn output. Please check the text and try again" => "le texte que vous avez soumis n'a pas l'air d'être le résultat de la commande lspci -vmmnn, merci de vérifier", - /*0114*/"Search form" => "Formulaire de recherche", - /*0115*/"write here the output of lspci -vmmnn" => "écrivez ici le retour de la commande lspci -vmmnn", - /*0116*/"The following devices has been found in the database" => "Ces périphériques ont été trouvés dans la base de données", - /*0117*/"yes" => "oui", - /*0118*/"no" => "non", - /*0119*/"The following devices has not been found in the database" => "Ces périphériques n'ont pas été trouvés dans la base de données", - /*0120*/"can you please insert them?" => "pouvez vous les insérer ?", - /*0121*/"No webcams found" => "Aucune webcam trouvée", - /*0122*/"Download the xml file of all the database" => "Téléchargez le fichier XML de la base de données complètes", - /*0123*/"Download the xml file of all the notebooks in the database" => "Téléchargez le fichier XML de tout les notebooks dans la base de données", - /*0124*/"Download the xml file of all the wifi cards in the database" => "Téléchargez le fichier XML de toute les cartes wifi dans la base de données", - /*0125*/"Download the xml file of all the video cards in the database" => "Téléchargez le fichier XML de toute les cartes graphiques dans la base de données", - /*0126*/"Download the xml file of all the printers in the database" => "Téléchargez le fichier XML de toute les imprimantes dans la base de données", - /*0127*/"Download the xml file of all the 3G cards in the database" => "Téléchargez le fichier XML de toute les cartes 3G dans la base de données", - /*0128*/"Download the xml file of all the sound cards in the database" => "Téléchargez le fichier XML de toutes les cartes son dans la base de données", - /*0129*/"Download the xml file of all the webcams in the database" => "Téléchargez le fichier XML de toutes les webcams dans la base de données", - /*0130*/"You can download all the h-node database in one unique xml file in order to parse its contents by means of some proper script (for example a Python or Perl or PHP script)" => "Vous pouvez téléchargez toute la base de donnée de h-node en un seul fichier XML pour pouvoir ensuite l'exploiter avec des scripts (par exemple un script Python, Perl ou PHP)", - /*0131*/"Download the h-node hardware database in xml format" => "Téléchargez la base de données matérielle de h-node au format XML", - /*0132*/"Database modifications" => "Modification de la base de données", - /*0133*/"List of the database modifications carried out by users" => "Liste des modifications faites à la base de données par les utilisateurs", - /*0134*/"the model" => "le modèle", - /*0135*/"has been inserted by" => "a été inséré par", - /*0136*/"has been updated by" => "a été mis à jour par", - /*0137*/"at" => "à", - /*0138*/"last modifications" => "dernières modifications", - /*0139*/"watch all modifications" => "voir toutes les modifications", - /*0140*/"the title" => "le titre", - /*0141*/"the text of the wiki page" => "le texte de la page du wiki", - /*0142*/"the wiki page has not been found" => "la page du wiki n'a pas été trouvée", - /*0143*/"Page not-found" => "Page introuvable", - /*0144*/"Insert" => "Insérer", - /*0145*/"Update" => "Mettre à jour", - /*0146*/"History" => "Historique", - /*0147*/"Revision" => "Révisions", - /*0148*/"Differences" => "Différences", - /*0149*/"Insert a new wiki page" => "Insérer une nouvelle page wiki", - /*0150*/"Edit the wiki page" => "Editer la page wiki", - /*0151*/"Make current" => "Rendre actuel", - /*0152*/"I want to make this revision the current revision" => "Je veux faire de cette révision la révision actuelle", - /*0153*/"Confirm" => "Confirmer", - /*0154*/"Make this revision the current revision of the page" => "Je veux faire de cette révision la révision actuelle de cette page", - /*0155*/"This wiki page has been deleted" => "La page wiki a été supprimée", - /*0156*/"Talk" => "Discussion", - /*0157*/"Talk page of the wiki page" => "Page de discussion de la page de wiki", - /*0158*/"a page with the same title already exists" => "une page avec le même titre existe déja", - /*0159*/"title is too long" => "le titre est trop long", - /*0160*/"the page text is too long" => "le texte de la page est trop long", - /*0161*/"History of the wiki page" => "Historique de la page wiki", - /*0162*/"Would you like to insert it?" => "Voulez-vous l'insérer ?", - /*0163*/"Wiki modifications" => "Modifications du wiki", - /*0164*/"List of the wiki modifications carried out by users" => "Liste des modification faites au wiki par les utilisateurs", - /*0165*/"list of pages" => "list des pages", - /*0166*/"List of wiki pages" => "Liste des pages du wiki", - /*0167*/"This wiki page has been blocked" => "La page wiki a été bloquée", - /*0168*/"unblock the wiki page" => "débloquer la page wiki", - /*0169*/"block the wiki page" => "bloquer la page wiki", - /*0170*/"show the wiki page" => "montrer la page wiki", - /*0171*/"hide the wiki page" => "cacher la page wiki", - /*0172*/"list of deleted pages" => "liste des pages supprimées", - /*0173*/"restore the wiki page" => "restaurer la page wiki", - /*0174*/"delete the wiki page" => "supprimer la page wiki", - /*0175*/"list of blocked pages" => "liste de pages bloquées", - /*0176*/"special pages" => "pages spéciales", - /*0177*/"Actions carried out by administrators" => "Actions faites par les administrateurs", - /*0178*/"No bluetooth devices found" => "Aucun périphérique bluetooth trouvé", - /*0179*/"learn how to find it" => "apprenez à le trouver", - /*0180*/"Download the xml file of all the bluetooth devices in the database" => "Téléchargez le fichier xml de tous les périphériques bluetooth dans la base de données", - /*0181*/"License information" => "Information de license", - /*0182*/"No acquisition card found" => "Aucune carte d'acquisition trouvée", - /*0183*/"No fingerprint readers found" => "Aucun lecteur d'empreintes digitales trouvé", - /*0184*/"Download the xml file of all the acquisition cards in the database" => "Téléchargez le fichier xml de toutes les cartes d'acquisition dans la base de données", - /*0185*/"Download the xml file of all the fingerprint readers in the database" => "Téléchargez le fichier xml de tous les lecteurs d'empreintes digitales dans la base de données", - /*0186*/"architecture" => "architecture", - /*0187*/"Add here the device name as written on the device itself or on the device box. Add it only if it is different from the model name already inserted inside the above entry. Add the new name in such a way that there is one name per row." => "Insérez ici le nom du périphérique tel qu'écris sur le périphérique lui même ou sur son emballage. Ajoutez-le uniquement s'il est différent du nom du modèle déja inséré dans l'entrée ci-dessus. Ajoutez le nouveau nom de façon à ce qu'il n'y ait qu'un nom par rangée. ", - /*0188*/"Write here the model name obtained by the lspci or lsusb command." => "Ecrivez ici le nom du modèle obtenu par la commande lspci ou lsusb.", - /*0189*/"This is the name of the chipset of your device." => "Ceci est le nom du chipset de votre périphérique.", - /*0190*/"possible other names of the device" => "autres noms possibles du périphérique", - /*0191*/"Description entry preview" => "Description de la prévisualisation de l'entrée", - /*0192*/"Page preview" => "Prévisualisation de la page", - /*0193*/"This device page has been hidden" => "La page de ce périhérique a été cachée", - /*0194*/"restore the device page" => "restaurer la page de ce périphérique", - /*0195*/"hide the device page" => "cacher la page de ce périphérique", - /*0196*/"Download the xml file of all the scanners in the database" => "Téléchargez le fichier xml de tous les scanneur dans la base de données", - /*0197*/"Special pages for administrators" => "Page spéciale pour les administrateurs", - /*0198*/"Special pages for moderators" => "Page spéciale pour les modérateurs", - /*0199*/"see the page" => "voir la page", - /*0200*/"hidden device pages" => "pages de périphériques cachées", - /*0201*/"panel" => "panneau", - /*0202*/"List of hidden device pages" => "Liste des pages de périphériques cachées", - /*0203*/"approve the device page" => "approuver la page du périphérique", - /*0204*/"This device page has not been approved yet" => "La page du périphérique n'a pas encore été approuvée", - /*0205*/"Device pages that have to be approved" => "Pages de périphériques en attente d'être approuvées", - /*0206*/"The device page has to be approved by an administrator of the website" => "La page du périphérique est en attente d'être approuvée par un administrateur", - /*0207*/"permanently delete the device page" => "supprimer définitivement la page", - /*0208*/"This page has been permanently deleted by an administrator of the website" => "Cette page a été définitivement supprimée par un administrateur du site", - /*0209*/"No ethernet devices found" => "Pas de périphériques ethernet trouvés", - /*0210*/"free BIOS" => "BIOS libre", - /*0211*/"You are not a registered user or you have not logged in. Your contribution won't be published until an administrator approves it. If you want your contributions to be automatically published please log in or create an account." => "Vous n'êtes pas un utilisateur enregistré ou vous n'êtes pas authentifié. Votre contribution ne sera pas publiée tant qu'un administrateur de l'aura pas approuvée. Si vous souhaitez que vos contributions soient automatiquement publiées, veuillez vous authentifier ou de créer un compte.", - /*0212*/"has been inserted by an anonymous user, it has to be approved by an administrator in order to be published" => "a été inséré par un utilisateur anonyme et doit-être approuvé par un administrateur afin d'être publié", - /*0213*/"you can also subscribe to the feed in order to receive the new modifications that need a moderation" => "vous pouvez également vous abonner au flux afin de recevoir les nouvelles modifications en attente de modération", - /*0214*/"you need javascript enabled in order to correctly use the language's tabs (see below)" => "il est nécessaire d'activer javascript afin d'utiliser correctement les onglets de langue (voir ci-dessous)", - /*0215*/"yes" => "oui", - /*0216*/"works with 3D acceleration" => "fonctionne avec accélération 3D", - /*0217*/"works, but without 3D acceleration" => "fonctionne, mais sans accélération 3D", - /*0218*/"it does not work" => "ne fonctionne pas", - /*0219*/"Notebooks, netbooks, tablet PC" => "Notebooks, netbooks, tablettes", - /*0220*/"Wifi cards" => "Cartes wifi", - /*0221*/"Video cards" => "Cartes graphiques", - /*0222*/"Printers and multifunction" => "Imprimantes et multifonctions", - /*0223*/"Scanners" => "Scanneurs", - /*0224*/"3G cards" => "Cartes 3G", - /*0225*/"Sound cards" => "Cartes son", - /*0226*/"Webcams" => "Webcams", - /*0227*/"Bluetooth devices" => "Périphériques bluetooth", - /*0228*/"TV/Video/FM acquisition cards" => "Cartes d'acquisition TV/Video/FM", - /*0229*/"Fingerprint readers" => "Lecteurs d'empreintes digitales", - /*0230*/"Ethernet cards" => "Cartes ethernet", - /*0231*/"Hardware" => "Hardware", - /*0232*/"Issues" => "Problème", - /*0233*/"Search" => "Recherche", - /*0234*/"News" => "Nouvelles", - /*0235*/"Download" => "Télécharger", - /*0236*/"Help" => "Aide", - /*0237*/"List of" => "Liste de", - /*0238*/"talk messages" => "discussion", - /*0239*/"History" => "Historique", - /*0240*/"Revision" => "Révision", - /*0241*/"This is an old revision of this page, as edited by" => "Ceci est une version antérieure de la page, telle qu'éditée par", - /*0242*/"It may differ significantly from the" => "Il peut y avoir une différence significative avec", - /*0243*/"Differences between the revision of" => "Différences entre les révisions de", - /*0244*/"created by" => "créé par", - /*0245*/"and the revision of" => "et la révision de", - /*0246*/"Notice: the text in red has been deleted from the previous revision, the text in green has been added in this revision and the text in gray has not been changed." => "Note : le texte en rouge a été supprimé de la version précédente, le texte en vert a été ajouté à cette version et le texte en gris n'a pas été changé.", - /*0247*/"Insert" => "Insérer", - /*0248*/"Edit" => "Modifier", - /*0249*/"Talk page" => "Page de discussion", - /*0250*/"Download the xml file of all the ethernet cards in the database" => "Télécharger le fichier xml de toutes les cartes ethernet présentes dans la base de données", - /*0251*/"No sd card readers found" => "Aucun lecteur de carte SD trouvé", - /*0252*/"Sd card readers" => "Lecteurs de cartes SD", - /*0253*/"Download the xml file of all the SD card readers in the database" => "Télécharger le fichier xml de tous les lecteurs de cartes SD de la base de donnée", - /*0254*/"There are no devices in the database with the vendorid:productid code specified by you." => "Il n'y a pas de matériel dans la base de donnée avec le code vendorid:productid spécifié.", - /*0255*/"Would you like to add it to the database?" => "Voudriez-vous l'ajouter à la base de donnée ?", - /*0256*/"can free operating systems be installed?" => "Des systèmes d'exploitation libres peuvent-ils être installés ?", - /*0257*/"This issue has been deleted" => "Ce problème a été effacé", - /*0258*/"hidden for those who are not moderators" => "Caché pour les non-modérateurs", - /*0259*/"This issue is hidden for all the users that are not moderators" => "Ce problème est caché à tous les utilisateurs qui ne sont pas des modérateurs", - /*0260*/"hide the issue" => "cacher le problème", - /*0261*/"show the issue" => "montrer le problème", - /*0262*/"open the issue again" => "réouvrir le problème", - /*0263*/"close the issue" => "fermer le problème", - /*0264*/"This issue is closed" => "Ce problème est fermé", - /*0265*/"This issue is opened" => "Ce problème est ouvert", - /*0266*/"does it adopt any techniques to track users?" => "emploie-t-il des techniques pour suivre les utilisateurs à la trace ?", - /*0267*/"Actions carried out by users" => "Actions effectuées par les utilisateurs", - /*0268*/"No modems found" => "Aucun modem trouvé", - /*0269*/"Download the xml file of all the modems in the database" => "Télécharger le fichier xml de tous les modems de la base de donnée", - /*0270*/"Modems and ADSL cards" => "Modems et cartes ADSL", - /*0271*/"Table of contents" => "Table des matières", - /*0272*/"by" => "par", - /*0273*/"Add a message" => "Ajouter un message", - /*0274*/"Save" => "Sauvegarder", - /*0275*/"Revision of the wiki page" => "Révision de la page wiki", - /*0276*/"Preview" => "Aperçu", - /*0277*/"January" => "Janvier", - /*0278*/"February" => "Février", - /*0279*/"March" => "Mars", - /*0280*/"April" => "Avril", - /*0281*/"May" => "Mai", - /*0282*/"June" => "Juin", - /*0283*/"July" => "Juillet", - /*0284*/"August" => "Août", - /*0285*/"September" => "Septembre", - /*0286*/"October" => "Octobre", - /*0287*/"November" => "Novembre", - /*0288*/"December" => "Décembre", - /*0289*/"not-specified" => "non-spécifié", - /*0290*/"last-inserted" => "dernier-inséré", - /*0291*/"last inserted" => "dernier inséré", - /*0292*/"alphabetically" => "alphabétiquement", - /*0293*/"alphabetically-desc" => "alphabétiquement-décroissant", - /*0294*/"alphabetically desc" => "alphabétiquement par ordre décroissant", - /*0295*/"undef" => "nondef", - /*0296*/"All" => "Tout", - /*0297*/"inkjet" => "jet d'encre", - /*0298*/"A-Full" => "A-Complet", - /*0299*/"B-Partial" => "B-Partiel", - /*0300*/"C-None" => "C-Aucun", - /*0301*/"A-platinum" => "A-platine", - /*0302*/"B-gold" => "B-or", - /*0303*/"C-silver" => "C-argent", - /*0304*/"D-bronze" => "D-bronze", - /*0305*/"E-garbage" => "E-poubelle", - /*0306*/"not specified how it works" => "le fonctionnement n'est pas spécifié", - /*0307*/"there is no wifi card" => "il n'y a pas de carte wifi", - /*0308*/"there is no webcam" => "il n'y a pas de webcam", - /*0309*/"it works" => "fonctionne", - /*0310*/"does_not_work" => "ne_fonctionne_pas", - /*0311*/"works_without_3D" => "fonctionne_sans_3D", - /*0312*/"works_with_3D" => "fonctionne_avec_3D", - /*0313*/"list of languages" => "liste de langues", - /*0314*/"Choose the language" => "Choisissez la langue", - /*0315*/"back" => "retour", - /*0316*/"next" => "suivant", - /*0317*/"previous" => "précédent", - /*0318*/"type" => "type", - /*0319*/"contact us" => "contactez-nous", - /*0320*/"credits" => "crédits", - /*0321*/"desktop version" => "version du bureau", - /*0322*/"RAID adapters" => "Adaptateurs RAID", - /*0323*/"No RAID adapter found" => "Aucun adaptateur RAID trouvé", - /*0324*/"Download the xml file of all the RAID adapters in the database" => "Téléchargez le fichier xml de tous les adaptateurs RAID présents dans la base", - /*0325*/"No PCMCIA Controller found" => "Aucun contrôleur PCMCIA trouvé", - /*0326*/"PCMCIA Controllers" => "Contrôleur PCMCIA", - /*0327*/"Download the xml file of all the PCMCIA Controllers in the database" => "Téléchargez le fichier xml de tous les contrôleurs PCMCIA présents dans la base", - /*0328*/"notebook" => "ordinateur portable", - /*0329*/"netbook" => "netbook", - /*0330*/"motherboard" => "carte mère", - /*0331*/"tablet" => "tablette", - /*0332*/"netbooks" => "netbooks", - /*0333*/"Notebooks" => "Notebooks", - /*0334*/"tablet PC" => "tablette PC", - /*0335*/"motherboards" => "cartes mère", - /*0336*/"Write a comma-separated list of kernel versions" => "Écrivez une liste séparée par des virgules de versions de noyau", - /*0337*/"Example" => "Exemple", - /*0338*/"free boot firmware?" => "Micrologiciel de démarrage libre ?", - /*0339*/"can be installed" => "peut être installé", - /*0340*/"does it have a free boot firmware (BIOS,UEFI,...) ?" => "a un micrologiciel de démarrage (BIOS, UEFI,..) libre?", - /*0341*/"Hello,\n\nyou have registered an account at"=>"Bonjour,\n\nvous avez créé un compte à", - /*0342*/"with the following data:\nusername: " => "avec les données suivantes :\nnom d'utilisateur : ", - /*0343*/"in order to confirm the registration of the new account please follow the link below" => "pour confirmer la création du nouveau compte, veuillez suivre le lien ci-dessous", - /*0344*/"If you don't want to confirm the account registration\nthen wait one hour and your username and e-mail will be deleted from the database" => "Si vous ne voulez pas confirmer la création du compte\nattendez une heure et votre nom d'utilisateur et courriel seront supprimés de la base", - /*0345*/"If you received this e-mail for error, please simply disregard this message" => "Si vous avez reçu ce courriel par erreur, veuillez l'ignorer", - /*0346*/"account registration" => "création de compte", - /*0347*/"Host Controllers" => "Contrôleurs Hôte", - /*0348*/"No Host Controller found" => "Aucun Contrôleur Hôte trouvé", - /*0349*/"Download the xml file of all the Host Controllers in the database" => "Téléchargez le fichier xml de tous les Contrôleurs Hôte présents dans la base", - /*0350*/"PCMCIA Controller" => "Contrôleur PCMCIA", - /*0351*/"USB Controller" => "Contrôleur USB", - /*0352*/"Firewire Controller" => "Contrôleur Firewire", - /*0353*/"HECI Controller" => "Contrôleur HECI", - /*0354*/"device type" => "type d'appareil", - /*0355*/"Thanks for your contribution!" => "Merci pour votre contribution !", - /*0356*/"does the device prevent installing wifi cards not-approved by the vendor?" => "l'appareil empêche-t-il l'insertion de cartes wifi non approuvées par le vendeur ?", - /*0357*/"see the details inside the description entry" => "voir les détails dans le champ description", - /*0358*/"Thanks for helping the h-node project and the free software movement!" => "Merci d'aider le projet h-node et le mouvement du logiciel libre !", - /*0359*/"You have just inserted a new notebook into the database. Can you please insert its devices separately too? Thanks!" => "Vous venez d'insérer un nouvel ordinateur portable dans la base. Pouvez-vous insérer ses périphériques séparément ? Merci !", - /*0360*/"insert" => "insérer", - /*0361*/"List of allowed fully free distributions" => "Liste des distributions totalement libres autorisées", - /*0362*/"Insert a new distro" => "Insérer une nouvelle distribution", - /*0363*/"DISTRO-CODE" => "CODE-DISTRO", - ), - 'de' => array - ( - /*0001*/"Search one device in the archive" => "Ein Gerät im Archiv suchen", - /*0002*/"hardware type" => "Hardware-Typ", - /*0003*/"the model name contains" => "die Modellbezeichnung enthält", - /*0004*/"List of issues" => "Vorhandene Beiträge", - /*0005*/"TITLE" => "Titel", - /*0006*/"TOPIC" => "Thema", - /*0007*/"OPENED BY" => "Angelegt von", - /*0008*/"DATE" => "Datum", - /*0009*/"REPLIES" => "Nachricht", - /*0010*/"PRIORITY" => "Priorität", - /*0011*/"STATUS" => "Stand", - /*0012*/"You have to" => "Sie müssen", - /*0013*/"in order to submit an issue" => "um ein Thema einzusenden", - /*0014*/"in order to add a message" => "um eine Nachricht hinzufügen", - /*0015*/"Description" => "Beschreibung", - /*0016*/"Messages" => "Nachrichten", - /*0017*/"this message has been deleted" => "Diese Nachricht wurde gelöscht", - /*0018*/"in order to submit a message to this issue" => "um eine Antwort zu senden", - /*0019*/"model name" => "Modellbezeichnung", - /*0020*/"model type" => "Modelltyp", - /*0021*/"year of commercialization" => "Jahr der Markteinführung", - /*0022*/"Results of the search" => "Suchergebnisse", - /*0023*/"page list" => "Seite/n", - /*0024*/"No devices found" => "Es wurde kein Gerät gefunden", - /*0025*/"vendor" => "Hersteller", - /*0026*/"compatibility" => "Kompatibilität", - /*0027*/"year" => "Jahr", - /*0028*/"subtype" => "Typ", - /*0029*/"sort by" => "Sortierung nach", - /*0030*/"interface" => "Schnittstelle", - /*0031*/"does it work?" => "Funktionsweise", - /*0032*/"preview of the message" => "Nachrichtenvorschau", - /*0033*/"preview of the new issue message" => "Nachrichtenvorschau", - /*0034*/"Add a message to this issue" => "Auf diese Nachricht antworten", - /*0035*/"Add a new issue" => "Neue Nachricht erstellen", - /*0036*/"MESSAGE" => "Nachricht", - /*0037*/"there are no messages" => "Es sind keine Antworten vorhanden", - /*0038*/"No notebooks found" => "Es wurden keine Notebooks gefunden", - /*0039*/"subtype (notebook, netbook, tablet)" => "Typ (Notebook, Netbook, Tablet)", - /*0040*/"compatibility with free software" => "Kompatibilität mit Freie Software", - /*0041*/"view the other specifications" => "Weitere Angaben", - /*0042*/"model" => "Modell", - /*0043*/"model id" => "Modell-ID", - /*0044*/"tested on" => "überprüft mit Distribution", - /*0045*/"tested with the following kernel libre" => "Überbrüft mit folgendem freien Betriebssystemkern (Libre Kernel)", - /*0046*/"video card model" => "Grafikkarte", - /*0047*/"wifi model" => "WLAN", - /*0048*/"GNU/Linux distribution used for the test" => "Verwendete GNU/Linux-Distribution für die Überprüfung", - /*0049*/"does the video card work?" => "Funktioniert die Grafik einwandfrei?", - /*0050*/"does the wifi card work?" => "Funktioniert das WLAN einwandfrei?", - /*0051*/"Description: (write here all the useful information)" => "Beschreibung: (alle nützliche Informationen)", - /*0052*/"discover all the wiki tags" => "Wiki-Elemente", - /*0053*/"Fields marked with * are mandatory" => "* Pflichtangabe", - /*0054*/"No printers found" => "Es wurden keine Drucker gefunden", - /*0055*/"interface" => "Schnittstelle", - /*0056*/"VendorID:ProductID code of the device" => "Hersteller-ID:Produkt-ID des Gerätes", - /*0057*/"free driver used" => "Verwendete Freie Firmware/Treiber", - /*0058*/"set not-specified if not sure" => "Bitte „Keine Angabe“, wenn nicht sicher", - /*0059*/"see the help page or leave blank if you are not sure" => "Siehe „Hilfe“, oder freilassen, wenn nicht sicher", - /*0060*/"No scanners found" => "Es wurden keine Scanner gefunden", - /*0061*/"No video cards found" => "Es wurde keine Grafikkarte gefunden", - /*0062*/"how does it work with free software?" => "Funktioniert einwandfrei mit Freie Software?", - /*0063*/"No wifi cards found" => "Es wurde kein WLAN (intern/extern) gefunden", - /*0064*/"does it work with free software?" => "Funktioniert mit Freie Software?", - /*0065*/"differences in the entry" => "Unterschiede", - /*0066*/"No 3G cards found" => "Es wurde kein Mobilfunkstandard der dritten Generation (3G) gefunden", - /*0067*/"Please specify in the below description entry the Internet Service Provider (ISP) and the country where the service is provided" => "Bitte geben Sie in der folgenden Beschreibung den Internetdienstanbieter (ISP) und Land an, in dem die Dienstleistung erbracht wird", - /*0068*/"webcam model" => "Webcam", - /*0069*/"does it have a free BIOS?" => "Hat eine freies BIOS?", - /*0070*/"does the webcam work?" => "Funktioniert einwandfrei mit Freie Software?", - /*0071*/"Current revision" => "Aktuelle Version", - /*0072*/"Hello" => "Hallo", - /*0073*/"Your" => "Ihre ", - /*0074*/"control panel" => "Einstellungen", - /*0075*/"create new account" => "Neu registrieren", - /*0076*/"request new password" => "Passwort vergessen", - /*0077*/"website statistics" => "Website-Statistiken:", - /*0078*/"hardware in the database" => "Hardware-Datenbank", - /*0079*/"users logged" => "Angemeldete Benutzer", - /*0080*/"Watch your public profile" => "Öffentliches Profil", - /*0081*/"Edit your profile" => "Profil bearbeiten", - /*0082*/"Change your e-mail address" => "E-Mail-Adresse ändern", - /*0083*/"Change your password" => "Passwort ändern", - /*0084*/"Delete your account" => "Konto löschen", - /*0085*/"choose the username" => "Benutzername", - /*0086*/"characters allowed" => "Erlaubte Zeichen", - /*0087*/"your e-mail address" => "E-Mail-Adresse", - /*0088*/"necessary to confirm the registration" => "Zur Bestätigung der Registrierung erforderlich", - /*0089*/"choose the password" => "Passwort", - /*0090*/"confirm the password" => "Passwort (Wiederholung)", - /*0091*/"write the code above" => "Geben Sie die Zeichen ein", - /*0092*/"write your username" => "Geben Sie Ihren Benutzernamen ein", - /*0093*/"Actions carried out by moderators" => "Moderatoren durchgeführte Änderungen", - /*0094*/"meet" => "treffen", - /*0095*/"Public profile of" => "Öffentliches Profil auf", - /*0096*/"See all the contributions of" => "Alle Beiträge von", - /*0097*/"My website" => "Meine Webseite", - /*0098*/"My real name" => "Mein bürgerlicher Name", - /*0099*/"My e-mail address" => "Meine E-Mail-Adresse", - /*0100*/"I'm from" => "Ich bin aus", - /*0101*/"Birthdate" => "Geburtsdatum", - /*0102*/"My favourite distribution" => "Meine favorisierte Distribution", - /*0103*/"Free software projects I'm working on" => "Freie-Software-Projekte, an denen ich arbeite", - /*0104*/"My description" => "Meine Beschreibung", - /*0105*/"contributions" => "Beiträge", - /*0106*/"contributions of" => "Beiträge von", - /*0107*/"No sound cards found" => "Es wurde keine Soundkarte gefunden", - /*0108*/"LAST UPDATE" => "Letzte Aktualisierung", - /*0109*/"search by" => "Suchen nach", - /*0110*/"analyze the output of the lspci command" => "Analyse der Ausgabe des Befehls „lspci“", - /*0111*/"paste the output of the lspci command" => "Fügen Sie Ausgabe des Befehls „lspci“ ein", - /*0112*/"works, but without 3D acceleration" => "Funktioniert, aber ohne 3D-Beschleunigung", - /*0113*/"the text submitted by you does not seem to be the lspci -vmmnn output. Please check the text and try again" => "Der von Ihnen übermittelte Text scheint nicht der „lspci-vmmnn“-Ausgabe zu entsprechen. Bitte überprüfen Sie den Text und versuchen es erneut", - /*0114*/"Search form" => "Suchen", - /*0115*/"write here the output of lspci -vmmnn" => "Geben Sie hier die Ausgabe von „lspci-vmmnn“ ein", - /*0116*/"The following devices has been found in the database" => "Die folgenden Geräte wurden in der Datenbank gefunden", - /*0117*/"yes" => "Ja", - /*0118*/"no" => "Nein", - /*0119*/"The following devices has not been found in the database" => "Folgende Geräte wurden nicht in der Datenbank gefunden", - /*0120*/"can you please insert them?" => "Kann dies bitte eingefügt werden?", - /*0121*/"No webcams found" => "Es wurde keine Webcam gefunden", - /*0122*/"Download the xml file of all the database" => "Die vollständige Datenbank herunterladen (XML-Format)", - /*0123*/"Download the xml file of all the notebooks in the database" => "Alle enthaltenen Notebooks herunterladen (XML-Format)", - /*0124*/"Download the xml file of all the wifi cards in the database" => "Alle enthaltenen WLAN-Geräte herunterladen (XML-Format)", - /*0125*/"Download the xml file of all the video cards in the database" => "Alle enthaltenen Grafikkarten herunterladen (XML-Format)", - /*0126*/"Download the xml file of all the printers in the database" => "Alle enthaltenen Drucker herunterladen (XML-Format)", - /*0127*/"Download the xml file of all the 3G cards in the database" => "Alle enthaltenen 3G-Geräte herunterladen (XML-Format)", - /*0128*/"Download the xml file of all the sound cards in the database" => "Alle enthaltenen Soundkarten herunterladen (XML-Format)", - /*0129*/"Download the xml file of all the webcams in the database" => "Alle enthaltenen Webcams herunterladen (XML-Format)", - /*0130*/"You can download all the h-node database in one unique xml file in order to parse its contents by means of some proper script (for example a Python or Perl or PHP script)" => "Sie können alle h-node-Datenbanken als XML-Datei herunterladen, um den Inhalt durch ein Skript (bspw. ein Python-, Perl- oder PHP-Skript) analysieren zu können.", - /*0131*/"Download the h-node hardware database in xml format" => "Die h-node-Hardware-Datenbank im XML-Format herunterladen", - /*0132*/"Database modifications" => "Datenbank-Änderungen", - /*0133*/"List of the database modifications carried out by users" => "Von Benutzern durchgeführte Datenbank-Änderungen", - /*0134*/"the model" => "Das Modell", - /*0135*/"has been inserted by" => "wurde eingefügt von", - /*0136*/"has been updated by" => "wurde aktualisiert von", - /*0137*/"at" => "am", - /*0138*/"last modifications" => "Letzte Änderungen", - /*0139*/"watch all modifications" => "Alle Änderungen anzeigen", - /*0140*/"the title" => "Der Titel", - /*0141*/"the text of the wiki page" => "der Text des Wikis", - /*0142*/"the wiki page has not been found" => "Das Wiki wurde nicht gefunden", - /*0143*/"Page not-found" => "Seite nicht gefunden", - /*0144*/"Insert" => "Einfügen", - /*0145*/"Update" => "Aktualisieren", - /*0146*/"History" => "Historie", - /*0147*/"Revision" => "Version", - /*0148*/"Differences" => "Unterschiede", - /*0149*/"Insert a new wiki page" => "Ein neues Wiki einfügen", - /*0150*/"Edit the wiki page" => "Wiki bearbeiten", - /*0151*/"Make current" => "Aktualisieren", - /*0152*/"I want to make this revision the current revision" => "Ich möchte diese Version zur aktuellen Version machen", - /*0153*/"Confirm" => "Ok", - /*0154*/"Make this revision the current revision of the page" => "Diese Version zur aktuellen Version machen", - /*0155*/"This wiki page has been deleted" => "Dieses Wiki wurde gelöscht", - /*0156*/"Talk" => "Diskussion", - /*0157*/"Talk page of the wiki page" => "Diskussionsseite des Wikis", - /*0158*/"a page with the same title already exists" => "Es ist bereits eine Seite mit den gleichen Titel vorhanden", - /*0159*/"title is too long" => "Titel ist zu lang", - /*0160*/"the page text is too long" => "Der Text ist zu lang", - /*0161*/"History of the wiki page" => "Historie des Wikis", - /*0162*/"Would you like to insert it?" => "Wiki einfügen?", - /*0163*/"Wiki modifications" => "Wiki-Änderungen", - /*0164*/"List of the wiki modifications carried out by users" => "Von Benutzern durchgeführte Wiki-Änderungen", - /*0165*/"list of pages" => "Seiten", - /*0166*/"List of wiki pages" => "Wiki-Seiten", - /*0167*/"This wiki page has been blocked" => "Dieses Wiki wurde gesperrt", - /*0168*/"unblock the wiki page" => "Wiki entsperren", - /*0169*/"block the wiki page" => "Wiki sperren", - /*0170*/"show the wiki page" => "Wiki anzeigen", - /*0171*/"hide the wiki page" => "Wiki ausblenden", - /*0172*/"list of deleted pages" => "Gelöschte Seiten", - /*0173*/"restore the wiki page" => "Wiki wiederherstellen", - /*0174*/"delete the wiki page" => "Wiki löschen", - /*0175*/"list of blocked pages" => "Gesperrte Seiten", - /*0176*/"special pages" => "Sonderseiten", - /*0177*/"Actions carried out by administrators" => "Administratoren durchgeführten Aktionen anzeigen", - /*0178*/"No bluetooth devices found" => "Es wurden keine Bluetooth-Geräte gefunden", - /*0179*/"learn how to find it" => "Wie kann man das herausfinden?", - /*0180*/"Download the xml file of all the bluetooth devices in the database" => "Alle enthaltenen Bluetooth-Geräte herunterladen (XML-Format)", - /*0181*/"License information" => "Informationen zur Lizenz", - /*0182*/"No acquisition card found" => "Es wurde keine TV/Video/FM-Erweiterung gefunden", - /*0183*/"No fingerprint readers found" => "Es wurde kein Fingerabdruck-Lesegerät gefunden", - /*0184*/"Download the xml file of all the acquisition cards in the database" => "Alle enthaltenen TV/Video/FM-Erweiterungen herunterladen (XML-Format", - /*0185*/"Download the xml file of all the fingerprint readers in the database" => "Alle enthaltenen Fingerabdruck-Lesegeräte herunterladen (XML-Format", - /*0186*/"architecture" => "Architektur", - /*0187*/"Add here the device name as written on the device itself or on the device box. Add it only if it is different from the model name already inserted inside the above entry. Add the new name in such a way that there is one name per row." => "Fügen Sie hier den Gerätenamen hinzu, wie auf dem Gerät selbst oder auf der Verpackung angegeben, jedoch nur, wenn dieser von der bereits genannten Modellbezeichnung abweicht (ein Gerätename/pro Zeile).", - /*0188*/"Write here the model name obtained by the lspci or lsusb command." => "Geben Sie hier die vom Befehl „lspci“ oder „lsusb“ ermittelte Modellbezeichnung ein.", - /*0189*/"This is the name of the chipset of your device." => "Dies ist der Name des Chipsatzes Ihres Gerätes.", - /*0190*/"possible other names of the device" => "Andere mögliche Gerätenamen", - ), - 'gr' => array - ( - /*0001*/"Search one device in the archive" => "Αναζήτηση μίας συσκευής από το αρχείο", - /*0002*/"hardware type" => "Τύπος υλικού", - /*0003*/"the model name contains" => "το όνομα του μοντέλου περιλαμβάνει", - /*0004*/"List of issues" => "Κατάλογος ερωτήσεων", - /*0005*/"TITLE" => "ΤΙΤΛΟΣ", - /*0006*/"TOPIC" => "ΘΕΜΑ", - /*0007*/"OPENED BY" => "ΑΝΟΙΧΘΗΚΕ ΑΠΟ ΤΟΝ", - /*0008*/"DATE" => "ΔΕΔΟΜΕΝΑ", - /*0009*/"REPLIES" => "ΜΗΝΥΜΑΤΑ", - /*0010*/"PRIORITY" => "ΠΡΟΤΕΡΑΙΟΤΗΤΑ", - /*0011*/"STATUS" => "ΚΑΤΑΣΤΑΣΗ", - /*0012*/"You have to" => "Πρέπει να εκτελέσετε το", - /*0013*/"in order to submit an issue" => "για να μπορείτε να ανοίξετε ένα νέο θέμα", - /*0014*/"in order to add a message" => "για να μπορείτε να στείλετε ένα μήνυμα", - /*0015*/"Description" => "Περιγραφή", - /*0016*/"Messages" => "Μηνύματα", - /*0017*/"this message has been deleted" => "Αυτό το μήνυμα διεγράφη", - /*0018*/"in order to submit a message to this issue" => "Για να προσθέσετε ένα μήνυμα σε αυτό το θέμα", - /*0019*/"model name" => "Όνομα του μοντέλου", - /*0020*/"model type" => "Τύπος συσκευής", - /*0021*/"year of commercialization" => "Έτος εμπορικής κυκλοφορίας", - /*0022*/"Results of the search" => "Αποτελέσματα της αναζήτησης", - /*0023*/"page list" => "Κατάλογος σελίδων", - /*0024*/"No devices found" => "Δεν βρέθηκε καμία συσκευή", - /*0025*/"vendor" => "Κατασκευαστής", - /*0026*/"compatibility" => "Συμβατότητα", - /*0027*/"year" => "Έτος", - /*0028*/"subtype" => "Υποτύπος", - /*0029*/"sort by" => "Κατάταξη ανά", - /*0030*/"interface" => "Διεπαφή", - /*0031*/"does it work?" => "Λειτουργεί;", - /*0032*/"preview of the message" => "Προεπισκόπηση του μυνήματος", - /*0033*/"preview of the new issue message" => "Προεπισκόπηση του μηνύματος για το νέο θέμα", - /*0034*/"Add a message to this issue" => "Προσθήκη ενός μηνύματος σε αυτό το θέμα", - /*0035*/"Add a new issue" => "Προσθήκη ενός νέου θέματος", - /*0036*/"MESSAGE" => "ΜΗΝΥΜΑ", - /*0037*/"there are no messages" => "Δεν υπάρχουν καθόλου μηνύματα", - /*0038*/"No notebooks found" => "Δεν βρέθηκε κανένα notebook", - /*0039*/"subtype (notebook, netbook, tablet)" => "Υποτύπος (notebook, netbook, tablet)", - /*0040*/"compatibility with free software" => "Συμβατότητα με το ελεύθερο λογισμικό", - /*0041*/"view the other specifications" => "Δείτε τις άλλες προδιαγραφές", - /*0042*/"model" => "Μοντέλο", - /*0043*/"model id" => "Κωδικός id του μοντέλου", - /*0044*/"tested on" => "Δοκιμάσθηκε με", - /*0045*/"tested with the following kernel libre" => "Δοκιμάσθηκε με τον εξής ελεύθερο πυρήνα", - /*0046*/"video card model" => "Μοντέλο της κάρτας γραφικών", - /*0047*/"wifi model" => "Μοντέλο της κάρτας wifi", - /*0048*/"GNU/Linux distribution used for the test" => "Διανομή GNU/Linux που χρησιμοποιήθηκε για την δοκιμή", - /*0049*/"does the video card work?" => "Λειτουργεί η κάρτα γραφικών;", - /*0050*/"does the wifi card work?" => "Λειτουργεί η κάρτα wifi?", - /*0051*/"Description: (write here all the useful information)" => "Περιγραφή (γράψτε εδώ όλες τις χρήσιμες πληροφορίες)", - /*0052*/"discover all the wiki tags" => "Ανακαλύψτε όλες τις ετικέτες/tag του wiki", - /*0053*/"Fields marked with * are mandatory" => "Τα πεδία που επισημαίνονται με * είναι υποχρεωτικά", - /*0054*/"No printers found" => "Δεν βρέθηκε κανένας εκτυπωτής", - /*0055*/"interface" => "Διεπαφή", - /*0056*/"VendorID:ProductID code of the device" => "Κωδικός Κατασκευαστή:Κωδικός Προϊόντος", - /*0057*/"free driver used" => "Ελεύθεροι οδηγοί/driver που χρησιμοποιήθηκαν", - /*0058*/"set not-specified if not sure" => "Επιλέξτε το μη-διευκρινισμένο αν δεν είστε σίγουρος/η", - /*0059*/"see the help page or leave blank if you are not sure" => "Δείτε την σελίδα βοήθειας ή αφήστε κενό αν δεν είστε σίγουρος/η", - /*0060*/"No scanners found" => "Δεν βρέθηκε κανένας σαρωτής", - /*0061*/"No video cards found" => "Δεν βρέθηκε καμία κάρτα γραφικών", - /*0062*/"how does it work with free software?" => "πώς δουλεύει με το ελεύθερο λογισμικό;", - /*0063*/"No wifi cards found" => "Δεν βρέθηκε καμία κάρτα wifi", - /*0064*/"does it work with free software?" => "Λειτουργεί με ελεύθερο λογισμικό;", - /*0065*/"differences in the entry" => "Διαφορές στην καταχώρηση", - /*0066*/"No 3G cards found" => "Δεν βρέθηκε καμία κάρτα 3G", - /*0067*/"Please specify in the below description entry the Internet Service Provider (ISP) and the country where the service is provided" => "Παρακαλώ διευκρινείστε στο παρακάτω πεδίο περιγραφής τον πάροχο υπηρεσιών Internet (ISP) και τη Χώρα στην οποία παρέχονται οι υπηρεσίες", - /*0068*/"webcam model" => "Μοντέλο της webcam", - /*0069*/"does it have a free BIOS?" => "Έχει ελεύθερο BIOS;", - /*0070*/"does the webcam work?" => "Λειτουργεί η webcam;", - /*0071*/"Current revision" => "Τρέχουσα αναθεώρηση", - /*0072*/"Hello" => "Γεια σας", - /*0073*/"Your" => "Ο ", - /*0074*/"control panel" => "Πίνακας ελέγχου", - /*0075*/"create new account" => "Δημιουργήστε έναν λογαριασμό", - /*0076*/"request new password" => "Ζητήστε έναν νέο κωδικό πρόσβασης", - /*0077*/"website statistics" => "Στατιστικές του ιστοτόπου", - /*0078*/"hardware in the database" => "Υλικό/hardware στη βάση δεδομένων", - /*0079*/"users logged" => "Συνδεδεμένοι χρήστες", - /*0080*/"Watch your public profile" => "Δείτε το δημόσιο προφίλ σας", - /*0081*/"Edit your profile" => "Τροποποιήστε το προφίλ σας", - /*0082*/"Change your e-mail address" => "Αλλάξτε την ηλεκτρονική σας διεύθυνση", - /*0083*/"Change your password" => "Αλλάξτε τον κωδικό σας πρόσβασης", - /*0084*/"Delete your account" => "Διαγράψτε τον λογαριασμό σας", - /*0085*/"choose the username" => "Επιλέξτε το όνομα χρήστη", - /*0086*/"characters allowed" => "Αποδεκτοί χαρακτήρες", - /*0087*/"your e-mail address" => "Η ηλεκτρονική σας διεύθυνση", - /*0088*/"necessary to confirm the registration" => "Απαραίτητο για την επιβεβαίωση της εγγραφής", - /*0089*/"choose the password" => "Επιλέξτε τον κωδικό πρόσβασης", - /*0090*/"confirm the password" => "Επιβεβαιώστε τον κωδικό πρόσβασης", - /*0091*/"write the code above" => "Γράψτε τον παραπάνω κωδικό", - /*0092*/"write your username" => "Γράψτε το όνομα χρήστη", - /*0093*/"Actions carried out by moderators" => "Ενέργειες που έγιναν από τους συντονιστές/moderators", - /*0094*/"meet" => "γνωρίστε", - /*0095*/"Public profile of" => "Δημόσιο προφίλ του/της", - /*0096*/"See all the contributions of" => "Δείτε όλες τις συνεισφορές του/της", - /*0097*/"My website" => "Ο προσωπικός μου ιστότοπος", - /*0098*/"My real name" => "Το πραγματικό μου όνομα", - /*0099*/"My e-mail address" => "Η ηλεκτρονική μου διεύθυνση", - /*0100*/"I'm from" => "Είμαι από το/την", - /*0101*/"Birthdate" => "Ημερομ. γεννήσεως", - /*0102*/"My favourite distribution" => "Η αγαπημένη μου διανομή", - /*0103*/"Free software projects I'm working on" => "Projects ελεύθερου Λογισμικού για τα οποία εργάζομαι", - /*0104*/"My description" => "Η περιγραφή μου", - /*0105*/"contributions" => "Συνεισφορές", - /*0106*/"contributions of" => "Συνεισφορές του/της", - /*0107*/"No sound cards found" => "Δεν βρέθηκε καμία κάρτα ήχου", - /*0108*/"LAST UPDATE" => "ΤΕΛΕΥΤΑΙΑ ΕΝΗΜΕΡΩΣΗ", - /*0109*/"search by" => "Αναζήτηση για", - /*0110*/"analyze the output of the lspci command" => "Ανάλυση της εξόδου της εντολής lscpi", - /*0111*/"paste the output of the lspci command" => "Επικόλληση της εξόδου της εντολής lspci", - /*0112*/"works, but without 3D acceleration" => "Λειτουργεί, αλλά χωρίς επιτάχυνση 3D", - /*0113*/"the text submitted by you does not seem to be the lspci -vmmnn output. Please check the text and try again" => "το κείμενο που υποβάλλατε δεν μοιάζει με την έξοδο της εντολής lspci -vmmnn. Παρακαλώ επανελέγξτε το κείμενο και ξαναδοκιμάστε", - /*0114*/"Search form" => "Φόρμα αναζήτησης", - /*0115*/"write here the output of lspci -vmmnn" => "Γράψτε εδώ την έξοδο της εντολής lspci -vmmnn", - /*0116*/"The following devices has been found in the database" => "Βρέθηκαν οι ακόλουθες συσκευές στη βάση δεδομένων", - /*0117*/"yes" => "ναι", - /*0118*/"no" => "όχι", - /*0119*/"The following devices has not been found in the database" => "Οι εξής συσκευές δεν βρέθηκαν στη βάση δεδομένων", - /*0120*/"can you please insert them?" => "Μπορείτε παρακαλώ να τις εισαγάγετε;", - /*0121*/"No webcams found" => "Δεν βρέθηκε καμία webcam", - /*0122*/"Download the xml file of all the database" => "Μεταφορτώστε το αρχείο xml όλης της βάσης δεδομένων", - /*0123*/"Download the xml file of all the notebooks in the database" => "Μεταφορτώστε το αρχείο xml όλων των notebook που περικλείονται στη βάση δεδομένων", - /*0124*/"Download the xml file of all the wifi cards in the database" => "Μεταφορτώστε το αρχείο xml όλων των καρτών wifi που περικλείονται στη βάση δεδομένων", - /*0125*/"Download the xml file of all the video cards in the database" => "Μεταφορτώστε το αρχείο xml όλων των καρτών γραφικών που περικλείονται στη βάση δεδομένων", - /*0126*/"Download the xml file of all the printers in the database" => "Μεταφορτώστε το αρχείο xml όλων των εκτυπωτών που περικλείονται στη βάση δεδομένων", - /*0127*/"Download the xml file of all the 3G cards in the database" => "Μεταφορτώστε το αρχείο xml όλων των καρτών 3G που περικλείονται στη βάση δεδομένων", - /*0128*/"Download the xml file of all the sound cards in the database" => "Μεταφορτώστε το αρχείο xml όλων των καρτών ήχου που περικλείονται στη βάση δεδομένων", - /*0129*/"Download the xml file of all the webcams in the database" => "Μεταφορτώστε το αρχείο xml όλων των webcam που περικλείονται στη βάση δεδομένων", - /*0130*/"You can download all the h-node database in one unique xml file in order to parse its contents by means of some proper script (for example a Python or Perl or PHP script)" => "Μπορείτε να μεταφορτώσετε την βάση δεδομένων του h-node σε ένα ενιαίο αρχείο xml, για την ανάλυση των περιεχομένων του, με τη χρήση ενός κατάλληλου script (π.χ. ένα script σε Python ή σε Perl ή σε PHP)", - /*0131*/"Download the h-node hardware database in xml format" => "Μεταφορτώστε την βάση δεδομένων του υλικού/hardware του h-node υπό μορφή αρχείου xml", - /*0132*/"Database modifications" => "Τροποποιήσεις βάσης δεδομένων", - /*0133*/"List of the database modifications carried out by users" => "Κατάλογος τροποποιήσεων της βάσης δεδομένων των χρηστών", - /*0134*/"the model" => "το μοντέλο", - /*0135*/"has been inserted by" => "Έχει εισαχθεί από τον/την", - /*0136*/"has been updated by" => "Έχει τροποποιηθεί από τον/την", - /*0137*/"at" => "στις", - /*0138*/"last modifications" => "Τελευταίες τροποποιήσεις", - /*0139*/"watch all modifications" => "Δείτε όλες τις τροποποιήσεις", - /*0140*/"the title" => "ο τίτλος", - /*0141*/"the text of the wiki page" => "Το κείμενο της σελίδας του wiki", - /*0142*/"the wiki page has not been found" => "Η σελίδα του wiki δεν βρέθηκε", - /*0143*/"Page not-found" => "Η σελίδα δεν βρέθηκε", - /*0144*/"Insert" => "Εισαγωγή", - /*0145*/"Update" => "Τροποποίηση", - /*0146*/"History" => "Ιστορία", - /*0147*/"Revision" => "Αναθεώρηση", - /*0148*/"Differences" => "Διαφορές", - /*0149*/"Insert a new wiki page" => "Εισαγωγή μίας νέας σελίδας στο wiki", - /*0150*/"Edit the wiki page" => "Τροποποιήστε την σελίδα του wiki", - /*0151*/"Make current" => "Καταστήστε τρέχουσα την αναθεώρηση", - /*0152*/"I want to make this revision the current revision" => "Θέλω να κάνω αυτή την αναθεώρηση να είναι η τρέχουσα αναθεώρηση", - /*0153*/"Confirm" => "Επιβεβαίωση", - /*0154*/"Make this revision the current revision of the page" => "Κάντε αυτή την αναθεώρηση να είναι η τρέχουσα αναθεώρηση της σελίδας", - /*0155*/"This wiki page has been deleted" => "Αυτή η σελίδα του wiki έχει διαγραφεί", - /*0156*/"Talk" => "Συζήτηση", - /*0157*/"Talk page of the wiki page" => "Σελίδα συζήτησης της σελίδας του wiki", - /*0158*/"a page with the same title already exists" => "Υπάρχει ήδη μία σελίδα με τον ίδιο τίτλο", - /*0159*/"title is too long" => "Ο τίτλος είναι πολύ μεγάλος", - /*0160*/"the page text is too long" => "Το κείμενο της σελίδας είναι πολύ μεγάλο", - /*0161*/"History of the wiki page" => "Ιστορικό της σελίδας του wiki", - /*0162*/"Would you like to insert it?" => "Θα θέλατε να το εισαγάγετε;", - /*0163*/"Wiki modifications" => "Τροποποιήσεις του Wiki", - /*0164*/"List of the wiki modifications carried out by users" => "Κατάλογος των τροποποιήσεων του wiki που επέφεραν οι χρήστες", - /*0165*/"list of pages" => "κατάλογος των σελίδων", - /*0166*/"List of wiki pages" => "Κατάλογος των σελίδων του wiki", - /*0167*/"This wiki page has been blocked" => "Αυτή η σελίδα του wiki έχει εμποδισθεί", - /*0168*/"unblock the wiki page" => "Απελευθερώστε την σελίδα", - /*0169*/"block the wiki page" => "Εμποδίστε την σελίδα του wiki", - /*0170*/"show the wiki page" => "Εμφανείστε την σελίδα του wiki", - /*0171*/"hide the wiki page" => "Κρύψτε την σελίδα του wiki", - /*0172*/"list of deleted pages" => "Κατάλογος σελίδων που έχουν διαγραφεί", - /*0173*/"restore the wiki page" => "Ανακτήστε την σελίδα του wiki", - /*0174*/"delete the wiki page" => "Διαγράψτε την σελίδα", - /*0175*/"list of blocked pages" => "Κατάλογος σελίδων που έχουν εμποδισθεί", - /*0176*/"special pages" => "Ειδικές σελίδες", - /*0177*/"Actions carried out by administrators" => "Ενέργειες που εκτελέσθηκαν από τους διαχειριστές", - /*0178*/"No bluetooth devices found" => "Δεν βρέθηκε καμία συσκευή bluetooth", - /*0179*/"learn how to find it" => "Μάθετε πως να το βρείτε", - /*0180*/"Download the xml file of all the bluetooth devices in the database" => "Μεταφορτώστε το αρχείο xml όλων των συσκευών bluetooth που περικλείονται στη βάση δεδομένων", - /*0181*/"License information" => "Πληροφορίες για την άδεια", - /*0182*/"No acquisition card found" => "Δεν βρέθηκε καμία κάρτα λήψης", - /*0183*/"No fingerprint readers found" => "Δεν βρέθηκε καμία συσκευή ανάγνωσης δακτυλικών αποτυπωμάτων", - /*0184*/"Download the xml file of all the acquisition cards in the database" => "Μεταφορτώστε το αρχείο xml όλων των καρτών λήψης που περικλείονται στη βάση δεδομένων", - /*0185*/"Download the xml file of all the fingerprint readers in the database" => "Μεταφορτώστε το αρχείο xml όλων των συσκευών ανάγνωσης δακτυλικών αποτυπωμάτων που περικλείονται στη βάση δεδομένων", - /*0186*/"architecture" => "Αρχιτεκτονική", - /*0187*/"Add here the device name as written on the device itself or on the device box. Add it only if it is different from the model name already inserted inside the above entry. Add the new name in such a way that there is one name per row." => "Προσθέστε εδώ το όνομα της συσκευής έτσι όπως προκύπτει γραμμένο πάνω στην ίδια τη συσκευή ή στη συσκευασία της. Προσθέστε το όνομα αυτό μόνον αν είναι διαφορετικό από το όνομα του μοντέλου που έχει ήδη εισαχθεί στο προηγούμενο πεδίο. Προσθέστε το νέο όνομα έτσι ώστε να υπάρχει ένα όνομα ανά σειρά.", - /*0188*/"Write here the model name obtained by the lspci or lsusb command." => "Γράψτε εδώ το όνομα του μοντέλου που επιστρέφει η εντολή lspci είτε η εντολή lsusb.", - /*0189*/"This is the name of the chipset of your device." => "Αυτό είναι το όνομα του chipset της συσκευής σας.", - /*0190*/"possible other names of the device" => "Άλλα πιθανά ονόματα της συσκευής", - /*0191*/"Description entry preview" => "Προεπισκόπηση του πεδίου περιγραφής", - /*0192*/"Page preview" => "Προεπισκόπηση της σελίδας", - /*0193*/"This device page has been hidden" => "Η σελίδα αυτής της συσκευής έχει αποκρυφθεί", - /*0194*/"restore the device page" => "Ανάκτηση της σελίδας της συσκευής", - /*0195*/"hide the device page" => "Απόκρυψη της σελίδας της συσκευής", - /*0196*/"Download the xml file of all the scanners in the database" => "Μεταφορτώστε το αρχείο xml όλων των σαρωτών που περικλείονται στη βάση δεδομένων", - /*0197*/"Special pages for administrators" => "Ειδικές σελίδες για διαχειριστές", - /*0198*/"Special pages for moderators" => "Ειδικές σελίδες για τους συντονιστές/moderators", - /*0199*/"see the page" => "Δείτε την σελίδα", - /*0200*/"hidden device pages" => "Κρυφές σελίδες των συσκευών", - /*0201*/"panel" => "πάνελ", - /*0202*/"List of hidden device pages" => "Κατάλογος των κρυφών σελίδων των συσκευών", - /*0203*/"approve the device page" => "Έγκριση της σελίδας της συσκευής", - /*0204*/"This device page has not been approved yet" => "Αυτή η σελίδα συσκευής δεν έχει ακόμη εγκριθεί", - /*0205*/"Device pages that have to be approved" => "Σελίδες συσκευών προς έγκριση", - /*0206*/"The device page has to be approved by an administrator of the website" => "Αυτή η σελίδα συσκευής πρέπει να εγκριθεί από έναν διαχειριστή της ιστοσελίδας", - /*0207*/"permanently delete the device page" => "Διαγράψτε οριστικά την σελίδα συσκευής", - /*0208*/"This page has been permanently deleted by an administrator of the website" => "Αυτή η σελίδα έχει διαγραφεί οριστικά από έναν διαχειριστή της ιστοσελίδας", - /*0209*/"No ethernet devices found" => "Δεν βρέθηκε καμία κάρτα ethernet", - /*0210*/"free BIOS" => "Ελεύθερο BIOS", - /*0211*/"You are not a registered user or you have not logged in. Your contribution won't be published until an administrator approves it. If you want your contributions to be automatically published please log in or create an account." => "Δεν είστε ένας εγγεγραμμένος χρήστης, ή δεν κάνατε login. Η συνεισφορά σας δεν θα δημοσιευθεί μέχρι να εγκριθεί από έναν διαχειριστή. Αν επιθυμείτε να δημοσιεύεται αυτομάτως η συνεισφορά σας, τότε, παρακαλώ κάντε login, ή δημιουργήστε έναν λογαριασμό.", - /*0212*/"has been inserted by an anonymous user, it has to be approved by an administrator in order to be published" => "έχει εισαχθεί από έναν ανώνυμο χρήστη, και θα πρέπει πρώτα να εγκριθεί από έναν διαχειριστή για να δημοσιευθεί", - /*0213*/"you can also subscribe to the feed in order to receive the new modifications that need a moderation" => "μπορείτε και να εγγραφείτε στη ροή νέων, για να λαμβάνετε τις νέες τροποποιήσεις που χρειάζονται συντονισμό", - /*0214*/"you need javascript enabled in order to correctly use the language's tabs (see below)" => "πρέπει να έχετε ενεργοποιήσει την Javascript για να χρησιμοποιείτε σωστά τις καρτέλες γλώσσας (δείτε πιο κάτω)", - /*0215*/"yes" => "Ναι", - /*0216*/"works with 3D acceleration" => "Λειτουργεί με επιτάχυνση 3D", - /*0217*/"works, but without 3D acceleration" => "Λειτουργεί, αλλά χωρίς επιτάχυνση 3D", - /*0218*/"it does not work" => "Δεν λειτουργεί", - /*0219*/"Notebooks, netbooks, tablet PC" => "Φορητοί υπολογιστές, Υπο-φορητοί, Ταμπλέτες", - /*0220*/"Wifi cards" => "Κάρτες wifi", - /*0221*/"Video cards" => "Κάρτες γραφικών", - /*0222*/"Printers and multifunction" => "Εκτυπωτές και πολυεργαλεία", - /*0223*/"Scanners" => "Σαρωτές", - /*0224*/"3G cards" => "Κάρτες 3G", - /*0225*/"Sound cards" => "Κάρτες ήχου", - /*0226*/"Webcams" => "Διαδικτυακές κάμερες Webcam", - /*0227*/"Bluetooth devices" => "Συσκευές bluetooth", - /*0228*/"TV/Video/FM acquisition cards" => "Κάρτες λήψης TV/Video/FM", - /*0229*/"Fingerprint readers" => "Συσκευές ανγνώρισης δακτυλικών αποτυπωμάτων", - /*0230*/"Ethernet cards" => "Κάρτες ethernet", - /*0231*/"Hardware" => "Υλικό/ Hardware", - /*0232*/"Issues" => "Προβλήματα", - /*0233*/"Search" => "Αναζήτηση", - /*0234*/"News" => "Νέα", - /*0235*/"Download" => "Μεταφόρτωση", - /*0236*/"Help" => "Βοήθεια", - /*0237*/"List of" => "Κατάλογος των", - /*0238*/"talk messages" => "μυνήματα συζήτησης", - /*0239*/"History" => "Ιστορικό", - /*0240*/"Revision" => "Αναθεώρηση", - /*0241*/"This is an old revision of this page, as edited by" => "Αυτή είναι μια παλιά αναθεώρηση της σελίδας, έτσι όπως τροποποιήθηκε από τον/την", - /*0242*/"It may differ significantly from the" => "Μπορεί να διαφέρει σημαντικά από την", - /*0243*/"Differences between the revision of" => "Διαφορές ανάμεσα στην αναθεώρηση του/της", - /*0244*/"created by" => "που δημιουργήθηκε από τον/την", - /*0245*/"and the revision of" => "και την αναθεώρηση του/της", - /*0246*/"Notice: the text in red has been deleted from the previous revision, the text in green has been added in this revision and the text in gray has not been changed." => "Σημείωση: το κείμενο με κόκκινο έχει διαγραφεί από την προηγούμενη αναθεώρηση, το κείμενο με πράσινο έχει προστεθεί σε αυτή την αναθεώρηση και το κείμενο με γκρι δεν έχει αλλαχθεί", - /*0247*/"Insert" => "Εισαγωγή", - /*0248*/"Edit" => "Τροποποίηση", - /*0249*/"Talk page" => "Σελίδα συζήτησης", - /*0250*/"Download the xml file of all the ethernet cards in the database" => "Μεταφορτώστε το αρχείο xml όλων των καρτών ethernet που περικλείονται στη βάση δεδομένων", - /*0251*/"No SD card readers found" => "Δεν βρέθηκε καμία συσκευή ανάγνωσης καρτών SD", - /*0252*/"SD card readers" => "Συσκευές ανάγνωσης καρτών SD", - /*0253*/"Download the xml file of all the SD card readers in the database" => "Μεταφορτώστε το αρχείο xml όλων των συσκευών ανάγνωσης καρτών SD που περικλείονται στη βάση δεδομένων", - /*0254*/"There are no devices in the database with the vendorid:productid code specified by you." => "Δεν υπάρχουν συσεκυές στη βάση δεδομένων με τον κωδικό vendorid:productid που να διευκρινίσθηκε από εσάς", - /*0255*/"Would you like to add it to the database?" => "Θα θέλατε να το προσθέσετε στη βάση δεδομεων;", - /*0256*/"can free operating systems be installed?" => "μπορούν να εγκατασταθούν ελεύθερα λειτοργικά συστήματα;", - /*0257*/"This issue has been deleted" => "Αυτό το πρόβλημα έχει διαγραφεί", - /*0258*/"hidden for those who are not moderators" => "κρυφό για εκείνους που δεν είναι συντονιστές", - /*0259*/"This issue is hidden for all the users that are not moderators" => "Αυτό το πρόβλημα είναι κρυφό για όλους τους χρήστες που δεν είναι συντονιστές", - /*0260*/"hide the issue" => "Κρύψτε το πρόβλημα", - /*0261*/"show the issue" => "Εμφάνιση του προβλήματος", - /*0262*/"open the issue again" => "Ανοίξτε το πρόβλημα ξανά", - /*0263*/"close the issue" => "Κλείστε το πρόβλημα", - /*0264*/"This issue is closed" => "Αυτό το πρόβλημα έχει κλείσει", - /*0265*/"This issue is opened" => "Αυτό το πρόβλημα είναι ανοικτό", - /*0266*/"does it adopt any techniques to track users?" => "Υιοθετεί οποιεσδήποτε τεχνικές για παρακολούθηση των χρηστών;", - /*0267*/"Actions carried out by users" => "Ενέργειες που εκτελέσθηκαν από τους χρήστες", - /*0268*/"No modems found" => "Δεν βρέθηκε κανένα modem", - /*0269*/"Download the xml file of all the modems in the database" => "Μεταφορτώστε το αρχείο xml όλων των συσκευών modem που περιλαμβάνονται στη βάση δεδομένων", - /*0270*/"Modems and ADSL cards" => "Συσκευές Modem και κάρτες ADSL", - /*0271*/"Table of contents" => "Πίνακας περιεχομένων", - /*0272*/"by" => "Δημιουργήθηκε από τον/την", - /*0273*/"Add a message" => "Προσθέστε ένα μήνυμα", - /*0274*/"Save" => "Αποθήκευση", - /*0275*/"Revision of the wiki page" => "Αναθεώρηση της σελίδας του wiki", - /*0276*/"Preview" => "Προεπισκόπηση", - /*0277*/"January" => "Ιανουάριος", - /*0278*/"February" => "Φεβρουάριος", - /*0279*/"March" => "Μάρτιος", - /*0280*/"April" => "Απρίλιος", - /*0281*/"May" => "Μάιος", - /*0282*/"June" => "Ιούνιος", - /*0283*/"July" => "Ιούλιος", - /*0284*/"August" => "Αύγουστος", - /*0285*/"September" => "Σεπτέμβριος", - /*0286*/"October" => "Οκτώβριος", - /*0287*/"November" => "Νοέμβριος", - /*0288*/"December" => "Δεκέμβριος", - /*0289*/"not-specified" => "μη-διευκρινισμένο", - /*0290*/"last-inserted" => "τελευταία-εισαγωγή", - /*0291*/"last inserted" => "τελευταία εισαγωγή", - /*0292*/"alphabetically" => "κατά αλφαβητική σειρά", - /*0293*/"alphabetically-desc" => "κατά-φθίνουσα-αλφαβητική-σειρά", - /*0294*/"alphabetically desc" => "κατά φθίνουσα αλφαβητική σειρά", - /*0295*/"undef" => "αδιευκρ", - /*0296*/"All" => "Όλοι", - /*0297*/"inkjet" => "ψεκασμού μελάνης", - /*0298*/"A-Full" => "A-Πλήρης", - /*0299*/"B-Partial" => "B-Μερικός", - /*0300*/"C-None" => "C-Κανείς", - /*0301*/"A-platinum" => "A-Πλατινένιος", - /*0302*/"B-gold" => "B-χρυσός", - /*0303*/"C-silver" => "C-αργυρός", - /*0304*/"D-bronze" => "D-χάλκινος", - /*0305*/"E-garbage" => "E-σκουπίδια", - /*0306*/"not specified how it works" => "Δεν διευκρινίσθηκε πως λειτουργεί", - /*0307*/"there is no wifi card" => "Δεν υπάρχει κάρτα wifi", - /*0308*/"there is no webcam" => "Δεν υπάρχει καμία διαδικτυακή κάμερα", - /*0309*/"it works" => "Λειτουργεί", - /*0310*/"does_not_work" => "Δεν λειτουργεί", - /*0311*/"works_without_3D" => "Λειτουργεί χωρίς 3D", - /*0312*/"works_with_3D" => "Λειτουργεί με 3D", - /*0313*/"list of languages" => "Κατάλογος γλωσσών", - /*0314*/"Choose the language" => "Επιλέξτε μία γλώσσα", - /*0315*/"back" => "πίσω", - /*0316*/"next" => "τα επόμενα", - /*0317*/"previous" => "τα προηγούμενα", - /*0318*/"type" => "τύπος", - ), - 'pt' => array - ( - /*0001*/"Search one device in the archive" => "Procurar um dispositivo no arquivo", - /*0002*/"hardware type" => "Tipo de hardware", - /*0003*/"the model name contains" => "O nome do modelo contém", - /*0004*/"List of issues" => "Lista de discussões", - /*0005*/"TITLE" => "TÍTULO", - /*0006*/"TOPIC" => "TÓPICO", - /*0007*/"OPENED BY" => "ABERTO POR", - /*0008*/"DATE" => "DATA", - /*0009*/"REPLIES" => "RESPOSTAS", - /*0010*/"PRIORITY" => "PRIORIDADE", - /*0011*/"STATUS" => "STATUS", - /*0012*/"You have to" => "Você precisa", - /*0013*/"in order to submit an issue" => "para poder cadastrar uma discussão", - /*0014*/"in order to add a message" => "para pode adicionar uma mensagem", - /*0015*/"Description" => "Descrição", - /*0016*/"Messages" => "Mensagens", - /*0017*/"this message has been deleted" => "esta mensagem foi excluída", - /*0018*/"in order to submit a message to this issue" => "para poder enviar uma mensagem para esta discussão", - /*0019*/"model name" => "nome do modelo", - /*0020*/"model type" => "tipo de modelo", - /*0021*/"year of commercialization" => "ano de comercialização", - /*0022*/"Results of the search" => "Resultados da pesquisa", - /*0023*/"page list" => "página", - /*0024*/"No devices found" => "Nenhum dispositivo encontrado", - /*0025*/"vendor" => "fabricante", - /*0026*/"compatibility" => "compatibilidade", - /*0027*/"year" => "ano", - /*0028*/"subtype" => "subtipo", - /*0029*/"sort by" => "ordenar por", - /*0030*/"interface" => "interface", - /*0031*/"does it work?" => "funciona?", - /*0032*/"preview of the message" => "visualização da mensagem", - /*0033*/"preview of the new issue message" => "visualização da mensagem da nova discussão", - /*0034*/"Add a message to this issue" => "Adicionar uma mensagem a esta discussão", - /*0035*/"Add a new issue" => "Adicionar uma nova discussão", - /*0036*/"MESSAGE" => "MENSAGEM", - /*0037*/"there are no messages" => "não há mensagens", - /*0038*/"No notebooks found" => "Nenhum notebook encontrado", - /*0039*/"subtype (notebook, netbook, tablet)" => "subtipo (notebook, netbook, tablet)", - /*0040*/"compatibility with free software" => "compatibilidade com software livre", - /*0041*/"view the other specifications" => "exibir as outras especificações", - /*0042*/"model" => "Modelo", - /*0043*/"model id" => "ID do modelo", - /*0044*/"tested on" => "testado com", - /*0045*/"tested with the following kernel libre" => "testado com o seguinte kernel livre", - /*0046*/"video card model" => "modelo da placa de vídeo", - /*0047*/"wifi model" => "modelo da placa wifi", - /*0048*/"GNU/Linux distribution used for the test" => "distribuição GNU/Linux usada para teste", - /*0049*/"does the video card work?" => "a placa de vídeo funciona?", - /*0050*/"does the wifi card work?" => "a placa wifi funciona?", - /*0051*/"Description: (write here all the useful information)" => "Descrição (escreva todas as informações que achar útil)", - /*0052*/"discover all the wiki tags" => "explore todas as tags da wiki", - /*0053*/"Fields marked with * are mandatory" => "Campos marcados com * são obrigatórios", - /*0054*/"No printers found" => "Nenhuma impressora encontrada", - /*0055*/"interface" => "interface", - /*0056*/"VendorID:ProductID code of the device" => "código VendorID:ProductID do dispositivo", - /*0057*/"free driver used" => "driver livre utilizado", - /*0058*/"set not-specified if not sure" => "defina como não-especificado se não tiver certeza", - /*0059*/"see the help page or leave blank if you are not sure" => "leia a página de ajuda ou deixe em branco se não tiver certeza", - /*0060*/"No scanners found" => "Nenhum scanner encontrado", - /*0061*/"No video cards found" => "Nenhuma placa de vídeo encontrada", - /*0062*/"how does it work with free software?" => "como ele funciona com software livre?", - /*0063*/"No wifi cards found" => "Nenhuma placa wifi encontrada", - /*0064*/"does it work with free software?" => "funciona com software livre?", - /*0065*/"differences in the entry" => "diferenças no campo", - /*0066*/"No 3G cards found" => "Nenhum dispositivo 3G encontrado", - /*0067*/"Please specify in the below description entry the Internet Service Provider (ISP) and the country where the service is provided" => "Indique no campo de descrição abaixo o Provedor de Acesso à Internet (ISP) e o país onde o serviço é prestado", - /*0068*/"webcam model" => "modelo da webcam", - /*0069*/"does it have a free BIOS?" => "Tem uma BIOS livre?", - /*0070*/"does the webcam work?" => "A webcam funciona?", - /*0071*/"Current revision" => "Versão atual", - /*0072*/"Hello" => "Olá", - /*0073*/"Your" => "Seu", - /*0074*/"control panel" => "Painel de controle", - /*0075*/"create new account" => "Criar uma nova conta", - /*0076*/"request new password" => "Solicitar uma nova senha", - /*0077*/"website statistics" => "Estatísticas da página Web", - /*0078*/"hardware in the database" => "O hardware no banco de dados", - /*0079*/"users logged" => "usuários on-line", - /*0080*/"Watch your public profile" => "Veja o seu perfil público", - /*0081*/"Edit your profile" => "Editar o seu perfil", - /*0082*/"Change your e-mail address" => "Alterar o seu endereço de e-mail", - /*0083*/"Change your password" => "Alterar a sua senha", - /*0084*/"Delete your account" => "Excluir a sua conta", - /*0085*/"choose the username" => "escolha o nome de usuário", - /*0086*/"characters allowed" => "caracteres permitidos", - /*0087*/"your e-mail address" => "seu endereço de e-mail", - /*0088*/"necessary to confirm the registration" => "é necessário confirmar o registro", - /*0089*/"choose the password" => "escolha a senha", - /*0090*/"confirm the password" => "confirme a senha", - /*0091*/"write the code above" => "digite o código acima", - /*0092*/"write your username" => "digite o seu nome de usuário", - /*0093*/"Actions carried out by moderators" => "Ações realizadas pelos moderadores", - /*0094*/"meet" => "reunir", - /*0095*/"Public profile of" => "Perfil público de", - /*0096*/"See all the contributions of" => "Veja todas as contribuições de", - /*0097*/"My website" => "Minha página da Web", - /*0098*/"My real name" => "Meu nome verdadeiro", - /*0099*/"My e-mail address" => "Meu endereço de e-mail", - /*0100*/"I'm from" => "Sou de", - /*0101*/"Birthdate" => "Data de nascimento", - /*0102*/"My favourite distribution" => "Minha distribuição favorita", - /*0103*/"Free software projects I'm working on" => "Projetos de software livre que eu colaboro", - /*0104*/"My description" => "Minha descrição", - /*0105*/"contributions" => "contribuições", - /*0106*/"contributions of" => "contribuições de", - /*0107*/"No sound cards found" => "Nenhuma placa de som encontrada", - /*0108*/"LAST UPDATE" => "ÚLTIMA ATUALIZAÇÃO", - /*0109*/"search by" => "Pesquisar por", - /*0110*/"analyze the output of the lspci command" => "Analisar o resultado do comando lspci", - /*0111*/"paste the output of the lspci command" => "Cole o resultado do comando lspci", - /*0112*/"works, but without 3D acceleration" => "funciona, mas sem aceleração 3D", - /*0113*/"the text submitted by you does not seem the lspci -vmmnn output. Please check the text and try again" => "o texto enviado por você não parece o resultado do comando lspci -vmmnn. Verifique o texto e tente novamente", - /*0114*/"Search form" => "Formulário de pesquisa", - /*0115*/"write here the output of lspci -vmmnn" => "digite o resultado do comando lspci -vmmnn", - /*0116*/"The following devices has been found in the database" => "Os dispositivos a seguir foram encontrados no banco de dados", - /*0117*/"yes" => "sim", - /*0118*/"no" => "não", - /*0119*/"The following devices has not been found in the database" => "Os dispositivos a seguir não foram encontrados no banco de dados", - /*0120*/"can you please insert them?" => "Você pode inseri-los?", - /*0121*/"No webcams found" => "Nenhuma webcam encontrada", - /*0122*/"Download the xml file of all the database" => "Baixar o arquivo xml do banco de dados completo", - /*0123*/"Download the xml file of all the notebooks in the database" => "Baixar o arquivo xml de todos os notebooks existentes no banco de dados", - /*0124*/"Download the xml file of all the wifi cards in the database" => "Baixar o arquivo xml de todas as placas wifi existentes no banco de dados", - /*0125*/"Download the xml file of all the video cards in the database" => "Baixar o arquivo xml de todas as placas de vídeo existentes no banco de dados", - /*0126*/"Download the xml file of all the printers in the database" => "Baixar o arquivo xml de todas as impressoras existentes no banco de dados", - /*0127*/"Download the xml file of all the 3G cards in the database" => "Baixar o arquivo xml de todos os dispositivos 3G existentes no banco de dados", - /*0128*/"Download the xml file of all the sound cards in the database" => "Baixar o arquivo xml de todas as placas de som existentes no banco de dados", - /*0129*/"Download the xml file of all the webcams in the database" => "Baixar o arquivo xml de todas as webcams existentes no banco de dados", - /*0130*/"You can download all the h-node database in one unique xml file in order to parse its contents by means of some proper script (for example a Python or Perl or PHP script)" => "Você pode baixa todo o conteúdo do banco de dados do h-node em um único arquivo xml, a fim de analisar todo o seu conteúdo através de um script adequado (por exemplo, um script em Python, Perl ou PHP)", - /*0131*/"Download the h-node hardware database in xml format" => "Baixar o banco de dados de hardware do h-node em formato xml", - /*0132*/"Database modifications" => "Modificações no banco de dados", - /*0133*/"List of the database modifications carried out by users" => "Lista das modificações no banco de dados realizadas por usuários", - /*0134*/"the model" => "o modelo", - /*0135*/"has been inserted by" => "foi inserido por", - /*0136*/"has been updated by" => "foi atualizado por", - /*0137*/"at" => "em", - /*0138*/"last modifications" => "últimas modificações", - /*0139*/"watch all modifications" => "ver todas as modificações", - /*0140*/"the title" => "o título", - /*0141*/"the text of the wiki page" => "o texto da página wiki", - /*0142*/"the wiki page has not been found" => "a página wiki não foi encontrada", - /*0143*/"Page not-found" => "Página não encontrada", - /*0144*/"Insert" => "Inserir", - /*0145*/"Update" => "Atualizar", - /*0146*/"History" => "Histórico", - /*0147*/"Revision" => "Versão", - /*0148*/"Differences" => "Diferenças", - /*0149*/"Insert a new wiki page" => "Insere uma nova página wiki", - /*0150*/"Edit the wiki page" => "Edita a página wiki", - /*0151*/"Make current" => "Tornar a atual", - /*0152*/"I want to make this revision the current revision" => "Quero fazer desta versão a atual", - /*0153*/"Confirm" => "Confirmar", - /*0154*/"Make this revision the current revision of the page" => "Tornar esta versão a versão atual da página", - /*0155*/"This wiki page has been deleted" => "Esta página wiki foi excluída", - /*0156*/"Talk" => "Discussão", - /*0157*/"Talk page of the wiki page" => "Página de discussão da página wiki", - /*0158*/"a page with the same title already exists" => "já existe uma página com o mesmo título", - /*0159*/"title is too long" => "o título é muito grande", - /*0160*/"the page text is too long" => "o texto da página é muito grande", - /*0161*/"History of the wiki page" => "Histórico da página wiki", - /*0162*/"Would you like to insert it?" => "Gostaria de inseri-la?", - /*0163*/"Wiki modifications" => "Modificações da wiki", - /*0164*/"List of the wiki modifications carried out by users" => "Lista das modificações da wiki realizadas pelos usuários", - /*0165*/"list of pages" => "lista de páginas", - /*0166*/"List of wiki pages" => "Lista de páginas da wiki", - /*0167*/"This wiki page has been blocked" => "Esta página da wiki foi bloqueada", - /*0168*/"unblock the wiki page" => "desbloqueia a página da wiki", - /*0169*/"block the wiki page" => "bloqueia a página da wiki", - /*0170*/"show the wiki page" => "mostra a página da wiki", - /*0171*/"hide the wiki page" => "oculta a página da wiki", - /*0172*/"list of deleted pages" => "lista as páginas excluídas", - /*0173*/"restore the wiki page" => "restaura a página da wiki", - /*0174*/"delete the wiki page" => "exclui a página da wiki", - /*0175*/"list of blocked pages" => "lista de páginas bloqueadas", - /*0176*/"special pages" => "páginas especiais", - /*0177*/"Actions carried out by administrators" => "Ações realizadas pelos administradores", - /*0178*/"No bluetooth devices found" => "Nenhom dispositivo bluetooth encontrado", - /*0179*/"learn how to find it" => "aprenda a encontrá-lo", - /*0180*/"Download the xml file of all the bluetooth devices in the database" => "Baixar o arquivo xml de todos os dispositivos bluetooth existentes no banco de dados", - /*0181*/"License information" => "Informações sobre a licença", - /*0182*/"No acquisition card found" => "Nenhum placa de captura encontrada", - /*0183*/"No fingerprint readers found" => "Nenhum leitor de impressão digital encontrado", - /*0184*/"Download the xml file of all the acquisition cards in the database" => "Baixar o arquivo xml de todas as placas de captura existentes no banco de dados", - /*0185*/"Download the xml file of all the fingerprint readers in the database" => "Baixar o arquivo xml de todos os leitores de impressão digital existentes no banco de dados", - /*0186*/"architecture" => "arquitetura", - /*0187*/"Add here the device name as written on the device itself or on the device box. Add it only if it is different from the model name already inserted inside the above entry. Add the new name in such a way that there is one name per row." => "Adicione aqui o nome do dispositivo como escrito nele próprio ou na caixa. Adicione-o apenas se ele for diferente do nome do dispositivo já inserido no campo acima. Adicione o novo nome em uma única linha.", - /*0188*/"Write here the model name obtained by the lspci or lsusb command." => "Digite aqui o nome do modelo, conforme obtido através do comando lspci ou lsusb.", - /*0189*/"This is the name of the chipset of your device." => "Este é o nome do chipset do seu dispositivo.", - /*0190*/"possible other names of the device" => "outros possíveis nomes do dispositivo", - /*0191*/"Description entry preview" => "Visualização do campo descrição", - /*0192*/"Page preview" => "Visualização da página", - /*0193*/"This device page has been hidden" => "Esta página do dispositivo foi ocultada", - /*0194*/"restore the device page" => "restaurar a página do dispositivo", - /*0195*/"hide the device page" => "ocultar a página do dispositivo", - /*0196*/"Download the xml file of all the scanners in the database" => "Baixar o arquivo xml de todos os scanners existentes no banco de dados", - /*0197*/"Special pages for administrators" => "Páginas especiais para administradores", - /*0198*/"Special pages for moderators" => "Páginas especiais para moderadores", - /*0199*/"see the page" => "veja a página", - /*0200*/"hidden device pages" => "Páginas ocultas do dispositivo", - /*0201*/"panel" => "painel", - /*0202*/"List of hidden device pages" => "Lista das páginas ocultas do dispositivo", - /*0203*/"approve the device page" => "aprovar a página do dispositivo", - /*0204*/"This device page has not been approved yet" => "Esta página do dispositivo ainda não foi aprovada", - /*0205*/"Device pages that have to be approved" => "Páginas do dispositivo que foram aprovadas", - /*0206*/"The device page has to be approved by an administrator of the website" => "A página do dispositivo foi aprovada por um dos administradores da página Web", - /*0207*/"permanently delete the device page" => "excluir permanentemente a página do dispositivo", - /*0208*/"This page has been permanently deleted by an administrator of the website" => "Esta página foi excluída de forma permanente por um dos administradores da página Web", - /*0209*/"No ethernet devices found" => "Nenhum dispositivo ethernet encontrado", - /*0210*/"free BIOS" => "BIOS livre", - /*0211*/"You are not a registered user or you have not logged in. Your contribution won't be published until an administrator approves it. If you want your contributions to be automatically published please log in or create an account." => "Você não é um usuário registrado ou não está autenticado. A sua contribuição não será publicada até que seja aprovada por um administrador. Se você deseja que suas contribuições seja publicadas automaticamente, por favor, autentique-se ou crie uma conta.", - /*0212*/"has been inserted by an anonymous user, it has to be approved by an administrator in order to be published" => "foi inserida por um usuário anônimo, ela precisa ser aprovada por um administrador para ser publicada", - /*0213*/"you can also subscribe to the feed in order to receive the new modifications that need a moderation" => "você também pode assinar a fonte de notícias (feed) para receber novas notificações que precisam de moderação", - /*0214*/"you need javascript enabled in order to correctly use the language's tabs (see below)" => "você precisa ativar o javascript para usar corretamente as abas de idiomas (veja abaixo)", - /*0215*/"yes" => "sim", - /*0216*/"works with 3D acceleration" => "funciona com aceleração 3D", - /*0217*/"works, but without 3D acceleration" => "funciona, mas sem aceleração 3D", - /*0218*/"it does not work" => "não funciona", - /*0219*/"Notebooks, netbooks, tablet PC" => "Notebooks, netbooks, tablet PC", - /*0220*/"Wifi cards" => "Placas wifi", - /*0221*/"Video cards" => "Placas de vídeo", - /*0222*/"Printers and multifunction" => "Impressoras e multifuncionais", - /*0223*/"Scanners" => "Scanners", - /*0224*/"3G cards" => "Dispositivos 3G", - /*0225*/"Sound cards" => "Placas de som", - /*0226*/"Webcams" => "Webcams", - /*0227*/"Bluetooth devices" => "Dispositivos bluetooth", - /*0228*/"TV/Video/FM acquisition cards" => "Placas de captura de vídeo/TV/FM", - /*0229*/"Fingerprint readers" => "Leitores de impressão digital", - /*0230*/"Ethernet cards" => "Placas de rede", - /*0231*/"Hardware" => "Hardware", - /*0232*/"Issues" => "Discussões", - /*0233*/"Search" => "Pesquisar", - /*0234*/"News" => "Novidades", - /*0235*/"Download" => "Download", - /*0236*/"Help" => "Ajuda", - /*0237*/"List of" => "Lista de", - /*0238*/"talk messages" => "mensagens", - /*0239*/"History" => "Histórico", - /*0240*/"Revision" => "Versões", - /*0241*/"This is an old revision of this page, as edited by" => "Esta é uma versão antiga desta página, editada por", - /*0242*/"It may differ significantly from the" => "Ela pode ser muito diferente da", - /*0243*/"Differences between the revision of" => "Diferenças entre a versão de", - /*0244*/"created by" => "criada por", - /*0245*/"and the revision of" => "e a versão de", - /*0246*/"Notice: the text in red has been deleted from the previous revision, the text in green has been added in this revision and the text in gray has not been changed." => "Aviso: o texto em vermelho foi excluído da versão anterior, o texto em verde foi adicionado nesta versão e o texto em cinza não foi alterado.", - /*0247*/"Insert" => "Inserir", - /*0248*/"Edit" => "Editar", - /*0249*/"Talk page" => "Pagina de discussões", - /*0250*/"Download the xml file of all the ethernet cards in the database" => "Baixar o arquivo xml de todas as placas de rede existentes no banco de dados", - /*0251*/"No SD card readers found" => "Nenhum leitor de cartão SD encontrado", - /*0252*/"SD card readers" => "Leitores de cartão SD", - /*0253*/"Download the xml file of all the SD card readers in the database" => "Baixar o arquivo xml de todos os leitores de cartão SD existentes no banco de dados", - /*0254*/"There are no devices in the database with the vendorid:productid code specified by you." => "Não há dispositivos no banco de dados com o código vendorid:productid indicado.", - /*0255*/"Would you like to add it to the database?" => "Gostaria de adicioná-lo ao banco de dados?", - /*0256*/"can free operating systems be installed?" => "É possível instalar sistemas operacionais livres?", - /*0257*/"This issue has been deleted" => "Esta discussão foi excluída", - /*0258*/"hidden for those who are not moderators" => "Oculto para os que não forem moderadores", - /*0259*/"This issue is hidden for all the users that are not moderators" => "Esta discussão foi oculta para todos os usuários que não são moderadores", - /*0260*/"hide the issue" => "ocultar esta discussão", - /*0261*/"show the issue" => "mostrar esta discussão", - /*0262*/"open the issue again" => "abrir a discussão novamente", - /*0263*/"close the issue" => "fechar a discussão", - /*0264*/"This issue is closed" => "Esta discussão está fechada", - /*0265*/"This issue is opened" => "Esta discussão está aberta", - /*0266*/"does it adopt any techniques to track users?" => "Ela adota alguma técnica para controlar usuários?", - /*0267*/"Actions carried out by users" => "Ações realizadas por usuários", - /*0268*/"No modems found" => "Nenhum modem encontrado", - /*0269*/"Download the xml file of all the modems in the database" => "Baixar o arquivo xml de todos os modems existentes no banco de dados", - /*0270*/"Modems and ADSL cards" => "Modems e placas ADSL", - /*0271*/"Table of contents" => "Índice", - /*0272*/"by" => "ciado por", - /*0273*/"Add a message" => "Adicionar uma mensagem", - /*0274*/"Save" => "Salvar", - /*0275*/"Revision of the wiki page" => "Versão da página wiki", - /*0276*/"Preview" => "Visualizar", - /*0277*/"January" => "Janeiro", - /*0278*/"February" => "Fevereiro", - /*0279*/"March" => "Março", - /*0280*/"April" => "Abril", - /*0281*/"May" => "Maio", - /*0282*/"June" => "Junho", - /*0283*/"July" => "Julho", - /*0284*/"August" => "Agosto", - /*0285*/"September" => "Setembro", - /*0286*/"October" => "Outubro", - /*0287*/"November" => "Novembro", - /*0288*/"December" => "Dezembro", - /*0289*/"not-specified" => "não especificado", - /*0290*/"last-inserted" => "inserido por último", - /*0291*/"last inserted" => "inserido por último", - /*0292*/"alphabetically" => "ordem alfabética", - /*0293*/"alphabetically-desc" => "ordem alfabética decrescente", - /*0294*/"alphabetically desc" => "ordem alfabética decrescente", - /*0295*/"undef" => "indefinido", - /*0296*/"All" => "Todos", - /*0297*/"inkjet" => "jato de tinta", - /*0298*/"A-Full" => "A-Total", - /*0299*/"B-Partial" => "B-Parcial", - /*0300*/"C-None" => "C-Nenhuma", - /*0301*/"A-platinum" => "A-Platina", - /*0302*/"B-gold" => "B-Ouro", - /*0303*/"C-silver" => "C-Prata", - /*0304*/"D-bronze" => "D-Bronze", - /*0305*/"E-garbage" => "E-Nenhuma", - /*0306*/"not specified how it works" => "o funcionamento não foi indicado", - /*0307*/"there is no wifi card" => "não há placa wifi", - /*0308*/"there is no webcam" => "não há webcam", - /*0309*/"it works" => "funciona", - /*0310*/"does_not_work" => "não funciona", - /*0311*/"works_without_3D" => "funciona sem 3D", - /*0312*/"works_with_3D" => "funciona com 3D", - /*0313*/"list of languages" => "lista de idiomas", - /*0314*/"Choose the language" => "Escolha o idioma", - /*0315*/"back" => "voltar", - /*0316*/"next" => "próximo", - /*0317*/"previous" => "anterior", - /*0318*/"type" => "tipo", - /*0319*/"contact us" => "entre em contato", - /*0320*/"credits" => "créditos", - /*0321*/"desktop version" => "versão para desktop", - /*0322*/"RAID adapters" => "Adaptadores RAID", - /*0323*/"No RAID adapter found" => "Nenhum adptador RAID encontrado", - /*0324*/"Download the xml file of all the RAID adapters in the database" => "Baixar o arquivo xml de todos os adaptadores RAID existentes no banco de dados", - /*0325*/"No PCMCIA Controller found" => "Nenhum controlador PCMCIA encontrado", - /*0326*/"PCMCIA Controllers" => "Controladores PCMCIA", - /*0327*/"Download the xml file of all the PCMCIA Controllers in the database" => "Baixar o arquivo xml de todos os controladores PCMCIA existentes no banco de dados", - /*0328*/"notebook" => "notebook", - /*0329*/"netbook" => "netbook", - /*0330*/"motherboard" => "placa-mãe", - /*0331*/"tablet" => "tablet", - /*0332*/"netbooks" => "netbook", - /*0333*/"Notebooks" => "Notebook", - /*0334*/"tablet PC" => "Tablet PC", - /*0335*/"motherboards" => "placas-mãe", - /*0336*/"Write a comma-separated list of kernel versions" => "Escreva uma lista de versões do kernel separadas por vírgula", - /*0337*/"Example" => "Exemplo", - /*0338*/"free boot firmware?" => "Firmware com boot livre?", - /*0339*/"can be installed" => "pode ser instalado", - /*0340*/"does it have a free boot firmware (BIOS,UEFI,...) ?" => "tem um firmware com boot livre (BIOS, UEFI,...)?", - /*0341*/"Hello,\n\nyou have registered an account at"=>"Olá!\n\nVocê tem uma conta registrada em", - /*0342*/"with the following data:\nusername: " => "com os seguintes dados:\nnome de usuário: ", - /*0343*/"in order to confirm the registration of the new account please follow the link below" => "a fim de confirmar o registro da nova conta,\nsiga o link abaixo", - /*0344*/"If you don't want to confirm the account registration\nthen wait one hour and your username and e-mail will be deleted from the database" => "Se não quiser confirmar o registro da conta,\nentão aguarde por uma hora para que seu nome de usuário e senha sejam excluídos do banco de dados", - /*0345*/"If you received this e-mail for error, please simply disregard this message" => "Se recebeu este e-mail por engano, por favor, simplesmente ignore esta mensagem", - /*0346*/"account registration" => "Controlador de host", - /*0347*/"Host Controllers" => "Controladores de host", - /*0348*/"No Host Controller found" => "Nenhum controlador de host encontrado", - /*0349*/"Download the xml file of all the Host Controllers in the database" => "Baixar o arquivo xml de todos os Controladores de host do banco de dados", - /*0350*/"PCMCIA Controller" => "Controlador PCMCIA", - /*0351*/"USB Controller" => "Controlador USB", - /*0352*/"Firewire Controller" => "Controlador Firewire", - /*0353*/"HECI Controller" => "Controlador HECI", - /*0354*/"device type" => "tipo de dispositivo", - /*0355*/"Thanks for your contribution!" => "Obrigado pela sua contribuição!", - /*0356*/"does the device prevent installing wifi cards not-approved by the vendor?" => "o dispositivo evita a instalação de placas wi-fi não aprovados pelo vendedor?", - /*0357*/"see the details inside the description entry" => "veja os detalhes dentro da entrada da descrição", - /*0358*/"Thanks for helping the h-node project and the free software movement!" => "Grazie per aver aiutato il progetto h-node e il movimento del software libero!", - /*0359*/"You have just inserted a new notebook into the database. Can you please insert its devices separately too? Thanks!" => "Obrigado por ajudar o Projeto H-node e o movimento Software Livre!?", - /*0360*/"insert" => "inserir", - /*0361*/"List of allowed fully free distributions" => "Lista de distribuições consideradas totalmente livres", - /*0362*/"Insert a new distro" => "Inserir uma nova distribuição", - /*0363*/"DISTRO-CODE" => "CÓDIGO DA DISTRIBUIÇÃO", - ), - ); - - public static $singular = array( - 'en' => array( - /*01*/'notebooks' => 'notebook', - /*02*/'wifi' => 'wifi card', - /*03*/'videocards' => 'video card', - /*04*/'printers' => 'printer', - /*05*/'scanners' => 'scanner', - /*06*/'threegcards' => '3G-card', - /*07*/'soundcards' => 'soundcard', - /*08*/'webcams' => 'webcam', - /*09*/'bluetooth' => 'bluetooth device', - /*10*/'acquisitioncards' => 'acquisition card', - /*11*/'fingerprintreaders' => 'fingerprint reader', - /*12*/'ethernetcards' => 'ethernet card', - /*13*/'sdcardreaders' => 'sd card reader', - /*14*/'modems' => 'modem', - /*15*/'raidadapters' => 'RAID adapter', - /*16*/'hostcontrollers' => 'host controller', - ), - 'it' => array( - /*01*/'notebooks' => 'notebook', - /*02*/'wifi' => 'scheda wifi', - /*03*/'videocards' => 'scheda video', - /*04*/'printers' => 'stampante', - /*05*/'scanners' => 'scanner', - /*06*/'threegcards' => 'scheda 3G', - /*07*/'soundcards' => 'scheda audio', - /*08*/'webcams' => 'webcam', - /*09*/'bluetooth' => 'dispositivo bluetooth', - /*10*/'acquisitioncards' => 'scheda di acquisizione', - /*11*/'fingerprintreaders' => 'lettore di impronte digitali', - /*12*/'ethernetcards' => 'scheda ethernet', - /*13*/'sdcardreaders' => 'lettore di schede sd', - /*14*/'modems' => 'modem', - /*15*/'raidadapters' => 'adattatore RAID', - /*16*/'hostcontrollers' => 'host controller', - ), - 'es' => array( - /*01*/'notebooks' => 'portátil', - /*02*/'wifi' => 'tarjeta wifi', - /*03*/'videocards' => 'tarjeta de video', - /*04*/'printers' => 'impresora', - /*05*/'scanners' => 'escáner', - /*06*/'threegcards' => 'tarjeta 3G', - /*07*/'soundcards' => 'tarjeta de audio', - /*08*/'webcams' => 'camara web', - /*09*/'bluetooth' => 'dispositivo bluetooth', - /*10*/'acquisitioncards' => 'tarjeta de adquisición', - /*11*/'fingerprintreaders' => 'lector de huella digital', - /*12*/'ethernetcards' => 'tarjeta de ethernet', - /*13*/'sdcardreaders' => 'lector de tarjetas sd', - /*14*/'modems' => 'modem', - /*15*/'raidadapters' => 'adaptador RAID', - /*16*/'hostcontrollers' => 'host controller', - ), - 'fr' => array( - /*01*/'notebooks' => 'notebook', - /*02*/'wifi' => 'carte wifi', - /*03*/'videocards' => 'carte graphique', - /*04*/'printers' => 'imprimante', - /*05*/'scanners' => 'scanneur', - /*06*/'threegcards' => 'carte 3G', - /*07*/'soundcards' => 'carte son', - /*08*/'webcams' => 'webcam', - /*09*/'bluetooth' => 'périphérique bluetooth', - /*10*/'acquisitioncards' => 'carte d\'acquisition', - /*11*/'fingerprintreaders' => 'lecteur d\'empreintes digitales', - /*12*/'ethernetcards' => 'carte ethernet', - /*13*/'sdcardreaders' => 'lecteur de carte SD', - /*14*/'modem' => 'modem', - /*15*/'raidadapters' => 'Adaptateur RAID', - /*16*/'hostcontrollers' => 'contrôleur hôte', - ), - 'de' => array( - /*01*/'notebooks' => 'notebook', - /*02*/'wifi' => 'wifi card', - /*03*/'videocards' => 'video card', - /*04*/'printers' => 'printer', - /*05*/'scanners' => 'scanner', - /*06*/'threegcards' => '3G-card', - /*07*/'soundcards' => 'soundcard', - /*08*/'webcams' => 'webcam', - /*09*/'bluetooth' => 'bluetooth device', - /*10*/'acquisitioncards' => 'acquisition card', - /*11*/'fingerprintreaders' => 'fingerprint reader', - /*12*/'ethernetcards' => 'ethernet card', - /*13*/'sdcardreaders' => 'sd card reader', - /*14*/'modems' => 'modem', - /*15*/'raidadapters' => 'RAID adapter', - /*16*/'hostcontrollers' => 'host controller', - ), - 'gr' => array( - /*01*/'notebooks' => 'Υπο-φορητοί υπολογιστές', - /*02*/'wifi' => 'Κάρτες wifi', - /*03*/'videocards' => 'Κάρτες γραφικών', - /*04*/'printers' => 'Εκτυπωτές', - /*05*/'scanners' => 'Σαρωτές', - /*06*/'threegcards' => 'Κάρτες 3G', - /*07*/'soundcards' => 'Κάρτες ήχου', - /*08*/'webcams' => 'Διαδικτυακές κάμερες', - /*09*/'bluetooth' => 'Συσκευές bluetooth', - /*10*/'acquisitioncards' => 'Κάρτες λήψης', - /*11*/'fingerprintreaders' => 'Συσκευές ανάγνωσης δακτυλικών αποτυπωμάτων', - /*12*/'ethernetcards' => 'Κάρτες ethernet', - /*13*/'sdcardreaders' => 'Συσκευές ανάγνωσης καρτών sd', - /*14*/'modems' => 'Συσκευές modem', - /*15*/'raidadapters' => 'RAID adapter', - /*16*/'hostcontrollers' => 'host controller', - ), - 'pt' => array( - /*01*/'notebooks' => 'notebook', - /*02*/'wifi' => 'wifi', - /*03*/'videocards' => 'placas de vídeo', - /*04*/'printers' => 'impressoras', - /*05*/'scanners' => 'scanners', - /*06*/'threegcards' => 'dispositivos 3G', - /*07*/'soundcards' => 'placas de som', - /*08*/'webcams' => 'webcams', - /*09*/'bluetooth' => 'dispositivos bluetooth', - /*10*/'acquisitioncards' => 'placas de captura', - /*11*/'fingerprintreaders' => 'leitores de impressão digital', - /*12*/'ethernetcards' => 'placas de rede', - /*13*/'sdcardreaders' => 'leitores de cartão SD', - /*14*/'modems' => 'modems', - /*15*/'raidadapters' => 'adaptadores RAID', - /*16*/'hostcontrollers' => 'controlador de host', - ), - ); - - public static $plural = array( - 'en' => array( - /*01*/'notebooks' => 'notebooks', - /*02*/'wifi' => 'wifi cards', - /*03*/'videocards' => 'video cards', - /*04*/'printers' => 'printers', - /*05*/'scanners' => 'scanners', - /*06*/'threegcards' => '3G-cards', - /*07*/'soundcards' => 'soundcards', - /*08*/'webcams' => 'webcams', - /*09*/'bluetooth' => 'bluetooth devices', - /*10*/'acquisitioncards' => 'acquisition cards', - /*11*/'fingerprintreaders' => 'fingerprint readers', - /*12*/'ethernetcards' => 'ethernet cards', - /*13*/'sdcardreaders' => 'sd card readers', - /*14*/'modems' => 'modems', - /*15*/'raidadapters' => 'RAID adapters', - /*16*/'hostcontrollers' => 'host controllers', - ), - 'it' => array( - /*01*/'notebooks' => 'notebook', - /*02*/'wifi' => 'schede wifi', - /*03*/'videocards' => 'schede video', - /*04*/'printers' => 'stampanti', - /*05*/'scanners' => 'scanner', - /*06*/'threegcards' => 'schede 3G', - /*07*/'soundcards' => 'schede audio', - /*08*/'webcams' => 'webcam', - /*09*/'bluetooth' => 'dispositivi bluetooth', - /*10*/'acquisitioncards' => 'schede di acquisizione', - /*11*/'fingerprintreaders' => 'lettori di impronte digitali', - /*12*/'ethernetcards' => 'schede ethernet', - /*13*/'sdcardreaders' => 'lettori di schede sd', - /*14*/'modems' => 'modem', - /*15*/'raidadapters' => 'adattatori RAID', - /*16*/'hostcontrollers' => 'host controller', - ), - 'es' => array( - /*01*/'notebooks' => 'portátiles', - /*02*/'wifi' => 'tarjetas wifi', - /*03*/'videocards' => 'tarjetas de video', - /*04*/'printers' => 'impresoras', - /*05*/'scanners' => 'escáneres', - /*06*/'threegcards' => 'tarjetas 3G', - /*07*/'soundcards' => 'tarjetas de audio', - /*08*/'webcams' => 'cámaras web', - /*09*/'bluetooth' => 'dispositivos bluetooth', - /*10*/'acquisitioncards' => 'tarjetas de adquisición', - /*11*/'fingerprintreaders' => 'lectores de huella digital', - /*12*/'ethernetcards' => 'tarjetas de ethernet', - /*13*/'sdcardreaders' => 'lectores de tarjetas sd', - /*14*/'modems' => 'modems', - /*15*/'raidadapters' => 'adaptadores RAID', - /*16*/'hostcontrollers' => 'host controllers', - ), - 'fr' => array( - /*01*/'notebooks' => 'notebooks', - /*02*/'wifi' => 'cartes wifi', - /*03*/'videocards' => 'cartes graphiques', - /*04*/'printers' => 'imprimantes', - /*05*/'scanners' => 'scanneurs', - /*06*/'threegcards' => 'cartes 3G', - /*07*/'soundcards' => 'cartes son', - /*08*/'webcams' => 'webcams', - /*09*/'bluetooth' => 'périphériques bluetooth', - /*10*/'acquisitioncards' => 'cartes d\'acquisition', - /*11*/'fingerprintreaders' => 'lecteurs d\'empreintes digitales ', - /*12*/'ethernetcards' => 'cartes ethernet', - /*13*/'sdcardreaders' => 'lecteurs de cartes SD', - /*14*/'modems' => 'modems', - /*15*/'raidadapters' => 'Adaptateurs RAID', - /*16*/'hostcontrollers' => 'contrôleurs hôte', - - ), - 'de' => array( - /*01*/'notebooks' => 'notebooks', - /*02*/'wifi' => 'wifi cards', - /*03*/'videocards' => 'video cards', - /*04*/'printers' => 'printers', - /*05*/'scanners' => 'scanners', - /*06*/'threegcards' => '3G-cards', - /*07*/'soundcards' => 'soundcards', - /*08*/'webcams' => 'webcams', - /*09*/'bluetooth' => 'bluetooth devices', - /*10*/'acquisitioncards' => 'acquisition cards', - /*11*/'fingerprintreaders' => 'fingerprint readers', - /*12*/'ethernetcards' => 'ethernet cards', - /*13*/'sdcardreaders' => 'sd card readers', - /*14*/'modems' => 'modems', - /*15*/'raidadapters' => 'RAID adapters', - /*16*/'hostcontrollers' => 'host controllers', - ), - 'gr' => array( - /*01*/'notebooks' => 'Υπο-φορητοί υπολογιστές', - /*02*/'wifi' => 'Κάρτες wifi', - /*03*/'videocards' => 'Κάρτες γραφικών', - /*04*/'printers' => 'Εκτυπωτές', - /*05*/'scanners' => 'Σαρωτές', - /*06*/'threegcards' => 'Κάρτες 3G', - /*07*/'soundcards' => 'Κάρτες ήχου', - /*08*/'webcams' => 'Διαδικτυακές κάμερες', - /*09*/'bluetooth' => 'Συσκευές bluetooth', - /*10*/'acquisitioncards' => 'Κάρτες λήψης', - /*11*/'fingerprintreaders' => 'Συσκευές ανάγνωσης δακτυλικών αποτυπωμάτων', - /*12*/'ethernetcards' => 'Κάρτες ethernet', - /*13*/'sdcardreaders' => 'Συσκευές ανάγνωσης καρτών sd', - /*14*/'modems' => 'Συσκευές modem', - /*15*/'raidadapters' => 'RAID adapters', - /*16*/'hostcontrollers' => 'host controllers', - ), - 'pt' => array( - /*01*/'notebooks' => 'notebooks', - /*02*/'wifi' => 'wifi', - /*03*/'videocards' => 'placas de vídeo', - /*04*/'printers' => 'impressoras', - /*05*/'scanners' => 'scanners', - /*06*/'threegcards' => 'dispositivos 3G', - /*07*/'soundcards' => 'placas de som', - /*08*/'webcams' => 'webcams', - /*09*/'bluetooth' => 'dispositivos bluetooth', - /*10*/'acquisitioncards' => 'placas de captura', - /*11*/'fingerprintreaders' => 'leitores de impressão digital', - /*12*/'ethernetcards' => 'placas de rede', - /*13*/'sdcardreaders' => 'leitores de cartão SD', - /*14*/'modems' => 'modems', - /*15*/'raidadapters' => 'adaptadores RAID', - /*16*/'hostcontrollers' => 'controladores de host', - ), - ); - - public static function sanitize($lang = 'en') - { - return (in_array($lang,self::$allowed)) ? sanitizeAll($lang) : 'en'; - } -} - -class Go -{ - - public static function toHardwareType($type) - { - return Url::getRoot().Hardware::getControllerFromType($type)."/catalogue/".Lang::$current; - } - - public static function toHardwareInsert($type) - { - return Url::getRoot().Hardware::getControllerFromType($type)."/insert/".Lang::$current; - } - - //go to the page of one device from the id of that device - public static function toHardwarePage($idHard = 0) - { - $clean['idHard'] = (int)$idHard; - $urls = getUrlsFromIdHard($clean['idHard']); - return $urls['urlView']; - } - -} - -class MyStrings -{ - - public static $view = array( - - ); - - //type => controller - public static $reverse = array( - 'notebook' => 'notebooks', - 'wifi' => 'wifi', - 'videocard' => 'videocards', - 'printer' => 'printers', - 'scanner' => 'scanners', - '3G-card' => 'threegcards', - 'soundcard' => 'soundcards', - 'webcam' => 'webcams', - 'bluetooth' => 'bluetooth', - 'acquisition-card' => 'acquisitioncards', - 'fingerprint-reader' => 'fingerprintreaders', - 'ethernet-card' => 'ethernetcards', - 'sd-card-reader' => 'sdcardreaders', - 'modem' => 'modems', - ); - - public static function getTypes() - { - return implode(',',array_keys(self::$reverse)); - } - -} diff --git a/h-source/Application/Include/license.php b/h-source/Application/Include/license.php deleted file mode 100644 index 08a6a2c..0000000 --- a/h-source/Application/Include/license.php +++ /dev/null @@ -1,93 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class License -{ - - //license notice that does appear at the bottom of each hardware and wiki page - public static $bottom = array( - 'en' => "The contents of this page are in the Public Domain. (see the CC0 page for detailed information). Anyone is free to copy, modify, publish, use, sell, or distribute the text for any purpose, commercial or non-commercial, and by any means.", - 'it' => "I contenuti di questa pagina sono di Pubblico Dominio. (leggi la pagina CC0 per informazioni dettagliate). Chiunque è libero di copiare, modificare, pubblicare, usare, vendere, o distribuire tale contenuto per qualsiasi fine, commerciale o non commerciale, e con ogni mezzo.", - 'es' => "El contenido de esta página está en Dominio Público. (vea la página CC0 para información detallada). Cualquiera es libre de copiar, modificar, publicar, usar, vender o distribuir el texto para cualquier propósito, comercial o no comercial, y por cualquier medio.", - 'fr' => "Le contenu de cette page est dans le Domaine Public (voir la page CC0 pour plus d'informations). Quiquonque est libre de copier, modifier, publier, utiliser, vendre ou distribuer le texte , quelques soit le but et le moyen.", - ); - - //license notice that does appear inside the xml download page - public static $insideXml = array( - 'en' => "The contents of this page are in the Public Domain. (see the CC0 page at http://creativecommons.org/publicdomain/zero/1.0/ for detailed information). Anyone is free to copy, modify, publish, use, sell, or distribute the text for any purpose, commercial or non-commercial, and by any means.", - 'it' => "I contenuti di questa pagina sono di Pubblico Dominio. (leggi la pagina CC0 all'indirizzo http://creativecommons.org/publicdomain/zero/1.0/deed.it per informazioni dettagliate). Chiunque è libero di copiare, modificare, pubblicare, usare, vendere, o distribuire tale contenuto per qualsiasi fine, commerciale o non commerciale, e con ogni mezzo.", - 'es' => "El contenido de esta página está en Dominio Público. (vea la página CC0 http://creativecommons.org/publicdomain/zero/1.0/deed.es_ES para información detallada). Cualquiera es libre de copiar, modificar, publicar, usar, vender o distribuir el texto para cualquier propósito, comercial o no comercial, y por cualquier medio.", - 'fr' => "Le contenu de cette page est dans le Domaine Public (voir la page CC0 http://creativecommons.org/publicdomain/zero/1.0/deed.fr pour plus d'informations). Quiquonque est libre de copier, modifier, publier, utiliser, vendre ou distribuer le texte , quelques soit le but et le moyen.", - ); - - //license notice that does appear before the submission of each hardware and wiki page - public static $submissionNotice = array( - 'en' => "Any text submitted by you will be put in the Public Domain (see the CC0 page for detailed information).", - 'it' => "Ogni testo da te inviato diventerà di Pubblico Dominio. (leggi la pagina CC0 per informazioni dettagliate).", - 'es' => "Cualquier texto agregado por usted será colocado en el Dominio Público (vea la página CC0 para información detallada).", - 'fr' => "Chaque texte que vous soumettrez seront placés dans le Domaine Public (voir la page CC0 pour plus d'informations)" - ); - - //license notice that does appear before the submission of each hardware page from the h-node client (h-client) - public static $submissionNoticeClient = array( - 'en' => "Any text submitted by you will be put in the Public Domain (see the CC0 page at \nhttp://creativecommons.org/publicdomain/zero/1.0/ for detailed information).", - 'it' => "Ogni testo da te inviato diventerà di Pubblico Dominio. (leggi la pagina CC0 all'indirizzo \nhttp://creativecommons.org/publicdomain/zero/1.0/deed.it per informazioni dettagliate).", - 'es' => "Cualquier texto agregado por usted será colocado en el Dominio Público (vea la página CC0 \nhttp://creativecommons.org/publicdomain/zero/1.0/deed.es_ES para información detallada).", - 'fr' => "Chaque texte que vous soumettrez seront placés dans le Domaine Public (voir la page CC0 \nhttp://creativecommons.org/publicdomain/zero/1.0/deed.fr pour plus d'informations)" - ); - - public static function getNotice($noticeArray) - { - if (array_key_exists(Lang::$current,$noticeArray)) - { - return $noticeArray[Lang::$current]; - } - else - { - return $noticeArray['en']; - } - } - - //get the bottom notice - public static function getBottom() - { - return self::getNotice(self::$bottom); - } - - //get the submission notice - public static function getSubmissionNotice() - { - return self::getNotice(self::$submissionNotice); - } - - //get the license notice insidethe xml download page - public static function getInsideXml() - { - return self::getNotice(self::$insideXml); - } - - //get the notice for the client - public static function getClientNotice() - { - return self::getNotice(self::$submissionNoticeClient); - } -} \ No newline at end of file diff --git a/h-source/Application/Include/myFunctions.php b/h-source/Application/Include/myFunctions.php deleted file mode 100644 index b121424..0000000 --- a/h-source/Application/Include/myFunctions.php +++ /dev/null @@ -1,542 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -function encodeUrl($url) -{ - $url = str_replace(' ','-',$url); - $url = str_replace('.','-',$url); - $url = str_replace(',','-',$url); - $url = str_replace('[','-',$url); - $url = str_replace(']','-',$url); - $url = str_replace('(','-',$url); - $url = str_replace(')','-',$url); - $url = str_replace('/','-',$url); - $url = str_replace(''','-',$url); - $url = str_replace('@','-at-',$url); - $url = str_replace('?','-',$url); - -// $temp = null; -// for ($i=0;$i $ovalue) - { - $nkeys = array_keys($new, $ovalue); -// echo memory_get_peak_usage(true)."
          "; - foreach($nkeys as $nindex) - { - $matrix[$oindex][$nindex] = isset($matrix[$oindex - 1][$nindex - 1]) ? - $matrix[$oindex - 1][$nindex - 1] + 1 : 1; - if($matrix[$oindex][$nindex] > $maxlen) - { - $maxlen = $matrix[$oindex][$nindex]; - $omax = $oindex + 1 - $maxlen; - $nmax = $nindex + 1 - $maxlen; - } - } - } - if($maxlen == 0) return array(array('d'=>$old, 'i'=>$new)); - return array_merge( - diff(array_slice($old, 0, $omax), array_slice($new, 0, $nmax)), - array_slice($new, $nmax, $maxlen), - diff(array_slice($old, $omax + $maxlen), array_slice($new, $nmax + $maxlen))); -} - -function htmlDiff($old, $new) -{ - $old = str_replace("\r\n"," \r\n ",$old); - $new = str_replace("\r\n"," \r\n ",$new); - - $ret = null; - $diff = diff(removeEmptyStrings(explode(' ', $old)),removeEmptyStrings(explode(' ', $new))); - foreach($diff as $k) - { - if(is_array($k)) - $ret .= (!empty($k['d'])?"".implode(' ',$k['d'])." ":''). - (!empty($k['i'])?"".implode(' ',$k['i'])." ":''); - else $ret .= $k . ' '; - } - return $ret; -} - - -function applyBreaks($values,$fields) -{ - $fieldsArray = explode(',',$fields); - - foreach ($fieldsArray as $field) - { - if (array_key_exists($field,$values)) - { - $values[$field] = nl2br($values[$field]); - } - } - return $values; -} - - -function getLinkToUser($user) -{ - if (strstr($user,'__')) - { - return str_replace('__',null,$user); - } - else - { - return "$user"; - } -} - -function getUserName($id_user = 0) -{ - $clean['id_user'] = (int)$id_user; - $u = new UsersModel(); - return $u->getUser($clean['id_user']); -} - -function getMotivation($row,$controller) -{ - if (strcmp($row['deletion']['object'],'duplication') === 0) - { - $clean['id_hard'] = (int)$row['deletion']['id_duplicate']; - $hardware = new HardwareModel(); - $name = encodeUrl($hardware->getTheModelName($clean['id_hard'])); - return "duplication of the model having id ".$clean['id_hard'].""; - } - else - { - return "".$row['deletion']['object'].""; - } -} - -//get the text in the right language -function gtext($string) -{ - if (isset(Lang::$i18n[Lang::$current][$string])) - { - return Lang::$i18n[Lang::$current][$string]; - } - return $string; -} - -function singular($string) -{ - if (isset(Lang::$singular[Lang::$current][$string])) - { - return Lang::$singular[Lang::$current][$string]; - } - return $string; -} - -function plural($string) -{ - if (isset(Lang::$plural[Lang::$current][$string])) - { - return Lang::$plural[Lang::$current][$string]; - } - return $string; -} - -//get the hardware info from the talk id -function getHardwareInfoFromTalkId($id = 0) -{ - $clean['id'] = (int)$id; - $talk = new TalkModel(); - $res = $talk->select('hardware.type,hardware.id_hard')->from('hardware inner join talk')->using('id_hard')->where(array('id_talk'=>$clean['id']))->send(); - return count($res) > 0 ? $res[0]['hardware'] : null; -} - -//get hardware info from id -function getHardwareInfoFromId($id = 0) -{ - $clean['id'] = (int)$id; - $hw = new HardwareModel(); - $res = $hw->select()->where(array('id_hard'=>$clean['id']))->send(); - $controller = 'home/index/en'; - $model = ''; - if (count($res) > 0) - { - $controller = Hardware::getControllerFromType($res[0]['hardware']['type']); - $controller = strcmp($controller,'') !== 0 ? $controller : 'home/index/en'; - $model = $res[0]['hardware']['model']; - } - - return array('controller'=>$controller,'model'=>$model); -} - -//get the wiki page info from the talk id -function getWikiPageInfoFromTalkId($id = 0) -{ - $clean['id'] = (int)$id; - $talk = new WikitalkModel(); - $res = $talk->select('wiki.id_wiki')->from('wiki inner join wiki_talk')->using('id_wiki')->where(array('id_talk'=>$clean['id']))->send(); - return count($res) > 0 ? $res[0]['wiki']['id_wiki'] : ''; -} - -//get the issue info from the message id -function getIssueNumberFromMessageId($id = 0) -{ - $clean['id'] = (int)$id; - $mess = new MessagesModel(); - $res = $mess->select('issues.id_issue')->from('issues inner join messages')->using('id_issue')->where(array('id_mes'=>$clean['id']))->toList('issues.id_issue')->send(); - return count($res) > 0 ? $res[0] : ''; -} - -//get thw wiki name from the id -function getWikiNameFromId($id = 0) -{ - $clean['id'] = (int)$id; - $wiki = new WikiModel(); - $name = $wiki->getTheModelName($clean['id']); - return $name; -} - -//return the URL to the moderated object page -function goToModeratedItem( $row = array() ) -{ - $url = null; - - switch ($row['type']) - { - case 'message': - $url = 'issues/view/'.Lang::$current.'/'.getIssueNumberFromMessageId($row['id']).'#message-'.$row['id']; - break; - case 'talk': - $hardInfo = getHardwareInfoFromTalkId($row['id']); - if (isset($hardInfo)) - { - $controller = Hardware::$typeToController[$hardInfo['type']]; - $url = $controller.'/talk/'.Lang::$current.'/'.$hardInfo['id_hard'].'#talk-'.$row['id']; - } - else - { - $url = 'last/modactions/'.Lang::$current; - } - break; - case 'user': - $url = 'meet/user/'.Lang::$current.'/'.getUserName($row['id']); - break; - case 'issue': - $url = 'issues/view/'.Lang::$current.'/'.$row['id']; - break; - case 'issue_del': - $url = 'issues/view/'.Lang::$current.'/'.$row['id']; - break; - case 'wiki_talk': - $url = 'wiki/talk/'.Lang::$current.'/'.getWikiPageInfoFromTalkId($row['id']).'#wiki-talk-'.$row['id']; - break; - case 'page': - $url = 'wiki/page/'.Lang::$current.'/'.encodeUrl(getWikiNameFromId($row['id'])); - break; - case 'page_del': - $url = 'wiki/page/'.Lang::$current.'/'.encodeUrl(getWikiNameFromId($row['id'])); - break; - case 'device': - $hardInfo = getHardwareInfoFromId($row['id']); - $url = $hardInfo['controller'].'/view/'.Lang::$current.'/'.$row['id'].'/'.encodeUrl($hardInfo['model']); - break; - case 'device_app': - $hardInfo = getHardwareInfoFromId($row['id']); - $url = $hardInfo['controller'].'/view/'.Lang::$current.'/'.$row['id'].'/'.encodeUrl($hardInfo['model']); - break; - case 'device_cl': - $hardInfo = getHardwareInfoFromId($row['id']); - $url = $hardInfo['controller'].'/view/'.Lang::$current.'/'.$row['id'].'/'.encodeUrl($hardInfo['model']); - break; - case 'message_ins': - $url = 'issues/view/'.Lang::$current.'/'.getIssueNumberFromMessageId($row['id']).'#message-'.$row['id']; - break; - case 'wiki_talk_ins': - $url = 'wiki/talk/'.Lang::$current.'/'.getWikiPageInfoFromTalkId($row['id']).'#wiki-talk-'.$row['id']; - break; - case 'issue_ins': - $url = 'issues/view/'.Lang::$current.'/'.$row['id']; - break; - case 'talk_ins': - $hardInfo = getHardwareInfoFromTalkId($row['id']); - if (isset($hardInfo)) - { - $controller = Hardware::$typeToController[$hardInfo['type']]; - $url = $controller.'/talk/'.Lang::$current.'/'.$hardInfo['id_hard'].'#talk-'.$row['id']; - } - else - { - $url = 'last/modactions/'.Lang::$current; - } - break; - case 'hardware': - $hardInfo = getHardwareInfoFromId($row['id']); - $url = $hardInfo['controller'].'/view/'.Lang::$current.'/'.$row['id'].'/'.encodeUrl($hardInfo['model']); - break; - case 'wiki': - $url = 'wiki/page/'.Lang::$current.'/'.encodeUrl(getWikiNameFromId($row['id'])); - break; - } - return Url::getRoot($url); -} - -function getUrlsFromIdHard($id_hard) -{ - $clean['id_hard'] = (int)$id_hard; - - $urlView = $urlTalk = Url::getRoot(); - - $deviceName = null; - - $hard = new HardwareModel(); - $res = $hard->select('type,model')->where(array('id_hard'=>$clean['id_hard']))->send(); - if (count($res) > 0) - { - $urlView = Url::getRoot().Hardware::$typeToController[$res[0]['hardware']['type']]."/view/".Lang::$current."/".$clean['id_hard']."/".encodeUrl($res[0]['hardware']['model']); - - $urlTalk = Url::getRoot().Hardware::$typeToController[$res[0]['hardware']['type']]."/talk/".Lang::$current."/".$clean['id_hard']; - - $deviceName = $res[0]['hardware']['model']; - } - - return array('urlView'=>$urlView,'urlTalk'=>$urlTalk,'modelName'=>$deviceName); - -} - -function getDiffArray($associativeArray, $oldArray, $newArray) -{ - $diffArray = array(); - foreach ($associativeArray as $field => $label) - { - if (array_key_exists($field,$oldArray) and array_key_exists($field,$newArray)) - { - $diffArray[$label] = htmlDiff($oldArray[$field], $newArray[$field]); - } - } - return $diffArray; -} - -//get the translation function -function getTranslationFunction($fieldName) -{ - $fieldsFunc = array( - "vendor" => "betterVendor", - "interface" => "translate_and_gtext", - "subtype" => "translate_and_gtext", - ); - - if (array_key_exists($fieldName,$fieldsFunc)) - { - return $fieldsFunc[$fieldName]; - } - - return "gtext"; -} - -//Map db type names to display names -function displayName($name) { - switch ($name) { - case '3G-card': - $name = '3G cards'; - break; - case 'bluetooth': - $name = 'Bluetooth'; - break; - case 'ethernet-card': - $name = 'Ethernet cards'; - break; - case 'fingerprint-reader': - $name = 'Fingerprint readers'; - break; - case 'host-controller': - $name = 'Host Controllers'; - break; - case 'modem': - $name = 'Modems'; - break; - case 'notebook': - $name = 'Notebooks'; - break; - case 'printer': - $name = 'Printers'; - break; - case 'RAID-adapter'; - $name = 'RAID adapters'; - break; - case 'scanner': - $name = 'Scanners'; - break; - case 'sd-card-reader': - $name = 'SD card readers'; - break; - case 'soundcard': - $name = 'Sound cards'; - break; - case 'videocard': - $name = 'Video cards'; - break; - case 'webcam': - $name = 'Webcams'; - break; - case 'wifi': - $name = 'Wifi cards'; - break; - case 'acquisition-card': - $name = 'Acquisition cards'; - break; - } - return $name; -} diff --git a/h-source/Application/Include/params.php b/h-source/Application/Include/params.php deleted file mode 100644 index 5ab28df..0000000 --- a/h-source/Application/Include/params.php +++ /dev/null @@ -1,228 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Website -{ - static public $generalMail = ""; - - static public $fromEmail = "noreply@h-node.org"; - - static public $generalName = "h-node.org"; - - static public $projectName = "h-node"; - - static public $mailServer = ""; - - static public $mailPassword = ""; - - static public $allowAnonymousSubmission = "yes"; - - static public $statusnetGroupText = ""; - - static public $useSMTP = true; - - //use a xml file the modules of the website? - static public $useXmlConfigFile = true; - - //folder of the xml configuration file - //the constant ROOT contains the path to the root folder of your installaton of h-source - static public $xmlConfigFileFolder = ROOT; -} - -class Account -{ - - static public $confirmTime = 3600; - - public static function getTransport() - { - if (Website::$useSMTP) - { - return Swift_SmtpTransport::newInstance(Website::$mailServer, 25)->setUsername(Website::$generalMail)->setPassword(Website::$mailPassword); - } - else - { - return Swift_MailTransport::newInstance(); - } - } - - static public function confirm($username,$e_mail,$id_user,$token) - { - require_once (ROOT.'/External/swiftmailer/lib/swift_required.php'); - - $clean['username'] = sanitizeAll($username); - $clean['id_user'] = (int)$id_user; - $clean['token'] = sanitizeAll($token); - - $siteName = Website::$generalName; - $siteMail = Website::$generalMail; - - $mess = gtext("Hello,\n\nyou have registered an account at")." $siteName ".gtext("with the following data:\nusername: ").$clean['username']."\n\n".gtext("in order to confirm the registration of the new account please follow the link below")."\n".Url::getRoot()."users/confirm/".Lang::$current."/".$clean['id_user']."/".$clean['token']."\n\n".gtext("If you don't want to confirm the account registration\nthen wait one hour and your username and e-mail will be deleted from the database")."\n\n".gtext("If you received this e-mail for error, please simply disregard this message"); - - $message = Swift_Message::newInstance()->setSubject('['.Website::$projectName.'] '.gtext("account registration"))->setFrom(array(Website::$fromEmail => $siteName))->setTo(array($e_mail))->setBody($mess); - - //Create the Transport - $transport = self::getTransport(); - - //Create the Mailer using your created Transport - $mailer = Swift_Mailer::newInstance($transport); - - //Send the message - $result = $mailer->send($message); - - if ($result) - { - return true; - } - else - { - return false; - } - - } - - static public function sendnew($username,$e_mail,$id_user,$token) - { - require_once (ROOT.'/External/swiftmailer/lib/swift_required.php'); - - $clean['username'] = sanitizeAll($username); - $clean['id_user'] = (int)$id_user; - $clean['token'] = sanitizeAll($token); - - $siteName = Website::$generalName; - $siteMail = Website::$generalMail; - - $mess = "Hello,\n\nyou have requested a new password for your account at $siteName.\nYour username is:\n".$clean['username']."\n\nin order to obtain a new password for your account follow the link below\n".Url::getRoot()."users/change/".Lang::$current."/".$clean['id_user']."/".$clean['token']."\n\nIf you don't want to change the password then disregard this mail\n"; - - $message = Swift_Message::newInstance()->setSubject('['.Website::$projectName.'] request a new password')->setFrom(array(Website::$fromEmail => $siteName))->setTo(array($e_mail))->setBody($mess); - - //Create the Transport - $transport = self::getTransport(); - - //Create the Mailer using your created Transport - $mailer = Swift_Mailer::newInstance($transport); - - //Send the message - $result = $mailer->send($message); - - if ($result) - { - return true; - } - else - { - return false; - } - - } - - static public function sendpassword($username,$e_mail,$password) - { - require_once (ROOT.'/External/swiftmailer/lib/swift_required.php'); - - $clean['username'] = sanitizeAll($username); - $clean['password'] = sanitizeAll($password); - - $siteName = Website::$generalName; - $siteMail = Website::$generalMail; - - $mess = "Hello,\n\nyou have requested a new password for your account to $siteName.\nYour username is:\n".$clean['username']."\n\nYour new password is:\n".$clean['password']."\n"; - - $message = Swift_Message::newInstance()->setSubject('['.Website::$projectName.'] get your new password ')->setFrom(array(Website::$fromEmail => $siteName))->setTo(array($e_mail))->setBody($mess); - - //Create the Transport - $transport = self::getTransport(); - - //Create the Mailer using your created Transport - $mailer = Swift_Mailer::newInstance($transport); - - //Send the message - $result = $mailer->send($message); - - if ($result) - { - return true; - } - else - { - return false; - } - - } - - static public function sendTalkNotice($who,$e_mails,$id_hard) - { - require_once (ROOT.'/External/swiftmailer/lib/swift_required.php'); - - $who = sanitizeAll($who); - $id_hard = (int)$id_hard; - - $siteName = Website::$generalName; - $siteMail = Website::$generalMail; - - $urls = getUrlsFromIdHard($id_hard); - - $mess = "$who has added a message to the talk page of a device you have contributed to maintain at $siteName\n\nThe whole conversation is here:\n\n".$urls['urlTalk']."\n\nThe device page is here:\n\n".$urls['urlView']."\n\nBest regards\nthe ".Website::$projectName." team\n\nP.S: you can disable the mail notifications in the profile page of your control panel"; - - $message = Swift_Message::newInstance()->setSubject("[".Website::$projectName."] $who sent a notice to your attention")->setFrom(array(Website::$fromEmail => $siteName))->setTo($e_mails)->setBody($mess); - - //Create the Transport - $transport = self::getTransport(); - - //Create the Mailer using your created Transport - $mailer = Swift_Mailer::newInstance($transport); - - //Send the message - $result = $mailer->batchSend($message); - - } - - static public function sendWikiTalkNotice($who,$e_mails,$id_wiki) - { - require_once (ROOT.'/External/swiftmailer/lib/swift_required.php'); - - $who = sanitizeAll($who); - $id_wiki = (int)$id_wiki; - - $siteName = Website::$generalName; - $siteMail = Website::$generalMail; - - $wiki = new WikiModel(); - $pageUrl = $wiki->toWikiPage($id_wiki); - $domainName = rtrim(Url::getRoot(),"/"); - $talkUrl = $domainName."/wiki/talk/".Lang::$current."/$id_wiki"; - - $mess = "$who has added a message to the talk page of a wiki page you have contributed to maintain at $siteName\n\nThe whole conversation is here:\n\n".$talkUrl."\n\nThe wiki page is here:\n\n".$pageUrl."\n\nBest regards\nthe ".Website::$projectName." team\n\nP.S: you can disable the mail notifications in the profile page of your control panel"; - - $message = Swift_Message::newInstance()->setSubject("[".Website::$projectName."] $who sent a notice to your attention")->setFrom(array(Website::$fromEmail => $siteName))->setTo($e_mails)->setBody($mess); - - //Create the Transport - $transport = self::getTransport(); - - //Create the Mailer using your created Transport - $mailer = Swift_Mailer::newInstance($transport); - - //Send the message - $result = $mailer->batchSend($message); - - } -} diff --git a/h-source/Application/Include/vendorTranslations.php b/h-source/Application/Include/vendorTranslations.php deleted file mode 100644 index bb86b76..0000000 --- a/h-source/Application/Include/vendorTranslations.php +++ /dev/null @@ -1,4247 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//rewrite the vendor name -function betterVendor($string) -{ - if ($string === 'undef') - { - return gtext($string); - } - - $vendors = new VendorsModel(); - - $exceptions = array( - "One-Laptop-per-Child-Non-Profit" => "One Laptop per Child (Non-Profit)", - "ZaReason-Inc" => "ZaReason, Inc", - "Blue-Light" => "Blue Light", - "Openpandora-Ltd" => "Openpandora Ltd.", - "Packard-Bell" => "Packard Bell", - ); - - return (array_key_exists($string,$exceptions)) ? $exceptions[$string] : $vendors->getFullName($string); - -// $names = array( -// "One-Laptop-per-Child-Non-Profit" => "One Laptop per Child (Non-Profit)", -// "AT-T" => "AT&T", -// "Franklin-Wireless-Corporation" => "Franklin Wireless Corporation", -// "Novatel-Wireless" => "Novatel Wireless", -// "Sierra-Wireless" => "Sierra Wireless", -// "ALi-Corporation" => "ALi Corporation", -// "Advanced-Micro-Devices" => "Advanced Micro Devices (AMD)", -// "Analog-Devices" => "Analog Devices", -// "ATI-Technologies-Inc" => "ATI Technologies Inc", -// "Aureal-Semiconductor" => "Aureal Semiconductor", -// "Avance-Logic-Inc" => "Avance Logic Inc (ALI)", -// "Aztech-System-Ltd" => "Aztech System Ltd", -// "Brooktree-Corporation" => "Brooktree Corporation", -// "C-Media-Electronics-Inc" => "C-Media Electronics Inc", -// "Cirrus-Logic" => "Cirrus Logic", -// "Creative-Labs" => "Creative Labs", -// "Ensoniq" => "Ensoniq", -// "ESS-Technology" => "ESS Technology", -// "ForteMedia-Inc" => "ForteMedia Inc", -// "Intel-Corporation" => "Intel Corporation", -// "Motorola" => "Motorola", -// "National-Semiconductor-Corporation" => "National Semiconductor Corporation", -// "Neomagic-Corp" => "Neomagic Corp", -// "nVidia-Corporation" => "nVidia Corporation", -// "RME" => "RME", -// "S3 Inc" => "S3-Inc", -// "Silicon-Integrated-Systems" => "Silicon Integrated Systems (SiS)", -// "Trident-Microsystems" => "Trident Microsystems", -// "VIA-Technologies-Inc" => "VIA Technologies Inc", -// "Xilinx-Corporation" => "Xilinx Corporation", -// "Yamaha-Corporation" => "Yamaha Corporation", -// "Aiptek-Inc" => "Aiptek Inc", -// "Arkmicro-Technologies-Inc" => "Arkmicro Technologies Inc", -// "Askey-Computer-Corporation" => "Askey Computer Corporation", -// "Chicony-Electronics-CO" => "Chicony Electronics CO", -// "Conexant-Systems-Inc" => "Conexant Systems, Inc", -// "Creative-Technology-Ltd" => "Creative Technology, Ltd", -// "eMPIA-Technology-Inc" => "eMPIA Technology, Inc", -// "Genesys-Logic-Inc" => "Genesys Logic, Inc", -// "Hama-Trading-Co" => "Hama Trading Co", -// "Hewlett-Packard" => "Hewlett Packard", -// "IMC-Networks" => "IMC Networks", -// "iPassion-Technology-Inc" => "iPassion Technology Inc", -// "KYE-Systems-Corp" => "KYE Systems Corp", -// "LG-Electronics" => "LG Electronics", -// "OmniVision-Technologies-Inc" => "OmniVision Technologies, Inc", -// "PixArt-Imaging-Inc" => "PixArt Imaging Inc", -// "Primax-Electronics-Ltd" => "Primax Electronics Ltd", -// "Quanta-Computer-Inc" => "Quanta Computer Inc.", -// "Ricoh-Company-Ltd" => "Ricoh Company, Ltd", -// "Sony-Corporation" => "Sony Corporation", -// "Syntek-Semiconductor-Ltd" => "Syntek Semiconductor Ltd", -// "Sunplus-Technology-Co" => "Sunplus Technology Co", -// "Tekom-Technologies-Inc" => "Tekom Technologies, Inc", -// "Trust-International" => "Trust International", -// "ViewQuest-Technologies-Inc" => "ViewQuest Technologies, Inc", -// "Vista-Imaging-Inc" => "Vista Imaging, Inc", -// "Z-Star-Microelectronics-Corporation" => "Z-Star Microelectronics Corporation", -// "Micro-Star-International" => "Micro Star International", -// "VIA-Technologies-Inc" => "VIA Technologies, Inc", -// "ALFA-NETWORK-Inc" => "ALFA NETWORK Inc", -// "Amigo-Technology-Inc" => "Amigo Technology Inc", -// "amit-Inc" => "amit Inc", -// "Atlantis_S-p-A" => "Atlantis S.p.A.", -// "Buffalo-Technology-Ltd" => "Buffalo Technology, Ltd", -// "Compex-Systems-Pte-Ltd" => "Compex Systems Pte Ltd", -// "Encore-Electronics-Inc" => "Encore Electronics Inc", -// "JAHT-Technologies-Corp" => "JAHT Technologies Corp", -// "Micronet-Communications-Inc" => "Micronet Communications, Inc", -// "Minitar-Corporation" => "Minitar Corporation", -// "OvisLink-Technologies-Corp" => "OvisLink Technologies Corp", -// "PRO-NETS_Technology_Corp" => "PRO-NETS Technology Corp", -// "Sparklan-comunications-Inc" => "Sparklan comunications, Inc", -// "Unex-Technology-Corp" => "Unex Technology Corp", -// "Vimicro-Corp" => "Vimicro Corp", -// "LOREX-Technology-Inc" => "LOREX Technology Inc", -// "ADOMAX-technology" => "ADOMAX technology", -// "Omega-Technology-Corp" => "Omega Technology Corp", -// "Shenzhen-Vigor-Electronic" => "Shenzhen Vigor Electronic", -// "Astak-Inc" => "Astak Inc", -// "iMicro-Electronics" => "iMicro Electronics", -// "Active-Pixel" => "Active Pixel", -// "Microdia-Ltd" => "Microdia Ltd", -// "Silicon-Integrated-Systems-Corp" => "Silicon Integrated Systems Corp", -// 'Allied-Telesis-Inc' => 'Allied Telesis, Inc', -// 'Ascend-Communications-Inc.' => 'Ascend Communications, Inc.', -// 'PEAK-System-Technik-GmbH' => 'PEAK-System Technik GmbH', -// 'Paradyne-corp.' => 'Paradyne corp.', -// 'Lockheed-Martin-Marietta-Corp' => 'Lockheed Martin-Marietta Corp', -// 'Hauppauge-computer-works-Inc.' => 'Hauppauge computer works Inc.', -// 'Nebula-Electronics-Ltd.' => 'Nebula Electronics Ltd.', -// 'BFG-Technologies-Inc.' => 'BFG Technologies, Inc.', -// 'Ncipher-Corp-Ltd' => 'Ncipher Corp Ltd', -// 'General-Dynamics' => 'General Dynamics', -// 'Davicom-Semiconductor-Inc.' => 'Davicom Semiconductor, Inc.', -// 'XFX-Pine-Group-Inc' => 'XFX Pine Group Inc', -// 'SK-Electronics-Co.-Ltd.' => 'SK-Electronics Co., Ltd.', -// 'TTTech-AG' => 'TTTech AG', -// 'Trigem-Computer-Inc.' => 'Trigem Computer Inc.', -// 'SCM-Microsystems-Inc.' => 'SCM Microsystems, Inc.', -// 'Microsoft' => 'Microsoft', -// 'Kyocera' => 'Kyocera', -// 'Myson-Century-Inc' => 'Myson Century, Inc', -// 'Belkin' => 'Belkin', -// 'Alcor-Micro-Corporation' => 'Alcor Micro Corporation', -// 'OmniVision' => 'OmniVision', -// 'CyberDoor' => 'CyberDoor', -// 'Sigmatel-Inc.' => 'Sigmatel Inc.', -// 'Dynalink' => 'Dynalink', -// 'Hughes-Network-Systems-HNS' => 'Hughes Network Systems (HNS)', -// 'Sapphire-Inc.' => 'Sapphire, Inc.', -// 'Wired-Inc.' => 'Wired Inc.', -// 'AVerMedia-Technologies-Inc.' => 'AVerMedia Technologies Inc.', -// 'ITT-Geospatial-Systems' => 'ITT Geospatial Systems', -// 'AuthenTec' => 'AuthenTec', -// 'PixArt-Imaging-Inc.' => 'PixArt Imaging Inc.', -// 'Arris' => 'Arris', -// 'BREA-Technologies-Inc' => 'BREA Technologies Inc', -// 'ZyDAS' => 'ZyDAS', -// 'Rhino-Equipment-Corp.' => 'Rhino Equipment Corp.', -// 'Brontes-Technologies' => 'Brontes Technologies', -// 'ASCII-Corporation' => 'ASCII Corporation', -// 'TerraTec-Electronic-GmbH' => 'TerraTec Electronic GmbH', -// 'Compaq-Computer-Corporation' => 'Compaq Computer Corporation', -// 'Cowon-Systems-Inc.' => 'Cowon Systems, Inc.', -// 'HaSoTec-GmbH' => 'HaSoTec GmbH', -// 'Acrox-Technologies-Co.-Ltd.' => 'Acrox Technologies Co., Ltd.', -// 'Kolter-Electronic' => 'Kolter Electronic', -// 'ATI-Technologies-Inc' => 'ATI Technologies Inc', -// 'ULSI-Systems' => 'ULSI Systems', -// 'VLSI-Technology-Inc' => 'VLSI Technology Inc', -// 'Avance-Logic-Inc.-ALI' => 'Avance Logic Inc. [ALI]', -// 'Reply-Group' => 'Reply Group', -// 'NetFrame-Systems-Inc' => 'NetFrame Systems Inc', -// 'Epson' => 'Epson', -// 'Phoenix-Technologies' => 'Phoenix Technologies', -// 'Tseng-Labs-Inc' => 'Tseng Labs Inc', -// 'AST-Research-Inc' => 'AST Research Inc', -// 'Weitek' => 'Weitek', -// 'Video-Logic-Ltd.' => 'Video Logic, Ltd.', -// 'Digital-Equipment-Corporation' => 'Digital Equipment Corporation', -// 'Micronics-Computers-Inc' => 'Micronics Computers Inc', -// 'Cirrus-Logic' => 'Cirrus Logic', -// 'IBM' => 'IBM', -// 'LSI-Logic-Corp-of-Canada' => 'LSI Logic Corp of Canada', -// 'ICL-Personal-Systems' => 'ICL Personal Systems', -// 'SPEA-Software-AG' => 'SPEA Software AG', -// 'Unisys-Systems' => 'Unisys Systems', -// 'Elitegroup-Computer-Systems' => 'Elitegroup Computer Systems', -// 'AT-T-GIS-NCR' => 'AT&T GIS (NCR)', -// 'Vitesse-Semiconductor' => 'Vitesse Semiconductor', -// 'Western-Digital' => 'Western Digital', -// 'American-Megatrends-Inc.' => 'American Megatrends Inc.', -// 'PictureTel' => 'PictureTel', -// 'Hitachi-Computer-Products' => 'Hitachi Computer Products', -// 'Advanced-Micro-Devices-AMD' => 'Advanced Micro Devices [AMD]', -// 'Trident-Microsystems' => 'Trident Microsystems', -// 'Zenith-Data-Systems' => 'Zenith Data Systems', -// 'Acer-Incorporated-ALI' => 'Acer Incorporated [ALI]', -// 'Dell' => 'Dell', -// 'Siemens-Nixdorf-IS' => 'Siemens Nixdorf IS', -// 'LSI-Logic' => 'LSI Logic', -// 'Matrox-Graphics-Inc.' => 'Matrox Graphics, Inc.', -// 'Chips-and-Technologies' => 'Chips and Technologies', -// 'Wyse-Technology-Inc.' => 'Wyse Technology Inc.', -// 'Olivetti-Advanced-Technology' => 'Olivetti Advanced Technology', -// 'Toshiba-America' => 'Toshiba America', -// 'TMC-Research' => 'TMC Research', -// 'Miro-Computer-Products-AG' => 'Miro Computer Products AG', -// 'Compaq' => 'Compaq', -// 'NEC-Corporation' => 'NEC Corporation', -// 'Framatome-Connectors-USA-Inc.' => 'Framatome Connectors USA Inc.', -// 'Comp.---Comm.-Research-Lab' => 'Comp. & Comm. Research Lab', -// 'Future-Domain-Corp.' => 'Future Domain Corp.', -// 'Hitachi-Micro-Systems' => 'Hitachi Micro Systems', -// 'AMP-Inc' => 'AMP, Inc', -// 'Seiko-Epson-Corporation' => 'Seiko Epson Corporation', -// 'Tatung-Corp.-Of-America' => 'Tatung Corp. Of America', -// 'Hewlett-Packard-Company' => 'Hewlett-Packard Company', -// 'Solliday-Engineering' => 'Solliday Engineering', -// 'Synopsys-Logic-Modeling-Group' => 'Synopsys/Logic Modeling Group', -// 'Accelgraphics-Inc.' => 'Accelgraphics Inc.', -// 'Computrend' => 'Computrend', -// 'Micron' => 'Micron', -// 'ASUSTeK-Computer-Inc.' => 'ASUSTeK Computer Inc.', -// 'Adaptec-formerly-DPT' => 'Adaptec (formerly DPT)', -// 'OPTi-Inc.' => 'OPTi Inc.', -// 'IPC-Corporation-Ltd.' => 'IPC Corporation, Ltd.', -// 'Genoa-Systems-Corp' => 'Genoa Systems Corp', -// 'Elsa-AG' => 'Elsa AG', -// 'Fountain-Technologies-Inc.' => 'Fountain Technologies, Inc.', -// 'BusLogic' => 'BusLogic', -// 'Texas-Instruments' => 'Texas Instruments', -// 'Sony-Corporation' => 'Sony Corporation', -// 'Oak-Technology-Inc' => 'Oak Technology, Inc', -// 'Co-time-Computer-Ltd' => 'Co-time Computer Ltd', -// 'Winbond-Electronics-Corp' => 'Winbond Electronics Corp', -// 'Anigma-Inc.' => 'Anigma, Inc.', -// '-Young-Micro-Systems' => '?Young Micro Systems', -// 'Young-Micro-Systems' => 'Young Micro Systems', -// 'Hitachi-Ltd' => 'Hitachi, Ltd', -// 'Efar-Microsystems' => 'Efar Microsystems', -// 'ICL' => 'ICL', -// 'Promise-Technology-Inc.' => 'Promise Technology, Inc.', -// 'Foxconn-International-Inc.' => 'Foxconn International, Inc.', -// 'Wipro-Infotech-Limited' => 'Wipro Infotech Limited', -// 'Number-9-Computer-Company' => 'Number 9 Computer Company', -// 'Vtech-Computers-Ltd' => 'Vtech Computers Ltd', -// 'Infotronic-America-Inc' => 'Infotronic America Inc', -// 'United-Microelectronics-UMC' => 'United Microelectronics [UMC]', -// 'I.I.T.' => 'I.I.T.', -// 'Maspar-Computer-Corp' => 'Maspar Computer Corp', -// 'Ocean-Office-Automation' => 'Ocean Office Automation', -// 'Alcatel' => 'Alcatel', -// 'Texas-Microsystems' => 'Texas Microsystems', -// 'PicoPower-Technology' => 'PicoPower Technology', -// 'Mitsubishi-Electric' => 'Mitsubishi Electric', -// 'Diversified-Technology' => 'Diversified Technology', -// 'Mylex-Corporation' => 'Mylex Corporation', -// 'Aten-Research-Inc' => 'Aten Research Inc', -// 'Apple-Computer-Inc.' => 'Apple Computer Inc.', -// 'Hynix-Semiconductor' => 'Hynix Semiconductor', -// 'Sequent-Computer-Systems' => 'Sequent Computer Systems', -// 'DFI-Inc' => 'DFI, Inc', -// 'City-Gate-Development-Ltd' => 'City Gate Development Ltd', -// 'Daewoo-Telecom-Ltd' => 'Daewoo Telecom Ltd', -// 'Mitac' => 'Mitac', -// 'GIT-Co-Ltd' => 'GIT Co Ltd', -// 'Yamaha-Corporation' => 'Yamaha Corporation', -// 'NexGen-Microsystems' => 'NexGen Microsystems', -// 'Chaintech-Computer-Co.-Ltd' => 'Chaintech Computer Co. Ltd', -// 'QLogic-Corp.' => 'QLogic Corp.', -// 'Cyrix-Corporation' => 'Cyrix Corporation', -// 'I-Bus' => 'I-Bus', -// 'NetWorth' => 'NetWorth', -// 'Gateway-2000' => 'Gateway 2000', -// 'LeadTek-Research-Inc.' => 'LeadTek Research Inc.', -// 'Interphase-Corporation' => 'Interphase Corporation', -// 'Data-Technology-Corporation' => 'Data Technology Corporation', -// 'Contaq-Microsystems' => 'Contaq Microsystems', -// 'Supermac-Technology' => 'Supermac Technology', -// 'EFA-Corporation-of-America' => 'EFA Corporation of America', -// 'Forex-Computer-Corporation' => 'Forex Computer Corporation', -// 'Parador' => 'Parador', -// 'Tulip-Computers-Int.B.V.' => 'Tulip Computers Int.B.V.', -// 'J.-Bond-Computer-Systems' => 'J. Bond Computer Systems', -// 'Cache-Computer' => 'Cache Computer', -// 'Microcomputer-Systems-M-Son' => 'Microcomputer Systems (M) Son', -// 'Data-General-Corporation' => 'Data General Corporation', -// 'Oakleigh-Systems-Inc.' => 'Oakleigh Systems Inc.', -// 'Olicom' => 'Olicom', -// 'Systemsoft' => 'Systemsoft', -// 'Intergraph-Corporation' => 'Intergraph Corporation', -// 'Diamond-Multimedia-Systems' => 'Diamond Multimedia Systems', -// 'National-Instruments' => 'National Instruments', -// 'Alacron' => 'Alacron', -// 'Appian-Technology' => 'Appian Technology', -// 'Quantum-Designs-H.K.-Ltd' => 'Quantum Designs (H.K.) Ltd', -// 'Samsung-Electronics-Co.-Ltd' => 'Samsung Electronics Co., Ltd', -// 'Packard-Bell' => 'Packard Bell', -// 'Gemlight-Computer-Ltd.' => 'Gemlight Computer Ltd.', -// 'Megachips-Corporation' => 'Megachips Corporation', -// 'Zida-Technologies-Ltd.' => 'Zida Technologies Ltd.', -// 'Brooktree-Corporation' => 'Brooktree Corporation', -// 'Trigem-Computer-Inc.' => 'Trigem Computer Inc.', -// 'Meidensha-Corporation' => 'Meidensha Corporation', -// 'Juko-Electronics-Ind.-Co.-Ltd' => 'Juko Electronics Ind. Co. Ltd', -// 'Quantum-Corporation' => 'Quantum Corporation', -// 'Everex-Systems-Inc' => 'Everex Systems Inc', -// 'Globe-Manufacturing-Sales' => 'Globe Manufacturing Sales', -// 'Smart-Link-Ltd.' => 'Smart Link Ltd.', -// 'Informtech-Industrial-Ltd.' => 'Informtech Industrial Ltd.', -// 'Benchmarq-Microelectronics' => 'Benchmarq Microelectronics', -// 'Sierra-Semiconductor' => 'Sierra Semiconductor', -// 'Silicon-Graphics-Inc.' => 'Silicon Graphics, Inc.', -// 'ACC-Microelectronics' => 'ACC Microelectronics', -// 'Digicom' => 'Digicom', -// 'Honeywell-IAC' => 'Honeywell IAC', -// 'Symphony-Labs' => 'Symphony Labs', -// 'Cornerstone-Technology' => 'Cornerstone Technology', -// 'Micro-Computer-Systems-Inc' => 'Micro Computer Systems Inc', -// 'CardExpert-Technology' => 'CardExpert Technology', -// 'Cabletron-Systems-Inc' => 'Cabletron Systems Inc', -// 'Raytheon-Company' => 'Raytheon Company', -// 'Databook-Inc' => 'Databook Inc', -// 'STB-Systems-Inc' => 'STB Systems Inc', -// 'PLX-Technology-Inc.' => 'PLX Technology, Inc.', -// 'Madge-Networks' => 'Madge Networks', -// '3Com-Corporation' => '3Com Corporation', -// 'ALi-Corporation' => 'ALi Corporation', -// 'Mitsubishi-Electric-Corp.' => 'Mitsubishi Electric Corp.', -// 'Dapha-Electronics-Corporation' => 'Dapha Electronics Corporation', -// 'Advanced-Logic-Research' => 'Advanced Logic Research', -// 'Surecom-Technology' => 'Surecom Technology', -// 'Tseng-Labs-International-Co.' => 'Tseng Labs International Co.', -// 'Most-Inc' => 'Most Inc', -// 'Boca-Research-Inc.' => 'Boca Research Inc.', -// 'ICM-Co.-Ltd.' => 'ICM Co., Ltd.', -// 'Auspex-Systems-Inc.' => 'Auspex Systems Inc.', -// 'Samsung-Semiconductors-Inc.' => 'Samsung Semiconductors, Inc.', -// 'Xerox-Corporation' => 'Xerox Corporation', -// 'Rambus-Inc.' => 'Rambus Inc.', -// 'Media-Vision' => 'Media Vision', -// 'Neomagic-Corporation' => 'Neomagic Corporation', -// 'Dataexpert-Corporation' => 'Dataexpert Corporation', -// 'Fujitsu-Microelectr.-Inc.' => 'Fujitsu Microelectr., Inc.', -// 'Omron-Corporation' => 'Omron Corporation', -// 'Advanced-System-Products-Inc' => 'Advanced System Products, Inc', -// 'Radius' => 'Radius', -// 'FuturePlus-Systems-Corp.' => 'FuturePlus Systems Corp.', -// 'Molex-Incorporated' => 'Molex Incorporated', -// 'Jabil-Circuit-Inc' => 'Jabil Circuit Inc', -// 'Hualon-Microelectronics' => 'Hualon Microelectronics', -// 'Autologic-Inc.' => 'Autologic Inc.', -// 'Cetia' => 'Cetia', -// 'BCM-Advanced-Research' => 'BCM Advanced Research', -// 'Advanced-Peripherals-Labs' => 'Advanced Peripherals Labs', -// 'Macronix-Inc.-MXIC' => 'Macronix, Inc. [MXIC]', -// 'Compaq-IPG-Austin' => 'Compaq IPG-Austin', -// 'Rohm-LSI-Systems-Inc.' => 'Rohm LSI Systems, Inc.', -// 'CERN-ECP-EDU' => 'CERN/ECP/EDU', -// 'Evans---Sutherland' => 'Evans & Sutherland', -// 'nVidia-Corporation' => 'nVidia Corporation', -// 'Emulex-Corporation' => 'Emulex Corporation', -// 'Tekram-Technology-Co.Ltd.' => 'Tekram Technology Co.,Ltd.', -// 'Aptix-Corporation' => 'Aptix Corporation', -// 'Tundra-Semiconductor-Corp.' => 'Tundra Semiconductor Corp.', -// 'Tandem-Computers' => 'Tandem Computers', -// 'Micro-Industries-Corporation' => 'Micro Industries Corporation', -// 'Vadem' => 'Vadem', -// 'Applied-Micro-Circuits-Corp.' => 'Applied Micro Circuits Corp.', -// 'Alps-Electric-Co.-Ltd.' => 'Alps Electric Co., Ltd.', -// 'Integraphics' => 'Integraphics', -// 'Artists-Graphics' => 'Artists Graphics', -// 'Ascii-Corporation' => 'Ascii Corporation', -// 'Xilinx-Corporation' => 'Xilinx Corporation', -// 'Peritek-Corporation' => 'Peritek Corporation', -// 'Tyan-Computer' => 'Tyan Computer', -// 'Achme-Computer-Inc.' => 'Achme Computer, Inc.', -// 'Alaris-Inc.' => 'Alaris, Inc.', -// 'S-MOS-Systems-Inc.' => 'S-MOS Systems, Inc.', -// 'NKK-Corporation' => 'NKK Corporation', -// 'Altos-India-Ltd' => 'Altos India Ltd', -// 'PC-Direct' => 'PC Direct', -// 'Truevision' => 'Truevision', -// 'I-O-Data-Device-Inc.' => 'I-O Data Device, Inc.', -// 'Soyo-Computer-Inc' => 'Soyo Computer, Inc', -// 'Fast-Multimedia-AG' => 'Fast Multimedia AG', -// 'NCube' => 'NCube', -// 'Jazz-Multimedia' => 'Jazz Multimedia', -// 'Initio-Corporation' => 'Initio Corporation', -// 'Creative-Labs' => 'Creative Labs', -// 'RasterOps-Corp.' => 'RasterOps Corp.', -// 'Sigma-Designs-Inc.' => 'Sigma Designs, Inc.', -// 'VIA-Technologies-Inc.' => 'VIA Technologies, Inc.', -// 'Stratus-Computers' => 'Stratus Computers', -// 'Proteon-Inc.' => 'Proteon, Inc.', -// 'Siemens-Nixdorf-AG' => 'Siemens Nixdorf AG', -// 'Chromatic-Research-Inc.' => 'Chromatic Research Inc.', -// 'Mini-Max-Technology-Inc.' => 'Mini-Max Technology, Inc.', -// 'Znyx-Advanced-Systems' => 'Znyx Advanced Systems', -// 'CPU-Technology' => 'CPU Technology', -// 'Ross-Technology' => 'Ross Technology', -// 'Powerhouse-Systems' => 'Powerhouse Systems', -// 'Santa-Cruz-Operation' => 'Santa Cruz Operation', -// 'Accton-Technology-Corporation' => 'Accton Technology Corporation', -// 'Atmel-Corporation' => 'Atmel Corporation', -// '3D-Labs' => '3D Labs', -// 'Data-Translation' => 'Data Translation', -// 'Datacube-Inc' => 'Datacube, Inc', -// 'Berg-Electronics' => 'Berg Electronics', -// 'Efficient-Networks-Inc' => 'Efficient Networks, Inc', -// 'Teledyne-Electronic-Systems' => 'Teledyne Electronic Systems', -// 'Tricord-Systems-Inc.' => 'Tricord Systems Inc.', -// 'Eldec' => 'Eldec', -// 'Precision-Digital-Images' => 'Precision Digital Images', -// 'EMC-Corporation' => 'EMC Corporation', -// 'Zilog' => 'Zilog', -// 'Multi-tech-Systems-Inc.' => 'Multi-tech Systems, Inc.', -// 'Excellent-Design-Inc.' => 'Excellent Design, Inc.', -// 'Leutron-Vision-AG' => 'Leutron Vision AG', -// 'Eurocore' => 'Eurocore', -// 'Vigra' => 'Vigra', -// 'FORE-Systems-Inc' => 'FORE Systems Inc', -// 'Firmworks' => 'Firmworks', -// 'Linotype---Hell-AG' => 'Linotype - Hell AG', -// 'Zenith-Data-Systems' => 'Zenith Data Systems', -// 'Ravicad' => 'Ravicad', -// 'Dalsa-Inc.' => 'Dalsa Inc.', -// 'Computervision' => 'Computervision', -// 'Philips-Semiconductors' => 'Philips Semiconductors', -// 'Mitel-Corp.' => 'Mitel Corp.', -// 'Dialogic-Corporation' => 'Dialogic Corporation', -// 'Mercury-Computer-Systems' => 'Mercury Computer Systems', -// 'Fuji-Xerox-Co-Ltd' => 'Fuji Xerox Co Ltd', -// 'Momentum-Data-Systems' => 'Momentum Data Systems', -// 'Cisco-Systems-Inc' => 'Cisco Systems Inc', -// 'Ziatech-Corporation' => 'Ziatech Corporation', -// 'Dynamic-Pictures-Inc' => 'Dynamic Pictures, Inc', -// 'FWB-Inc' => 'FWB Inc', -// 'Network-Computing-Devices' => 'Network Computing Devices', -// 'Cyclone-Microsystems-Inc.' => 'Cyclone Microsystems, Inc.', -// 'Leading-Edge-Products-Inc' => 'Leading Edge Products Inc', -// 'Equinox-Systems-Inc.' => 'Equinox Systems, Inc.', -// 'Intervoice-Inc' => 'Intervoice Inc', -// 'Crest-Microsystem-Inc' => 'Crest Microsystem Inc', -// 'NetPower-Inc' => 'NetPower, Inc', -// 'Cincinnati-Milacron' => 'Cincinnati Milacron', -// 'Workbit-Corporation' => 'Workbit Corporation', -// 'Force-Computers' => 'Force Computers', -// 'Interface-Corp' => 'Interface Corp', -// 'Win-System-Corporation' => 'Win System Corporation', -// 'VMIC' => 'VMIC', -// 'Canopus-Co.-Ltd' => 'Canopus Co., Ltd', -// 'Annabooks' => 'Annabooks', -// 'IC-Corporation' => 'IC Corporation', -// 'Nikon-Systems-Inc' => 'Nikon Systems Inc', -// 'Digi-International' => 'Digi International', -// 'Thinking-Machines-Corp' => 'Thinking Machines Corp', -// 'JAE-Electronics-Inc.' => 'JAE Electronics Inc.', -// 'Megatek' => 'Megatek', -// 'Land-Win-Electronic-Corp' => 'Land Win Electronic Corp', -// 'Melco-Inc' => 'Melco Inc', -// 'Pine-Technology-Ltd' => 'Pine Technology Ltd', -// 'Periscope-Engineering' => 'Periscope Engineering', -// 'Avsys-Corporation' => 'Avsys Corporation', -// 'Voarx-R---D-Inc' => 'Voarx R & D Inc', -// 'Mutech-Corp' => 'Mutech Corp', -// 'Harlequin-Ltd' => 'Harlequin Ltd', -// 'Parallax-Graphics' => 'Parallax Graphics', -// 'Photron-Ltd.' => 'Photron Ltd.', -// 'Xircom' => 'Xircom', -// 'Peer-Protocols-Inc' => 'Peer Protocols Inc', -// 'Maxtor-Corporation' => 'Maxtor Corporation', -// 'Megasoft-Inc' => 'Megasoft Inc', -// 'PFU-Limited' => 'PFU Limited', -// 'OA-Laboratory-Co-Ltd' => 'OA Laboratory Co Ltd', -// 'Rendition' => 'Rendition', -// 'Imagraph-Corporation' => 'Imagraph Corporation', -// 'Broadcom nee-ServerWorks' => 'Broadcom nee ServerWorks', -// 'Mutoh-Industries-Inc' => 'Mutoh Industries Inc', -// 'Thine-Electronics-Inc' => 'Thine Electronics Inc', -// 'Connectware-Inc' => 'Connectware Inc', -// 'Martin-Marietta' => 'Martin-Marietta', -// 'Electronics-for-Imaging' => 'Electronics for Imaging', -// 'Workstation-Technology' => 'Workstation Technology', -// 'Inventec-Corporation' => 'Inventec Corporation', -// 'Loughborough-Sound-Images-Plc' => 'Loughborough Sound Images Plc', -// 'Altera-Corporation' => 'Altera Corporation', -// 'Adobe-Systems-Inc' => 'Adobe Systems, Inc', -// 'Bridgeport-Machines' => 'Bridgeport Machines', -// 'Mitron-Computer-Inc.' => 'Mitron Computer Inc.', -// 'SBE-Incorporated' => 'SBE Incorporated', -// 'Silicon-Engineering' => 'Silicon Engineering', -// 'Alfa-Inc.' => 'Alfa, Inc.', -// 'Toshiba-America-Info-Systems' => 'Toshiba America Info Systems', -// 'A-Trend-Technology' => 'A-Trend Technology', -// 'L-G-Electronics-Inc.' => 'L G Electronics, Inc.', -// 'Atto-Technology' => 'Atto Technology', -// 'Becton---Dickinson' => 'Becton & Dickinson', -// 'T-R-Systems' => 'T/R Systems', -// 'Integrated-Circuit-Systems' => 'Integrated Circuit Systems', -// 'Ricoh-Co-Ltd' => 'Ricoh Co Ltd', -// 'Telmatics-International' => 'Telmatics International', -// 'Fujikura-Ltd' => 'Fujikura Ltd', -// 'Forks-Inc' => 'Forks Inc', -// 'Dataworld-International-Ltd' => 'Dataworld International Ltd', -// 'D-Link-System-Inc' => 'D-Link System Inc', -// 'Matsushita-Electronics-Co-Ltd' => 'Matsushita Electronics Co Ltd', -// 'Hilevel-Technology' => 'Hilevel Technology', -// 'Hypertec-Pty-Limited' => 'Hypertec Pty Limited', -// 'Corollary-Inc' => 'Corollary, Inc', -// 'BitFlow-Inc' => 'BitFlow Inc', -// 'Hermstedt-GmbH' => 'Hermstedt GmbH', -// 'Green-Logic' => 'Green Logic', -// 'Tripace' => 'Tripace', -// 'Artop-Electronic-Corp' => 'Artop Electronic Corp', -// 'Densan-Company-Ltd' => 'Densan Company Ltd', -// 'Zeitnet-Inc.' => 'Zeitnet Inc.', -// 'Toucan-Technology' => 'Toucan Technology', -// 'Ratoc-System-Inc' => 'Ratoc System Inc', -// 'Hytec-Electronics-Ltd' => 'Hytec Electronics Ltd', -// 'Gage-Applied-Sciences-Inc.' => 'Gage Applied Sciences, Inc.', -// 'Lambda-Systems-Inc' => 'Lambda Systems Inc', -// 'Attachmate-Corporation' => 'Attachmate Corporation', -// 'Mind-Share-Inc.' => 'Mind Share, Inc.', -// 'Omega-Micro-Inc.' => 'Omega Micro Inc.', -// 'Information-Technology-Inst.' => 'Information Technology Inst.', -// 'Bug-Inc.-Sapporo-Japan' => 'Bug, Inc. Sapporo Japan', -// 'Fujitsu-Microelectronics-Ltd.' => 'Fujitsu Microelectronics Ltd.', -// 'Bull-HN-Information-Systems' => 'Bull HN Information Systems', -// 'Convex-Computer-Corporation' => 'Convex Computer Corporation', -// 'Hamamatsu-Photonics-K.K.' => 'Hamamatsu Photonics K.K.', -// 'Barco-Graphics-NV' => 'Barco Graphics NV', -// 'Microunity-Systems-Eng.-Inc' => 'Microunity Systems Eng. Inc', -// 'Pure-Data-Ltd.' => 'Pure Data Ltd.', -// 'Power-Computing-Corp.' => 'Power Computing Corp.', -// 'Systech-Corp.' => 'Systech Corp.', -// 'InnoSys-Inc.' => 'InnoSys Inc.', -// 'Actel' => 'Actel', -// 'Lite-On-Communications-Inc' => 'Lite-On Communications Inc', -// 'Aztech-System-Ltd' => 'Aztech System Ltd', -// 'Avid-Technology-Inc.' => 'Avid Technology Inc.', -// 'V3-Semiconductor-Inc.' => 'V3 Semiconductor Inc.', -// 'Apricot-Computers' => 'Apricot Computers', -// 'Eastman-Kodak' => 'Eastman Kodak', -// 'Barr-Systems-Inc.' => 'Barr Systems Inc.', -// 'Radstone-Technology-Plc' => 'Radstone Technology Plc', -// 'United-Video-Corp' => 'United Video Corp', -// 'Motorola' => 'Motorola', -// 'XPoint-Technologies-Inc' => 'XPoint Technologies, Inc', -// 'Pathlight-Technology-Inc.' => 'Pathlight Technology Inc.', -// 'Videotron-Corp' => 'Videotron Corp', -// 'Pyramid-Technology' => 'Pyramid Technology', -// 'Network-Peripherals-Inc' => 'Network Peripherals Inc', -// 'Pinnacle-Systems-Inc.' => 'Pinnacle Systems Inc.', -// 'Astrodesign-Inc.' => 'Astrodesign, Inc.', -// 'Hewlett-Packard' => 'Hewlett Packard', -// 'Sand-Microelectronics' => 'Sand Microelectronics', -// 'NEC-Corporation' => 'NEC Corporation', -// 'Document-Technologies-Inc' => 'Document Technologies, Inc', -// 'Shiva-Corporation' => 'Shiva Corporation', -// 'Dainippon-Screen-Mfg.-Co.-Ltd' => 'Dainippon Screen Mfg. Co. Ltd', -// 'D.C.M.-Data-Systems' => 'D.C.M. Data Systems', -// 'Magma' => 'Magma', -// 'LSI-Systems-Inc' => 'LSI Systems, Inc', -// 'Specialix-Research-Ltd.' => 'Specialix Research Ltd.', -// 'HAL-Computer-Systems-Inc.' => 'HAL Computer Systems, Inc.', -// 'Netaccess' => 'Netaccess', -// 'Auravision' => 'Auravision', -// 'Intercom-Inc.' => 'Intercom Inc.', -// 'Trancell-Systems-Inc' => 'Trancell Systems Inc', -// 'Analog-Devices' => 'Analog Devices', -// 'Ikon-Corporation' => 'Ikon Corporation', -// 'Tekelec-Telecom' => 'Tekelec Telecom', -// 'Trenton-Technology-Inc.' => 'Trenton Technology, Inc.', -// 'TEC-Corporation' => 'TEC Corporation', -// 'Novell' => 'Novell', -// 'Sega-Enterprises-Ltd' => 'Sega Enterprises Ltd', -// 'Questra-Corporation' => 'Questra Corporation', -// 'Crosfield-Electronics-Limited' => 'Crosfield Electronics Limited', -// 'Zoran-Corporation' => 'Zoran Corporation', -// 'New-Wave-PDG' => 'New Wave PDG', -// 'Cray-Communications-A-S' => 'Cray Communications A/S', -// 'GEC-Plessey-Semi-Inc.' => 'GEC Plessey Semi Inc.', -// 'Quicklogic-Corporation' => 'Quicklogic Corporation', -// 'Second-Wave-Inc' => 'Second Wave Inc', -// 'IIX-Consulting' => 'IIX Consulting', -// 'Mitsui-Zosen-System-Research' => 'Mitsui-Zosen System Research', -// 'Highwater-Designs-Ltd.' => 'Highwater Designs Ltd.', -// 'Elsag-Bailey' => 'Elsag Bailey', -// 'Formation-Inc.' => 'Formation Inc.', -// 'Coreco-Inc' => 'Coreco Inc', -// 'Mediamatics' => 'Mediamatics', -// 'Dome-Imaging-Systems-Inc' => 'Dome Imaging Systems Inc', -// 'Nicolet-Technologies-B.V.' => 'Nicolet Technologies B.V.', -// 'Compu-Shack' => 'Compu-Shack', -// 'Symbios-Logic-Inc' => 'Symbios Logic Inc', -// 'Picture-Tel-Japan-K.K.' => 'Picture Tel Japan K.K.', -// 'Keithley-Metrabyte' => 'Keithley Metrabyte', -// 'Kinetic-Systems-Corporation' => 'Kinetic Systems Corporation', -// 'Compex' => 'Compex', -// 'Scientific-Atlanta' => 'Scientific Atlanta', -// 'PMC-Sierra-Inc.' => 'PMC-Sierra Inc.', -// 'I-Cube-Inc' => 'I-Cube Inc', -// 'Datel-Inc' => 'Datel Inc', -// 'Silicon-Magic' => 'Silicon Magic', -// 'High-Street-Consultants' => 'High Street Consultants', -// 'Comtrol-Corporation' => 'Comtrol Corporation', -// 'Scion-Corporation' => 'Scion Corporation', -// 'CSS-Corporation' => 'CSS Corporation', -// 'Vista-Controls-Corp' => 'Vista Controls Corp', -// 'Network-General-Corp.' => 'Network General Corp.', -// 'Array-Corporation' => 'Array Corporation', -// 'Amdahl-Corporation' => 'Amdahl Corporation', -// 'Parsytec-GmbH' => 'Parsytec GmbH', -// 'SCI-Systems-Inc' => 'SCI Systems Inc', -// 'Synaptel' => 'Synaptel', -// 'Adaptive-Solutions' => 'Adaptive Solutions', -// 'Technical-Corp.' => 'Technical Corp.', -// 'Compression-Labs-Inc.' => 'Compression Labs, Inc.', -// 'Cyclades-Corporation' => 'Cyclades Corporation', -// 'Essential-Communications' => 'Essential Communications', -// 'Hyperparallel-Technologies' => 'Hyperparallel Technologies', -// 'Braintech-Inc' => 'Braintech Inc', -// 'Kingston-Technology-Corp.' => 'Kingston Technology Corp.', -// 'Interware-Co.-Ltd' => 'Interware Co., Ltd', -// 'Purup-Prepress-A-S' => 'Purup Prepress A/S', -// 'O2-Micro-Inc.' => 'O2 Micro, Inc.', -// 'Hybricon-Corp.' => 'Hybricon Corp.', -// 'First-Virtual-Corporation' => 'First Virtual Corporation', -// '3Dfx-Interactive-Inc.' => '3Dfx Interactive, Inc.', -// 'Nippon-Texaco.-Ltd' => 'Nippon Texaco., Ltd', -// 'CSPI' => 'CSPI', -// 'Arcus-Technology-Inc.' => 'Arcus Technology, Inc.', -// 'Ariel-Corporation' => 'Ariel Corporation', -// 'Contec-Co.-Ltd' => 'Contec Co., Ltd', -// 'Ancor-Communications-Inc.' => 'Ancor Communications, Inc.', -// 'Interactive-Images' => 'Interactive Images', -// 'Power-I-O-Inc.' => 'Power I/O, Inc.', -// 'Tech-Source' => 'Tech-Source', -// 'Norsk-Elektro-Optikk-A-S' => 'Norsk Elektro Optikk A/S', -// 'Data-Kinesis-Inc.' => 'Data Kinesis Inc.', -// 'Integrated-Telecom' => 'Integrated Telecom', -// 'Sican-GmbH' => 'Sican GmbH', -// 'Aztech-System-Ltd' => 'Aztech System Ltd', -// 'Xyratex' => 'Xyratex', -// 'Andrew-Corporation' => 'Andrew Corporation', -// 'Fishcamp-Engineering' => 'Fishcamp Engineering', -// 'Woodward-McCoach-Inc.' => 'Woodward McCoach, Inc.', -// 'GPT-Limited' => 'GPT Limited', -// 'Bus-Tech-Inc.' => 'Bus-Tech, Inc.', -// 'Risq-Modular-Systems-Inc.' => 'Risq Modular Systems, Inc.', -// 'Sigma-Designs-Corporation' => 'Sigma Designs Corporation', -// 'Alta-Technology-Corporation' => 'Alta Technology Corporation', -// 'Adtran' => 'Adtran', -// '3DO-Company' => '3DO Company', -// 'Visicom-Laboratories-Inc.' => 'Visicom Laboratories, Inc.', -// 'Seeq-Technology-Inc.' => 'Seeq Technology, Inc.', -// 'Century-Systems-Inc.' => 'Century Systems, Inc.', -// 'Engineering-Design-Team-Inc.' => 'Engineering Design Team, Inc.', -// 'Simutech-Inc.' => 'Simutech, Inc.', -// 'C-Cube-Microsystems' => 'C-Cube Microsystems', -// 'Marathon-Technologies-Corp.' => 'Marathon Technologies Corp.', -// 'DSC-Communications' => 'DSC Communications', -// 'Delphax' => 'Delphax', -// 'A.P.D.-S.A.' => 'A.P.D., S.A.', -// 'Dipix-Technologies-Inc.' => 'Dipix Technologies, Inc.', -// 'Xylon-Research-Inc.' => 'Xylon Research, Inc.', -// 'Central-Data-Corporation' => 'Central Data Corporation', -// 'Samsung-Electronics-Co.-Ltd.' => 'Samsung Electronics Co., Ltd.', -// 'AEG-Electrocom-GmbH' => 'AEG Electrocom GmbH', -// 'SBS-Greenspring-Modular-I-O' => 'SBS/Greenspring Modular I/O', -// 'Solitron-Technologies-Inc.' => 'Solitron Technologies, Inc.', -// 'Stallion-Technologies-Inc.' => 'Stallion Technologies, Inc.', -// 'Cylink' => 'Cylink', -// 'Infortrend-Technology-Inc.' => 'Infortrend Technology, Inc.', -// 'VLSI-Solutions-Oy' => 'VLSI Solutions Oy', -// 'Guzik-Technical-Enterprises' => 'Guzik Technical Enterprises', -// 'Linear-Systems-Ltd.' => 'Linear Systems Ltd.', -// 'Optibase-Ltd' => 'Optibase Ltd', -// 'Perceptive-Solutions-Inc.' => 'Perceptive Solutions, Inc.', -// 'Vertex-Networks-Inc.' => 'Vertex Networks, Inc.', -// 'Gilbarco-Inc.' => 'Gilbarco, Inc.', -// 'Allied-Telesyn-International' => 'Allied Telesyn International', -// 'ABB-Power-Systems' => 'ABB Power Systems', -// 'Asix-Electronics-Corporation' => 'Asix Electronics Corporation', -// 'Aurora-Technologies-Inc.' => 'Aurora Technologies, Inc.', -// 'ESS-Technology' => 'ESS Technology', -// 'Specialvideo-Engineering-SRL' => 'Specialvideo Engineering SRL', -// 'Concurrent-Technologies-Inc.' => 'Concurrent Technologies, Inc.', -// 'Intersil-Corporation' => 'Intersil Corporation', -// 'ES-Computer-Company-Ltd.' => 'ES Computer Company, Ltd.', -// 'Sonic-Solutions' => 'Sonic Solutions', -// 'Aval-Nagasaki-Corporation' => 'Aval Nagasaki Corporation', -// 'Casio-Computer-Co.-Ltd.' => 'Casio Computer Co., Ltd.', -// 'Microdyne-Corporation' => 'Microdyne Corporation', -// 'S.-A.-Telecommunications' => 'S. A. Telecommunications', -// 'Tektronix' => 'Tektronix', -// 'Thomson-CSF-TTM' => 'Thomson-CSF/TTM', -// 'Lexmark-International-Inc.' => 'Lexmark International, Inc.', -// 'Adax-Inc.' => 'Adax, Inc.', -// 'Northern-Telecom' => 'Northern Telecom', -// 'Splash-Technology-Inc.' => 'Splash Technology, Inc.', -// 'Silicon-Motion-Inc.' => 'Silicon Motion, Inc.', -// 'Olympus-Optical-Co.-Ltd.' => 'Olympus Optical Co., Ltd.', -// 'GW-Instruments' => 'GW Instruments', -// 'Telematics-International' => 'Telematics International', -// 'Hughes-Network-Systems' => 'Hughes Network Systems', -// 'Ensoniq' => 'Ensoniq', -// 'Network-Appliance-Corporation' => 'Network Appliance Corporation', -// 'Comstream' => 'Comstream', -// 'Transmeta-Corporation' => 'Transmeta Corporation', -// 'Rockwell-International' => 'Rockwell International', -// 'Pixera-Corporation' => 'Pixera Corporation', -// 'Crosspoint-Solutions-Inc.' => 'Crosspoint Solutions, Inc.', -// 'Vela-Research' => 'Vela Research', -// 'Winnov-L.P.' => 'Winnov, L.P.', -// 'Fujifilm' => 'Fujifilm', -// 'Photoscript-Group-Ltd.' => 'Photoscript Group Ltd.', -// 'Yokogawa-Electric-Corporation' => 'Yokogawa Electric Corporation', -// 'Davicom-Semiconductor-Inc.' => 'Davicom Semiconductor, Inc.', -// 'Sahara-Networks-Inc.' => 'Sahara Networks, Inc.', -// 'Platform-Technologies-Inc.' => 'Platform Technologies, Inc.', -// 'Mazet-GmbH' => 'Mazet GmbH', -// 'M-Pact-Inc.' => 'M-Pact, Inc.', -// 'Timestep-Corporation' => 'Timestep Corporation', -// 'AVC-Technology-Inc.' => 'AVC Technology, Inc.', -// 'Asante-Technologies-Inc.' => 'Asante Technologies, Inc.', -// 'Transwitch-Corporation' => 'Transwitch Corporation', -// 'Retix-Corporation' => 'Retix Corporation', -// 'G2-Networks-Inc.' => 'G2 Networks, Inc.', -// 'Tateno-Dennou-Inc.' => 'Tateno Dennou, Inc.', -// 'Sord-Computer-Corporation' => 'Sord Computer Corporation', -// 'NCS-Computer-Italia' => 'NCS Computer Italia', -// 'Tritech-Microelectronics-Inc' => 'Tritech Microelectronics Inc', -// 'Media-Reality-Technology' => 'Media Reality Technology', -// 'Rhetorex-Inc.' => 'Rhetorex, Inc.', -// 'Imagenation-Corporation' => 'Imagenation Corporation', -// 'Kofax-Image-Products' => 'Kofax Image Products', -// 'Knowledge-Technology-Lab.' => 'Knowledge Technology Lab.', -// 'VMetro-inc.' => 'VMetro, inc.', -// 'Image-Access' => 'Image Access', -// 'Jaycor' => 'Jaycor', -// 'Compcore-Multimedia-Inc.' => 'Compcore Multimedia, Inc.', -// 'Victor-Company-of-Japan-Ltd.' => 'Victor Company of Japan, Ltd.', -// 'OEC-Medical-Systems-Inc.' => 'OEC Medical Systems, Inc.', -// 'Allen-Bradley-Company' => 'Allen-Bradley Company', -// 'Simpact-Associates-Inc.' => 'Simpact Associates, Inc.', -// 'Newgen-Systems-Corporation' => 'Newgen Systems Corporation', -// 'Lucent-Technologies' => 'Lucent Technologies', -// 'Vision-Dynamics-Ltd.' => 'Vision Dynamics Ltd.', -// 'Scalable-Networks-Inc.' => 'Scalable Networks, Inc.', -// 'AMO-GmbH' => 'AMO GmbH', -// 'News-Datacom' => 'News Datacom', -// 'Xiotech-Corporation' => 'Xiotech Corporation', -// 'SDL-Communications-Inc.' => 'SDL Communications, Inc.', -// 'Measurex-Corporation' => 'Measurex Corporation', -// 'Multidata-GmbH' => 'Multidata GmbH', -// 'Alteon-Networks-Inc.' => 'Alteon Networks Inc.', -// 'TDK-USA-Corp' => 'TDK USA Corp', -// 'Jorge-Scientific-Corp' => 'Jorge Scientific Corp', -// 'GammaLink' => 'GammaLink', -// 'General-Signal-Networks' => 'General Signal Networks', -// 'Inter-Face-Co-Ltd' => 'Inter-Face Co Ltd', -// 'FutureTel-Inc' => 'FutureTel Inc', -// 'Granite-Systems-Inc.' => 'Granite Systems Inc.', -// 'Natural-Microsystems' => 'Natural Microsystems', -// 'Korg' => 'Korg', -// 'BittWare-Inc.' => 'BittWare, Inc.', -// 'Nippon-Unisoft-Corporation' => 'Nippon Unisoft Corporation', -// 'Array-Microsystems' => 'Array Microsystems', -// 'Computerm-Corp.' => 'Computerm Corp.', -// 'Anchor-Chips-Inc.' => 'Anchor Chips Inc.', -// 'Fujifilm-Microdevices' => 'Fujifilm Microdevices', -// 'Infimed' => 'Infimed', -// 'GMM-Research-Corp' => 'GMM Research Corp', -// 'Mentec-Limited' => 'Mentec Limited', -// 'Holtek-Microelectronics-Inc' => 'Holtek Microelectronics Inc', -// 'Connect-Tech-Inc' => 'Connect Tech Inc', -// 'Picture-Elements-Incorporated' => 'Picture Elements Incorporated', -// 'Mitani-Corporation' => 'Mitani Corporation', -// 'Dialogic-Corp' => 'Dialogic Corp', -// 'G-Force-Co-Ltd' => 'G Force Co, Ltd', -// 'Gigi-Operations' => 'Gigi Operations', -// 'Integrated-Computing-Engines' => 'Integrated Computing Engines', -// 'Antex-Electronics-Corporation' => 'Antex Electronics Corporation', -// 'Aims-Lab' => 'Aims Lab', -// 'Netspeed-Inc.' => 'Netspeed Inc.', -// 'Prophet-Systems-Inc.' => 'Prophet Systems, Inc.', -// 'GDE-Systems-Inc.' => 'GDE Systems, Inc.', -// 'PSITech' => 'PSITech', -// 'Vingmed-Sound-A-S' => 'Vingmed Sound A/S', -// 'Ulticom-Formerly-DGM-S' => 'Ulticom (Formerly DGM&S)', -// 'Equator-Technologies-Inc' => 'Equator Technologies Inc', -// 'Analogic-Corp' => 'Analogic Corp', -// 'Biotronic-SRL' => 'Biotronic SRL', -// 'Pericom-Semiconductor' => 'Pericom Semiconductor', -// 'Aculab-PLC' => 'Aculab PLC', -// 'True-Time-Inc.' => 'True Time Inc.', -// 'Annapolis-Micro-Systems-Inc' => 'Annapolis Micro Systems, Inc', -// 'Management-Graphics' => 'Management Graphics', -// 'Rainbow-Technologies' => 'Rainbow Technologies', -// 'SBS-Technologies-Inc' => 'SBS Technologies Inc', -// 'Chase-Research' => 'Chase Research', -// 'Nintendo-Co-Ltd' => 'Nintendo Co, Ltd', -// 'Brooktrout-Technology-Inc' => 'Brooktrout Technology Inc', -// 'Apex-Semiconductor-Inc' => 'Apex Semiconductor Inc', -// 'Cirel-Systems' => 'Cirel Systems', -// 'Sunsgroup-Corporation' => 'Sunsgroup Corporation', -// 'Crisc-Corp' => 'Crisc Corp', -// 'GE-Spacenet' => 'GE Spacenet', -// 'Zuken' => 'Zuken', -// 'Aureal-Semiconductor' => 'Aureal Semiconductor', -// '3A-International-Inc.' => '3A International, Inc.', -// 'Optivision-Inc.' => 'Optivision Inc.', -// 'Orange-Micro' => 'Orange Micro', -// 'Vienna-Systems' => 'Vienna Systems', -// 'Pentek' => 'Pentek', -// 'Sorenson-Vision-Inc' => 'Sorenson Vision Inc', -// 'Gammagraphx-Inc.' => 'Gammagraphx, Inc.', -// 'Radstone-Technology' => 'Radstone Technology', -// 'Megatel' => 'Megatel', -// 'Forks' => 'Forks', -// 'Dawson-France' => 'Dawson France', -// 'Cognex' => 'Cognex', -// 'Electronic-Design-GmbH' => 'Electronic Design GmbH', -// 'Four-Fold-Ltd' => 'Four Fold Ltd', -// 'Spectrum-Signal-Processing' => 'Spectrum Signal Processing', -// 'Capital-Equipment-Corp' => 'Capital Equipment Corp', -// 'I2S' => 'I2S', -// 'Lexicon' => 'Lexicon', -// 'Computer-Sciences-Corp' => 'Computer Sciences Corp', -// 'Innovative-Integration' => 'Innovative Integration', -// 'Juniper-Networks' => 'Juniper Networks', -// 'Netphone-Inc' => 'Netphone, Inc', -// 'Duet-Technologies' => 'Duet Technologies', -// 'Jato-Technologies-Inc.' => 'Jato Technologies Inc.', -// 'AB-Semiconductor-Ltd' => 'AB Semiconductor Ltd', -// 'Ambex-Technologies-Inc' => 'Ambex Technologies, Inc', -// 'Accelerix-Inc' => 'Accelerix Inc', -// 'Yamatake-Honeywell-Co.-Ltd' => 'Yamatake-Honeywell Co. Ltd', -// 'Advanet-Inc' => 'Advanet Inc', -// 'Gespac' => 'Gespac', -// 'Videoserver-Inc' => 'Videoserver, Inc', -// 'Acuity-Imaging-Inc' => 'Acuity Imaging, Inc', -// 'Yaskawa-Electric-Co.' => 'Yaskawa Electric Co.', -// 'Wavesat' => 'Wavesat', -// 'Teradyne-Inc' => 'Teradyne Inc', -// 'ADMtek' => 'ADMtek', -// 'Packet-Engines-Inc.' => 'Packet Engines Inc.', -// 'Fortemedia-Inc' => 'Fortemedia, Inc', -// 'Finisar-Corp.' => 'Finisar Corp.', -// 'Sysmic-Inc.' => 'Sysmic, Inc.', -// 'Xinex-Networks-Inc' => 'Xinex Networks Inc', -// 'Siig-Inc' => 'Siig Inc', -// 'Crypto-AG' => 'Crypto AG', -// 'Arcobel-Graphics-BV' => 'Arcobel Graphics BV', -// 'MTT-Co.-Ltd' => 'MTT Co., Ltd', -// 'Dome-Inc' => 'Dome Inc', -// 'Sphere-Communications' => 'Sphere Communications', -// 'Salix-Technologies-Inc' => 'Salix Technologies, Inc', -// 'Seachange-international' => 'Seachange international', -// 'Voss-scientific' => 'Voss scientific', -// 'quadrant-international' => 'quadrant international', -// 'Productivity-Enhancement' => 'Productivity Enhancement', -// 'Microcom-Inc.' => 'Microcom Inc.', -// 'Broadband-Technologies' => 'Broadband Technologies', -// 'Micrel-Inc' => 'Micrel Inc', -// 'MMC-Networks' => 'MMC Networks', -// 'RadiSys-Corporation' => 'RadiSys Corporation', -// 'Micro-Memory' => 'Micro Memory', -// 'Redcreek-Communications-Inc' => 'Redcreek Communications, Inc', -// 'Videomail-Inc' => 'Videomail, Inc', -// 'Third-Planet-Publishing' => 'Third Planet Publishing', -// 'BT-Electronics' => 'BT Electronics', -// 'Vtel-Corp' => 'Vtel Corp', -// 'Softcom-Microsystems' => 'Softcom Microsystems', -// 'Holontech-Corp' => 'Holontech Corp', -// 'SS-Technologies' => 'SS Technologies', -// 'Virtual-Computer-Corp' => 'Virtual Computer Corp', -// 'SCM-Microsystems' => 'SCM Microsystems', -// 'Atalla-Corp' => 'Atalla Corp', -// 'Kyoto-Microcomputer-Co' => 'Kyoto Microcomputer Co', -// 'Promax-Systems-Inc' => 'Promax Systems Inc', -// 'Phylon-Communications-Inc' => 'Phylon Communications Inc', -// 'Arescom-Inc' => 'Arescom Inc', -// 'Odetics' => 'Odetics', -// 'DTC-Technology-Corp.' => 'DTC Technology Corp.', -// 'ARK-Research-Corp.' => 'ARK Research Corp.', -// 'Chori-Joho-System-Co.-Ltd' => 'Chori Joho System Co. Ltd', -// 'PCTel-Inc' => 'PCTel Inc', -// 'CSTI' => 'CSTI', -// 'Algo-System-Co-Ltd' => 'Algo System Co Ltd', -// 'Systec-Co.-Ltd' => 'Systec Co. Ltd', -// 'Sonix-Inc' => 'Sonix Inc', -// 'Thales-Idatys' => 'Thales Idatys', -// 'Dwave-System-Inc' => 'Dwave System Inc', -// 'Kratos-Analytical-Ltd' => 'Kratos Analytical Ltd', -// 'The-Logical-Co' => 'The Logical Co', -// 'Prisa-Networks' => 'Prisa Networks', -// 'Brain-Boxes' => 'Brain Boxes', -// 'Giganet-Inc' => 'Giganet Inc', -// 'Quatech-Inc' => 'Quatech Inc', -// 'ABB-Network-Partner-AB' => 'ABB Network Partner AB', -// 'Sealevel-Systems-Inc' => 'Sealevel Systems Inc', -// 'I-Data-International-A-S' => 'I-Data International A-S', -// 'Meinberg-Funkuhren' => 'Meinberg Funkuhren', -// 'Soliton-Systems-K.K.' => 'Soliton Systems K.K.', -// 'Fujifacom-Corporation' => 'Fujifacom Corporation', -// 'Phoenix-Technology-Ltd' => 'Phoenix Technology Ltd', -// 'ATM-Communications-Inc' => 'ATM Communications Inc', -// 'Hypercope-GmbH' => 'Hypercope GmbH', -// 'Teijin-Seiki-Co.-Ltd' => 'Teijin Seiki Co. Ltd', -// 'Hitachi-Zosen-Corporation' => 'Hitachi Zosen Corporation', -// 'Skyware-Corporation' => 'Skyware Corporation', -// 'Digigram' => 'Digigram', -// 'High-Soft-Tech' => 'High Soft Tech', -// 'Kawasaki-Steel-Corporation' => 'Kawasaki Steel Corporation', -// 'Adtek-System-Science-Co-Ltd' => 'Adtek System Science Co Ltd', -// 'Gigalabs-Inc' => 'Gigalabs Inc', -// 'Applied-Magic-Inc' => 'Applied Magic Inc', -// 'ATL-Products' => 'ATL Products', -// 'CNet-Technology-Inc' => 'CNet Technology Inc', -// 'Silicon-Vision-Inc' => 'Silicon Vision Inc', -// 'Silicom-Ltd.' => 'Silicom Ltd.', -// 'Argosystems-Inc' => 'Argosystems Inc', -// 'LMC' => 'LMC', -// 'Telemann-Co.-Ltd' => 'Telemann Co. Ltd', -// 'Mark-of-the-Unicorn-Inc' => 'Mark of the Unicorn Inc', -// 'PPT-Vision' => 'PPT Vision', -// 'Iwatsu-Electric-Co-Ltd' => 'Iwatsu Electric Co Ltd', -// 'Dynachip-Corporation' => 'Dynachip Corporation', -// 'Japan-Satellite-Systems-Inc' => 'Japan Satellite Systems Inc', -// 'Sanritz-Automation-Co-Ltd' => 'Sanritz Automation Co Ltd', -// 'Brains-Co.-Ltd' => 'Brains Co. Ltd', -// 'Controlnet-Inc' => 'Controlnet Inc', -// 'Netgear' => 'Netgear', -// 'Video-Domain-Technologies' => 'Video Domain Technologies', -// 'Systran-Corp' => 'Systran Corp', -// 'Applicom-International' => 'Applicom International', -// 'Fusion-Micromedia-Corp' => 'Fusion Micromedia Corp', -// 'Tokimec-Inc' => 'Tokimec Inc', -// 'Silicon-Reality' => 'Silicon Reality', -// 'Future-Techno-Designs-pte-Ltd' => 'Future Techno Designs pte Ltd', -// 'Basler-GmbH' => 'Basler GmbH', -// 'Patapsco-Designs-Inc' => 'Patapsco Designs Inc', -// 'Concept-Development-Inc' => 'Concept Development Inc', -// 'Development-Concepts-Inc' => 'Development Concepts Inc', -// 'Medialight-Inc' => 'Medialight Inc', -// 'Moxa-Technologies-Co-Ltd' => 'Moxa Technologies Co Ltd', -// 'Level-One-Communications' => 'Level One Communications', -// 'Ambicom-Inc' => 'Ambicom Inc', -// 'Cipher-Systems-Inc' => 'Cipher Systems Inc', -// 'Cologne-Chip-Designs-GmbH' => 'Cologne Chip Designs GmbH', -// 'Clarion-co.-Ltd' => 'Clarion co. Ltd', -// 'Rios-systems-Co-Ltd' => 'Rios systems Co Ltd', -// 'Alacritech-Inc' => 'Alacritech Inc', -// 'Quantum-3d-Inc' => 'Quantum 3d Inc', -// 'EPL-limited' => 'EPL limited', -// 'Media4' => 'Media4', -// 'Aethra-s.r.l.' => 'Aethra s.r.l.', -// 'Crystal-Group-Inc' => 'Crystal Group Inc', -// 'Kawasaki-Heavy-Industries-Ltd' => 'Kawasaki Heavy Industries Ltd', -// 'Ositech-Communications-Inc' => 'Ositech Communications Inc', -// 'Hifn-Inc.' => 'Hifn Inc.', -// 'Rascom-Inc' => 'Rascom Inc', -// 'Audio-Digital-Imaging-Inc' => 'Audio Digital Imaging Inc', -// 'Videonics-Inc' => 'Videonics Inc', -// 'Teles-AG' => 'Teles AG', -// 'Exar-Corp.' => 'Exar Corp.', -// 'Broadband-Networks-Inc' => 'Broadband Networks Inc', -// 'Arcom-Control-Systems-Ltd' => 'Arcom Control Systems Ltd', -// 'Motion-Media-Technology-Ltd' => 'Motion Media Technology Ltd', -// 'Nexus-Inc' => 'Nexus Inc', -// 'ALD-Technology-Ltd' => 'ALD Technology Ltd', -// 'T.Sqware' => 'T.Sqware', -// 'Maxspeed-Corp' => 'Maxspeed Corp', -// 'Tamura-corporation' => 'Tamura corporation', -// 'Techno-Chips-Co.-Ltd' => 'Techno Chips Co. Ltd', -// 'Lanart-Corporation' => 'Lanart Corporation', -// 'Wellbean-Co-Inc' => 'Wellbean Co Inc', -// 'ARM' => 'ARM', -// 'Dlog-GmbH' => 'Dlog GmbH', -// 'Logic-Devices-Inc' => 'Logic Devices Inc', -// 'Nokia-Telecommunications-oy' => 'Nokia Telecommunications oy', -// 'Elecom-Co-Ltd' => 'Elecom Co Ltd', -// 'Oxford-Instruments' => 'Oxford Instruments', -// 'Sanyo-Technosound-Co-Ltd' => 'Sanyo Technosound Co Ltd', -// 'Bitran-Corporation' => 'Bitran Corporation', -// 'Sharp-corporation' => 'Sharp corporation', -// 'Miroku-Jyoho-Service-Co.-Ltd' => 'Miroku Jyoho Service Co. Ltd', -// 'Sharewave-Inc' => 'Sharewave Inc', -// 'Microgate-Corporation' => 'Microgate Corporation', -// '3ware-Inc' => '3ware Inc', -// 'Janz-Computer-AG' => 'Janz Computer AG', -// 'Phase-Metrics' => 'Phase Metrics', -// 'Alphi-Technology-Corp' => 'Alphi Technology Corp', -// 'Condor-Engineering-Inc' => 'Condor Engineering Inc', -// 'Blue-Chip-Technology-Ltd' => 'Blue Chip Technology Ltd', -// 'Apptech-Inc' => 'Apptech Inc', -// 'Eaton-Corporation' => 'Eaton Corporation', -// 'Iomega-Corporation' => 'Iomega Corporation', -// 'Yano-Electric-Co-Ltd' => 'Yano Electric Co Ltd', -// 'Metheus-Corporation' => 'Metheus Corporation', -// 'Cocom-A-S' => 'Cocom A/S', -// 'Studio-Audio---Video-Ltd' => 'Studio Audio & Video Ltd', -// 'Techsan-Electronics-Co-Ltd' => 'Techsan Electronics Co Ltd', -// 'Abocom-Systems-Inc' => 'Abocom Systems Inc', -// 'Shark-Multimedia-Inc' => 'Shark Multimedia Inc', -// 'IMC-Networks' => 'IMC Networks', -// 'Graphics-Microsystems-Inc' => 'Graphics Microsystems Inc', -// 'Media-100-Inc' => 'Media 100 Inc', -// 'K.I.-Technology-Co-Ltd' => 'K.I. Technology Co Ltd', -// 'Phobos-corporation' => 'Phobos corporation', -// 'Apex-PC-Solutions-Inc' => 'Apex PC Solutions Inc', -// 'Intresource-Systems-pte-Ltd' => 'Intresource Systems pte Ltd', -// 'Netboost-Corporation' => 'Netboost Corporation', -// 'Multimedia-Bundle-Inc' => 'Multimedia Bundle Inc', -// 'ABB-Robotics-Products-AB' => 'ABB Robotics Products AB', -// 'E-Tech-Inc' => 'E-Tech Inc', -// 'GVC-Corporation' => 'GVC Corporation', -// 'Dynamics-Research-Corporation' => 'Dynamics Research Corporation', -// 'Nest-Inc' => 'Nest Inc', -// 'Calculex-Inc' => 'Calculex Inc', -// 'Telesoft-Design-Ltd' => 'Telesoft Design Ltd', -// 'Argosy-research-Inc' => 'Argosy research Inc', -// 'NAC-Incorporated' => 'NAC Incorporated', -// 'Chip-Express-Corporation' => 'Chip Express Corporation', -// 'Intraserver-Technology-Inc' => 'Intraserver Technology Inc', -// 'Dallas-Semiconductor' => 'Dallas Semiconductor', -// 'Hauppauge-Computer-Works-Inc' => 'Hauppauge Computer Works Inc', -// 'Zydacron-Inc' => 'Zydacron Inc', -// 'Raytheion-E-Systems' => 'Raytheion E-Systems', -// 'Coppercom-Inc' => 'Coppercom Inc', -// 'Oce---Technologies-B.V.' => 'Oce - Technologies B.V.', -// 'Ford-Microelectronics-Inc' => 'Ford Microelectronics Inc', -// 'Mcdata-Corporation' => 'Mcdata Corporation', -// 'Troika-Networks-Inc.' => 'Troika Networks, Inc.', -// 'Kansai-Electric-Co.-Ltd' => 'Kansai Electric Co. Ltd', -// 'C-Media-Electronics-Inc' => 'C-Media Electronics Inc', -// 'Wildfire-Communications' => 'Wildfire Communications', -// 'Ad-Lib-Multimedia-Inc' => 'Ad Lib Multimedia Inc', -// 'NTT-Advanced-Technology-Corp.' => 'NTT Advanced Technology Corp.', -// 'Pentland-Systems-Ltd' => 'Pentland Systems Ltd', -// 'Aydin-Corp' => 'Aydin Corp', -// 'Micro-Science-Inc' => 'Micro Science Inc', -// 'Advantech-Co.-Ltd' => 'Advantech Co. Ltd', -// 'Silicon-Spice-Inc' => 'Silicon Spice Inc', -// 'Artx-Inc' => 'Artx Inc', -// 'CR-Systems-A-S' => 'CR-Systems A/S', -// 'Meilhaus-Electronic-GmbH' => 'Meilhaus Electronic GmbH', -// 'Ascor-Inc' => 'Ascor Inc', -// 'Fundamental-Software-Inc' => 'Fundamental Software Inc', -// 'Excalibur-Systems-Inc' => 'Excalibur Systems Inc', -// 'Oce-Printing-Systems-GmbH' => 'Oce Printing Systems GmbH', -// 'Lava-Computer-mfg-Inc' => 'Lava Computer mfg Inc', -// 'Aloka-Co.-Ltd' => 'Aloka Co. Ltd', -// 'Timedia-Technology-Co-Ltd' => 'Timedia Technology Co Ltd', -// 'DSP-Research-Inc' => 'DSP Research Inc', -// 'Elmic-Systems-Inc' => 'Elmic Systems Inc', -// 'Matsushita-Electric-Works-Ltd' => 'Matsushita Electric Works Ltd', -// 'Goepel-Electronic-GmbH' => 'Goepel Electronic GmbH', -// 'Salient-Systems-Corp' => 'Salient Systems Corp', -// 'Midas-lab-Inc' => 'Midas lab Inc', -// 'Ikos-Systems-Inc' => 'Ikos Systems Inc', -// 'Addonics' => 'Addonics', -// 'Microsoft-Corporation' => 'Microsoft Corporation', -// 'Oxford-Semiconductor-Ltd' => 'Oxford Semiconductor Ltd', -// 'Multiwave-Innovation-pte-Ltd' => 'Multiwave Innovation pte Ltd', -// 'Convergenet-Technologies-Inc' => 'Convergenet Technologies Inc', -// 'Excel-Switching-Corp' => 'Excel Switching Corp', -// 'Apache-Micro-Peripherals-Inc' => 'Apache Micro Peripherals Inc', -// 'Zoom-Telephonics-Inc' => 'Zoom Telephonics Inc', -// 'Digitan-Systems-Inc' => 'Digitan Systems Inc', -// 'Fanuc-Ltd' => 'Fanuc Ltd', -// 'Visiontech-Ltd' => 'Visiontech Ltd', -// 'Psion-Dacom-plc' => 'Psion Dacom plc', -// 'Ads-Technologies-Inc' => 'Ads Technologies Inc', -// 'Ygrec-Systems-Co-Ltd' => 'Ygrec Systems Co Ltd', -// 'Custom-Technology-Corp.' => 'Custom Technology Corp.', -// 'Videoserver-Connections' => 'Videoserver Connections', -// 'Chelsio-Communications-Inc' => 'Chelsio Communications Inc', -// 'Storage-Technology-Corp.' => 'Storage Technology Corp.', -// 'Better-On-Line-Solutions' => 'Better On-Line Solutions', -// 'Edec-Co-Ltd' => 'Edec Co Ltd', -// 'Unex-Technology-Corp.' => 'Unex Technology Corp.', -// 'Kingmax-Technology-Inc' => 'Kingmax Technology Inc', -// 'Radiolan' => 'Radiolan', -// 'Minton-Optic-Industry-Co-Ltd' => 'Minton Optic Industry Co Ltd', -// 'Pix-stream-Inc' => 'Pix stream Inc', -// 'Vitec-Multimedia' => 'Vitec Multimedia', -// 'Radicom-Research-Inc' => 'Radicom Research Inc', -// 'Gilat-Satellite-Networks' => 'Gilat Satellite Networks', -// 'Edimax-Computer-Co.' => 'Edimax Computer Co.', -// 'Eltec-Elektronik-GmbH' => 'Eltec Elektronik GmbH', -// 'CIS-Technology-Inc' => 'CIS Technology Inc', -// 'Nissin-Inc-Co' => 'Nissin Inc Co', -// 'Atmel-dream' => 'Atmel-dream', -// 'Stargate-Solutions-Inc' => 'Stargate Solutions Inc', -// 'Amlogic-Inc' => 'Amlogic Inc', -// 'Tamarack-Microelectronics-Inc' => 'Tamarack Microelectronics Inc', -// 'Jones-Futurex-Inc' => 'Jones Futurex Inc', -// 'ALGOL-Corp.' => 'ALGOL Corp.', -// 'AGIE-Ltd' => 'AGIE Ltd', -// 'Phoenix-Contact-GmbH---Co.' => 'Phoenix Contact GmbH & Co.', -// 'Unibrain-S.A.' => 'Unibrain S.A.', -// 'TRW' => 'TRW', -// 'Logical-DO-Ltd' => 'Logical DO Ltd', -// 'Graphin-Co-Ltd' => 'Graphin Co Ltd', -// 'AIM-GmBH' => 'AIM GmBH', -// 'Alesis-Studio-Electronics' => 'Alesis Studio Electronics', -// 'TUT-Systems-Inc' => 'TUT Systems Inc', -// 'Adlink-Technology' => 'Adlink Technology', -// 'Catalina-Research-Inc' => 'Catalina Research Inc', -// 'Samsung-Electronics-Co-Ltd' => 'Samsung Electronics Co Ltd', -// 'OLITEC' => 'OLITEC', -// 'Askey-Computer-Corp.' => 'Askey Computer Corp.', -// 'Octave-Communications-Ind.' => 'Octave Communications Ind.', -// 'SP3D-Chip-Design-GmBH' => 'SP3D Chip Design GmBH', -// 'MYCOM-Inc' => 'MYCOM Inc', -// 'Altiga-Networks' => 'Altiga Networks', -// 'Logic-Plus-Plus-Inc' => 'Logic Plus Plus Inc', -// 'Nuera-Communications-Inc' => 'Nuera Communications Inc', -// 'Giga-byte-Technology' => 'Giga-byte Technology', -// 'DOOIN-Electronics' => 'DOOIN Electronics', -// 'Escalate-Networks-Inc' => 'Escalate Networks Inc', -// 'PRAIM-SRL' => 'PRAIM SRL', -// 'Cryptek' => 'Cryptek', -// 'Gallant-Computer-Inc' => 'Gallant Computer Inc', -// 'Aashima-Technology-B.V.' => 'Aashima Technology B.V.', -// 'Baldor-Electric-Company' => 'Baldor Electric Company', -// 'DYNARC-INC' => 'DYNARC INC', -// 'Avermedia-Technologies-Inc' => 'Avermedia Technologies Inc', -// 'Fast-Corporation' => 'Fast Corporation', -// 'GN-NETTEST-Telecom-DIV.' => 'GN NETTEST Telecom DIV.', -// 'Designpro-Inc.' => 'Designpro Inc.', -// 'DIGICOM-SPA' => 'DIGICOM SPA', -// 'AMBIT-Microsystem-Corp.' => 'AMBIT Microsystem Corp.', -// 'Cleveland-Motion-Controls' => 'Cleveland Motion Controls', -// 'IFR' => 'IFR', -// 'Parascan-Technologies-Ltd' => 'Parascan Technologies Ltd', -// 'Ruby-Tech-Corp.' => 'Ruby Tech Corp.', -// 'Tachyon-INC.' => 'Tachyon, INC.', -// 'Bay-Networks' => 'Bay Networks', -// 'DAIKIN-Industries-Ltd' => 'DAIKIN Industries, Ltd', -// 'ZAPEX-Technologies-Inc' => 'ZAPEX Technologies Inc', -// 'Doug-Carson---Associates' => 'Doug Carson & Associates', -// 'PICAZO-Communications' => 'PICAZO Communications', -// 'MORTARA-Instrument-Inc' => 'MORTARA Instrument Inc', -// 'Net-Insight' => 'Net Insight', -// 'DIATREND-Corporation' => 'DIATREND Corporation', -// 'TORAY-Industries-Inc' => 'TORAY Industries Inc', -// 'FORMOSA-Industrial-Computing' => 'FORMOSA Industrial Computing', -// 'ABIT-Computer-Corp.' => 'ABIT Computer Corp.', -// 'AWARE-Inc.' => 'AWARE, Inc.', -// 'Interworks-Computer-Products' => 'Interworks Computer Products', -// 'NIHON-UNISYS-Ltd.' => 'NIHON UNISYS, Ltd.', -// 'SCII-Telecom' => 'SCII Telecom', -// 'BIOPAC-Systems-Inc' => 'BIOPAC Systems Inc', -// 'LABWAY-Corporation' => 'LABWAY Corporation', -// 'Logic-Corporation' => 'Logic Corporation', -// 'ERMA---Electronic-GmBH' => 'ERMA - Electronic GmBH', -// 'MARQUETTE-Medical-Systems' => 'MARQUETTE Medical Systems', -// 'KONTRON-Electronik-GmBH' => 'KONTRON Electronik GmBH', -// 'KYE-Systems-Corporation' => 'KYE Systems Corporation', -// 'OPTO' => 'OPTO', -// 'INNOMEDIALOGIC-Inc.' => 'INNOMEDIALOGIC Inc.', -// 'C.P.-Technology-Co.-Ltd' => 'C.P. Technology Co. Ltd', -// 'DIGICOM-Systems-Inc.' => 'DIGICOM Systems, Inc.', -// 'OSI-Plus-Corporation' => 'OSI Plus Corporation', -// 'Plant-Equipment-Inc.' => 'Plant Equipment, Inc.', -// 'Stone-Microsystems-PTY-Ltd.' => 'Stone Microsystems PTY Ltd.', -// 'ZEAL-Corporation' => 'ZEAL Corporation', -// 'Time-Logic-Corporation' => 'Time Logic Corporation', -// 'MAKER-Communications' => 'MAKER Communications', -// 'WINTOP-Technology-Inc.' => 'WINTOP Technology, Inc.', -// 'JOYTECH-Computer-Co.-Ltd.' => 'JOYTECH Computer Co., Ltd.', -// 'SMA-Regelsysteme-GmBH' => 'SMA Regelsysteme GmBH', -// 'TEWS-Technologies-GmbH' => 'TEWS Technologies GmbH', -// 'EMTEC-CO.-Ltd' => 'EMTEC CO., Ltd', -// 'ANDOR-Technology-Ltd' => 'ANDOR Technology Ltd', -// 'SEIKO-Instruments-Inc' => 'SEIKO Instruments Inc', -// 'OVISLINK-Corp.' => 'OVISLINK Corp.', -// 'NEWTEK-Inc' => 'NEWTEK Inc', -// 'Mapletree-Networks-Inc.' => 'Mapletree Networks Inc.', -// 'LECTRON-Co-Ltd' => 'LECTRON Co Ltd', -// 'SOFTING-GmBH' => 'SOFTING GmBH', -// 'Systembase-Co-Ltd' => 'Systembase Co Ltd', -// 'Millennium-Engineering-Inc' => 'Millennium Engineering Inc', -// 'Maverick-Networks' => 'Maverick Networks', -// 'GVC-BCM-Advanced-Research' => 'GVC/BCM Advanced Research', -// 'INOVA-Computers-GmBH---Co-KG' => 'INOVA Computers GmBH & Co KG', -// 'MYTHOS-Systems-Inc' => 'MYTHOS Systems Inc', -// 'HIVERTEC-Inc' => 'HIVERTEC Inc', -// 'Advanced-MOS-Technology-Inc' => 'Advanced MOS Technology Inc', -// 'Mentor-Graphics-Corp.' => 'Mentor Graphics Corp.', -// 'Novaweb-Technologies-Inc' => 'Novaweb Technologies Inc', -// 'Time-Space-Radio-AB' => 'Time Space Radio AB', -// 'CTI-Inc' => 'CTI, Inc', -// 'Guillemot-Corporation' => 'Guillemot Corporation', -// 'Nextcom-K.K.' => 'Nextcom K.K.', -// 'ENNOVATE-Networks-Inc' => 'ENNOVATE Networks Inc', -// 'XPEED-Inc' => 'XPEED Inc', -// 'Creamware-GmBH' => 'Creamware GmBH', -// 'Quantum-Data-Corp.' => 'Quantum Data Corp.', -// 'PROXIM-Inc' => 'PROXIM Inc', -// 'Techsoft-Technology-Co-Ltd' => 'Techsoft Technology Co Ltd', -// 'INTERNIX-Inc.' => 'INTERNIX Inc.', -// 'SEMTECH-Corporation' => 'SEMTECH Corporation', -// 'Globespan-Semiconductor-Inc.' => 'Globespan Semiconductor Inc.', -// 'CARDIO-Control-N.V.' => 'CARDIO Control N.V.', -// 'L3-Communications' => 'L3 Communications', -// 'SPIDER-Communications-Inc.' => 'SPIDER Communications Inc.', -// 'COMPAL-Electronics-Inc' => 'COMPAL Electronics Inc', -// 'MYRICOM-Inc.' => 'MYRICOM Inc.', -// 'DTK-Computer' => 'DTK Computer', -// 'MEDIATEK-Corp.' => 'MEDIATEK Corp.', -// 'Automation-Products-AB' => 'Automation Products AB', -// 'Data-Race-Inc' => 'Data Race Inc', -// 'Turbocomm-Tech.-Inc.' => 'Turbocomm Tech. Inc.', -// 'ODIN-Telesystems-Inc' => 'ODIN Telesystems Inc', -// 'PE-Logic-Corp.' => 'PE Logic Corp.', -// 'Billionton-Systems-Inc' => 'Billionton Systems Inc', -// 'NAKAYO-Telecommunications-Inc' => 'NAKAYO Telecommunications Inc', -// 'Universal-Scientific-Ind.' => 'Universal Scientific Ind.', -// 'Whistle-Communications' => 'Whistle Communications', -// 'TEK-Microsystems-Inc.' => 'TEK Microsystems Inc.', -// 'Ericsson-Axe-R---D' => 'Ericsson Axe R & D', -// 'Computer-Hi-Tech-Co-Ltd' => 'Computer Hi-Tech Co Ltd', -// 'Titan-Electronics-Inc' => 'Titan Electronics Inc', -// 'CIRTECH-UK-Ltd' => 'CIRTECH (UK) Ltd', -// 'Panacom-Technology-Corp' => 'Panacom Technology Corp', -// 'Nitsuko-Corporation' => 'Nitsuko Corporation', -// 'Accusys-Inc' => 'Accusys Inc', -// 'Hirakawa-Hewtech-Corp' => 'Hirakawa Hewtech Corp', -// 'HOPF-Elektronik-GmBH' => 'HOPF Elektronik GmBH', -// 'AFAVLAB-Technology-Inc' => 'AFAVLAB Technology Inc', -// 'Amplicon-Liveline-Ltd' => 'Amplicon Liveline Ltd', -// 'Boulder-Design-Labs-Inc' => 'Boulder Design Labs Inc', -// 'ASIC-Communications-Corp' => 'ASIC Communications Corp', -// 'INVERTEX' => 'INVERTEX', -// 'INFOLIBRIA' => 'INFOLIBRIA', -// 'AMTELCO' => 'AMTELCO', -// 'Broadcom-Corporation' => 'Broadcom Corporation', -// 'Pixelfusion-Ltd' => 'Pixelfusion Ltd', -// 'SHINING-Technology-Inc' => 'SHINING Technology Inc', -// '3CX' => '3CX', -// 'RAYCER-Inc' => 'RAYCER Inc', -// 'GARNETS-System-CO-Ltd' => 'GARNETS System CO Ltd', -// 'Planex-Communications-Inc' => 'Planex Communications, Inc', -// 'SEIKO-EPSON-Corp' => 'SEIKO EPSON Corp', -// 'ACQIRIS' => 'ACQIRIS', -// 'DATAKINETICS-Ltd' => 'DATAKINETICS Ltd', -// 'MASPRO-KENKOH-Corp' => 'MASPRO KENKOH Corp', -// 'CARRY-Computer-ENG.-CO-Ltd' => 'CARRY Computer ENG. CO Ltd', -// 'CANON-RESEACH-CENTRE-FRANCE' => 'CANON RESEACH CENTRE FRANCE', -// 'Conexant-Systems-Inc.' => 'Conexant Systems, Inc.', -// 'MOBILITY-Electronics' => 'MOBILITY Electronics', -// 'BroadLogic' => 'BroadLogic', -// 'SOPAC-Ltd' => 'SOPAC Ltd', -// 'COYOTE-Technologies-LLC' => 'COYOTE Technologies LLC', -// 'WOLF-Technology-Inc' => 'WOLF Technology Inc', -// 'AUDIOCODES-Inc' => 'AUDIOCODES Inc', -// 'AG-COMMUNICATIONS' => 'AG COMMUNICATIONS', -// 'WANDEL---GOLTERMANN' => 'WANDEL & GOLTERMANN', -// 'TRANSAS-MARINE-UK-Ltd' => 'TRANSAS MARINE (UK) Ltd', -// 'Quadrics-Ltd' => 'Quadrics Ltd', -// 'JAPAN-Computer-Industry-Inc' => 'JAPAN Computer Industry Inc', -// 'ARCHTEK-TELECOM-Corp' => 'ARCHTEK TELECOM Corp', -// 'TWINHEAD-INTERNATIONAL-Corp' => 'TWINHEAD INTERNATIONAL Corp', -// 'DELTA-Electronics-Inc' => 'DELTA Electronics, Inc', -// 'BANKSOFT-CANADA-Ltd' => 'BANKSOFT CANADA Ltd', -// 'KAWASAKI-LSI-USA-Inc' => 'KAWASAKI LSI USA Inc', -// 'KAISER-Electronics' => 'KAISER Electronics', -// 'CHAMELEON-Systems-Inc' => 'CHAMELEON Systems Inc', -// 'FORVUS-RESEARCH-Inc' => 'FORVUS RESEARCH Inc', -// 'YAMASHITA-Systems-Corp' => 'YAMASHITA Systems Corp', -// 'KYOPAL-CO-Ltd' => 'KYOPAL CO Ltd', -// 'WARPSPPED-Inc' => 'WARPSPPED Inc', -// 'C-PORT-Corp' => 'C-PORT Corp', -// 'INTEC-GmbH' => 'INTEC GmbH', -// 'BEHAVIOR-TECH-Computer-Corp' => 'BEHAVIOR TECH Computer Corp', -// 'CENTILLIUM-Technology-Corp' => 'CENTILLIUM Technology Corp', -// 'ROSUN-Technologies-Inc' => 'ROSUN Technologies Inc', -// 'Raychem' => 'Raychem', -// 'TFL-LAN-Inc' => 'TFL LAN Inc', -// 'Advent-design' => 'Advent design', -// 'MYSON-Technology-Inc' => 'MYSON Technology Inc', -// 'ECHOTEK-Corp' => 'ECHOTEK Corp', -// 'Globetek' => 'Globetek', -// 'COMBOX-Ltd' => 'COMBOX Ltd', -// 'DIGITAL-AUDIO-LABS-Inc' => 'DIGITAL AUDIO LABS Inc', -// 'MATRIX-Corp' => 'MATRIX Corp', -// 'TOPIC-SEMICONDUCTOR-Corp' => 'TOPIC SEMICONDUCTOR Corp', -// 'CHAPLET-System-Inc' => 'CHAPLET System Inc', -// 'BELL-Corp' => 'BELL Corp', -// 'MainPine-Ltd' => 'MainPine Ltd', -// 'MUSIC-Semiconductors' => 'MUSIC Semiconductors', -// 'ENE-Technology-Inc' => 'ENE Technology Inc', -// 'IMPACT-Technologies' => 'IMPACT Technologies', -// 'ISS-Inc' => 'ISS, Inc', -// 'SOLECTRON' => 'SOLECTRON', -// 'ACKSYS' => 'ACKSYS', -// 'AMERICAN-MICROSystems-Inc' => 'AMERICAN MICROSystems Inc', -// 'QUICKTURN-DESIGN-Systems' => 'QUICKTURN DESIGN Systems', -// 'FLYTECH-Technology-CO-Ltd' => 'FLYTECH Technology CO Ltd', -// 'MACRAIGOR-Systems-LLC' => 'MACRAIGOR Systems LLC', -// 'QUANTA-Computer-Inc' => 'QUANTA Computer Inc', -// 'MELEC-Inc' => 'MELEC Inc', -// 'PHILIPS---CRYPTO' => 'PHILIPS - CRYPTO', -// 'ACQIS-Technology-Inc' => 'ACQIS Technology Inc', -// 'CHRYON-Corp' => 'CHRYON Corp', -// 'ECHELON-Corp' => 'ECHELON Corp', -// 'BALTIMORE' => 'BALTIMORE', -// 'ROAD-Corp' => 'ROAD Corp', -// 'EVERGREEN-Technologies-Inc' => 'EVERGREEN Technologies Inc', -// 'ACTIS-Computer' => 'ACTIS Computer', -// 'DATALEX-COMMUNCATIONS' => 'DATALEX COMMUNCATIONS', -// 'ARALION-Inc' => 'ARALION Inc', -// 'ONO-SOKKI' => 'ONO SOKKI', -// 'TERRATEC-Electronic-GmbH' => 'TERRATEC Electronic GmbH', -// 'ANTAL-Electronic' => 'ANTAL Electronic', -// 'FILANET-Corp' => 'FILANET Corp', -// 'TECHWELL-Inc' => 'TECHWELL Inc', -// 'MIPS-Technologies-Inc.' => 'MIPS Technologies, Inc.', -// 'PROVIDEO-MULTIMEDIA-Co-Ltd' => 'PROVIDEO MULTIMEDIA Co Ltd', -// 'MACHONE-Communications' => 'MACHONE Communications', -// 'SILICON-Laboratories' => 'SILICON Laboratories', -// 'DCM-DATA-Systems' => 'DCM DATA Systems', -// 'VISIONTEK' => 'VISIONTEK', -// 'IOI-Technology-Corp' => 'IOI Technology Corp', -// 'MITUTOYO-Corp' => 'MITUTOYO Corp', -// 'JET-PROPULSION-Laboratory' => 'JET PROPULSION Laboratory', -// 'MAX-Technologies-Inc' => 'MAX Technologies Inc', -// 'COMPUTEX-Co-Ltd' => 'COMPUTEX Co Ltd', -// 'VISUAL-Technology-Inc' => 'VISUAL Technology Inc', -// 'SERVOTEST-Ltd' => 'SERVOTEST Ltd', -// 'STRATABEAM-Technology' => 'STRATABEAM Technology', -// 'OPEN-NETWORK-Co-Ltd' => 'OPEN NETWORK Co Ltd', -// 'RACAL-AIRTECH-Ltd' => 'RACAL AIRTECH Ltd', -// 'CHICONY-Electronics-Co-Ltd' => 'CHICONY Electronics Co Ltd', -// 'PROLINK-Microsystems-Corp' => 'PROLINK Microsystems Corp', -// 'GESYTEC-GmBH' => 'GESYTEC GmBH', -// 'PLD-APPLICATIONS' => 'PLD APPLICATIONS', -// 'MEDIASTAR-Co-Ltd' => 'MEDIASTAR Co Ltd', -// 'CLEVO-KAPOK-Computer' => 'CLEVO/KAPOK Computer', -// 'SI-LOGIC-Ltd' => 'SI LOGIC Ltd', -// 'INNOMEDIA-Inc' => 'INNOMEDIA Inc', -// 'PROTAC-INTERNATIONAL-Corp' => 'PROTAC INTERNATIONAL Corp', -// 'Cemax-Icon-Inc' => 'Cemax-Icon Inc', -// 'Mac-System-Co-Ltd' => 'Mac System Co Ltd', -// 'LP-Elektronik-GmbH' => 'LP Elektronik GmbH', -// 'Perle-Systems-Ltd' => 'Perle Systems Ltd', -// 'Viewgraphics-Inc' => 'Viewgraphics Inc', -// 'Symbol-Technologies' => 'Symbol Technologies', -// 'A-Trend-Technology-Co-Ltd' => 'A-Trend Technology Co Ltd', -// 'Biostar-Microtech-Intl-Corp' => 'Biostar Microtech Intl Corp', -// 'Ardent-Technologies-Inc' => 'Ardent Technologies Inc', -// 'Jungsoft' => 'Jungsoft', -// 'DDK-Electronics-Inc' => 'DDK Electronics Inc', -// 'Palit-Microsystems-Inc.' => 'Palit Microsystems Inc.', -// 'Avtec-Systems' => 'Avtec Systems', -// '2wire-Inc' => '2wire Inc', -// 'Vidac-Electronics-GmbH' => 'Vidac Electronics GmbH', -// 'Alpha-Top-Corp' => 'Alpha-Top Corp', -// 'Alfa-Inc' => 'Alfa Inc', -// 'Lecroy-Corp' => 'Lecroy Corp', -// 'Contemporary-Controls' => 'Contemporary Controls', -// 'Otis-Elevator-Company' => 'Otis Elevator Company', -// 'Lattice---Vantis' => 'Lattice - Vantis', -// 'Fairchild-Semiconductor' => 'Fairchild Semiconductor', -// 'Viewcast-COM' => 'Viewcast COM', -// 'HITT' => 'HITT', -// 'Dual-Technology-Corp' => 'Dual Technology Corp', -// 'Japan-Elecronics-Ind-Inc' => 'Japan Elecronics Ind Inc', -// 'Star-Multimedia-Corp' => 'Star Multimedia Corp', -// 'Eurosoft-UK' => 'Eurosoft (UK)', -// 'Gemflex-Networks' => 'Gemflex Networks', -// 'Transition-Networks' => 'Transition Networks', -// 'PX-Instruments-Technology-Ltd' => 'PX Instruments Technology Ltd', -// 'Primex-Aerospace-Co' => 'Primex Aerospace Co', -// 'SEH-Computertechnik-GmbH' => 'SEH Computertechnik GmbH', -// 'Cytec-Corp' => 'Cytec Corp', -// 'Inet-Technologies-Inc' => 'Inet Technologies Inc', -// 'Uniwill-Computer-Corp' => 'Uniwill Computer Corp', -// 'Logitron' => 'Logitron', -// 'Lancast-Inc' => 'Lancast Inc', -// 'Konica-Corp' => 'Konica Corp', -// 'Solidum-Systems-Corp' => 'Solidum Systems Corp', -// 'Atlantek-Microsystems-Pty-Ltd' => 'Atlantek Microsystems Pty Ltd', -// 'Digalog-Systems-Inc' => 'Digalog Systems Inc', -// 'Allied-Data-Technologies' => 'Allied Data Technologies', -// 'Point-Multimedia-Systems' => 'Point Multimedia Systems', -// 'Lara-Technology-Inc' => 'Lara Technology Inc', -// 'Ditect-Coop' => 'Ditect Coop', -// '3PAR-Inc.' => '3PAR Inc.', -// 'ARN' => 'ARN', -// 'Syba-Tech-Ltd' => 'Syba Tech Ltd', -// 'Bops-Inc' => 'Bops Inc', -// 'Netgame-Ltd' => 'Netgame Ltd', -// 'Diva-Systems-Corp' => 'Diva Systems Corp', -// 'Folsom-Research-Inc' => 'Folsom Research Inc', -// 'Memec-Design-Services' => 'Memec Design Services', -// 'Granite-Microsystems' => 'Granite Microsystems', -// 'Delta-Electronics-Inc' => 'Delta Electronics Inc', -// 'General-Instrument' => 'General Instrument', -// 'Faraday-Technology-Corp' => 'Faraday Technology Corp', -// 'Stratus-Computer-Systems' => 'Stratus Computer Systems', -// 'A-Max-Technology-Co-Ltd' => 'A-Max Technology Co Ltd', -// 'Galea-Network-Security' => 'Galea Network Security', -// 'Compumaster-SRL' => 'Compumaster SRL', -// 'Geocast-Network-Systems' => 'Geocast Network Systems', -// 'Catalyst-Enterprises-Inc' => 'Catalyst Enterprises Inc', -// 'Italtel' => 'Italtel', -// 'X-Net-OY' => 'X-Net OY', -// 'Toyota-Macs-Inc' => 'Toyota Macs Inc', -// 'SSE-Telecom-Inc' => 'SSE Telecom Inc', -// 'Moreton-Bay' => 'Moreton Bay', -// 'Bluesteel-Networks-Inc' => 'Bluesteel Networks Inc', -// 'North-Atlantic-Instruments' => 'North Atlantic Instruments', -// 'VMware' => 'VMware', -// 'Amersham-Pharmacia-Biotech' => 'Amersham Pharmacia Biotech', -// 'Zoltrix-International-Ltd' => 'Zoltrix International Ltd', -// 'Source-Technology-Inc' => 'Source Technology Inc', -// 'Mosaid-Technologies-Inc' => 'Mosaid Technologies Inc', -// 'Mellanox-Technologies' => 'Mellanox Technologies', -// 'CCI-TRIAD' => 'CCI/TRIAD', -// 'Cimetrics-Inc' => 'Cimetrics Inc', -// 'Texas-Memory-Systems-Inc' => 'Texas Memory Systems Inc', -// 'Sandisk-Corp' => 'Sandisk Corp', -// 'ADDI-DATA-GmbH' => 'ADDI-DATA GmbH', -// 'Impacct-Technology-Corp' => 'Impacct Technology Corp', -// 'Portwell-Inc' => 'Portwell Inc', -// 'Agilent-Technologies' => 'Agilent Technologies', -// 'DFI-Inc' => 'DFI Inc', -// 'Sola-Electronics' => 'Sola Electronics', -// 'High-Tech-Computer-Corp-HTC' => 'High Tech Computer Corp (HTC)', -// 'BVM-Ltd' => 'BVM Ltd', -// 'Quantel' => 'Quantel', -// 'Newer-Technology-Inc' => 'Newer Technology Inc', -// 'Taiwan-Mycomp-Co-Ltd' => 'Taiwan Mycomp Co Ltd', -// 'EVSX-Inc' => 'EVSX Inc', -// 'Procomp-Informatics-Ltd' => 'Procomp Informatics Ltd', -// 'Penta-Media-Co-Ltd' => 'Penta Media Co Ltd', -// 'Serome-Technology-Inc' => 'Serome Technology Inc', -// 'Bitboys-OY' => 'Bitboys OY', -// 'AG-Electronics-Ltd' => 'AG Electronics Ltd', -// 'Hotrail-Inc' => 'Hotrail Inc', -// 'Dreamtech-Co-Ltd' => 'Dreamtech Co Ltd', -// 'Genrad-Inc' => 'Genrad Inc', -// 'Hilscher-GmbH' => 'Hilscher GmbH', -// 'Infineon-Technologies-AG' => 'Infineon Technologies AG', -// 'NDS-Technologies-Israel-Ltd' => 'NDS Technologies Israel Ltd', -// 'Iwill-Corp' => 'Iwill Corp', -// 'Tatung-Co' => 'Tatung Co', -// 'Entridia-Corp' => 'Entridia Corp', -// 'Rockwell-Collins-Inc' => 'Rockwell-Collins Inc', -// 'Cybernetics-Technology-Co-Ltd' => 'Cybernetics Technology Co Ltd', -// 'Super-Micro-Computer-Inc' => 'Super Micro Computer Inc', -// 'Cyberfirm-Inc' => 'Cyberfirm Inc', -// 'Applied-Computing-Systems-Inc' => 'Applied Computing Systems Inc', -// 'Litronic-Inc' => 'Litronic Inc', -// 'Sigmatel-Inc' => 'Sigmatel Inc', -// 'Malleable-Technologies-Inc' => 'Malleable Technologies Inc', -// 'Infinilink-Corp' => 'Infinilink Corp', -// 'Cacheflow-Inc' => 'Cacheflow Inc', -// 'Voice-Technologies-Group-Inc' => 'Voice Technologies Group Inc', -// 'Quicknet-Technologies-Inc' => 'Quicknet Technologies Inc', -// 'Networth-Technologies-Inc' => 'Networth Technologies Inc', -// 'VSN-Systemen-BV' => 'VSN Systemen BV', -// 'Valley-technologies-Inc' => 'Valley technologies Inc', -// 'Agere-Inc' => 'Agere Inc', -// 'Get-Engineering-Corp' => 'Get Engineering Corp', -// 'National-Datacomm-Corp' => 'National Datacomm Corp', -// 'Pacific-Digital-Corp' => 'Pacific Digital Corp', -// 'Tokyo-Denshi-Sekei-K.K.' => 'Tokyo Denshi Sekei K.K.', -// 'Beckhoff-GmbH' => 'Beckhoff GmbH', -// 'Macrolink-Inc' => 'Macrolink Inc', -// 'In-Win-Development-Inc' => 'In Win Development Inc', -// 'Intelligent-Paradigm-Inc' => 'Intelligent Paradigm Inc', -// 'B-Tree-Systems-Inc' => 'B-Tree Systems Inc', -// 'Times-N-Systems-Inc' => 'Times N Systems Inc', -// 'Diagnostic-Instruments-Inc' => 'Diagnostic Instruments Inc', -// 'Digitmedia-Corp' => 'Digitmedia Corp', -// 'Valuesoft' => 'Valuesoft', -// 'Power-Micro-Research' => 'Power Micro Research', -// 'Extreme-Packet-Device-Inc' => 'Extreme Packet Device Inc', -// 'Banctec' => 'Banctec', -// 'Koga-Electronics-Co' => 'Koga Electronics Co', -// 'Zenith-Electronics-Corp' => 'Zenith Electronics Corp', -// 'J.P.-Axzam-Corp' => 'J.P. Axzam Corp', -// 'Zilog-Inc' => 'Zilog Inc', -// 'Techsan-Electronics-Co-Ltd' => 'Techsan Electronics Co Ltd', -// 'N-CUBED.NET' => 'N-CUBED.NET', -// 'Kinpo-Electronics-Inc' => 'Kinpo Electronics Inc', -// 'Fastpoint-Technologies-Inc' => 'Fastpoint Technologies Inc', -// 'Northrop-Grumman---Canada-Ltd' => 'Northrop Grumman - Canada Ltd', -// 'Tenta-Technology' => 'Tenta Technology', -// 'Prosys-tec-Inc' => 'Prosys-tec Inc', -// 'Nokia-Wireless-Communications' => 'Nokia Wireless Communications', -// 'Pairgain-Technologies' => 'Pairgain Technologies', -// 'Europop-AG' => 'Europop AG', -// 'Scimetric-Instruments-Inc' => 'Scimetric Instruments Inc', -// 'Telesynergy-Research-Inc.' => 'Telesynergy Research Inc.', -// 'Stone-Ridge-Technology' => 'Stone Ridge Technology', -// 'FarSite-Communications-Ltd' => 'FarSite Communications Ltd', -// 'Rioworks' => 'Rioworks', -// 'TDK-Semiconductor-Corp.' => 'TDK Semiconductor Corp.', -// 'Kongsberg-Spacetec-AS' => 'Kongsberg Spacetec AS', -// 'Packard-Bell-B.V.' => 'Packard Bell B.V.', -// 'Smart-Link-Ltd.' => 'Smart Link Ltd.', -// 'MKNet-Corp.' => 'MKNet Corp.', -// 'Epix-Inc' => 'Epix Inc', -// 'Linux-Media-Labs-LLC' => 'Linux Media Labs, LLC', -// 'Worldspace-Corp.' => 'Worldspace Corp.', -// 'Actiontec-Electronics-Inc' => 'Actiontec Electronics Inc', -// 'Bernecker-+-Rainer' => 'Bernecker + Rainer', -// 'NetEffect' => 'NetEffect', -// 'Tokyo-Electron-Device-Ltd.' => 'Tokyo Electron Device Ltd.', -// 'ZyDAS-Technology-Corp.' => 'ZyDAS Technology Corp.', -// 'ONNTO-Corp.' => 'ONNTO Corp.', -// 'Hercules' => 'Hercules', -// 'XFX-Pine-Group-Inc.' => 'XFX Pine Group Inc.', -// 'CastleNet-Technology-Inc.' => 'CastleNet Technology Inc.', -// 'Atheros-Communications-Inc.' => 'Atheros Communications Inc.', -// 'EPoX-Computer-Co.-Ltd.' => 'EPoX Computer Co., Ltd.', -// 'Netcell-Corporation' => 'Netcell Corporation', -// 'Tekram-Technology-Co.Ltd.' => 'Tekram Technology Co.,Ltd.', -// 'Global-Sun-Technology-Inc' => 'Global Sun Technology Inc', -// 'SafeNet-Inc' => 'SafeNet Inc', -// 'SparkLAN-Communications-Inc.' => 'SparkLAN Communications, Inc.', -// 'Aspex-Semiconductor-Ltd' => 'Aspex Semiconductor Ltd', -// 'Sonnet-Technologies-Inc.' => 'Sonnet Technologies, Inc.', -// 'Creatix-Polymedia-GmbH' => 'Creatix Polymedia GmbH', -// 'Micrel-Kendin' => 'Micrel-Kendin', -// 'Octasic-Inc.' => 'Octasic Inc.', -// 'EONIC-B.V.-The-Netherlands' => 'EONIC B.V. The Netherlands', -// 'CENATEK-Inc' => 'CENATEK Inc', -// 'Densitron-Technologies' => 'Densitron Technologies', -// 'Roland-Corp.' => 'Roland Corp.', -// 'Acromag-Inc.' => 'Acromag, Inc.', -// 'Advantech-Co.-Ltd.' => 'Advantech Co., Ltd.', -// 'PIKA-Technologies-Inc.' => 'PIKA Technologies Inc.', -// 'Geotest-MTS' => 'Geotest-MTS', -// 'European-Space-Agency' => 'European Space Agency', -// 'Intellon-Corp.' => 'Intellon Corp.', -// 'U.S.-Robotics' => 'U.S. Robotics', -// 'Sycron-N.-V.' => 'Sycron N. V.', -// 'Jetway-Information-Co.-Ltd.' => 'Jetway Information Co., Ltd.', -// 'Vweb-Corp' => 'Vweb Corp', -// 'VideoTele.com-Inc.' => 'VideoTele.com, Inc.', -// 'Digital-First-Inc.' => 'Digital First, Inc.', -// 'NetOctave' => 'NetOctave', -// 'YottaYotta-Inc.' => 'YottaYotta Inc.', -// 'EZChip-Technologies' => 'EZChip Technologies', -// 'Accelerated-Encryption' => 'Accelerated Encryption', -// 'Fujitsu-Technology-Solutions' => 'Fujitsu Technology Solutions', -// 'Aten-International-Co.-Ltd.' => 'Aten International Co. Ltd.', -// 'Linksys' => 'Linksys', -// 'Altima-nee-Broadcom' => 'Altima (nee Broadcom)', -// 'Peppercon-AG' => 'Peppercon AG', -// 'ViXS-Systems-Inc.' => 'ViXS Systems, Inc.', -// 'RLX-Technologies' => 'RLX Technologies', -// 'PC-Partner-Limited' => 'PC Partner Limited', -// 'WellX-Telecom-SA' => 'WellX Telecom SA', -// 'AudioScience-Inc' => 'AudioScience Inc', -// 'Sanera-Systems-Inc.' => 'Sanera Systems, Inc.', -// 'TEDIA-spol.-s-r.-o.' => 'TEDIA spol. s r. o.', -// 'InnoVISION-Multimedia-Ltd.' => 'InnoVISION Multimedia Ltd.', -// 'Cavium-Networks' => 'Cavium Networks', -// 'Ennyah-Technologies-Corp.' => 'Ennyah Technologies Corp.', -// 'Techwell-Inc.' => 'Techwell Inc.', -// 'Belkin' => 'Belkin', -// 'id-Quantique' => 'id Quantique', -// 'Data-Patterns' => 'Data Patterns', -// 'Genesys-Logic-Inc' => 'Genesys Logic, Inc', -// 'Lenovo' => 'Lenovo', -// 'Phillips-Components' => 'Phillips Components', -// 'Hawking-Technologies' => 'Hawking Technologies', -// 'Indra-Networks-Inc.' => 'Indra Networks, Inc.', -// 'Wistron-Corp.' => 'Wistron Corp.', -// 'Newisys-Inc.' => 'Newisys, Inc.', -// 'Airgo-Networks-Inc' => 'Airgo Networks Inc', -// 'NetChip-Technology-Inc' => 'NetChip Technology, Inc', -// 'Z-Com-Inc.' => 'Z-Com, Inc.', -// 'Areca-Technology-Corp.' => 'Areca Technology Corp.', -// 'Cray-Inc' => 'Cray Inc', -// 'KWorld-Computer-Co.-Ltd.' => 'KWorld Computer Co. Ltd.', -// 'Sectra-AB' => 'Sectra AB', -// 'Entropic-Communications-Inc.' => 'Entropic Communications Inc.', -// 'Connect-Components-Ltd' => 'Connect Components Ltd', -// 'Albatron-Corp.' => 'Albatron Corp.', -// 'RDC-Semiconductor-Inc.' => 'RDC Semiconductor, Inc.', -// 'Topdek-Semiconductor-Inc.' => 'Topdek Semiconductor Inc.', -// 'InProComm-Inc.' => 'InProComm Inc.', -// 'Benq-Corporation' => 'Benq Corporation', -// 'ProdaSafe-GmbH' => 'ProdaSafe GmbH', -// 'Euresys-S.A.' => 'Euresys S.A.', -// 'Lumanate-Inc.' => 'Lumanate, Inc.', -// 'Ambient-Technologies-Inc' => 'Ambient Technologies Inc', -// 'RaLink' => 'RaLink', -// 'Devolo-AG' => 'Devolo AG', -// 'InfiniCon-Systems-Inc.' => 'InfiniCon Systems Inc.', -// 'Twinhan-Technology-Co.-Ltd' => 'Twinhan Technology Co. Ltd', -// 'SiteCom-Europe-BV' => 'SiteCom Europe BV', -// 'Raza-Microelectronics-Inc.' => 'Raza Microelectronics, Inc.', -// 'Credence-Systems-Corporation' => 'Credence Systems Corporation', -// 'MikroM-GmbH' => 'MikroM GmbH', -// 'ASRock-Incorporation' => 'ASRock Incorporation', -// 'Thales-Computers' => 'Thales Computers', -// 'Microtune-Inc.' => 'Microtune, Inc.', -// 'Anritsu-Corp.' => 'Anritsu Corp.', -// 'LG-Electronics-Inc.' => 'LG Electronics, Inc.', -// 'Compro-Technology-Inc.' => 'Compro Technology, Inc.', -// 'Wistron-NeWeb-Corp.' => 'Wistron NeWeb Corp.', -// 'SilverBack' => 'SilverBack', -// 'Topspin-Communications' => 'Topspin Communications', -// 'Humusoft-s.r.o.' => 'Humusoft, s.r.o.', -// 'WiNRADiO-Communications' => 'WiNRADiO Communications', -// 'L-3-Communications' => 'L-3 Communications', -// 'Avvida-Systems-Inc.' => 'Avvida Systems Inc.', -// 'Varisys-Ltd' => 'Varisys Ltd', -// 'Ample-Communications-Inc' => 'Ample Communications, Inc', -// 'Egenera-Inc.' => 'Egenera, Inc.', -// 'KNC-One' => 'KNC One', -// 'AMtek' => 'AMtek', -// 'Astute-Networks-Inc.' => 'Astute Networks Inc.', -// 'Stretch-Inc.' => 'Stretch Inc.', -// 'AT-T' => 'AT&T', -// 'DViCO-Corporation' => 'DViCO Corporation', -// 'Ammasso' => 'Ammasso', -// 'Info-Tek-Corp.' => 'Info-Tek Corp.', -// 'Cray-Inc Nee-Octigabay-System' => 'Cray Inc Nee Octigabay System', -// 'ARVOO-Engineering-BV' => 'ARVOO Engineering BV', -// 'Sitecom' => 'Sitecom', -// 'Dialogue-Technology-Corp.' => 'Dialogue Technology Corp.', -// 'Artimi-Inc' => 'Artimi Inc', -// 'MPL-AG' => 'MPL AG', -// 'Cesnet-z.s.p.o.' => 'Cesnet, z.s.p.o.', -// 'Chenming-Mold-Ind.-Corp.' => 'Chenming Mold Ind. Corp.', -// 'Spectrum-GmbH' => 'Spectrum GmbH', -// 'Napatech-A-S' => 'Napatech A/S', -// 'NextIO' => 'NextIO', -// 'Commtech-Inc.' => 'Commtech, Inc.', -// 'Resilience-Corporation' => 'Resilience Corporation', -// 'Micronas-USA-Inc.' => 'Micronas USA, Inc.', -// 'Renesas-Technology-Corp.' => 'Renesas Technology Corp.', -// 'Soltek-Computer-Inc.' => 'Soltek Computer Inc.', -// 'Sangoma-Technologies-Corp.' => 'Sangoma Technologies Corp.', -// 'Solarflare-Communications' => 'Solarflare Communications', -// 'TransDimension' => 'TransDimension', -// 'Option-N.V.' => 'Option N.V.', -// 'DiBcom' => 'DiBcom', -// 'MAXIM-Integrated-Products' => 'MAXIM Integrated Products', -// 'Comtech-AHA-Corp.' => 'Comtech AHA Corp.', -// 'ClearSpeed-Technology-plc' => 'ClearSpeed Technology plc', -// 'C-guys-Inc.' => 'C-guys, Inc.', -// 'Enterasys-Networks' => 'Enterasys Networks', -// 'DapTechnology-B.V.' => 'DapTechnology B.V.', -// 'Curtis-Inc.' => 'Curtis, Inc.', -// 'Freescale-Semiconductor-Inc' => 'Freescale Semiconductor Inc', -// 'Faster-Technology-LLC.' => 'Faster Technology, LLC.', -// 'PA-Semi-Inc' => 'PA Semi, Inc', -// 'Orad-Hi-Tec-Systems' => 'Orad Hi-Tec Systems', -// 'Sensory-Networks-Inc.' => 'Sensory Networks Inc.', -// 'Club-3D-BV' => 'Club-3D BV', -// 'AGEIA-Technologies-Inc.' => 'AGEIA Technologies, Inc.', -// 'Parsec' => 'Parsec', -// 'JMicron-Technology-Corp.' => 'JMicron Technology Corp.', -// 'Montilio-Inc.' => 'Montilio Inc.', -// 'Nallatech-Ltd.' => 'Nallatech Ltd.', -// 'Pulse-LINK-Inc.' => 'Pulse-LINK, Inc.', -// 'Xsigo-Systems' => 'Xsigo Systems', -// 'Auvitek' => 'Auvitek', -// 'DAQDATA-GmbH' => 'DAQDATA GmbH', -// 'Kasten-Chase-Applied-Research' => 'Kasten Chase Applied Research', -// 'Progeny-Systems-Corporation' => 'Progeny Systems Corporation', -// 'Exegy-Inc.' => 'Exegy Inc.', -// 'Quixant-Limited' => 'Quixant Limited', -// 'Pico-Computing' => 'Pico Computing', -// 'Vector-Informatik-GmbH' => 'Vector Informatik GmbH', -// 'DDRdrive-LLC' => 'DDRdrive LLC', -// 'Netronome-Systems-Inc.' => 'Netronome Systems, Inc.', -// 'ASPEED-Technology-Inc.' => 'ASPEED Technology, Inc.', -// 'Kvaser-AB' => 'Kvaser AB', -// 'Sierra-semiconductor' => 'Sierra semiconductor', -// 'DekTec-Digital-Video-B.V.' => 'DekTec Digital Video B.V.', -// 'Force10-Networks-Inc.' => 'Force10 Networks, Inc.', -// 'GFaI-e.V.' => 'GFaI e.V.', -// '3Leaf-Systems-Inc.' => '3Leaf Systems, Inc.', -// 'Ambric-Inc.' => 'Ambric Inc.', -// 'Fortinet-Inc.' => 'Fortinet, Inc.', -// 'Ascom-AG' => 'Ascom AG', -// 'AzureWave' => 'AzureWave', -// 'Hectronic-AB' => 'Hectronic AB', -// 'Bigfoot-Networks-Inc.' => 'Bigfoot Networks, Inc.', -// 'Highly-Reliable-Systems' => 'Highly Reliable Systems', -// 'Razer-USA-Ltd.' => 'Razer USA Ltd.', -// 'Celoxica' => 'Celoxica', -// 'Aprius-Inc.' => 'Aprius Inc.', -// 'System-TALKS-Inc.' => 'System TALKS Inc.', -// 'VirtenSys-Limited' => 'VirtenSys Limited', -// 'XenSource-Inc.' => 'XenSource, Inc.', -// 'Violin-Memory-Inc' => 'Violin Memory, Inc', -// 'Wavesat' => 'Wavesat', -// 'Lightfleet-Corporation' => 'Lightfleet Corporation', -// 'Virident-Systems-Inc.' => 'Virident Systems Inc.', -// 'Commex-Technologies' => 'Commex Technologies', -// 'MEN-Mikro-Elektronik' => 'MEN Mikro Elektronik', -// 'Verigy-Pte.-Ltd.' => 'Verigy Pte. Ltd.', -// 'DRS-Technologies' => 'DRS Technologies', -// 'Ciprico-Inc.' => 'Ciprico, Inc.', -// 'Global-Velocity-Inc.' => 'Global Velocity, Inc.', -// 'CalDigit-Inc.' => 'CalDigit, Inc.', -// 'Espia-Srl' => 'Espia Srl', -// 'Spectracom-Corporation' => 'Spectracom Corporation', -// 'Spin-Master-Ltd.' => 'Spin Master Ltd.', -// 'Google-Inc.' => 'Google, Inc.', -// 'Silicon-Software-GmbH' => 'Silicon Software GmbH', -// 'Wolfson-Microelectronics' => 'Wolfson Microelectronics', -// 'Fusion-io' => 'Fusion-io', -// 'Caustic-Graphics-Inc.' => 'Caustic Graphics Inc.', -// 'Netezza-Corp.' => 'Netezza Corp.', -// 'J---W-Electronics-Co.-Ltd.' => 'J & W Electronics Co., Ltd.', -// 'Magnum-Semiconductor-Inc' => 'Magnum Semiconductor, Inc,', -// 'Jaton-Corp' => 'Jaton Corp', -// 'K-F-Computing-Research-Co.' => 'K&F Computing Research Co.', -// 'Red-Hat-Inc.' => 'Red Hat, Inc.', -// 'Westar-Display-Technologies' => 'Westar Display Technologies', -// 'Teradata-Corp.' => 'Teradata Corp.', -// 'Marvell-Technology-Group-Ltd.' => 'Marvell Technology Group Ltd.', -// 'NetUP-Inc.' => 'NetUP Inc.', -// 'Fresco-Logic' => 'Fresco Logic', -// 'ReFLEX-CES' => 'ReFLEX CES', -// 'Bluecherry' => 'Bluecherry', -// 'VTI-Instruments-Corporation' => 'VTI Instruments Corporation', -// 'Symphony' => 'Symphony', -// 'DPT' => 'DPT', -// 'Tekram-Technology-Co.Ltd.' => 'Tekram Technology Co.,Ltd.', -// 'Tehuti-Networks-Ltd.' => 'Tehuti Networks Ltd.', -// 'Cognio-Inc.' => 'Cognio Inc.', -// 'SUNIX-Co.-Ltd.' => 'SUNIX Co., Ltd.', -// 'Smart-Link-Ltd.' => 'Smart Link Ltd.', -// 'Temporal-Research-Ltd' => 'Temporal Research Ltd', -// 'Smart-Link-Ltd.' => 'Smart Link Ltd.', -// 'Smart-Link-Ltd.' => 'Smart Link Ltd.', -// 'ZyDAS-Technology-Corp.' => 'ZyDAS Technology Corp.', -// '21st-Century-Computer-Corp.' => '21st Century Computer Corp.', -// 'Racore' => 'Racore', -// 'Kingston-Technologies' => 'Kingston Technologies', -// 'Xantel-Corporation' => 'Xantel Corporation', -// 'Chaintech-Computer-Co.-Ltd' => 'Chaintech Computer Co. Ltd', -// 'AVID-Technology-Inc.' => 'AVID Technology Inc.', -// '82q35-Express-MEI-Controller' => '82q35 Express MEI Controller', -// '3D-Vision---' => '3D Vision(???)', -// 'Hansol-Electronics-Inc.' => 'Hansol Electronics Inc.', -// 'Post-Impression-Systems.' => 'Post Impression Systems.', -// 'Hint-Corp' => 'Hint Corp', -// 'Quantum-Designs-H.K.-Inc' => 'Quantum Designs (H.K.) Inc', -// 'Bihl+Wiedemann-GmbH' => 'Bihl+Wiedemann GmbH', -// 'Arastra-Inc.' => 'Arastra Inc.', -// 'ARCOM-Control-Systems-Ltd' => 'ARCOM Control Systems Ltd', -// 'eVga.com.-Corp.' => 'eVga.com. Corp.', -// '4Links' => '4Links', -// '3DLabs' => '3DLabs', -// 'Avance-Logic-Inc.' => 'Avance Logic Inc.', -// 'Addtron-Technology-Co-Inc.' => 'Addtron Technology Co, Inc.', -// 'NetXen-Incorporated' => 'NetXen Incorporated', -// 'Digital-Equipment-Corp' => 'Digital Equipment Corp', -// 'Alpha-Data' => 'Alpha Data', -// 'ONA-Electroerosion' => 'ONA Electroerosion', -// 'Auzentech-Inc.' => 'Auzentech, Inc.', -// 'Aladdin-Knowledge-Systems' => 'Aladdin Knowledge Systems', -// 'CAST-Navigation-LLC' => 'CAST Navigation LLC', -// 'Internext-Compression-Inc' => 'Internext Compression Inc', -// 'Bridgeport-machines' => 'Bridgeport machines', -// 'Cogetec-Informatique-Inc' => 'Cogetec Informatique Inc', -// 'Baldor-Electric-Company' => 'Baldor Electric Company', -// 'Umax-Computer-Corp' => 'Umax Computer Corp', -// 'RedCreek-Communications-Inc' => 'RedCreek Communications Inc', -// 'Growth-Networks' => 'Growth Networks', -// 'ACCES-I-O-Products-Inc.' => 'ACCES I/O Products, Inc.', -// 'Axil-Computer-Inc' => 'Axil Computer Inc', -// 'NetVin' => 'NetVin', -// 'Buslogic-Inc.' => 'Buslogic Inc.', -// 'LUNG-HWA-Electronics' => 'LUNG HWA Electronics', -// 'SBS-Technologies' => 'SBS Technologies', -// 'Seanix-Technology-Inc' => 'Seanix Technology Inc', -// 'MediaQ-Inc.' => 'MediaQ Inc.', -// 'Microtechnica-Co-Ltd' => 'Microtechnica Co Ltd', -// 'MATRIX-VISION-GmbH' => 'MATRIX VISION GmbH', -// 'ILC-Data-Device-Corp' => 'ILC Data Device Corp', -// 'University-of-Toronto' => 'University of Toronto', -// 'GemTek-Technology-Corporation' => 'GemTek Technology Corporation', -// 'Voyetra-Technologies' => 'Voyetra Technologies', -// 'TerraTec-Electronic-GmbH' => 'TerraTec Electronic GmbH', -// 'S-S-Technologies' => 'S S Technologies', -// 'Qualcomm-Inc' => 'Qualcomm Inc', -// 'Ensoniq-Old' => 'Ensoniq (Old)', -// 'Animation-Technologies-Inc.' => 'Animation Technologies Inc.', -// 'Alliance-Semiconductor-Corp.' => 'Alliance Semiconductor Corp.', -// 'S3-Inc.' => 'S3 Inc.', -// 'AuzenTech-Inc.' => 'AuzenTech, Inc.', -// 'Teralogic-Inc' => 'Teralogic Inc', -// 'Technische-University-Berlin' => 'Technische University Berlin', -// 'GoTView' => 'GoTView', -// 'Cnet-Technologies-Inc.' => 'Cnet Technologies, Inc.', -// 'Dunord-Technologies' => 'Dunord Technologies', -// 'Genroco-Inc' => 'Genroco, Inc', -// 'Vector-Fabrics-BV' => 'Vector Fabrics BV', -// 'VoiceTronix-Pty-Ltd' => 'VoiceTronix Pty Ltd', -// 'Netpower' => 'Netpower', -// 'AuzenTech-Co.-Ltd.' => 'AuzenTech Co., Ltd.', -// 'Exacq-Technologies' => 'Exacq Technologies', -// 'XenSource-Inc.' => 'XenSource, Inc.', -// 'Beholder-International-Ltd.' => 'Beholder International Ltd.', -// 'SmartInfra-Ltd' => 'SmartInfra Ltd', -// 'UltraStor' => 'UltraStor', -// 'Logitec-Corp.' => 'Logitec Corp.', -// 'Teradici-Corp.' => 'Teradici Corp.', -// 'Red-Hat-Inc. nee-Qumranet' => 'Red Hat, Inc. nee Qumranet', -// 'pcHDTV' => 'pcHDTV', -// 'HT-OMEGA-Inc.' => 'HT OMEGA Inc.', -// 'O.N.-Electronic-Co-Ltd.' => 'O.N. Electronic Co Ltd.', -// 'MIDAC-Corporation' => 'MIDAC Corporation', -// 'PowerTV' => 'PowerTV', -// 'Quancom-Electronic-GmbH' => 'Quancom Electronic GmbH', -// 'Intel-Corporation' => 'Intel Corporation', -// 'InnoTek-Systemberatung-GmbH' => 'InnoTek Systemberatung GmbH', -// 'Sodick-America-Corp.' => 'Sodick America Corp.', -// 'SigmaTel' => 'SigmaTel', -// 'TRENDware-International-Inc.' => 'TRENDware International Inc.', -// 'ScaleMP' => 'ScaleMP', -// 'Trigem-Computer-Inc.' => 'Trigem Computer Inc.', -// 'T-Square-Design-Inc.' => 'T-Square Design Inc.', -// 'Silicon-Magic' => 'Silicon Magic', -// 'TRX' => 'TRX', -// 'Computone-Corporation' => 'Computone Corporation', -// 'KTI' => 'KTI', -// 'Adaptec' => 'Adaptec', -// 'Adaptec' => 'Adaptec', -// 'Atronics' => 'Atronics', -// 'Gigapixel-Corp' => 'Gigapixel Corp', -// 'Holtek' => 'Holtek', -// 'Omni-Media-Technology-Inc' => 'Omni Media Technology Inc', -// 'NetMos-Technology' => 'NetMos Technology', -// 'Stargen-Inc.' => 'Stargen Inc.', -// 'AOPEN-Inc.' => 'AOPEN Inc.', -// 'UNISYS-Corporation' => 'UNISYS Corporation', -// 'NEC-Corporation' => 'NEC Corporation', -// 'Hewlett-Packard' => 'Hewlett Packard', -// 'Hewlett-Packard-GmbH-PL24-MKT' => 'Hewlett Packard GmbH PL24-MKT', -// 'Sony' => 'Sony', -// '3Com-Corporation' => '3Com Corporation', -// 'Scitex-Digital-Video' => 'Scitex Digital Video', -// 'Ncomputing-X300-PCI-Engine' => 'Ncomputing X300 PCI-Engine', -// 'Adnaco-Technology-Inc.' => 'Adnaco Technology Inc.', -// 'Vadatech-Inc.' => 'Vadatech Inc.', -// 'Actuality-Systems' => 'Actuality Systems', -// 'Alta-Data-Technologies-LLC' => 'Alta Data Technologies LLC', -// 'Shiva-Europe-Limited' => 'Shiva Europe Limited', -// 'Blackmagic-Design' => 'Blackmagic Design', -// 'TSI-Telsys' => 'TSI Telsys', -// 'Micron-Crucial-Technology' => 'Micron/Crucial Technology', -// 'Motorola' => 'Motorola', -// 'Motion-Engineering-Inc.' => 'Motion Engineering, Inc.', -// 'Varian-Australia-Pty-Ltd' => 'Varian Australia Pty Ltd', -// 'CACE-Technologies-Inc.' => 'CACE Technologies, Inc.', -// 'Chrysalis-ITS' => 'Chrysalis-ITS', -// 'Catapult-Communications' => 'Catapult Communications', -// 'Tyzx-Inc.' => 'Tyzx, Inc.', -// 'KEBA-AG' => 'KEBA AG', -// 'Digium-Inc.' => 'Digium, Inc.', -// 'Dy4-Systems-Inc' => 'Dy4 Systems Inc', -// 'I+ME-ACTIA-GmbH' => 'I+ME ACTIA GmbH', -// 'Exsys' => 'Exsys', -// 'Diablo-Technologies' => 'Diablo Technologies', -// 'Indigita-Corporation' => 'Indigita Corporation', -// 'Middle-Digital-Inc.' => 'Middle Digital Inc.', -// 'SoftHard-Technology-Ltd.' => 'SoftHard Technology Ltd.', -// 'Winbond' => 'Winbond', -// 'Tiger-Jet-Network-Inc.' => 'Tiger Jet Network Inc.', -// 'EKF-Elektronik-GmbH' => 'EKF Elektronik GmbH', -// 'Essence-Technology-Inc.' => 'Essence Technology, Inc.', -// 'Eagle-Technology' => 'Eagle Technology', -// 'Aashima-Technology-B.V.' => 'Aashima Technology B.V.', -// 'Belkin-Corporation' => 'Belkin Corporation', -// 'ARK-Logic-Inc' => 'ARK Logic Inc', -// 'AJA-Video' => 'AJA Video', -// 'F5-Networks-Inc.' => 'F5 Networks, Inc.', -// 'Interagon-AS' => 'Interagon AS', -// 'Fabric7-Systems-Inc.' => 'Fabric7 Systems, Inc.', -// 'Ultraview-Corp.' => 'Ultraview Corp.', -// 'Broadcom-Inc Nee-Epigram' => 'Broadcom Inc Nee Epigram', -// 'Fedetec-Inc.' => 'Fedetec Inc.', -// 'XenSource-Inc.' => 'XenSource, Inc.', -// 'Frys-Electronics' => 'Frys Electronics', -// 'Ingram' => 'Ingram', -// 'Club-Mac' => 'Club Mac', -// 'Nebraska-Furniture-Mart' => 'Nebraska Furniture Mart', -// 'Planex' => 'Planex', -// 'DragonRise-Inc.' => 'DragonRise Inc.', -// 'Trust-International-B.V.' => 'Trust International B.V.', -// 'Unknown' => 'Unknown', -// 'LW154-Wireless-150N-Adapter' => 'LW154 Wireless 150N Adapter', -// 'Hangzhou-Worlde' => 'Hangzhou Worlde', -// 'HUMAX-Co.-Ltd.' => 'HUMAX Co., Ltd.', -// 'MM300-eBook-Reader' => 'MM300 eBook Reader', -// 'OCZ-Technology-Inc' => 'OCZ Technology Inc', -// 'OCZ-Technology-Inc' => 'OCZ Technology Inc', -// 'LTS' => 'LTS', -// 'EndPoints-Inc.' => 'EndPoints, Inc.', -// 'Thesys-Microelectronics' => 'Thesys Microelectronics', -// 'Data-Broadcasting-Corp.' => 'Data Broadcasting Corp.', -// 'Atmel-Corp.' => 'Atmel Corp.', -// 'Iwatsu-America-Inc.' => 'Iwatsu America, Inc.', -// 'Mitel-Corp.' => 'Mitel Corp.', -// 'Mitsumi' => 'Mitsumi', -// 'Hewlett-Packard' => 'Hewlett-Packard', -// 'Genoa-Technology' => 'Genoa Technology', -// 'Oak-Technology-Inc.' => 'Oak Technology, Inc.', -// 'Adaptec-Inc.' => 'Adaptec, Inc.', -// 'Diebold-Inc.' => 'Diebold, Inc.', -// 'Siemens-Electromechanical' => 'Siemens Electromechanical', -// 'KeyTronic-Corp.' => 'KeyTronic Corp.', -// 'OPTi-Inc.' => 'OPTi, Inc.', -// 'Elitegroup-Computer-Systems' => 'Elitegroup Computer Systems', -// 'Xilinx-Inc.' => 'Xilinx, Inc.', -// 'Farallon-Comunications' => 'Farallon Comunications', -// 'National-Semiconductor-Corp.' => 'National Semiconductor Corp.', -// 'National-Registry-Inc.' => 'National Registry, Inc.', -// 'ALi-Corp.' => 'ALi Corp.', -// 'NCR-Corp.' => 'NCR Corp.', -// 'Synopsys-Inc.' => 'Synopsys, Inc.', -// 'Fujitsu-ICL-Computers' => 'Fujitsu-ICL Computers', -// 'Quanta-Computer-Inc.' => 'Quanta Computer, Inc.', -// 'NEC-Corp.' => 'NEC Corp.', -// 'Kodak-Co.' => 'Kodak Co.', -// 'Weltrend-Semiconductor' => 'Weltrend Semiconductor', -// 'VTech-Computers-Ltd' => 'VTech Computers, Ltd', -// 'VIA-Technologies-Inc.' => 'VIA Technologies, Inc.', -// 'MCCI' => 'MCCI', -// 'Echo-Speech-Corp.' => 'Echo Speech Corp.', -// 'Award-Software-International' => 'Award Software International', -// 'Leadtek-Research-Inc.' => 'Leadtek Research, Inc.', -// 'Giga-Byte-Technology-Co.-Ltd' => 'Giga-Byte Technology Co., Ltd', -// 'Winbond-Electronics-Corp.' => 'Winbond Electronics Corp.', -// 'Symbios-Logic' => 'Symbios Logic', -// 'AST-Research' => 'AST Research', -// 'Phoenix-Technologies-Ltd' => 'Phoenix Technologies, Ltd', -// 'dTV' => 'dTV', -// 'S3-Inc.' => 'S3, Inc.', -// 'Creative-Technology-Ltd' => 'Creative Technology, Ltd', -// 'LCS-Telegraphics' => 'LCS Telegraphics', -// 'Chips-and-Technologies' => 'Chips and Technologies', -// 'Nokia-Mobile-Phones' => 'Nokia Mobile Phones', -// 'ADI-Systems-Inc.' => 'ADI Systems, Inc.', -// 'Standard-Microsystems-Corp.' => 'Standard Microsystems Corp.', -// 'Cirrus-Logic' => 'Cirrus Logic', -// 'Ericsson-Austrian-AG' => 'Ericsson Austrian, AG', -// 'Intel-Corp.' => 'Intel Corp.', -// 'Micronics' => 'Micronics', -// 'Acer-Inc.' => 'Acer, Inc.', -// 'Molex-Inc.' => 'Molex, Inc.', -// 'Sun-Microsystems-Inc.' => 'Sun Microsystems, Inc.', -// 'Itac-Systems-Inc.' => 'Itac Systems, Inc.', -// 'Unisys-Corp.' => 'Unisys Corp.', -// 'Alps-Electric-Inc.' => 'Alps Electric, Inc.', -// 'Hyundai-Electronics-America' => 'Hyundai Electronics America', -// 'Taugagreining-HF' => 'Taugagreining HF', -// 'Framatome-Connectors-USA' => 'Framatome Connectors USA', -// 'Advanced-Micro-Devices-Inc.' => 'Advanced Micro Devices, Inc.', -// 'Voice-Technologies-Group' => 'Voice Technologies Group', -// 'Lexmark-International-Inc.' => 'Lexmark International, Inc.', -// 'LG-Electronics-USA-Inc.' => 'LG Electronics USA, Inc.', -// 'RadiSys-Corp.' => 'RadiSys Corp.', -// 'Eizo-Nanao-Corp.' => 'Eizo Nanao Corp.', -// 'Winbond-Systems-Lab.' => 'Winbond Systems Lab.', -// 'Ericsson-Inc.' => 'Ericsson, Inc.', -// 'Gateway-Inc.' => 'Gateway, Inc.', -// 'Lucent-Technologies-Inc.' => 'Lucent Technologies, Inc.', -// 'NMB-Technologies-Corp.' => 'NMB Technologies Corp.', -// 'Momentum-Microsystems' => 'Momentum Microsystems', -// 'Shamrock-Tech.-Co.-Ltd' => 'Shamrock Tech. Co., Ltd', -// 'WSI' => 'WSI', -// 'CCL-ITRI' => 'CCL/ITRI', -// 'Siemens-Nixdorf-AG' => 'Siemens Nixdorf AG', -// 'Alps-Electric-Co.-Ltd' => 'Alps Electric Co., Ltd', -// 'ThrustMaster-Inc.' => 'ThrustMaster, Inc.', -// 'DFI-Inc.' => 'DFI, Inc.', -// 'Texas-Instruments-Inc.' => 'Texas Instruments, Inc.', -// 'CMD-Technology' => 'CMD Technology', -// 'Vobis-Microcomputer-AG' => 'Vobis Microcomputer AG', -// 'Analog-Devices-Inc.' => 'Analog Devices, Inc.', -// 'Adobe-Systems-Inc.' => 'Adobe Systems, Inc.', -// 'SONICblue-Inc.' => 'SONICblue, Inc.', -// 'Hitachi-Ltd' => 'Hitachi, Ltd', -// 'Nortel-Networks-Ltd' => 'Nortel Networks, Ltd', -// 'Microsoft-Corp.' => 'Microsoft Corp.', -// 'Ace-Cad-Enterprise-Co.-Ltd' => 'Ace Cad Enterprise Co., Ltd', -// 'Primax-Electronics-Ltd' => 'Primax Electronics, Ltd', -// 'MGE-UPS-Systems' => 'MGE UPS Systems', -// 'AMP-Tycoelectronics-Corp.' => 'AMP/Tycoelectronics Corp.', -// 'AT-T-Paradyne' => 'AT&T Paradyne', -// 'Wieson-Technologies-Co.-Ltd' => 'Wieson Technologies Co., Ltd', -// 'Cherry-GmbH' => 'Cherry GmbH', -// 'American-Megatrends-Inc.' => 'American Megatrends, Inc.', -// 'Logitech-Inc.' => 'Logitech, Inc.', -// 'Behavior-Tech.-Computer-Corp.' => 'Behavior Tech. Computer Corp.', -// 'Crystal-Semiconductor' => 'Crystal Semiconductor', -// 'Philips-or-NXP' => 'Philips (or NXP)', -// 'Chicony-Electronics-Co.-Ltd' => 'Chicony Electronics Co., Ltd', -// 'Sanyo-Electric-Co.-Ltd' => 'Sanyo Electric Co., Ltd', -// 'AESP' => 'AESP', -// 'Seagate-Technology-Inc.' => 'Seagate Technology, Inc.', -// 'Connectix-Corp.' => 'Connectix Corp.', -// 'Semtech-Corp.' => 'Semtech Corp.', -// 'Silitek-Corp.' => 'Silitek Corp.', -// 'Dell-Computer-Corp.' => 'Dell Computer Corp.', -// 'Kensington' => 'Kensington', -// 'Agere-Systems-Inc.-Lucent' => 'Agere Systems, Inc. (Lucent)', -// 'Plantronics-Inc.' => 'Plantronics, Inc.', -// 'Zenith-Data-Systems' => 'Zenith Data Systems', -// 'Kyocera-Corp.' => 'Kyocera Corp.', -// 'SGS-Thomson-Microelectronics' => 'SGS Thomson Microelectronics', -// 'Specialix' => 'Specialix', -// 'Nokia-Monitors' => 'Nokia Monitors', -// 'ASUS-Computers-Inc.' => 'ASUS Computers, Inc.', -// 'Stewart-Connector' => 'Stewart Connector', -// 'Cirque-Corp.' => 'Cirque Corp.', -// 'Foxconn---Hon-Hai' => 'Foxconn / Hon Hai', -// 'S-MOS-Systems-Inc.' => 'S-MOS Systems, Inc.', -// 'Alps-Electric-Ireland-Ltd' => 'Alps Electric Ireland, Ltd', -// 'Eicon-Tech.' => 'Eicon Tech.', -// 'United-Microelectronics-Corp.' => 'United Microelectronics Corp.', -// 'Capetronic' => 'Capetronic', -// 'Samsung-SemiConductor-Inc.' => 'Samsung SemiConductor, Inc.', -// 'MAG-Technology-Co.-Ltd' => 'MAG Technology Co., Ltd', -// 'ESS-Technology-Inc.' => 'ESS Technology, Inc.', -// 'Micron-Electronics' => 'Micron Electronics', -// 'Smile-International' => 'Smile International', -// 'Capetronic-Kaohsiung-Corp.' => 'Capetronic (Kaohsiung) Corp.', -// 'Yamaha-Corp.' => 'Yamaha Corp.', -// 'Gandalf-Technologies-Ltd' => 'Gandalf Technologies, Ltd', -// 'Curtis-Computer-Products' => 'Curtis Computer Products', -// 'Acer-Advanced-Labs-Inc.' => 'Acer Advanced Labs, Inc.', -// 'VLSI-Technology' => 'VLSI Technology', -// 'Compaq-Computer-Corp.' => 'Compaq Computer Corp.', -// 'Digital-Equipment-Corp.' => 'Digital Equipment Corp.', -// 'SystemSoft-Corp.' => 'SystemSoft Corp.', -// 'FirePower-Systems' => 'FirePower Systems', -// 'Trident-Microsystems-Inc.' => 'Trident Microsystems, Inc.', -// 'Hitachi-Ltd' => 'Hitachi, Ltd', -// 'Nokia-Display-Products' => 'Nokia Display Products', -// 'Visioneer' => 'Visioneer', -// 'Multivideo-Labs-Inc.' => 'Multivideo Labs, Inc.', -// 'Canon-Inc.' => 'Canon, Inc.', -// 'DaeWoo-Telecom-Ltd' => 'DaeWoo Telecom, Ltd', -// 'Chromatic-Research' => 'Chromatic Research', -// 'Micro-Audiometrics-Corp.' => 'Micro Audiometrics Corp.', -// 'Dooin-Electronics' => 'Dooin Electronics', -// 'Winnov-L.P.' => 'Winnov L.P.', -// 'Nikon-Corp.' => 'Nikon Corp.', -// 'Pan-International' => 'Pan International', -// 'IBM-Corp.' => 'IBM Corp.', -// 'Cypress-Semiconductor-Corp.' => 'Cypress Semiconductor Corp.', -// 'ROHM-LSI-Systems-USA-LLC' => 'ROHM LSI Systems USA, LLC', -// 'Hint-Corp.' => 'Hint Corp.', -// 'Compal-Electronics-Inc.' => 'Compal Electronics, Inc.', -// 'Seiko-Epson-Corp.' => 'Seiko Epson Corp.', -// 'Rainbow-Technologies-Inc.' => 'Rainbow Technologies, Inc.', -// 'Toucan-Systems-Ltd' => 'Toucan Systems, Ltd', -// 'I-O-Data-Device-Inc.' => 'I-O Data Device, Inc.', -// 'Telia-Research-AB' => 'Telia Research AB', -// 'TDK-Corp.' => 'TDK Corp.', -// 'U.S.-Robotics-3Com' => 'U.S. Robotics (3Com)', -// 'Maxi-Switch-Inc.' => 'Maxi Switch, Inc.', -// 'Fujitsu-Ltd' => 'Fujitsu, Ltd', -// 'Micro-Macro-Technologies' => 'Micro Macro Technologies', -// 'Konica-Corp.' => 'Konica Corp.', -// 'Lite-On-Technology-Corp.' => 'Lite-On Technology Corp.', -// 'Fuji-Photo-Film-Co.-Ltd' => 'Fuji Photo Film Co., Ltd', -// 'ST-Ericsson' => 'ST-Ericsson', -// 'Tatung-Co.-Of-America' => 'Tatung Co. Of America', -// 'ScanLogic-Corp.' => 'ScanLogic Corp.', -// 'Myson-Century-Inc.' => 'Myson Century, Inc.', -// 'Digi-International' => 'Digi International', -// 'ITT-Canon' => 'ITT Canon', -// 'Altec-Lansing-Technologies' => 'Altec Lansing Technologies', -// 'VidUS-Inc.' => 'VidUS, Inc.', -// 'LSI-Logic-Inc.' => 'LSI Logic, Inc.', -// 'Forte-Technologies-Inc.' => 'Forte Technologies, Inc.', -// 'Mentor-Graphics' => 'Mentor Graphics', -// 'Oki-Semiconductor' => 'Oki Semiconductor', -// 'Microchip-Technology-Inc.' => 'Microchip Technology, Inc.', -// 'Holtek-Semiconductor-Inc.' => 'Holtek Semiconductor, Inc.', -// 'Panasonic-Matsushita' => 'Panasonic (Matsushita)', -// 'Hypertec-Pty-Ltd' => 'Hypertec Pty, Ltd', -// 'Huan-Hsin-Holdings-Ltd' => 'Huan Hsin Holdings, Ltd', -// 'Sharp-Corp.' => 'Sharp Corp.', -// 'MindShare-Inc.' => 'MindShare, Inc.', -// 'Interlink-Electronics' => 'Interlink Electronics', -// 'Iiyama-North-America-Inc.' => 'Iiyama North America, Inc.', -// 'Exar-Corp.' => 'Exar Corp.', -// 'Zilog-Inc.' => 'Zilog, Inc.', -// 'ACC-Microelectronics' => 'ACC Microelectronics', -// 'Promise-Technology' => 'Promise Technology', -// 'SCM-Microsystems-Inc.' => 'SCM Microsystems, Inc.', -// 'Elo-TouchSystems' => 'Elo TouchSystems', -// 'Samsung-Electronics-Co.-Ltd' => 'Samsung Electronics Co., Ltd', -// 'PC-Tel-Inc.' => 'PC-Tel, Inc.', -// 'Brooktree-Corp.' => 'Brooktree Corp.', -// 'Northstar-Systems-Inc.' => 'Northstar Systems, Inc.', -// 'Tokyo-Electron-Device-Ltd' => 'Tokyo Electron Device, Ltd', -// 'Annabooks' => 'Annabooks', -// 'Daewoo-Electronics-Co.-Ltd' => 'Daewoo Electronics Co., Ltd', -// 'Victor-Company-of-Japan-Ltd' => 'Victor Company of Japan, Ltd', -// 'Chicony-Electronics-Co.-Ltd' => 'Chicony Electronics Co., Ltd', -// 'Elan-Microelectronics-Corp.' => 'Elan Microelectronics Corp.', -// 'Harting-Elektronik-Inc.' => 'Harting Elektronik, Inc.', -// 'Fujitsu-ICL-Systems-Inc.' => 'Fujitsu-ICL Systems, Inc.', -// 'Norand-Corp.' => 'Norand Corp.', -// 'Newnex-Technology-Corp.' => 'Newnex Technology Corp.', -// 'FuturePlus-Systems' => 'FuturePlus Systems', -// 'Brother-Industries-Ltd' => 'Brother Industries, Ltd', -// 'Dallas-Semiconductor' => 'Dallas Semiconductor', -// 'Sunplus-Technology-Co.-Ltd' => 'Sunplus Technology Co., Ltd', -// 'Soliton-Systems-K.K.' => 'Soliton Systems, K.K.', -// 'PFU-Ltd' => 'PFU, Ltd', -// 'E-CMOS-Corp.' => 'E-CMOS Corp.', -// 'Siam-United-Hi-Tech' => 'Siam United Hi-Tech', -// 'Fujikura-DDK-Ltd' => 'Fujikura DDK, Ltd', -// 'Acer-Inc.' => 'Acer, Inc.', -// 'Hitachi-America-Ltd' => 'Hitachi America, Ltd', -// 'Hayes-Microcomputer-Products' => 'Hayes Microcomputer Products', -// '3Com-Corp.' => '3Com Corp.', -// 'Hosiden-Corp.' => 'Hosiden Corp.', -// 'Clarion-Co.-Ltd' => 'Clarion Co., Ltd', -// 'Aztech-Systems-Ltd' => 'Aztech Systems, Ltd', -// 'Cinch-Connectors' => 'Cinch Connectors', -// 'Cable-System-International' => 'Cable System International', -// 'InnoMedia-Inc.' => 'InnoMedia, Inc.', -// 'Belkin-Components' => 'Belkin Components', -// 'Neon-Technology-Inc.' => 'Neon Technology, Inc.', -// 'KC-Technology-Inc.' => 'KC Technology, Inc.', -// 'Sejin-Electron-Inc.' => 'Sejin Electron, Inc.', -// 'Hualon-Microelectronics-Corp.' => 'Hualon Microelectronics Corp.', -// 'digital-X-Inc.' => 'digital-X, Inc.', -// 'FCI-Electronics' => 'FCI Electronics', -// 'ACTC' => 'ACTC', -// 'Longwell-Electronics' => 'Longwell Electronics', -// 'Butterfly-Communications' => 'Butterfly Communications', -// 'EzKEY-Corp.' => 'EzKEY Corp.', -// 'Star-Micronics-Co.-Ltd' => 'Star Micronics Co., Ltd', -// 'WYSE-Technology' => 'WYSE Technology', -// 'Silicon-Graphics' => 'Silicon Graphics', -// 'Shuttle-Inc.' => 'Shuttle, Inc.', -// 'American-Power-Conversion' => 'American Power Conversion', -// 'Scientific-Atlanta-Inc.' => 'Scientific Atlanta, Inc.', -// 'Airborn-Connectors' => 'Airborn Connectors', -// 'Advanced-Connectek-Inc.' => 'Advanced Connectek, Inc.', -// 'ATEN-GmbH' => 'ATEN GmbH', -// 'Sola-Electronics' => 'Sola Electronics', -// 'Netchip-Technology-Inc.' => 'Netchip Technology, Inc.', -// 'Temic-MHS-S.A.' => 'Temic MHS S.A.', -// 'ALTRA' => 'ALTRA', -// 'ATI-Technologies-Inc.' => 'ATI Technologies, Inc.', -// 'Aladdin-Knowledge-Systems' => 'Aladdin Knowledge Systems', -// 'Crescent-Heart-Software' => 'Crescent Heart Software', -// 'Tekom-Technologies-Inc.' => 'Tekom Technologies, Inc.', -// 'Avid-Electronics-Corp.' => 'Avid Electronics Corp.', -// 'Standard-Microsystems-Corp.' => 'Standard Microsystems Corp.', -// 'Unicore-Software-Inc.' => 'Unicore Software, Inc.', -// 'American-Microsystems-Inc.' => 'American Microsystems, Inc.', -// 'Wacom-Technology-Corp.' => 'Wacom Technology Corp.', -// 'Systech-Corp.' => 'Systech Corp.', -// 'Alcatel-Mobile-Phones' => 'Alcatel Mobile Phones', -// 'Motorola-Inc.' => 'Motorola, Inc.', -// 'LIH-TZU-Electric-Co.-Ltd' => 'LIH TZU Electric Co., Ltd', -// 'Inventec-Corp.' => 'Inventec Corp.', -// 'Shyh-Shiun-Terminals-Co.-Ltd' => 'Shyh Shiun Terminals Co., Ltd', -// 'PrehKeyTec-GmbH' => 'PrehKeyTec GmbH', -// 'Global-Village-Communication' => 'Global Village Communication', -// 'Silicon-Architect' => 'Silicon Architect', -// 'Mobility-Electronics' => 'Mobility Electronics', -// 'Synopsys-Inc.' => 'Synopsys, Inc.', -// 'UniAccess-AB' => 'UniAccess AB', -// 'Sirf-Technology-Inc.' => 'Sirf Technology, Inc.', -// 'ViewSonic-Corp.' => 'ViewSonic Corp.', -// 'Cristie-Electronics-Ltd' => 'Cristie Electronics, Ltd', -// 'Xirlink-Inc.' => 'Xirlink, Inc.', -// 'Polaroid-Corp.' => 'Polaroid Corp.', -// 'Anchor-Chips-Inc.' => 'Anchor Chips, Inc.', -// 'Tyan-Computer-Corp.' => 'Tyan Computer Corp.', -// 'Pixera-Corp.' => 'Pixera Corp.', -// 'New-Media-Corp.' => 'New Media Corp.', -// 'Sony-Corp.' => 'Sony Corp.', -// 'Try-Corp.' => 'Try Corp.', -// 'Proside-Corp.' => 'Proside Corp.', -// 'WYSE-Technology-Taiwan' => 'WYSE Technology Taiwan', -// 'Fuji-Xerox-Co.-Ltd' => 'Fuji Xerox Co., Ltd', -// 'CompuTrend-Systems-Inc.' => 'CompuTrend Systems, Inc.', -// 'Philips-Monitors' => 'Philips Monitors', -// 'Dictaphone-Corp.' => 'Dictaphone Corp.', -// 'ANAM-S-T-Co.-Ltd' => 'ANAM S&T Co., Ltd', -// 'ATEN-International-Co.-Ltd' => 'ATEN International Co., Ltd', -// 'Truevision-Inc.' => 'Truevision, Inc.', -// 'Cadence-Design-Systems-Inc.' => 'Cadence Design Systems, Inc.', -// 'Kenwood-USA' => 'Kenwood USA', -// 'KnowledgeTek-Inc.' => 'KnowledgeTek, Inc.', -// 'Proton-Electronic-Ind.' => 'Proton Electronic Ind.', -// 'Samsung-Electro-Mechanics-Co.' => 'Samsung Electro-Mechanics Co.', -// 'CTX-Opto-Electronics-Corp.' => 'CTX Opto-Electronics Corp.', -// 'Mustek-Systems-Inc.' => 'Mustek Systems, Inc.', -// 'Interface-Corp.' => 'Interface Corp.', -// 'Oasis-Design-Inc.' => 'Oasis Design, Inc.', -// 'Telex-Communications-Inc.' => 'Telex Communications, Inc.', -// 'Immersion-Corp.' => 'Immersion Corp.', -// 'Peracom-Networks-Inc.' => 'Peracom Networks, Inc.', -// 'Monterey-International-Corp.' => 'Monterey International Corp.', -// 'Xyratex-International-Ltd' => 'Xyratex International, Ltd', -// 'Quartz-Ingenierie' => 'Quartz Ingenierie', -// 'SegaSoft' => 'SegaSoft', -// 'Wacom-Co.-Ltd' => 'Wacom Co., Ltd', -// 'Decicon-Inc.' => 'Decicon, Inc.', -// 'eTEK-Labs' => 'eTEK Labs', -// 'EIZO-Corp.' => 'EIZO Corp.', -// 'Elecom-Co.-Ltd' => 'Elecom Co., Ltd', -// 'Korea-Data-Systems-Co.-Ltd' => 'Korea Data Systems Co., Ltd', -// 'Epson-America' => 'Epson America', -// 'Interex-Inc.' => 'Interex, Inc.', -// 'City-University-of-Hong-Kong' => 'City University of Hong Kong', -// 'ELSA' => 'ELSA', -// 'Intrinsix-Corp.' => 'Intrinsix Corp.', -// 'GVC-Corp.' => 'GVC Corp.', -// 'Samsung-Electronics-America' => 'Samsung Electronics America', -// 'Y-E-Data-Inc.' => 'Y-E Data, Inc.', -// 'AVM-GmbH' => 'AVM GmbH', -// 'Shark-Multimedia-Inc.' => 'Shark Multimedia, Inc.', -// 'Nintendo-Co.-Ltd' => 'Nintendo Co., Ltd', -// 'QuickShot-Ltd' => 'QuickShot, Ltd', -// 'Denron-Inc.' => 'Denron, Inc.', -// 'Racal-Data-Group' => 'Racal Data Group', -// 'Roland-Corp.' => 'Roland Corp.', -// 'Padix-Co.-Ltd-Rockfire' => 'Padix Co., Ltd (Rockfire)', -// 'RATOC-System-Inc.' => 'RATOC System, Inc.', -// 'FlashPoint-Technology-Inc.' => 'FlashPoint Technology, Inc.', -// 'ZyXEL-Communications-Corp.' => 'ZyXEL Communications Corp.', -// 'Sapien-Design' => 'Sapien Design', -// 'Victron' => 'Victron', -// 'Nohau-Corp.' => 'Nohau Corp.', -// 'Infineon-Technologies' => 'Infineon Technologies', -// 'In-Focus-Systems' => 'In Focus Systems', -// 'Micrel-Semiconductor' => 'Micrel Semiconductor', -// 'Tripath-Technology-Inc.' => 'Tripath Technology, Inc.', -// 'Alcor-Micro-Corp.' => 'Alcor Micro Corp.', -// 'Omron-Corp.' => 'Omron Corp.', -// 'Questra-Consulting' => 'Questra Consulting', -// 'Powerware-Corp.' => 'Powerware Corp.', -// 'Incite' => 'Incite', -// 'Princeton-Graphic-Systems' => 'Princeton Graphic Systems', -// 'Zoran-Microelectronics-Ltd' => 'Zoran Microelectronics, Ltd', -// 'MicroTouch-Systems-Inc.' => 'MicroTouch Systems, Inc.', -// 'Trisignal-Communications' => 'Trisignal Communications', -// 'Niigata-Canotec-Co.-Inc.' => 'Niigata Canotec Co., Inc.', -// 'Iomega-Corp.' => 'Iomega Corp.', -// 'A-Trend-Technology-Co.-Ltd' => 'A-Trend Technology Co., Ltd', -// 'Advanced-Input-Devices' => 'Advanced Input Devices', -// 'Intelligent-Instrumentation' => 'Intelligent Instrumentation', -// 'LaCie-Ltd' => 'LaCie, Ltd', -// 'Vetronix-Corp.' => 'Vetronix Corp.', -// 'USC-Corp.' => 'USC Corp.', -// 'ARC-International' => 'ARC International', -// 'Ortek-Technology-Inc.' => 'Ortek Technology, Inc.', -// 'Sampo-Technology-Corp.' => 'Sampo Technology Corp.', -// 'Cisco-Systems-Inc.' => 'Cisco Systems, Inc.', -// 'Bose-Corp.' => 'Bose Corp.', -// 'Spacetec-IMC-Corp.' => 'Spacetec IMC Corp.', -// 'OmniVision-Technologies-Inc.' => 'OmniVision Technologies, Inc.', -// 'Utilux-South-China-Ltd' => 'Utilux South China, Ltd', -// 'In-System-Design' => 'In-System Design', -// 'Apple-Inc.' => 'Apple, Inc.', -// 'Y.C.-Cable-U.S.A.-Inc.' => 'Y.C. Cable U.S.A., Inc.', -// 'Synopsys-Inc.' => 'Synopsys, Inc.', -// 'Jing-Mold-Enterprise-Co.-Ltd' => 'Jing-Mold Enterprise Co., Ltd', -// 'Fountain-Technologies-Inc.' => 'Fountain Technologies, Inc.', -// 'LG-Semicon-Co.-Ltd' => 'LG Semicon Co., Ltd', -// 'Dialogic-Corp.' => 'Dialogic Corp.', -// 'Proxima-Corp.' => 'Proxima Corp.', -// 'Medianix-Semiconductor-Inc.' => 'Medianix Semiconductor, Inc.', -// 'Agiler-Inc.' => 'Agiler, Inc.', -// 'Philips-Research-Laboratories' => 'Philips Research Laboratories', -// 'DigitalPersona-Inc.' => 'DigitalPersona, Inc.', -// 'Grey-Cell-Systems' => 'Grey Cell Systems', -// '3G-Green-Green-Globe-Co.-Ltd' => '3G Green Green Globe Co., Ltd', -// 'RAFI-GmbH---Co.-KG' => 'RAFI GmbH & Co. KG', -// 'Tyco-Electronics-Raychem' => 'Tyco Electronics (Raychem)', -// 'S---S-Research' => 'S & S Research', -// 'Keil-Software' => 'Keil Software', -// 'Media-Phonics-Suisse-S.A.' => 'Media Phonics (Suisse) S.A.', -// 'Digi-International-Inc.' => 'Digi International, Inc.', -// 'Qualcomm-Inc.' => 'Qualcomm, Inc.', -// 'Qtronix-Corp.' => 'Qtronix Corp.', -// 'Semtech-Corp.' => 'Semtech Corp.', -// 'Ricoh-Co.-Ltd' => 'Ricoh Co., Ltd', -// 'ELSA-AG' => 'ELSA AG', -// 'Silicom-Ltd' => 'Silicom, Ltd', -// 'sci-worx-GmbH' => 'sci-worx GmbH', -// 'Sung-Forn-Co.-Ltd' => 'Sung Forn Co., Ltd', -// 'GE-Medical-Systems-Lunar' => 'GE Medical Systems Lunar', -// 'Brainboxes-Ltd' => 'Brainboxes, Ltd', -// 'Wave-Systems-Corp.' => 'Wave Systems Corp.', -// 'Tohoku-Ricoh-Co.-Ltd' => 'Tohoku Ricoh Co., Ltd', -// 'Philips-Semiconductors-CICT' => 'Philips Semiconductors, CICT', -// 'Thomas---Betts-Corp.' => 'Thomas & Betts Corp.', -// 'Ultima-Electronics-Corp.' => 'Ultima Electronics Corp.', -// 'Axiohm-Transaction-Solutions' => 'Axiohm Transaction Solutions', -// 'Microtek-International-Inc.' => 'Microtek International, Inc.', -// 'Sun-Corp.-Suntac-' => 'Sun Corp. (Suntac?)', -// 'Lexar-Media-Inc.' => 'Lexar Media, Inc.', -// 'Delta-Electronics-Inc.' => 'Delta Electronics, Inc.', -// 'Silicon-Vision-Inc.' => 'Silicon Vision, Inc.', -// 'Symbol-Technologies' => 'Symbol Technologies', -// 'Syntek-Semiconductor-Co.-Ltd' => 'Syntek Semiconductor Co., Ltd', -// 'ElecVision-Inc.' => 'ElecVision, Inc.', -// 'Genesys-Logic-Inc.' => 'Genesys Logic, Inc.', -// 'Red-Wing-Corp.' => 'Red Wing Corp.', -// 'Fuji-Electric-Co.-Ltd' => 'Fuji Electric Co., Ltd', -// 'Keithley-Instruments' => 'Keithley Instruments', -// 'ICC-Inc.' => 'ICC, Inc.', -// 'Kawasaki-LSI' => 'Kawasaki LSI', -// 'FFC-Ltd' => 'FFC, Ltd', -// 'COM21-Inc.' => 'COM21, Inc.', -// 'Cytechinfo-Inc.' => 'Cytechinfo Inc.', -// 'AVB-Inc.-anko-' => 'AVB, Inc. [anko?]', -// 'Canopus-Co.-Ltd' => 'Canopus Co., Ltd', -// 'Compass-Communications' => 'Compass Communications', -// 'Dexin-Corp.-Ltd' => 'Dexin Corp., Ltd', -// 'PI-Engineering-Inc.' => 'PI Engineering, Inc.', -// 'Unixtar-Technology-Inc.' => 'Unixtar Technology, Inc.', -// 'AOC-International' => 'AOC International', -// 'RFC-Distributions-PTE-Ltd' => 'RFC Distribution(s) PTE, Ltd', -// 'PSC-Scanning-Inc.' => 'PSC Scanning, Inc.', -// 'Harman-Multimedia' => 'Harman Multimedia', -// 'InterAct-Inc.' => 'InterAct, Inc.', -// 'Chic-Technology-Corp.' => 'Chic Technology Corp.', -// 'LeCroy-Corp.' => 'LeCroy Corp.', -// 'Barco-Display-Systems' => 'Barco Display Systems', -// 'Jazz-Hipster-Corp.' => 'Jazz Hipster Corp.', -// 'Vista-Imaging-Inc.' => 'Vista Imaging, Inc.', -// 'Jean-Co.-Ltd' => 'Jean Co., Ltd', -// 'Anchor-C-C-Co.-Ltd' => 'Anchor C&C Co., Ltd', -// 'Bridge-Information-Co.-Ltd' => 'Bridge Information Co., Ltd', -// 'Genrad-Ads' => 'Genrad Ads', -// 'SMK-Manufacturing-Inc.' => 'SMK Manufacturing, Inc.', -// 'Solid-Year' => 'Solid Year', -// 'EEH-Datalink-GmbH' => 'EEH Datalink GmbH', -// 'Auctor-Corp.' => 'Auctor Corp.', -// 'Transmonde-Technologies-Inc.' => 'Transmonde Technologies, Inc.', -// 'Costar-Electronics-Inc.' => 'Costar Electronics, Inc.', -// 'Totoku-Electric-Co.-Ltd' => 'Totoku Electric Co., Ltd', -// 'TransAct-Technologies-Inc.' => 'TransAct Technologies, Inc.', -// 'Bio-Rad-Laboratories' => 'Bio-Rad Laboratories', -// 'MacAlly' => 'MacAlly', -// 'Seiko-Instruments-Inc.' => 'Seiko Instruments, Inc.', -// 'Veridicom-International-Inc.' => 'Veridicom International, Inc.', -// 'Promptus-Communications-Inc.' => 'Promptus Communications, Inc.', -// 'Act-Labs-Ltd' => 'Act Labs, Ltd', -// 'Quatech-Inc.' => 'Quatech, Inc.', -// 'Nissei-Electric-Co.' => 'Nissei Electric Co.', -// 'Alaris-Inc.' => 'Alaris, Inc.', -// 'Iotech-Inc.' => 'Iotech, Inc.', -// 'Littelfuse-Inc.' => 'Littelfuse, Inc.', -// 'Avocent-Corp.' => 'Avocent Corp.', -// 'TiMedia-Technology-Co.-Ltd' => 'TiMedia Technology Co., Ltd', -// 'Adomax-Technology-Co.-Ltd' => 'Adomax Technology Co., Ltd', -// 'Tasking-Software-Inc.' => 'Tasking Software, Inc.', -// 'Zida-Technologies-Ltd' => 'Zida Technologies, Ltd', -// 'Creative-Labs' => 'Creative Labs', -// 'JUJO-Electronics-Corp.' => 'JUJO Electronics Corp.', -// 'Cyrix-Corp.' => 'Cyrix Corp.', -// 'Micron-Technology-Inc.' => 'Micron Technology, Inc.', -// 'Methode-Electronics-Inc.' => 'Methode Electronics, Inc.', -// 'Sierra-Imaging-Inc.' => 'Sierra Imaging, Inc.', -// 'Avision-Inc.' => 'Avision, Inc.', -// 'Chrontel-Inc.' => 'Chrontel, Inc.', -// 'Techwin-Corp.' => 'Techwin Corp.', -// 'Taugagreining-HF' => 'Taugagreining HF', -// 'Fong-Kai-Industrial-Co.-Ltd' => 'Fong Kai Industrial Co., Ltd', -// 'RealMedia-Technology-Inc.' => 'RealMedia Technology, Inc.', -// 'New-Technology-Cable-Ltd' => 'New Technology Cable, Ltd', -// 'Hitex-Development-Tools' => 'Hitex Development Tools', -// 'Woods-Industries-Inc.' => 'Woods Industries, Inc.', -// 'VIA-Medical-Corp.' => 'VIA Medical Corp.', -// 'TEAC-Corp.' => 'TEAC Corp.', -// 'Who--Vision-Systems-Inc.' => 'Who? Vision Systems, Inc.', -// 'UMAX' => 'UMAX', -// 'Acton-Research-Corp.' => 'Acton Research Corp.', -// 'Inside-Out-Networks' => 'Inside Out Networks', -// 'Weli-Science-Co.-Ltd' => 'Weli Science Co., Ltd', -// 'Ji-Haw-Industrial-Co.-Ltd' => 'Ji-Haw Industrial Co., Ltd', -// 'TriTech-Microelectronics-Ltd' => 'TriTech Microelectronics, Ltd', -// 'Suyin-Corp.' => 'Suyin Corp.', -// 'WIBU-Systems-AG' => 'WIBU-Systems AG', -// 'Dynapro-Systems' => 'Dynapro Systems', -// 'Likom-Technology-Sdn.-Bhd.' => 'Likom Technology Sdn. Bhd.', -// 'Stargate-Solutions-Inc.' => 'Stargate Solutions, Inc.', -// 'CNF-Inc.' => 'CNF, Inc.', -// 'Granite-Microsystems-Inc.' => 'Granite Microsystems, Inc.', -// 'Glory-Mark-Electronic-Ltd' => 'Glory Mark Electronic, Ltd', -// 'Tekcon-Electronics-Corp.' => 'Tekcon Electronics Corp.', -// 'Sigma-Designs-Inc.' => 'Sigma Designs, Inc.', -// 'Aethra' => 'Aethra', -// 'Optoelectronics-Co.-Ltd' => 'Optoelectronics Co., Ltd', -// 'Tracewell-Systems' => 'Tracewell Systems', -// 'Silicon-Graphics' => 'Silicon Graphics', -// 'Hamamatsu-Photonics-K.K.' => 'Hamamatsu Photonics K.K.', -// 'Kansai-Electric-Co.-Ltd' => 'Kansai Electric Co., Ltd', -// 'Topmax-Electronic-Co.-Ltd' => 'Topmax Electronic Co., Ltd', -// 'Groovy-Technology-Corp.' => 'Groovy Technology Corp.', -// 'Cypress-Semiconductor' => 'Cypress Semiconductor', -// 'Aiwa-Co.-Ltd' => 'Aiwa Co., Ltd', -// 'WordWand' => 'WordWand', -// 'Oce-Printing-Systems-GmbH' => 'Oce Printing Systems GmbH', -// 'Total-Technologies-Ltd' => 'Total Technologies, Ltd', -// 'Linksys-Inc.' => 'Linksys, Inc.', -// 'Entrega-Inc.' => 'Entrega, Inc.', -// 'SigmaTel-Inc.' => 'SigmaTel, Inc.', -// 'Sequel-Imaging' => 'Sequel Imaging', -// 'Labtec-Inc.' => 'Labtec, Inc.', -// 'HCL' => 'HCL', -// 'DrayTek-Corp.' => 'DrayTek Corp.', -// 'Teles-AG' => 'Teles AG', -// 'Aiwa-Co.-Ltd' => 'Aiwa Co., Ltd', -// 'ACard-Technology-Corp.' => 'ACard Technology Corp.', -// 'Prolific-Technology-Inc.' => 'Prolific Technology, Inc.', -// 'Efficient-Networks-Inc.' => 'Efficient Networks, Inc.', -// 'Hohner-Corp.' => 'Hohner Corp.', -// 'Intermec-Technologies-Corp.' => 'Intermec Technologies Corp.', -// 'Virata-Ltd' => 'Virata, Ltd', -// 'Victor-Company-of-Japan-Ltd' => 'Victor Company of Japan, Ltd', -// 'Actiontec-Electronics-Inc.' => 'Actiontec Electronics, Inc.', -// 'Minolta-Co.-Ltd' => 'Minolta Co., Ltd', -// 'Pertech-Inc.' => 'Pertech, Inc.', -// 'Potrans-International-Inc.' => 'Potrans International, Inc.', -// 'CH-Products-Inc.' => 'CH Products, Inc.', -// 'Golden-Bridge-Electech-Inc.' => 'Golden Bridge Electech, Inc.', -// 'Hagiwara-Sys-Com-Co.-Ltd' => 'Hagiwara Sys-Com Co., Ltd', -// 'Lego-Group' => 'Lego Group', -// 'Chuntex-CTX' => 'Chuntex (CTX)', -// 'Tektronix-Inc.' => 'Tektronix, Inc.', -// 'Askey-Computer-Corp.' => 'Askey Computer Corp.', -// 'Thomson-Inc.' => 'Thomson, Inc.', -// 'Hughes-Network-Systems-HNS' => 'Hughes Network Systems (HNS)', -// 'Marx' => 'Marx', -// 'Allied-Data-Technologies-BV' => 'Allied Data Technologies BV', -// 'Topro-Technology-Inc.' => 'Topro Technology, Inc.', -// 'Saitek-PLC' => 'Saitek PLC', -// 'Divio' => 'Divio', -// 'MicroStore-Inc.' => 'MicroStore, Inc.', -// 'Topaz-Systems-Inc.' => 'Topaz Systems, Inc.', -// 'Westell' => 'Westell', -// 'Sysgration-Ltd' => 'Sysgration, Ltd', -// 'Pixela-Corp.' => 'Pixela Corp.', -// 'Alcatel-Telecom' => 'Alcatel Telecom', -// 'EDA-Inc.' => 'EDA, Inc.', -// 'Oki-Data-Corp.' => 'Oki Data Corp.', -// 'AGFA-Gevaert-NV' => 'AGFA-Gevaert NV', -// 'Leoco-Corp.' => 'Leoco Corp.', -// 'Phidgets-Inc.-formerly-GLAB' => 'Phidgets Inc. (formerly GLAB)', -// 'Bizlink-International-Corp.' => 'Bizlink International Corp.', -// 'Hagenuk-GmbH' => 'Hagenuk, GmbH', -// 'Infowave-Software-Inc.' => 'Infowave Software, Inc.', -// 'SIIG-Inc.' => 'SIIG, Inc.', -// 'Taxan-Europe-Ltd' => 'Taxan (Europe), Ltd', -// 'Newer-Technology-Inc.' => 'Newer Technology, Inc.', -// 'Synaptics-Inc.' => 'Synaptics, Inc.', -// 'Terayon-Communication-Systems' => 'Terayon Communication Systems', -// 'Keyspan' => 'Keyspan', -// 'SpheronVR-AG' => 'SpheronVR AG', -// 'LapLink-Inc.' => 'LapLink, Inc.', -// 'Daewoo-Electronics-Co.-Ltd' => 'Daewoo Electronics Co., Ltd', -// 'Mitsubishi-Electric-Corp.' => 'Mitsubishi Electric Corp.', -// 'Cisco-Systems' => 'Cisco Systems', -// 'Toshiba' => 'Toshiba', -// 'Aashima-Technology-B.V.' => 'Aashima Technology B.V.', -// 'Phoenixtec-Power-Co.-Ltd' => 'Phoenixtec Power Co., Ltd', -// 'Paradyne' => 'Paradyne', -// 'Heisei-Electronics-Co.-Ltd' => 'Heisei Electronics Co., Ltd', -// 'Multi-Tech-Systems-Inc.' => 'Multi-Tech Systems, Inc.', -// 'ADS-Technologies-Inc.' => 'ADS Technologies, Inc.', -// 'Alcatel-Microelectronics' => 'Alcatel Microelectronics', -// 'Tiger-Jet-Network-Inc.' => 'Tiger Jet Network, Inc.', -// 'Sirius-Technologies' => 'Sirius Technologies', -// 'PC-Expert-Tech.-Co.-Ltd' => 'PC Expert Tech. Co., Ltd', -// 'T.N.C-Industrial-Co.-Ltd' => 'T.N.C Industrial Co., Ltd', -// 'Opcode-Systems-Inc.' => 'Opcode Systems, Inc.', -// 'Emine-Technology-Co.' => 'Emine Technology Co.', -// 'Wintrend-Technology-Co.-Ltd' => 'Wintrend Technology Co., Ltd', -// 'Wailly-Technology-Ltd' => 'Wailly Technology Ltd', -// 'Guillemot-Corp.' => 'Guillemot Corp.', -// 'ASYST-electronic-d.o.o.' => 'ASYST electronic d.o.o.', -// 'HSD-S.r.L' => 'HSD S.r.L', -// 'Boston-Acoustics' => 'Boston Acoustics', -// 'Gallant-Computer-Inc.' => 'Gallant Computer, Inc.', -// 'Bvtech-Industry-Inc.' => 'Bvtech Industry, Inc.', -// 'NKK-Corp.' => 'NKK Corp.', -// 'Ariel-Corp.' => 'Ariel Corp.', -// 'Standard-Microsystems-Corp.' => 'Standard Microsystems Corp.', -// 'Putercom-Co.-Ltd' => 'Putercom Co., Ltd', -// 'Silicon-Systems-Ltd-SSL' => 'Silicon Systems, Ltd (SSL)', -// 'Comoss-Electronic-Co.-Ltd' => 'Comoss Electronic Co., Ltd', -// 'Connect-Tech-Inc.' => 'Connect Tech, Inc.', -// 'Interval-Research-Corp.' => 'Interval Research Corp.', -// 'NewMotion-Inc.' => 'NewMotion, Inc.', -// 'ZNK-Corp.' => 'ZNK Corp.', -// 'Imation-Corp.' => 'Imation Corp.', -// 'Tremon-Enterprises-Co.-Ltd' => 'Tremon Enterprises Co., Ltd', -// 'Domain-Technologies-Inc.' => 'Domain Technologies, Inc.', -// 'Eicon-Networks-Corp.' => 'Eicon Networks Corp.', -// 'Ariston-Technologies' => 'Ariston Technologies', -// 'Amitm' => 'Amitm', -// 'Sunix-Co.-Ltd' => 'Sunix Co., Ltd', -// 'Advanced-Card-Systems-Ltd' => 'Advanced Card Systems, Ltd', -// 'Susteen-Inc.' => 'Susteen, Inc.', -// 'ViewQuest-Technologies-Inc.' => 'ViewQuest Technologies, Inc.', -// 'Lasat-Communications-A-S' => 'Lasat Communications A/S', -// 'Asuscom-Network' => 'Asuscom Network', -// 'Lorom-Industrial-Co.-Ltd' => 'Lorom Industrial Co., Ltd', -// 'Mad-Catz-Inc.' => 'Mad Catz, Inc.', -// 'Chaplet-Systems-Inc.' => 'Chaplet Systems, Inc.', -// 'Suncom-Technologies' => 'Suncom Technologies', -// 'Eutron-S.p.a.' => 'Eutron S.p.a.', -// 'NEC-Inc.' => 'NEC, Inc.', -// 'Syntech-Information-Co.-Ltd' => 'Syntech Information Co., Ltd', -// 'Onkyo-Corp.' => 'Onkyo Corp.', -// 'Labway-Corp.' => 'Labway Corp.', -// 'EVer-Electronics-Corp.' => 'EVer Electronics Corp.', -// 'Polestar-Tech.-Corp.' => 'Polestar Tech. Corp.', -// 'C-C-C-Group-PLC' => 'C-C-C Group PLC', -// 'Micronas-GmbH' => 'Micronas GmbH', -// 'Digital-Stream-Corp.' => 'Digital Stream Corp.', -// 'Aureal-Semiconductor' => 'Aureal Semiconductor', -// 'Network-Technologies-Inc.' => 'Network Technologies, Inc.', -// 'Sophisticated-Circuits-Inc.' => 'Sophisticated Circuits, Inc.', -// 'Midiman' => 'Midiman', -// 'Cyber-Power-System-Inc.' => 'Cyber Power System, Inc.', -// 'X-Rite-Inc.' => 'X-Rite, Inc.', -// 'Jess-Link-Products-Co.-Ltd' => 'Jess-Link Products Co., Ltd', -// 'Tokheim-Corp.' => 'Tokheim Corp.', -// 'Camtel-Technology-Corp.' => 'Camtel Technology Corp.', -// 'Surecom-Technology-Corp.' => 'Surecom Technology Corp.', -// 'OmniKey-AG' => 'OmniKey AG', -// 'Partner-Tech' => 'Partner Tech', -// 'Denso-Corp.' => 'Denso Corp.', -// 'Kuan-Tech-Enterprise-Co.-Ltd' => 'Kuan Tech Enterprise Co., Ltd', -// 'Jhen-Vei-Electronic-Co.-Ltd' => 'Jhen Vei Electronic Co., Ltd', -// 'Observator-Instruments-BV' => 'Observator Instruments BV', -// 'AmTRAN-Technology-Co.-Ltd' => 'AmTRAN Technology Co., Ltd', -// 'Longshine-Electronics-Corp.' => 'Longshine Electronics Corp.', -// 'Inalways-Corp.' => 'Inalways Corp.', -// 'Comda-Enterprise-Corp.' => 'Comda Enterprise Corp.', -// 'Volex-Inc.' => 'Volex, Inc.', -// 'Fairchild-Semiconductor' => 'Fairchild Semiconductor', -// 'Sankyo-Seiki-Mfg.-Co.-Ltd' => 'Sankyo Seiki Mfg. Co., Ltd', -// 'Linksys' => 'Linksys', -// 'Forward-Electronics-Co.-Ltd' => 'Forward Electronics Co., Ltd', -// 'Griffin-Technology' => 'Griffin Technology', -// 'Well-Excellent---Most-Corp.' => 'Well Excellent & Most Corp.', -// 'Sagem-Monetel-GmbH' => 'Sagem Monetel GmbH', -// 'SanDisk-Corp.' => 'SanDisk Corp.', -// 'Trackerball' => 'Trackerball', -// 'C3PO' => 'C3PO', -// 'Vivitar-Inc.' => 'Vivitar, Inc.', -// 'NTT-ME' => 'NTT-ME', -// 'Logitec-Corp.' => 'Logitec Corp.', -// 'Happ-Controls-Inc.' => 'Happ Controls, Inc.', -// 'GTCO-CalComp' => 'GTCO/CalComp', -// 'Brincom-Inc.' => 'Brincom, Inc.', -// 'Axis-Communications-AB' => 'Axis Communications AB', -// 'Wha-Yu-Industrial-Co.-Ltd' => 'Wha Yu Industrial Co., Ltd', -// 'ABL-Electronics-Corp.' => 'ABL Electronics Corp.', -// 'RealChip-Inc.' => 'RealChip, Inc.', -// 'Certicom-Corp.' => 'Certicom Corp.', -// 'Grandtech-Semiconductor-Corp.' => 'Grandtech Semiconductor Corp.', -// 'Optelec' => 'Optelec', -// 'Altera' => 'Altera', -// 'Sagem' => 'Sagem', -// 'Alfadata-Computer-Corp.' => 'Alfadata Computer Corp.', -// 'Digicom-S.p.A.' => 'Digicom S.p.A.', -// 'National-Technical-Systems' => 'National Technical Systems', -// 'Onnto-Corp.' => 'Onnto Corp.', -// 'Be-Inc.' => 'Be, Inc.', -// 'ADMtek-Inc.' => 'ADMtek, Inc.', -// 'Corega-K.K.' => 'Corega K.K.', -// 'Freecom-Technologies' => 'Freecom Technologies', -// 'Microtech' => 'Microtech', -// 'Trust-Technologies' => 'Trust Technologies', -// 'IMP-Inc.' => 'IMP, Inc.', -// 'Motorola-BCS-Inc.' => 'Motorola BCS, Inc.', -// 'Plustek-Inc.' => 'Plustek, Inc.', -// 'Olympus-Optical-Co.-Ltd' => 'Olympus Optical Co., Ltd', -// 'Mega-World-International-Ltd' => 'Mega World International, Ltd', -// 'Marubun-Corp.' => 'Marubun Corp.', -// 'TIME-Interconnect-Ltd' => 'TIME Interconnect, Ltd', -// 'AboCom-Systems-Inc' => 'AboCom Systems Inc', -// 'Canon-Computer-Systems-Inc.' => 'Canon Computer Systems, Inc.', -// 'Webgear-Inc.' => 'Webgear, Inc.', -// 'Veridicom' => 'Veridicom', -// 'Keisokugiken' => 'Keisokugiken', -// 'Datafab-Systems-Inc.' => 'Datafab Systems, Inc.', -// 'APG-Cash-Drawer' => 'APG Cash Drawer', -// 'ShareWave-Inc.' => 'ShareWave, Inc.', -// 'Powertech-Industrial-Co.-Ltd' => 'Powertech Industrial Co., Ltd', -// 'B.U.G.-Inc.' => 'B.U.G., Inc.', -// 'Allied-Telesyn-International' => 'Allied Telesyn International', -// 'AVerMedia-Technologies-Inc.' => 'AVerMedia Technologies, Inc.', -// 'Kingmax-Technology-Inc.' => 'Kingmax Technology, Inc.', -// 'Carry-Computer-Eng.-Co.-Ltd' => 'Carry Computer Eng., Co., Ltd', -// 'Elektor' => 'Elektor', -// 'Casio-Computer-Co.-Ltd' => 'Casio Computer Co., Ltd', -// 'Dazzle' => 'Dazzle', -// 'D-Link-System' => 'D-Link System', -// 'Aptio-Products-Inc.' => 'Aptio Products, Inc.', -// 'Cyberdata-Corp.' => 'Cyberdata Corp.', -// 'Radiant-Systems' => 'Radiant Systems', -// 'GCC-Technologies-Inc.' => 'GCC Technologies, Inc.', -// 'Arasan-Chip-Systems' => 'Arasan Chip Systems', -// 'Diamond-Multimedia' => 'Diamond Multimedia', -// 'David-Electronics-Co.-Ltd' => 'David Electronics Co., Ltd', -// 'Ambient-Technologies-Inc.' => 'Ambient Technologies, Inc.', -// 'Elmeg-GmbH---Co.-Ltd' => 'Elmeg GmbH & Co., Ltd', -// 'Planex-Communications-Inc.' => 'Planex Communications, Inc.', -// 'Movado-Enterprise-Co.-Ltd' => 'Movado Enterprise Co., Ltd', -// 'QPS-Inc.' => 'QPS, Inc.', -// 'Allied-Cable-Corp.' => 'Allied Cable Corp.', -// 'Mirvo-Toys-Inc.' => 'Mirvo Toys, Inc.', -// 'Labsystems' => 'Labsystems', -// 'Iwatsu-Electric-Co.-Ltd' => 'Iwatsu Electric Co., Ltd', -// 'Double-H-Technology-Co.-Ltd' => 'Double-H Technology Co., Ltd', -// 'STSN' => 'STSN', -// 'Circuit-Assembly-Corp.' => 'Circuit Assembly Corp.', -// 'Century-Corp.' => 'Century Corp.', -// 'Dotop-Technology-Inc.' => 'Dotop Technology, Inc.', -// 'DrayTek-Corp.' => 'DrayTek Corp.', -// 'Mark-of-the-Unicorn' => 'Mark of the Unicorn', -// 'Unknown' => 'Unknown', -// 'Mag-Tek' => 'Mag-Tek', -// 'Mako-Technologies-LLC' => 'Mako Technologies, LLC', -// 'Zoom-Telephonics-Inc.' => 'Zoom Telephonics, Inc.', -// 'Genicom-Technology-Inc.' => 'Genicom Technology, Inc.', -// 'Evermuch-Technology-Co.-Ltd' => 'Evermuch Technology Co., Ltd', -// 'Cross-Match-Technologies' => 'Cross Match Technologies', -// 'Datalogic-S.p.A.' => 'Datalogic S.p.A.', -// 'Teco-Image-Systems-Co.-Ltd' => 'Teco Image Systems Co., Ltd', -// 'Mattel-Inc.' => 'Mattel, Inc.', -// 'eLicenser' => 'eLicenser', -// 'MG-Logic' => 'MG Logic', -// 'Indigita-Corp.' => 'Indigita Corp.', -// 'Mipsys' => 'Mipsys', -// 'AlphaSmart-Inc.' => 'AlphaSmart, Inc.', -// 'Reudo-Corp.' => 'Reudo Corp.', -// 'GC-Protronics' => 'GC Protronics', -// 'Data-Transit' => 'Data Transit', -// 'BroadLogic-Inc.' => 'BroadLogic, Inc.', -// 'Sato-Corp.' => 'Sato Corp.', -// 'Handspring' => 'Handspring', -// 'Palm-Inc.' => 'Palm, Inc.', -// 'Kouwell-Electronics-Corp.' => 'Kouwell Electronics Corp.', -// 'Sourcenext-Corp.' => 'Sourcenext Corp.', -// 'Samsung-Techwin-Co.-Ltd' => 'Samsung Techwin Co., Ltd', -// 'Accton-Technology-Corp.' => 'Accton Technology Corp.', -// 'Global-Village' => 'Global Village', -// 'Argosy-Research-Inc.' => 'Argosy Research, Inc.', -// 'Rioport.com-Inc.' => 'Rioport.com, Inc.', -// 'Welland-Industrial-Co.-Ltd' => 'Welland Industrial Co., Ltd', -// 'NetGear-Inc.' => 'NetGear, Inc.', -// 'KB-Gear' => 'KB Gear', -// 'Empeg' => 'Empeg', -// 'Fast-Point-Technologies-Inc.' => 'Fast Point Technologies, Inc.', -// 'CSEM' => 'CSEM', -// 'Topre-Corporation' => 'Topre Corporation', -// 'ActiveWire-Inc.' => 'ActiveWire, Inc.', -// 'B-B-Electronics' => 'B&B Electronics', -// 'Hitachi-Maxell-Ltd' => 'Hitachi Maxell, Ltd', -// 'Xircom' => 'Xircom', -// 'ColorVision-Inc.' => 'ColorVision, Inc.', -// 'Teletrol-Systems-Inc.' => 'Teletrol Systems, Inc.', -// 'Filanet-Corp.' => 'Filanet Corp.', -// 'NetGear-Inc.' => 'NetGear, Inc.', -// 'Data-Translation-Inc.' => 'Data Translation, Inc.', -// 'System-TALKS-Inc.' => 'System TALKS, Inc.', -// 'MEC-IMEX-Inc.' => 'MEC IMEX, Inc.', -// 'Metricom' => 'Metricom', -// 'SanDisk-Inc.' => 'SanDisk, Inc.', -// 'Xpeed-Inc.' => 'Xpeed, Inc.', -// 'A-Tec-Subsystem-Inc.' => 'A-Tec Subsystem, Inc.', -// 'Comtrol-Corp.' => 'Comtrol Corp.', -// 'Adesso-Kbtek-America-Inc.' => 'Adesso/Kbtek America, Inc.', -// 'Jaton-Corp.' => 'Jaton Corp.', -// 'Virtual-IP-Group-Inc.' => 'Virtual IP Group, Inc.', -// 'APT-Technologies-Inc.' => 'APT Technologies, Inc.', -// 'Boca-Research-Inc.' => 'Boca Research, Inc.', -// 'XAC-Automation-Corp.' => 'XAC Automation Corp.', -// 'Hannstar-Electronics-Corp.' => 'Hannstar Electronics Corp.', -// 'MassWorks-Inc.' => 'MassWorks, Inc.', -// 'Swecoin-AB' => 'Swecoin AB', -// 'iLok' => 'iLok', -// 'DioGraphy-Inc.' => 'DioGraphy, Inc.', -// 'Lauterbach' => 'Lauterbach', -// 'Icron-Technologies-Corp.' => 'Icron Technologies Corp.', -// 'NST-Co.-Ltd' => 'NST Co., Ltd', -// 'Primex-Aerospace-Co.' => 'Primex Aerospace Co.', -// 'e9-Inc.' => 'e9, Inc.', -// 'Andrea-Electronics' => 'Andrea Electronics', -// 'Macally-Mace-Group-Inc.' => 'Macally (Mace Group, Inc.)', -// 'Sorenson-Vision-Inc.' => 'Sorenson Vision, Inc.', -// 'NATSU' => 'NATSU', -// 'RadioShack-Corp.-Tandy' => 'RadioShack Corp. (Tandy)', -// 'Texas-Instruments-Japan' => 'Texas Instruments Japan', -// 'Citizen-Watch-Co.-Ltd' => 'Citizen Watch Co., Ltd', -// 'Precise-Biometrics' => 'Precise Biometrics', -// 'Proxim-Inc.' => 'Proxim, Inc.', -// 'Key-Nice-Enterprise-Co.-Ltd' => 'Key Nice Enterprise Co., Ltd', -// '2Wire-Inc.' => '2Wire, Inc.', -// 'Aiptek-International-Inc.' => 'Aiptek International, Inc.', -// 'Jue-Hsun-Ind.-Corp.' => 'Jue Hsun Ind. Corp.', -// 'Long-Well-Electronics-Corp.' => 'Long Well Electronics Corp.', -// 'smartBridges-Inc.' => 'smartBridges, Inc.', -// 'Virtual-Ink' => 'Virtual Ink', -// 'Fujitsu-Siemens-Computers' => 'Fujitsu Siemens Computers', -// 'IXXAT-Automation-GmbH' => 'IXXAT Automation GmbH', -// 'Increment-P-Corp.' => 'Increment P Corp.', -// 'Billionton-Systems-Inc.' => 'Billionton Systems, Inc.', -// '---' => '???', -// 'Spyrus-Inc.' => 'Spyrus, Inc.', -// 'Olitec-Inc.' => 'Olitec, Inc.', -// 'Pioneer-Corp.' => 'Pioneer Corp.', -// 'Litronic' => 'Litronic', -// 'Gemplus' => 'Gemplus', -// 'Integrated-Memory-Logic' => 'Integrated Memory Logic', -// 'Extended-Systems-Inc.' => 'Extended Systems, Inc.', -// 'M-Systems-Flash-Disk-Pioneers' => 'M-Systems Flash Disk Pioneers', -// 'MediaTek-Inc.' => 'MediaTek Inc.', -// 'CCSI-Hesso' => 'CCSI/Hesso', -// 'Corex-Technologies' => 'Corex Technologies', -// 'CTI-Electronics-Corp.' => 'CTI Electronics Corp.', -// 'Gotop-Information-Inc.' => 'Gotop Information Inc.', -// 'SysTec-Co.-Ltd' => 'SysTec Co., Ltd', -// 'Logic-3-International-Ltd' => 'Logic 3 International, Ltd', -// 'Vernier' => 'Vernier', -// 'Wipro-Technologies' => 'Wipro Technologies', -// 'Caere' => 'Caere', -// 'Socket-Communications' => 'Socket Communications', -// 'Digianswer-A-S' => 'Digianswer A/S', -// 'AuthenTec-Inc.' => 'AuthenTec, Inc.', -// 'Pinnacle-Systems-Inc.' => 'Pinnacle Systems, Inc.', -// 'VST-Technologies' => 'VST Technologies', -// 'Faraday-Technology-Corp.' => 'Faraday Technology Corp.', -// 'Audio-Technica-Corp.' => 'Audio-Technica Corp.', -// 'Neurosmith' => 'Neurosmith', -// 'Shining-Technology-Inc.' => 'Shining Technology, Inc.', -// 'Fujitsu-Devices-Inc.' => 'Fujitsu Devices, Inc.', -// 'Alation-Systems-Inc.' => 'Alation Systems, Inc.', -// 'Philips-Speech-Processing' => 'Philips Speech Processing', -// 'Voquette-Inc.' => 'Voquette, Inc.', -// 'GlobeSpan-Inc.' => 'GlobeSpan, Inc.', -// 'SmartDisk-Corp.' => 'SmartDisk Corp.', -// 'Tiger-Electronics' => 'Tiger Electronics', -// 'Garmin-International' => 'Garmin International', -// 'Echelon-Co.' => 'Echelon Co.', -// 'GoHubs-Inc.' => 'GoHubs, Inc.', -// 'Dymo-CoStar-Corp.' => 'Dymo-CoStar Corp.', -// 'IC-Media-Corp.' => 'IC Media Corp.', -// 'Xerox' => 'Xerox', -// 'Lakeview-Research' => 'Lakeview Research', -// 'Summus-Ltd' => 'Summus, Ltd', -// 'Oxford-Semiconductor-Ltd' => 'Oxford Semiconductor, Ltd', -// 'American-Biometric-Co.' => 'American Biometric Co.', -// 'Sena-Technologies-Inc.' => 'Sena Technologies, Inc.', -// 'Toshiba-Corp.' => 'Toshiba Corp.', -// 'Harmonic-Data-Systems-Ltd' => 'Harmonic Data Systems, Ltd', -// 'Crescentec-Corp.' => 'Crescentec Corp.', -// 'Quantum-Corp.' => 'Quantum Corp.', -// 'Netcom-Systems' => 'Netcom Systems', -// 'NuTesla' => 'NuTesla', -// 'Lumberg-Inc.' => 'Lumberg, Inc.', -// 'Pixart-Imaging-Inc.' => 'Pixart Imaging, Inc.', -// 'Plextor-Corp.' => 'Plextor Corp.', -// 'InnoSync-Inc.' => 'InnoSync, Inc.', -// 'J.S.T.-Mfg.-Co.-Ltd' => 'J.S.T. Mfg. Co., Ltd', -// 'Photobit-Corp.' => 'Photobit Corp.', -// 'i2Go.com-LLC' => 'i2Go.com, LLC', -// 'KORG-Inc.' => 'KORG, Inc.', -// 'Pasco-Scientific' => 'Pasco Scientific', -// 'Kronauer-music-in-digital' => 'Kronauer music in digital', -// 'Linkup-Systems-Corp.' => 'Linkup Systems Corp.', -// 'Cable-Television-Laboratories' => 'Cable Television Laboratories', -// 'Yano' => 'Yano', -// 'Kingston-Technology' => 'Kingston Technology', -// 'RPM-Systems-Corp.' => 'RPM Systems Corp.', -// 'NVidia-Corp.' => 'NVidia Corp.', -// 'BSquare-Corp.' => 'BSquare Corp.', -// 'Agilent-Technologies-Inc.' => 'Agilent Technologies, Inc.', -// 'CompuLink-Research-Inc.' => 'CompuLink Research, Inc.', -// 'Cologne-Chip-AG' => 'Cologne Chip AG', -// 'Portsmith' => 'Portsmith', -// 'Medialogic-Corp.' => 'Medialogic Corp.', -// 'K-Tec-Electronics' => 'K-Tec Electronics', -// 'Polycom-Inc.' => 'Polycom, Inc.', -// 'Acer---' => 'Acer (??)', -// 'Catalyst-Enterprises-Inc.' => 'Catalyst Enterprises, Inc.', -// 'Feitian-Technologies-Inc.' => 'Feitian Technologies, Inc.', -// 'Gretag-Macbeth-AG' => 'Gretag-Macbeth AG', -// 'Schlumberger' => 'Schlumberger', -// 'OLE-Communications-Inc.' => 'OLE Communications, Inc.', -// 'Adirondack-Wire---Cable' => 'Adirondack Wire & Cable', -// 'Lightsurf-Technologies' => 'Lightsurf Technologies', -// 'Beckhoff-GmbH' => 'Beckhoff GmbH', -// 'Jeilin-Technology-Corp.-Ltd' => 'Jeilin Technology Corp., Ltd', -// 'Minds-At-Work-LLC' => 'Minds At Work LLC', -// 'Knudsen-Engineering-Ltd' => 'Knudsen Engineering, Ltd', -// 'Marunix-Co.-Ltd' => 'Marunix Co., Ltd', -// 'Rosun-Technologies-Inc.' => 'Rosun Technologies, Inc.', -// 'Barun-Electronics-Co.-Ltd' => 'Barun Electronics Co., Ltd', -// 'Oak-Technology-Ltd' => 'Oak Technology, Ltd', -// 'Apricorn' => 'Apricorn', -// 'Vitana-Corp.' => 'Vitana Corp.', -// 'INDesign' => 'INDesign', -// 'Kenwood-TMI-Corp.' => 'Kenwood TMI Corp.', -// 'Gemstar-eBook-Group-Ltd' => 'Gemstar eBook Group, Ltd', -// 'Zippy-Technology-Corp.' => 'Zippy Technology Corp.', -// 'PairGain-Technologies' => 'PairGain Technologies', -// 'Contech-Research-Inc.' => 'Contech Research, Inc.', -// 'VCON-Telecommunications' => 'VCON Telecommunications', -// 'Poinchips' => 'Poinchips', -// 'Intersil-Corp.' => 'Intersil Corp.', -// 'Japan-Cash-Machine-Co.-Ltd.' => 'Japan Cash Machine Co., Ltd.', -// 'Tripp-Lite' => 'Tripp Lite', -// 'Altius-Solutions-Inc.' => 'Altius Solutions, Inc.', -// 'MDS-Telephone-Systems' => 'MDS Telephone Systems', -// 'Celltrix-Technology-Co.-Ltd' => 'Celltrix Technology Co., Ltd', -// 'Grundig' => 'Grundig', -// 'MySmart.Com' => 'MySmart.Com', -// 'Auerswald-GmbH---Co.-KG' => 'Auerswald GmbH & Co. KG', -// 'Arris-Interactive-LLC' => 'Arris Interactive LLC', -// 'Nisca-Corp.' => 'Nisca Corp.', -// 'ActivCard-Inc.' => 'ActivCard, Inc.', -// 'ACTiSYS-Corp.' => 'ACTiSYS Corp.', -// 'Memory-Corp.' => 'Memory Corp.', -// 'Workbit-Corp.' => 'Workbit Corp.', -// 'City-Electronics-Ltd' => 'City Electronics, Ltd', -// 'NeoMagic-Inc.' => 'NeoMagic, Inc.', -// 'Vreelin-Engineering-Inc.' => 'Vreelin Engineering, Inc.', -// 'Com-One' => 'Com One', -// 'Novatel-Wireless' => 'Novatel Wireless', -// 'KRF-Tech-Ltd' => 'KRF Tech, Ltd', -// 'A4-Tech-Co.-Ltd' => 'A4 Tech Co., Ltd', -// 'Measurement-Computing-Corp.' => 'Measurement Computing Corp.', -// 'Aimex-Corp.' => 'Aimex Corp.', -// 'Fellowes-Inc.' => 'Fellowes, Inc.', -// 'Addonics-Technologies-Corp.' => 'Addonics Technologies Corp.', -// 'Intellon-Corp.' => 'Intellon Corp.', -// 'Jo-Dan-International-Inc.' => 'Jo-Dan International, Inc.', -// 'Silutia-Inc.' => 'Silutia, Inc.', -// 'Real-3D-Inc.' => 'Real 3D, Inc.', -// 'AKAI-Professional-M.I.-Corp.' => 'AKAI Professional M.I. Corp.', -// 'Chen-Source-Inc.' => 'Chen-Source, Inc.', -// 'IM-Networks-Inc.' => 'IM Networks, Inc.', -// 'Xitel' => 'Xitel', -// 'GoFlight-Inc.' => 'GoFlight, Inc.', -// 'AresCom' => 'AresCom', -// 'RocketChips-Inc.' => 'RocketChips, Inc.', -// 'Edu-Science-H.K.-Ltd' => 'Edu-Science (H.K.), Ltd', -// 'SoftConnex-Technologies-Inc.' => 'SoftConnex Technologies, Inc.', -// 'Bay-Associates' => 'Bay Associates', -// 'Mtek-Vision' => 'Mtek Vision', -// 'Altera' => 'Altera', -// 'Gain-Technology-Corp.' => 'Gain Technology Corp.', -// 'Liquid-Audio' => 'Liquid Audio', -// 'ViA-Inc.' => 'ViA, Inc.', -// 'Ontrak-Control-Systems-Inc.' => 'Ontrak Control Systems Inc.', -// 'Cybex-Computer-Products-Co.' => 'Cybex Computer Products Co.', -// 'Xentec-Inc.' => 'Xentec, Inc.', -// 'Cambridge-Silicon-Radio-Ltd' => 'Cambridge Silicon Radio, Ltd', -// 'Telebyte-Inc.' => 'Telebyte, Inc.', -// 'Spacelabs-Medical-Inc.' => 'Spacelabs Medical, Inc.', -// 'Scalar-Corp.' => 'Scalar Corp.', -// 'Trek-Technology-S-PTE-Ltd' => 'Trek Technology (S) PTE, Ltd', -// 'Pentax-Corp.' => 'Pentax Corp.', -// 'Hua-Geng-Technologies-Inc.' => 'Hua Geng Technologies, Inc.', -// 'Datacard-Group' => 'Datacard Group', -// 'AK-Modul-Bus-Computer-GmbH' => 'AK-Modul-Bus Computer GmbH', -// 'TG3-Electronics-Inc.' => 'TG3 Electronics, Inc.', -// 'Radikal-Technologies' => 'Radikal Technologies', -// 'Gilat-Satellite-Networks-Ltd' => 'Gilat Satellite Networks, Ltd', -// 'PentaMedia-Co.-Ltd' => 'PentaMedia Co., Ltd', -// 'NTT-DoCoMo-Inc.' => 'NTT DoCoMo, Inc.', -// 'Varo-Vision' => 'Varo Vision', -// 'Swissonic-AG' => 'Swissonic AG', -// 'Boca-Systems-Inc.' => 'Boca Systems, Inc.', -// 'Davicom-Semiconductor-Inc.' => 'Davicom Semiconductor, Inc.', -// 'Hirose-Electric' => 'Hirose Electric', -// 'I-O-Interconnect' => 'I/O Interconnect', -// 'Fujitsu-Media-Devices-Ltd' => 'Fujitsu Media Devices, Ltd', -// 'Computex-Co.-Ltd' => 'Computex Co., Ltd', -// 'Evolution-Electronics-Ltd' => 'Evolution Electronics, Ltd', -// 'Litton-Systems-Inc.' => 'Litton Systems, Inc.', -// 'Mimaki-Engineering-Co.-Ltd' => 'Mimaki Engineering Co., Ltd', -// 'Sony-Electronics-Inc.' => 'Sony Electronics, Inc.', -// 'Jebsee-Electronics-Co.-Ltd' => 'Jebsee Electronics Co., Ltd', -// 'Portable-Peripheral-Co.-Ltd' => 'Portable Peripheral Co., Ltd', -// 'Electronics-For-Imaging-Inc.' => 'Electronics For Imaging, Inc.', -// 'EAsics-NV' => 'EAsics NV', -// 'Broadcom-Corp.' => 'Broadcom Corp.', -// 'Diatrend-Corp.' => 'Diatrend Corp.', -// 'Zebra' => 'Zebra', -// 'MPMan' => 'MPMan', -// 'ClearCube-Technology' => 'ClearCube Technology', -// 'Medeli-Electronics-Co.-Ltd' => 'Medeli Electronics Co., Ltd', -// 'Comaide-Corp.' => 'Comaide Corp.', -// 'Chroma-ate-Inc.' => 'Chroma ate, Inc.', -// 'Green-House-Co.-Ltd' => 'Green House Co., Ltd', -// 'UPS-Manufacturing' => 'UPS Manufacturing', -// 'Benwin' => 'Benwin', -// 'Core-Technology-Inc.' => 'Core Technology, Inc.', -// 'International-Game-Technology' => 'International Game Technology', -// 'Sanwa-Denshi' => 'Sanwa Denshi', -// 'NSTL-Inc.' => 'NSTL, Inc.', -// 'Octagon-Systems-Corp.' => 'Octagon Systems Corp.', -// 'Rexon-Technology-Corp.-Ltd' => 'Rexon Technology Corp., Ltd', -// 'Chesen-Electronics-Corp.' => 'Chesen Electronics Corp.', -// 'Syscan' => 'Syscan', -// 'NextComm-Inc.' => 'NextComm, Inc.', -// 'Maui-Innovative-Peripherals' => 'Maui Innovative Peripherals', -// 'Idexx-Labs' => 'Idexx Labs', -// 'NITGen-Co.-Ltd' => 'NITGen Co., Ltd', -// 'Picturetel' => 'Picturetel', -// 'Candy-Technology-Co.-Ltd' => 'Candy Technology Co., Ltd', -// 'Globlink-Technology-Inc.' => 'Globlink Technology, Inc.', -// 'EGO-SYStems-Inc.' => 'EGO SYStems, Inc.', -// 'C-Technologies-AB' => 'C Technologies AB', -// 'Intersense' => 'Intersense', -// 'Lava-Computer-Mfg.-Inc.' => 'Lava Computer Mfg., Inc.', -// 'Develco-Elektronik' => 'Develco Elektronik', -// 'First-International-Digital' => 'First International Digital', -// 'Perception-Digital-Ltd' => 'Perception Digital, Ltd', -// 'TriGem-Computer-Inc.' => 'TriGem Computer, Inc.', -// 'Baromtec-Co.' => 'Baromtec Co.', -// 'Japan-CBM-Corp.' => 'Japan CBM Corp.', -// 'Vision-Shape-Europe-SA' => 'Vision Shape Europe SA', -// 'iCompression-Inc.' => 'iCompression, Inc.', -// 'Rohde---Schwarz-GmbH---Co.-KG' => 'Rohde & Schwarz GmbH & Co. KG', -// 'NEC-infrontia-Corp.-Nitsuko' => 'NEC infrontia Corp. (Nitsuko)', -// 'Digitalway-Co.-Ltd' => 'Digitalway Co., Ltd', -// 'FEIG-ELECTRONIC-GmbH' => 'FEIG ELECTRONIC GmbH', -// 'Ellisys' => 'Ellisys', -// 'Stereo-Link' => 'Stereo-Link', -// 'Diolan' => 'Diolan', -// 'Leco-Corp.' => 'Leco Corp.', -// 'I---C-Corp.' => 'I & C Corp.', -// 'Singing-Electrons-Inc.' => 'Singing Electrons, Inc.', -// 'Panwest-Corp.' => 'Panwest Corp.', -// 'Z-Star-Microelectronics-Corp.' => 'Z-Star Microelectronics Corp.', -// 'Micro-Solutions-Inc.' => 'Micro Solutions, Inc.', -// 'OPEN-Networks-Ltd' => 'OPEN Networks Ltd', -// 'Koga-Electronics-Co.' => 'Koga Electronics Co.', -// 'ID-Tech' => 'ID Tech', -// 'ZyDAS' => 'ZyDAS', -// 'Intoto-Inc.' => 'Intoto, Inc.', -// 'Intellix-Corp.' => 'Intellix Corp.', -// 'Remotec-Technology-Ltd' => 'Remotec Technology, Ltd', -// 'Data-Encryption-Systems-Ltd.' => 'Data Encryption Systems Ltd.', -// 'Allion-Computer-Inc.' => 'Allion Computer, Inc.', -// 'Taito-Corp.' => 'Taito Corp.', -// 'Neodym-Systems-Inc.' => 'Neodym Systems, Inc.', -// 'System-Support-Co.-Ltd' => 'System Support Co., Ltd', -// 'SciEssence-LLC' => 'SciEssence, LLC', -// 'TTP-Communications-Ltd' => 'TTP Communications, Ltd', -// 'Neodio-Technologies-Corp.' => 'Neodio Technologies Corp.', -// 'Option' => 'Option', -// 'Silver-I-Co.-Ltd' => 'Silver I Co., Ltd', -// 'B2C2-Inc.' => 'B2C2, Inc.', -// 'Hama-Inc.' => 'Hama, Inc.', -// 'Zaptronix-Ltd' => 'Zaptronix Ltd', -// 'Tateno-Dennou-Inc.' => 'Tateno Dennou, Inc.', -// 'Cummins-Engine-Co.' => 'Cummins Engine Co.', -// 'INGENICO' => 'INGENICO', -// 'ASUSTek-Computer-Inc.' => 'ASUSTek Computer, Inc.', -// 'Datamax-ONeil' => 'Datamax-ONeil', -// 'Todos-AB' => 'Todos AB', -// 'ProjectLab' => 'ProjectLab', -// 'GN-Netcom' => 'GN Netcom', -// 'AVID-Technology' => 'AVID Technology', -// 'Pcally' => 'Pcally', -// 'I-Tech-Solutions-Co.-Ltd' => 'I Tech Solutions Co., Ltd', -// 'Insyde-Software-Corp.' => 'Insyde Software Corp.', -// 'TransDimension-Inc.' => 'TransDimension, Inc.', -// 'Yokogawa-Electric-Corp.' => 'Yokogawa Electric Corp.', -// 'Pan-Asia-Electronics-Co.-Ltd' => 'Pan-Asia Electronics Co., Ltd', -// 'Link-Evolution-Corp.' => 'Link Evolution Corp.', -// 'Ritek-Corp.' => 'Ritek Corp.', -// 'Kenwood-Corp.' => 'Kenwood Corp.', -// 'Village-Center-Inc.' => 'Village Center, Inc.', -// 'PNY-Technologies-Inc.' => 'PNY Technologies, Inc.', -// 'Contour-Design-Inc.' => 'Contour Design, Inc.', -// 'Hitachi-ULSI-Systems-Co.-Ltd' => 'Hitachi ULSI Systems Co., Ltd', -// 'Gear-Head' => 'Gear Head', -// 'IPaxess' => 'IPaxess', -// 'Tekram-Technology-Co.-Ltd' => 'Tekram Technology Co., Ltd', -// 'Olivetti-Techcenter' => 'Olivetti Techcenter', -// 'Kikusui-Electronics-Corp.' => 'Kikusui Electronics Corp.', -// 'Hal-Corp.' => 'Hal Corp.', -// 'Play.com-Inc.' => 'Play.com, Inc.', -// 'Sportbug.com-Inc.' => 'Sportbug.com, Inc.', -// 'TechnoTrend-AG' => 'TechnoTrend AG', -// 'ASCII-Corp.' => 'ASCII Corp.', -// 'Pine-Corp.-Ltd.' => 'Pine Corp. Ltd.', -// 'Graphtec-America-Inc.' => 'Graphtec America, Inc.', -// 'Musical-Electronics-Ltd' => 'Musical Electronics, Ltd', -// 'Dumpries-Co.-Ltd' => 'Dumpries Co., Ltd', -// 'Comfort-Keyboard-Co.' => 'Comfort Keyboard Co.', -// 'Colorado-MicroDisplay-Inc.' => 'Colorado MicroDisplay, Inc.', -// 'Sinbon-Electronics-Co.-Ltd' => 'Sinbon Electronics Co., Ltd', -// 'TYI-Systems-Ltd' => 'TYI Systems, Ltd', -// 'Lake-Communications-Ltd' => 'Lake Communications, Ltd', -// 'Corel-Corp.' => 'Corel Corp.', -// 'Green-Electronics-Co.-Ltd' => 'Green Electronics Co., Ltd', -// 'Nsine-Ltd' => 'Nsine, Ltd', -// 'NEC-Viewtechnology-Ltd' => 'NEC Viewtechnology, Ltd', -// 'Orange-Micro-Inc.' => 'Orange Micro, Inc.', -// 'ADLink-Technology-Inc.' => 'ADLink Technology, Inc.', -// 'Wonderful-Wire-Cable-Co.-Ltd' => 'Wonderful Wire Cable Co., Ltd', -// 'Expert-Magnetics-Corp.' => 'Expert Magnetics Corp.', -// 'CacheVision' => 'CacheVision', -// 'Maxim-Integrated-Products' => 'Maxim Integrated Products', -// 'Nagano-Japan-Radio-Co.-Ltd' => 'Nagano Japan Radio Co., Ltd', -// 'PortalPlayer-Inc.' => 'PortalPlayer, Inc.', -// 'SHIN-EI-Sangyo-Co.-Ltd' => 'SHIN-EI Sangyo Co., Ltd', -// 'Computone-Corp.' => 'Computone Corp.', -// 'Roland-DG-Corp.' => 'Roland DG Corp.', -// 'Sunrise-Telecom-Inc.' => 'Sunrise Telecom, Inc.', -// 'Zeevo-Inc.' => 'Zeevo, Inc.', -// 'Taiko-Denki-Co.-Ltd' => 'Taiko Denki Co., Ltd', -// 'ITRAN-Communications-Ltd' => 'ITRAN Communications, Ltd', -// 'Astrodesign-Inc.' => 'Astrodesign, Inc.', -// 'id3-Semiconductors' => 'id3 Semiconductors', -// 'Rextron-Technology-Inc.' => 'Rextron Technology, Inc.', -// 'Elkat-Electronics-Sdn.-Bhd.' => 'Elkat Electronics, Sdn., Bhd.', -// 'Exputer-Systems-Inc.' => 'Exputer Systems, Inc.', -// 'Plus-One-I---T-Inc.' => 'Plus-One I & T, Inc.', -// 'SMART-Technologies-Inc.' => 'SMART Technologies Inc.', -// 'ASIX-Electronics-Corp.' => 'ASIX Electronics Corp.', -// 'Sewon-Telecom' => 'Sewon Telecom', -// 'O2-Micro-Inc.' => 'O2 Micro, Inc.', -// 'Playmates-Toys-Inc.' => 'Playmates Toys, Inc.', -// 'Audio-International-Inc.' => 'Audio International, Inc.', -// 'Dipl.-Ing.-Stefan-Kunde' => 'Dipl.-Ing. Stefan Kunde', -// 'Softprotec-Co.' => 'Softprotec Co.', -// 'Chippo-Technologies' => 'Chippo Technologies', -// 'U.S.-Robotics' => 'U.S. Robotics', -// 'Concord-Camera-Corp.' => 'Concord Camera Corp.', -// 'Infinilink-Corp.' => 'Infinilink Corp.', -// 'Ambit-Microsystems-Corp.' => 'Ambit Microsystems Corp.', -// 'Ofuji-Technology' => 'Ofuji Technology', -// 'High-Tech-Computer-Corp.' => 'High Tech Computer Corp.', -// 'Murata-Manufacturing-Co.-Ltd' => 'Murata Manufacturing Co., Ltd', -// 'Network-Alchemy' => 'Network Alchemy', -// 'Joytech-Computer-Co.-Ltd' => 'Joytech Computer Co., Ltd', -// 'Eiger-M-C-Co.-Ltd' => 'Eiger M&C Co., Ltd', -// 'ZAccess-Systems' => 'ZAccess Systems', -// 'General-Meters-Corp.' => 'General Meters Corp.', -// 'Assistive-Technology-Inc.' => 'Assistive Technology, Inc.', -// 'System-Connection-Inc.' => 'System Connection, Inc.', -// 'Knilink-Technology-Inc.' => 'Knilink Technology, Inc.', -// 'Fuw-Yng-Electronics-Co.-Ltd' => 'Fuw Yng Electronics Co., Ltd', -// 'Seagate-RSS-LLC' => 'Seagate RSS LLC', -// 'IPWireless-Inc.' => 'IPWireless, Inc.', -// 'Microcube-Corp.' => 'Microcube Corp.', -// 'JCN-Co.-Ltd' => 'JCN Co., Ltd', -// 'ExWAY-Inc.' => 'ExWAY, Inc.', -// 'X10-Wireless-Technology-Inc.' => 'X10 Wireless Technology, Inc.', -// 'Telmax-Communications' => 'Telmax Communications', -// 'ECI-Telecom-Ltd' => 'ECI Telecom, Ltd', -// 'Startek-Engineering-Inc.' => 'Startek Engineering, Inc.', -// 'Andrew-Pargeter---Associates' => 'Andrew Pargeter & Associates', -// 'Realtek-Semiconductor-Corp.' => 'Realtek Semiconductor Corp.', -// 'Y-Media-Corp.' => 'Y Media Corp.', -// 'Orange-PCS' => 'Orange PCS', -// 'Kanda-Tsushin-Kogyo-Co.-Ltd' => 'Kanda Tsushin Kogyo Co., Ltd', -// 'TOYO-Corp.' => 'TOYO Corp.', -// 'Elka-International-Ltd' => 'Elka International, Ltd', -// 'DOME-imaging-systems-Inc.' => 'DOME imaging systems, Inc.', -// 'Silicon-Labs' => 'Silicon Labs', -// 'LTK-Industries-Ltd' => 'LTK Industries, Ltd', -// 'Way2Call-Communications' => 'Way2Call Communications', -// 'Pace-Micro-Technology-PLC' => 'Pace Micro Technology PLC', -// 'Intracom-S.A.' => 'Intracom S.A.', -// 'Konexx' => 'Konexx', -// 'Addonics-Technologies-Inc.' => 'Addonics Technologies, Inc.', -// 'Sunny-Giken-Inc.' => 'Sunny Giken, Inc.', -// 'Fujitsu-Siemens-Computers' => 'Fujitsu Siemens Computers', -// 'MOTO-Development-Group-Inc.' => 'MOTO Development Group, Inc.', -// 'Appian-Graphics' => 'Appian Graphics', -// 'Hasbro-Games-Inc.' => 'Hasbro Games, Inc.', -// 'Infinite-Data-Storage-Ltd' => 'Infinite Data Storage, Ltd', -// 'Agate' => 'Agate', -// 'Comjet-Information-System' => 'Comjet Information System', -// 'Highpoint-Technologies-Inc.' => 'Highpoint Technologies, Inc.', -// 'Dura-Micro-Inc.-Acomdata' => 'Dura Micro, Inc. (Acomdata)', -// 'Zeroplus' => 'Zeroplus', -// 'Iris-Graphics' => 'Iris Graphics', -// 'Gyration-Inc.' => 'Gyration, Inc.', -// 'Cyberboard-A-S' => 'Cyberboard A/S', -// 'SynerTek-Korea-Inc.' => 'SynerTek Korea, Inc.', -// 'cyberPIXIE-Inc.' => 'cyberPIXIE, Inc.', -// 'Silicon-Motion-Inc.' => 'Silicon Motion, Inc.', -// 'MIPS-Technologies' => 'MIPS Technologies', -// 'Tally-Printer-Corp.' => 'Tally Printer Corp.', -// 'Lernout-+-Hauspie' => 'Lernout + Hauspie', -// 'Taiyo-Yuden' => 'Taiyo Yuden', -// 'Sampo-Corp.' => 'Sampo Corp.', -// 'Prolific-Technology-Inc.' => 'Prolific Technology Inc.', -// 'RFIDeas-Inc' => 'RFIDeas, Inc', -// 'Metro' => 'Metro', -// 'Eagletron-Inc.' => 'Eagletron, Inc.', -// 'E-Ink-Corp.' => 'E Ink Corp.', -// 'e.Digital' => 'e.Digital', -// 'IFR' => 'IFR', -// 'Komatsu-Ltd' => 'Komatsu, Ltd', -// 'Radius-Co.-Ltd' => 'Radius Co., Ltd', -// 'Innocom-Inc.' => 'Innocom, Inc.', -// 'Nextcell-Inc.' => 'Nextcell, Inc.', -// 'Motorola-iDEN' => 'Motorola iDEN', -// 'Microdia' => 'Microdia', -// 'Reiner-SCT-Kartensysteme-GmbH' => 'Reiner SCT Kartensysteme GmbH', -// 'Sealevel-Systems-Inc.' => 'Sealevel Systems, Inc.', -// 'ViewPLUS-Inc.' => 'ViewPLUS, Inc.', -// 'Glory-Ltd' => 'Glory, Ltd', -// 'Spectrum-Digital-Inc.' => 'Spectrum Digital, Inc.', -// 'Billion-Bright-Ltd' => 'Billion Bright, Ltd', -// 'Vidar-Systems-Corp.' => 'Vidar Systems Corp.', -// 'TRS-International-Mfg.-Inc.' => 'TRS International Mfg., Inc.', -// 'Xytronix-Research---Design' => 'Xytronix Research & Design', -// 'Apogee-Electronics-Corp.' => 'Apogee Electronics Corp.', -// 'Chant-Sincere-Co.-Ltd' => 'Chant Sincere Co., Ltd', -// 'Toko-Inc.' => 'Toko, Inc.', -// 'Eminence-Enterprise-Co.-Ltd' => 'Eminence Enterprise Co., Ltd', -// 'Rexon-Electronics-Corp.' => 'Rexon Electronics Corp.', -// 'Concept-Telecom-Ltd' => 'Concept Telecom, Ltd', -// 'MCT-Elektronikladen' => 'MCT Elektronikladen', -// 'Optronic-Laboratories-Inc.' => 'Optronic Laboratories Inc.', -// 'JMTek-LLC.' => 'JMTek, LLC.', -// 'Sipix-Group-Ltd' => 'Sipix Group, Ltd', -// 'Detto-Corp.' => 'Detto Corp.', -// 'Wing-Span-Enterprise-Co.-Ltd' => 'Wing-Span Enterprise Co., Ltd', -// 'NDA-Technologies-Inc.' => 'NDA Technologies, Inc.', -// 'Kyocera-Wireless-Corp.' => 'Kyocera Wireless Corp.', -// 'Honda-Tsushin-Kogyo-Co.-Ltd' => 'Honda Tsushin Kogyo Co., Ltd', -// 'Pathway-Connectivity-Inc.' => 'Pathway Connectivity, Inc.', -// 'Wavefly-Corp.' => 'Wavefly Corp.', -// 'Coactive-Networks' => 'Coactive Networks', -// 'Tempo' => 'Tempo', -// 'Cesscom-Co.-Ltd' => 'Cesscom Co., Ltd', -// 'Applied-Microsystems' => 'Applied Microsystems', -// 'Berkshire-Products-Inc.' => 'Berkshire Products, Inc.', -// 'Innochips-Co.-Ltd' => 'Innochips Co., Ltd', -// 'Hanwool-Robotics-Corp.' => 'Hanwool Robotics Corp.', -// 'Jobin-Yvon-Inc.' => 'Jobin Yvon, Inc.', -// 'SemTek' => 'SemTek', -// 'Zyfer' => 'Zyfer', -// 'Sega-Corp.' => 'Sega Corp.', -// 'ST-T-Instrument-Corp.' => 'ST&T Instrument Corp.', -// 'BAE-Systems-Canada-Inc.' => 'BAE Systems Canada, Inc.', -// 'Castles-Technology-Co.-Ltd' => 'Castles Technology Co., Ltd', -// 'Motorola-CGISS' => 'Motorola CGISS', -// 'Ascom-Business-Systems-Ltd' => 'Ascom Business Systems, Ltd', -// 'Buslink' => 'Buslink', -// 'Flying-Pig-Systems' => 'Flying Pig Systems', -// 'Innovonics-Inc.' => 'Innovonics, Inc.', -// 'Celestix-Networks-Pte.-Ltd' => 'Celestix Networks, Pte., Ltd', -// 'Singatron-Enterprise-Co.-Ltd' => 'Singatron Enterprise Co., Ltd', -// 'Opticis-Co.-Ltd' => 'Opticis Co., Ltd', -// 'Palmax-Technology-Co.-Ltd' => 'Palmax Technology Co., Ltd', -// 'Keryx-Technologies-Inc.' => 'Keryx Technologies, Inc.', -// 'Kuon-Yi-Industrial-Corp.' => 'Kuon Yi Industrial Corp.', -// 'Given-Imaging-Ltd' => 'Given Imaging, Ltd', -// 'Timex-Corp.' => 'Timex Corp.', -// 'Rimage-Corp.' => 'Rimage Corp.', -// 'emsys-GmbH' => 'emsys GmbH', -// 'Sendo' => 'Sendo', -// 'Intermagic-Corp.' => 'Intermagic Corp.', -// 'Kontron-Medical-AG' => 'Kontron Medical AG', -// 'Technotools-Corp.' => 'Technotools Corp.', -// 'BroadMAX-Technologies-Inc.' => 'BroadMAX Technologies, Inc.', -// 'Amphenol' => 'Amphenol', -// 'SKNet-Co.-Ltd' => 'SKNet Co., Ltd', -// 'Domex-Technology-Corp.' => 'Domex Technology Corp.', -// 'TerraTec-Electronic-GmbH' => 'TerraTec Electronic GmbH', -// 'Bang-Olufsen' => 'Bang Olufsen', -// 'LabJack-Corporation' => 'LabJack Corporation', -// 'NewChip-S.r.l.' => 'NewChip S.r.l.', -// 'JS-Digitech-Inc.' => 'JS Digitech, Inc.', -// 'Hitachi-Shin-Din-Cable-Ltd' => 'Hitachi Shin Din Cable, Ltd', -// 'Z-Com' => 'Z-Com', -// 'pico-Technology' => 'pico Technology', -// 'e-Conn-Electronic-Co.-Ltd' => 'e-Conn Electronic Co., Ltd', -// 'ENE-Technology-Inc.' => 'ENE Technology, Inc.', -// 'Atheros-Communications-Inc.' => 'Atheros Communications, Inc.', -// 'Fomtex-Corp.' => 'Fomtex Corp.', -// 'Cellink-Co.-Ltd' => 'Cellink Co., Ltd', -// 'Compucable-Corp.' => 'Compucable Corp.', -// 'ishoni-Networks' => 'ishoni Networks', -// 'Clarisys-Inc.' => 'Clarisys, Inc.', -// 'Inviso-Inc.' => 'Inviso, Inc.', -// 'Minolta-QMS-Inc.' => 'Minolta-QMS, Inc.', -// 'SAFA-MEDIA-Co.-Ltd.' => 'SAFA MEDIA Co., Ltd.', -// 'UTStarcom' => 'UTStarcom', -// 'Contemporary-Controls' => 'Contemporary Controls', -// 'Astron-Electronics-Co.-Ltd' => 'Astron Electronics Co., Ltd', -// 'MKNet-Corp.' => 'MKNet Corp.', -// 'Hybrid-Networks-Inc.' => 'Hybrid Networks, Inc.', -// 'Feng-Shin-Cable-Co.-Ltd' => 'Feng Shin Cable Co., Ltd', -// 'Elastic-Networks' => 'Elastic Networks', -// 'Maspro-Denkoh-Corp.' => 'Maspro Denkoh Corp.', -// 'Hansol-Electronics-Inc.' => 'Hansol Electronics, Inc.', -// 'BMF-Corp.' => 'BMF Corp.', -// 'Array-Comm-Inc.' => 'Array Comm, Inc.', -// 'OnStream-b.v.' => 'OnStream b.v.', -// 'NALTEC-Inc.' => 'NALTEC, Inc.', -// 'coaXmedia' => 'coaXmedia', -// 'NXP' => 'NXP', -// 'AirSpeak-Inc.' => 'AirSpeak, Inc.', -// 'Rearden-Steel-Technologies' => 'Rearden Steel Technologies', -// 'Dah-Kun-Co.-Ltd' => 'Dah Kun Co., Ltd', -// 'Posiflex-Technologies-Inc.' => 'Posiflex Technologies, Inc.', -// 'Sri-Cable-Technology-Ltd' => 'Sri Cable Technology, Ltd', -// 'Tangtop-Technology-Co.-Ltd' => 'Tangtop Technology Co., Ltd', -// 'Fitcom-inc.' => 'Fitcom, inc.', -// 'MTS-Systems-Corp.' => 'MTS Systems Corp.', -// 'Ascor-Inc.' => 'Ascor, Inc.', -// 'Full-Der-Co.-Ltd' => 'Full Der Co., Ltd', -// 'Kobil-Systems-GmbH' => 'Kobil Systems GmbH', -// 'Maxtor' => 'Maxtor', -// 'NF-Corp.' => 'NF Corp.', -// 'Grape-Systems-Inc.' => 'Grape Systems, Inc.', -// 'Tedas-AG' => 'Tedas AG', -// 'Coherent-Inc.' => 'Coherent, Inc.', -// 'Agere-Systems-Netherland-BV' => 'Agere Systems Netherland BV', -// 'EADS-Airbus-France' => 'EADS Airbus France', -// 'Cleware-GmbH' => 'Cleware GmbH', -// 'Volex-Asia-Pte.-Ltd' => 'Volex (Asia) Pte., Ltd', -// 'HMI-Co.-Ltd' => 'HMI Co., Ltd', -// 'Holon-Corp.' => 'Holon Corp.', -// 'ASKA-Technologies-Inc.' => 'ASKA Technologies, Inc.', -// 'AVLAB-Technology-Inc.' => 'AVLAB Technology, Inc.', -// 'Solomon-Microtech-Ltd' => 'Solomon Microtech, Ltd', -// 'SMC-Networks-Inc.' => 'SMC Networks, Inc.', -// 'Myacom-Ltd' => 'Myacom, Ltd', -// 'CSI-Inc.' => 'CSI, Inc.', -// 'IVL-Technologies-Ltd' => 'IVL Technologies, Ltd', -// 'Darfon-Electronics-Corp.' => 'Darfon Electronics Corp.', -// 'Fritz-Gegauf-AG' => 'Fritz Gegauf AG', -// 'DXG-Technology-Corp.' => 'DXG Technology Corp.', -// 'KMJP-Co.-Ltd' => 'KMJP Co., Ltd', -// 'TMT' => 'TMT', -// 'Advanet-Inc.' => 'Advanet, Inc.', -// 'NSI' => 'NSI', -// 'Megapower-International-Corp.' => 'Megapower International Corp.', -// 'And-Or-Logic' => 'And-Or Logic', -// 'Try-Computer-Co.-Ltd' => 'Try Computer Co., Ltd', -// 'Hirakawa-Hewtech-Corp.' => 'Hirakawa Hewtech Corp.', -// 'Winmate-Communication-Inc.' => 'Winmate Communication, Inc.', -// 'Hits-Communications-Inc.' => 'Hits Communications, Inc.', -// 'MFP-Korea-Inc.' => 'MFP Korea, Inc.', -// 'Power-Sentry-Newpoint' => 'Power Sentry/Newpoint', -// 'Japan-Distributor-Corp.' => 'Japan Distributor Corp.', -// 'MARX-Datentechnik-GmbH' => 'MARX Datentechnik GmbH', -// 'Wellco-Technology-Co.-Ltd' => 'Wellco Technology Co., Ltd', -// 'Phison-Electronics-Corp.' => 'Phison Electronics Corp.', -// 'Essential-Reality-LLC' => 'Essential Reality LLC', -// 'TechnoVision' => 'TechnoVision', -// 'Think-Outside-Inc.' => 'Think Outside, Inc.', -// 'Dolby-Laboratories-Inc.' => 'Dolby Laboratories Inc.', -// 'Oz-Software' => 'Oz Software', -// 'King-Jim-Co.-Ltd' => 'King Jim Co., Ltd', -// 'Ascom-Telecommunications-Ltd' => 'Ascom Telecommunications, Ltd', -// 'C-Media-Electronics-Inc.' => 'C-Media Electronics, Inc.', -// 'Global-Sun-Technology-Inc.' => 'Global Sun Technology, Inc.', -// 'Pitney-Bowes' => 'Pitney Bowes', -// 'Sure-Fire-Electrical-Corp.' => 'Sure-Fire Electrical Corp.', -// 'Skanhex-Technology-Inc.' => 'Skanhex Technology, Inc.', -// 'Mars-Semiconductor-Corp.' => 'Mars Semiconductor Corp.', -// 'Trazer-Technologies-Inc.' => 'Trazer Technologies, Inc.', -// 'RTX-Telecom-AS' => 'RTX Telecom AS', -// 'Tat-Shing-Electrical-Co.' => 'Tat Shing Electrical Co.', -// 'Sanwa-Supply-Inc.' => 'Sanwa Supply, Inc.', -// 'Avaya' => 'Avaya', -// 'Powercom-Co.-Ltd' => 'Powercom Co., Ltd', -// 'Danger-Research' => 'Danger Research', -// 'Polar-Electro-OY' => 'Polar Electro OY', -// 'IOGear-Inc.' => 'IOGear, Inc.', -// 'softDSP-Co.-Ltd' => 'softDSP Co., Ltd', -// 'Cubig-Group' => 'Cubig Group', -// 'Westover-Scientific' => 'Westover Scientific', -// 'Micro-Star-International' => 'Micro Star International', -// 'Wen-Te-Electronics-Co.-Ltd' => 'Wen Te Electronics Co., Ltd', -// 'Tekram-Technology-Co.-Ltd' => 'Tekram Technology Co., Ltd', -// 'ELCON-Systemtechnik' => 'ELCON Systemtechnik', -// 'A-D-Medical' => 'A&D Medical', -// 'Quik-Tech-Solutions' => 'Quik Tech Solutions', -// 'Tamagawa-Seiki-Co.-Ltd' => 'Tamagawa Seiki Co., Ltd', -// 'Macpower-Peripherals-Ltd' => 'Macpower Peripherals, Ltd', -// 'SDK-Co.-Ltd' => 'SDK Co., Ltd', -// 'First-Cable-Line-Inc.' => 'First Cable Line, Inc.', -// 'NetworkFab-Corp.' => 'NetworkFab Corp.', -// 'Access-Solutions' => 'Access Solutions', -// 'Contek-Electronics-Co.-Ltd' => 'Contek Electronics Co., Ltd', -// 'MediaQ' => 'MediaQ', -// 'Custom-Engineering-SPA' => 'Custom Engineering SPA', -// 'California-Micro-Devices' => 'California Micro Devices', -// 'Kocom-Co.-Ltd' => 'Kocom Co., Ltd', -// 'Netac-Technology-Co.-Ltd' => 'Netac Technology Co., Ltd', -// 'HighSpeed-Surfing' => 'HighSpeed Surfing', -// 'Tamarack-Inc.' => 'Tamarack, Inc.', -// 'Datelink-Technology-Co.-Ltd' => 'Datelink Technology Co., Ltd', -// 'Ubicom-Inc.' => 'Ubicom, Inc.', -// 'BD-Consumer-Healthcare' => 'BD Consumer Healthcare', -// 'Novasonics' => 'Novasonics', -// 'Lifetime-Memory-Products' => 'Lifetime Memory Products', -// 'Full-Rise-Electronic-Co.-Ltd' => 'Full Rise Electronic Co., Ltd', -// 'NET-SYS' => 'NET&SYS', -// 'Sitecom-Europe-B.V.' => 'Sitecom Europe B.V.', -// 'Nippon-Systemware-Co.-Ltd' => 'Nippon Systemware Co., Ltd', -// 'Winbest-Technology-Co.-Ltd' => 'Winbest Technology Co., Ltd', -// 'Amigo-Technology-Inc.' => 'Amigo Technology Inc.', -// 'Gesytec' => 'Gesytec', -// 'VMware-Inc.' => 'VMware, Inc.', -// 'JMTek-LLC' => 'JMTek, LLC', -// 'Walex-Electronic-Ltd' => 'Walex Electronic, Ltd', -// 'Crewave' => 'Crewave', -// 'Pegasus-Technologies-Ltd.' => 'Pegasus Technologies Ltd.', -// 'Cowon-Systems-Inc.' => 'Cowon Systems, Inc.', -// 'Symbian-Ltd.' => 'Symbian Ltd.', -// 'VinChip-Systems-Inc.' => 'VinChip Systems, Inc.', -// 'J-Phone-East-Co.-Ltd' => 'J-Phone East Co., Ltd', -// 'HeartMath-LLC' => 'HeartMath LLC', -// 'Micro-Computer-Control-Corp.' => 'Micro Computer Control Corp.', -// '3Pea-Technologies-Inc.' => '3Pea Technologies, Inc.', -// 'TiePie-engineering' => 'TiePie engineering', -// 'Stratitec-Inc.' => 'Stratitec, Inc.', -// 'Neostar-Technology-Co.-Ltd' => 'Neostar Technology Co., Ltd', -// 'Mansella-Ltd' => 'Mansella, Ltd', -// 'Line6-Inc.' => 'Line6, Inc.', -// 'Julia-Corp.-Ltd' => 'Julia Corp., Ltd', -// 'Radica-Games-Ltd' => 'Radica Games, Ltd', -// 'Speed-Dragon-Multimedia-Ltd' => 'Speed Dragon Multimedia, Ltd', -// 'Active-Co.-Ltd' => 'Active Co., Ltd', -// 'Neltron-Industrial-Co.-Ltd' => 'Neltron Industrial Co., Ltd', -// 'Conwise-Technology-Co.-Ltd.' => 'Conwise Technology Co., Ltd.', -// 'Hawking-Technologies' => 'Hawking Technologies', -// 'Fossil-Inc.' => 'Fossil, Inc.', -// 'Megawin-Technology-Co.-Ltd' => 'Megawin Technology Co., Ltd', -// 'Logic3' => 'Logic3', -// 'Hsi-Chin-Electronics-Co.-Ltd' => 'Hsi-Chin Electronics Co., Ltd', -// 'TVS-Electronics-Ltd' => 'TVS Electronics, Ltd', -// 'Archos-Inc.' => 'Archos, Inc.', -// 'On-Tech-Industry-Co.-Ltd' => 'On-Tech Industry Co., Ltd', -// 'Gmate-Inc.' => 'Gmate, Inc.', -// 'Shin-An-Wire---Cable-Co.' => 'Shin An Wire & Cable Co.', -// 'MediaTek-Inc.' => 'MediaTek Inc.', -// 'GreenAsia-Inc.' => 'GreenAsia Inc.', -// 'WiebeTech-LLC' => 'WiebeTech, LLC', -// 'VTech-Engineering-Canada-Ltd' => 'VTech Engineering Canada, Ltd', -// 'Cs-Glory-Enterprise-Co.-Ltd' => 'Cs Glory Enterprise Co., Ltd', -// 'eM-Technics-Co.-Ltd' => 'eM Technics Co., Ltd', -// 'Future-Technology-Co.-Ltd' => 'Future Technology Co., Ltd', -// 'Aplux-Communications-Ltd' => 'Aplux Communications, Ltd', -// 'Fingerworks-Inc.' => 'Fingerworks, Inc.', -// 'Parallel-Dice-Co.-Ltd' => 'Parallel Dice Co., Ltd', -// 'TA-HSING-Industries-Ltd' => 'TA HSING Industries, Ltd', -// 'ADTEC-Corp.' => 'ADTEC Corp.', -// 'Streamzap-Inc.' => 'Streamzap, Inc.', -// 'Tamura-Corp.' => 'Tamura Corp.', -// 'Ours-Technology-Inc.' => 'Ours Technology, Inc.', -// 'Nihon-Computer-Co.-Ltd' => 'Nihon Computer Co., Ltd', -// 'MSL-Enterprises-Corp.' => 'MSL Enterprises Corp.', -// 'CenDyne-Inc.' => 'CenDyne, Inc.', -// 'Humax-Co.-Ltd' => 'Humax Co., Ltd', -// 'NovaTech' => 'NovaTech', -// 'WIS-Technologies-Inc.' => 'WIS Technologies, Inc.', -// 'Y-S-Electronic-Co.-Ltd' => 'Y-S Electronic Co., Ltd', -// 'Saint-Technology-Corp.' => 'Saint Technology Corp.', -// 'Endor-AG' => 'Endor AG', -// 'VWeb-Corp.' => 'VWeb Corp.', -// 'Abit-Computer-Corp.' => 'Abit Computer Corp.', -// 'Sweetray-Industrial-Ltd' => 'Sweetray Industrial, Ltd', -// 'Axell-Co.-Ltd' => 'Axell Co., Ltd', -// 'Ballracing-Developments-Ltd' => 'Ballracing Developments, Ltd', -// 'InnoVISION-Multimedia-Ltd' => 'InnoVISION Multimedia, Ltd', -// 'Theta-Link-Corp.' => 'Theta Link Corp.', -// 'Lite-On-IT-Corp.' => 'Lite-On IT Corp.', -// 'TaiSol-Electronics-Co.-Ltd' => 'TaiSol Electronics Co., Ltd', -// 'Phogenix-Imaging-LLC' => 'Phogenix Imaging, LLC', -// 'WinMaxGroup' => 'WinMaxGroup', -// 'Kyoto-Micro-Computer-Co.-Ltd' => 'Kyoto Micro Computer Co., Ltd', -// 'Wing-Tech-Enterprise-Co.-Ltd' => 'Wing-Tech Enterprise Co., Ltd', -// 'Fiberbyte' => 'Fiberbyte', -// 'Noriake-Itron-Corp.' => 'Noriake Itron Corp.', -// 'e-MDT-Co.-Ltd' => 'e-MDT Co., Ltd', -// 'Shima-Seiki-Mfg.-Ltd' => 'Shima Seiki Mfg., Ltd', -// 'Sarotech-Co.-Ltd' => 'Sarotech Co., Ltd', -// 'AMI-Semiconductor-Inc.' => 'AMI Semiconductor, Inc.', -// 'ComTrue-Technology-Corp.' => 'ComTrue Technology Corp.', -// 'Sunrich-Technology-Ltd' => 'Sunrich Technology, Ltd', -// 'D-WAV-Scientific-Co.-Ltd' => 'D-WAV Scientific Co., Ltd', -// 'Hitachi-Cable-Ltd' => 'Hitachi Cable, Ltd', -// 'Aichi-Micro-Intelligent-Corp.' => 'Aichi Micro Intelligent Corp.', -// 'I-O-Magic-Corp.' => 'I/O Magic Corp.', -// 'Lynn-Products-Inc.' => 'Lynn Products, Inc.', -// 'DSI-Datotech' => 'DSI Datotech', -// 'PointChips' => 'PointChips', -// 'Yield-Microelectronics-Corp.' => 'Yield Microelectronics Corp.', -// 'SM-Tech-Co.-Ltd-Tulip' => 'SM Tech Co., Ltd (Tulip)', -// 'Oasis-Semiconductor' => 'Oasis Semiconductor', -// 'Wem-Technology-Inc.' => 'Wem Technology, Inc.', -// 'CAS-Corp.' => 'CAS Corp.', -// 'Hori-Co.-Ltd' => 'Hori Co., Ltd', -// 'Energy-Full-Corp.' => 'Energy Full Corp.', -// 'LD-Didactic-GmbH' => 'LD Didactic GmbH', -// 'Mars-Engineering-Corp.' => 'Mars Engineering Corp.', -// 'Acetek-Technology-Co.-Ltd' => 'Acetek Technology Co., Ltd', -// 'Finger-Lakes-Instrumentation' => 'Finger Lakes Instrumentation', -// 'Oracom-Co.-Ltd' => 'Oracom Co., Ltd', -// 'Onset-Computer-Corp.' => 'Onset Computer Corp.', -// 'Funai-Electric-Co.-Ltd' => 'Funai Electric Co., Ltd', -// 'Iwill-Corp.' => 'Iwill Corp.', -// 'IOI-Technology-Corp.' => 'IOI Technology Corp.', -// 'Senior-Industries-Inc.' => 'Senior Industries, Inc.', -// 'Flex-P-Industries-Snd.-Bhd.' => 'Flex-P Industries, Snd., Bhd.', -// 'ViPower-Inc.' => 'ViPower, Inc.', -// 'Priva-Design-Services' => 'Priva Design Services', -// 'Jess-Technology-Co.-Ltd' => 'Jess Technology Co., Ltd', -// 'Chrysalis-Development' => 'Chrysalis Development', -// 'Kokuyo-Co.-Ltd' => 'Kokuyo Co., Ltd', -// 'Nien-Yi-Industrial-Corp.' => 'Nien-Yi Industrial Corp.', -// 'Airprime-Incorporated' => 'Airprime, Incorporated', -// 'RDC-Semiconductor-Co.-Ltd' => 'RDC Semiconductor Co., Ltd', -// 'Polhemus' => 'Polhemus', -// 'St.-John-Technology-Co.-Ltd' => 'St. John Technology Co., Ltd', -// 'WorldWide-Cable-Opto-Corp.' => 'WorldWide Cable Opto Corp.', -// 'Microtune-Inc.' => 'Microtune, Inc.', -// 'Freedom-Scientific' => 'Freedom Scientific', -// 'Wing-Key-Electrical-Co.-Ltd' => 'Wing Key Electrical Co., Ltd', -// 'AmbiCom-Inc.' => 'AmbiCom, Inc.', -// 'Prairiecomm-Inc.' => 'Prairiecomm, Inc.', -// 'NewAge-International-LLC' => 'NewAge International, LLC', -// 'Key-Technology-Corp.' => 'Key Technology Corp.', -// 'NTK-Ltd' => 'NTK, Ltd', -// 'Varian-Inc.' => 'Varian, Inc.', -// 'Acrox-Technologies-Co.-Ltd' => 'Acrox Technologies Co., Ltd', -// 'LeapFrog-Enterprises' => 'LeapFrog Enterprises', -// 'Kobe-Steel-Ltd' => 'Kobe Steel, Ltd', -// 'Dionex-Corp.' => 'Dionex Corp.', -// 'Vibren-Technologies-Inc.' => 'Vibren Technologies, Inc.', -// 'INTELLIGENT-SYSTEMS' => 'INTELLIGENT SYSTEMS', -// 'DFI' => 'DFI', -// 'DQ-Technology-Inc.' => 'DQ Technology, Inc.', -// 'NetBotz-Inc.' => 'NetBotz, Inc.', -// 'Fluke-Corp.' => 'Fluke Corp.', -// 'VTech-Holdings-Ltd' => 'VTech Holdings, Ltd', -// 'Yazaki-Corp.' => 'Yazaki Corp.', -// 'Uniwill-Computer-Corp.' => 'Uniwill Computer Corp.', -// 'Kingnet-Technology-Co.-Ltd' => 'Kingnet Technology Co., Ltd', -// 'Soma-Networks' => 'Soma Networks', -// 'CviLux-Corp.' => 'CviLux Corp.', -// 'CyberBank-Corp.' => 'CyberBank Corp.', -// 'Hyun-Won-Inc.' => 'Hyun Won, Inc.', -// 'Lucent-Technologies' => 'Lucent Technologies', -// 'Starconn-Electronic-Co.-Ltd' => 'Starconn Electronic Co., Ltd', -// 'ATL-Technology' => 'ATL Technology', -// 'Sotec-Co.-Ltd' => 'Sotec Co., Ltd', -// 'Epox-Computer-Co.-Ltd' => 'Epox Computer Co., Ltd', -// 'Logic-Controls-Inc.' => 'Logic Controls, Inc.', -// 'Winpoint-Electronic-Corp.' => 'Winpoint Electronic Corp.', -// 'Inclose-Design-Inc.' => 'Inclose Design, Inc.', -// 'Wistron-Corp.' => 'Wistron Corp.', -// 'AACom-Corp.' => 'AACom Corp.', -// 'Bitwise-Systems-Inc.' => 'Bitwise Systems, Inc.', -// 'Mitac-Internatinal-Corp.' => 'Mitac Internatinal Corp.', -// 'Delcom-Engineering' => 'Delcom Engineering', -// 'Dataplus-Supplies-Inc.' => 'Dataplus Supplies, Inc.', -// 'Research-In-Motion-Ltd.' => 'Research In Motion, Ltd.', -// 'Dynastream-Innovations-Inc.' => 'Dynastream Innovations, Inc.', -// 'Tulip-Computers-B.V.' => 'Tulip Computers B.V.', -// 'Giant-Electronics-Ltd.' => 'Giant Electronics Ltd.', -// 'Tenovis-GmbH---Co.-KG' => 'Tenovis GmbH & Co., KG', -// 'Micro-Plus' => 'Micro Plus', -// 'IN-Tech-Electronics-Ltd' => 'IN-Tech Electronics, Ltd', -// 'Greenconn-U.S.A.-Inc.' => 'Greenconn (U.S.A.), Inc.', -// 'DVICO' => 'DVICO', -// 'United-Computer-Accessories' => 'United Computer Accessories', -// 'CRS-Electronic-Co.-Ltd' => 'CRS Electronic Co., Ltd', -// 'UMC-Electronics-Co.-Ltd' => 'UMC Electronics Co., Ltd', -// 'Access-Co.-Ltd' => 'Access Co., Ltd', -// 'Xsido-Corp.' => 'Xsido Corp.', -// 'MJ-Research-Inc.' => 'MJ Research, Inc.', -// 'Core-Valley-Co.-Ltd' => 'Core Valley Co., Ltd', -// 'Aopen-Inc.' => 'Aopen, Inc.', -// 'Speed-Tech-Corp.' => 'Speed Tech Corp.', -// 'Sigma-Corp.' => 'Sigma Corp.', -// 'LG-Electronics-Inc.' => 'LG Electronics, Inc.', -// 'Apacer-Technology-Inc.' => 'Apacer Technology, Inc.', -// 'iRiver-Ltd.' => 'iRiver, Ltd.', -// 'Emuzed-Inc.' => 'Emuzed, Inc.', -// 'AV-Chaseway-Ltd' => 'AV Chaseway, Ltd', -// 'Chou-Chin-Industrial-Co.-Ltd' => 'Chou Chin Industrial Co., Ltd', -// 'Netopia-Inc.' => 'Netopia, Inc.', -// 'Fukuda-Denshi-Co.-Ltd' => 'Fukuda Denshi Co., Ltd', -// 'Mobile-Media-Tech.' => 'Mobile Media Tech.', -// 'Densitron-Technologies-PLC' => 'Densitron Technologies PLC', -// 'Softronics-Pty.-Ltd' => 'Softronics Pty., Ltd', -// 'Labtec' => 'Labtec', -// 'Shinko-Shoji-Co.-Ltd' => 'Shinko Shoji Co., Ltd', -// 'Hyper-Paltek' => 'Hyper-Paltek', -// 'Newly-Corp.' => 'Newly Corp.', -// 'Time-Domain' => 'Time Domain', -// 'Inovys-Corp.' => 'Inovys Corp.', -// 'Atlantic-Coast-Telesys' => 'Atlantic Coast Telesys', -// 'Ramos-Technology-Co.-Ltd' => 'Ramos Technology Co., Ltd', -// 'Infotronic-America-Inc.' => 'Infotronic America, Inc.', -// 'Etoms-Electronics-Corp.' => 'Etoms Electronics Corp.', -// 'Winic-Corp.' => 'Winic Corp.', -// 'Comax-Technology-Inc.' => 'Comax Technology, Inc.', -// 'C-One-Technology-Corp.' => 'C-One Technology Corp.', -// 'Nucam-Corp.' => 'Nucam Corp.', -// 'Ideazon-Inc.' => 'Ideazon, Inc.', -// 'devolo-AG' => 'devolo AG', -// 'Stanton' => 'Stanton', -// 'iCreate-Technologies-Corp.' => 'iCreate Technologies Corp.', -// 'Chu-Yuen-Enterprise-Co.-Ltd' => 'Chu Yuen Enterprise Co., Ltd', -// 'Targus-Group-International' => 'Targus Group International', -// 'Mylex---Buslogic' => 'Mylex / Buslogic', -// 'AMCO-TEC-International-Inc.' => 'AMCO TEC International, Inc.', -// 'Newport-Corporation' => 'Newport Corporation', -// 'WB-Electronics' => 'WB Electronics', -// 'Yubico.com' => 'Yubico.com', -// 'Immanuel-Electronics-Co.-Ltd' => 'Immanuel Electronics Co., Ltd', -// 'BMS-International-Beheer-N.V.' => 'BMS International Beheer N.V.', -// 'Hsin-Chen-Ent-Co.-Ltd' => 'Hsin Chen Ent Co., Ltd', -// 'ON-Semiconductor' => 'ON Semiconductor', -// 'Giesecke---Devrient-GmbH' => 'Giesecke & Devrient GmbH', -// 'Delkin-Devices-Inc.' => 'Delkin Devices, Inc.', -// 'Easthome-Industrial-Co.-Ltd' => 'Easthome Industrial Co., Ltd', -// 'CCYU-Technology' => 'CCYU Technology', -// 'Loyal-Legend-Ltd' => 'Loyal Legend, Ltd', -// 'Curitel-Communications-Inc.' => 'Curitel Communications, Inc.', -// 'San-Chieh-Manufacturing-Ltd' => 'San Chieh Manufacturing, Ltd', -// 'ConectL' => 'ConectL', -// 'Money-Controls' => 'Money Controls', -// 'GCT-Semiconductor-Inc.' => 'GCT Semiconductor, Inc.', -// 'Gateway-Inc.' => 'Gateway, Inc.', -// 'Arlec-Australia-Ltd' => 'Arlec Australia, Ltd', -// 'Midoriya-Electric-Co.-Ltd' => 'Midoriya Electric Co., Ltd', -// 'KidzMouse-Inc.' => 'KidzMouse, Inc.', -// 'Shin-Etsukaken-Co.-Ltd' => 'Shin-Etsukaken Co., Ltd', -// 'Canon-Electronics-Inc.' => 'Canon Electronics, Inc.', -// 'Pantech-Co.-Ltd' => 'Pantech Co., Ltd', -// 'Chloride-Power-Protection' => 'Chloride Power Protection', -// 'Grand-tek-Technology-Co.-Ltd' => 'Grand-tek Technology Co., Ltd', -// 'Robert-Bosch-GmbH' => 'Robert Bosch GmbH', -// 'Lotes-Co.-Ltd.' => 'Lotes Co., Ltd.', -// 'Surface-Optics-Corp.' => 'Surface Optics Corp.', -// 'DATASOFT-Systems-GmbH' => 'DATASOFT Systems GmbH', -// 'eSOL-Co.-Ltd' => 'eSOL Co., Ltd', -// 'Hirotech-Inc.' => 'Hirotech, Inc.', -// 'Mitsubishi-Materials-Corp.' => 'Mitsubishi Materials Corp.', -// 'SK-Teletech-Co.-Ltd' => 'SK Teletech Co., Ltd', -// 'Cables-To-Go' => 'Cables To Go', -// 'USI-Co.-Ltd' => 'USI Co., Ltd', -// 'Honeywell-Inc.' => 'Honeywell, Inc.', -// 'Princeton-Technology-Corp.' => 'Princeton Technology Corp.', -// 'Liebert-Corp.' => 'Liebert Corp.', -// 'Comodo-PLX-' => 'Comodo (PLX?)', -// 'DiBcom' => 'DiBcom', -// 'TM-Technology-Inc.' => 'TM Technology, Inc.', -// 'Dinging-Technology-Co.-Ltd' => 'Dinging Technology Co., Ltd', -// 'TMT-Technology-Inc.' => 'TMT Technology, Inc.', -// 'SmartHome' => 'SmartHome', -// 'Sanei-Electric-Inc.' => 'Sanei Electric, Inc.', -// 'Intec-Inc.' => 'Intec, Inc.', -// 'Eratech' => 'Eratech', -// 'GBM-Connector-Co.-Ltd' => 'GBM Connector Co., Ltd', -// 'Kycon-Inc.' => 'Kycon, Inc.', -// 'Silicon-Labs' => 'Silicon Labs', -// 'Velleman-Components-Inc.' => 'Velleman Components, Inc.', -// 'Hottinger-Baldwin-Measurement' => 'Hottinger Baldwin Measurement', -// 'Man-Boon-Manufactory-Ltd' => 'Man Boon Manufactory, Ltd', -// 'Uni-Class-Technology-Co.-Ltd' => 'Uni Class Technology Co., Ltd', -// 'Authenex-Inc.' => 'Authenex, Inc.', -// 'In-Win-Development-Inc.' => 'In-Win Development, Inc.', -// 'Post-Op-Video-Inc.' => 'Post-Op Video, Inc.', -// 'CablePlus-Ltd' => 'CablePlus, Ltd', -// 'Nada-Electronics-Ltd' => 'Nada Electronics, Ltd', -// 'Vast-Technologies-Inc.' => 'Vast Technologies, Inc.', -// 'Nexio-Co.-Ltd' => 'Nexio Co., Ltd', -// 'Importek' => 'Importek', -// 'Turtle-Beach' => 'Turtle Beach', -// 'Pictos-Technologies-Inc.' => 'Pictos Technologies, Inc.', -// 'Anubis-Electronics-Ltd' => 'Anubis Electronics, Ltd', -// 'VirTouch-Ltd' => 'VirTouch, Ltd', -// 'EasyPass-Industrial-Co.-Ltd' => 'EasyPass Industrial Co., Ltd', -// 'Brightcom-Technologies-Ltd' => 'Brightcom Technologies, Ltd', -// 'Moxa-Technologies-Co.-Ltd.' => 'Moxa Technologies Co., Ltd.', -// 'Pandora-International-Ltd.' => 'Pandora International Ltd.', -// 'YM-ELECTRIC-CO.-Ltd' => 'YM ELECTRIC CO., Ltd', -// 'Medion-AG' => 'Medion AG', -// 'VSO-Electric-Co.-Ltd' => 'VSO Electric Co., Ltd', -// 'RedRat' => 'RedRat', -// 'Cellon-International-Inc.' => 'Cellon International, Inc.', -// 'Tenx-Technology-Inc.' => 'Tenx Technology, Inc.', -// 'CTS-Electronincs' => 'CTS Electronincs', -// 'Arin-Tech-Co.-Ltd' => 'Arin Tech Co., Ltd', -// 'Mapower-Electronics-Co.-Ltd' => 'Mapower Electronics Co., Ltd', -// 'V-One-Multimedia-Pte.-Ltd' => 'V One Multimedia, Pte., Ltd', -// 'CyberScan-Technologies-Inc.' => 'CyberScan Technologies, Inc.', -// 'Japan-Radio-Company' => 'Japan Radio Company', -// 'Sphairon-Access-Systems-GmbH' => 'Sphairon Access Systems GmbH', -// 'Wavecom' => 'Wavecom', -// 'Salix-Technology-Co.-Ltd.' => 'Salix Technology Co., Ltd.', -// 'Secugen-Corp.' => 'Secugen Corp.', -// 'DeLorme-Publishing-Inc.' => 'DeLorme Publishing, Inc.', -// 'Telson-Electronics-Co.-Ltd' => 'Telson Electronics Co., Ltd', -// 'Salient-Systems-Corp.' => 'Salient Systems Corp.', -// 'BizConn-International-Corp.' => 'BizConn International Corp.', -// 'Gigastorage-Corp.' => 'Gigastorage Corp.', -// 'Silicon-10-Technology-Corp.' => 'Silicon 10 Technology Corp.', -// 'Shengyih-Steel-Mold-Co.-Ltd' => 'Shengyih Steel Mold Co., Ltd', -// 'Santa-Electronic-Inc.' => 'Santa Electronic, Inc.', -// 'JNC-Inc.' => 'JNC, Inc.', -// 'Venture-Corp.-Ltd' => 'Venture Corp., Ltd', -// 'Kyocera-Elco-Corp.' => 'Kyocera Elco Corp.', -// 'Bloomberg-L.P.' => 'Bloomberg L.P.', -// 'You-Yang-Technology-Co.-Ltd' => 'You Yang Technology Co., Ltd', -// 'Tripace' => 'Tripace', -// 'Yankee-Robotics-LLC' => 'Yankee Robotics, LLC', -// 'Technoimagia-Co.-Ltd' => 'Technoimagia Co., Ltd', -// 'StarShine-Technology-Corp.' => 'StarShine Technology Corp.', -// 'Sierra-Wireless-Inc.' => 'Sierra Wireless, Inc.', -// 'ZHAN-QI-Technology-Co.-Ltd' => 'ZHAN QI Technology Co., Ltd', -// 'ruwido-austria-GmbH' => 'ruwido austria GmbH', -// 'Chipcon-AS' => 'Chipcon AS', -// 'Technovas-Co.-Ltd' => 'Technovas Co., Ltd', -// 'GlobalMedia-Group-LLC' => 'GlobalMedia Group, LLC', -// 'Exito-Electronics-Co.-Ltd' => 'Exito Electronics Co., Ltd', -// 'ATECH-FLASH-TECHNOLOGY' => 'ATECH FLASH TECHNOLOGY', -// 'Inmax' => 'Inmax', -// 'Topfield-Co.-Ltd.' => 'Topfield Co., Ltd.', -// 'K.I.-Technology-Co.-Ltd.' => 'K.I. Technology Co. Ltd.', -// 'Siemens-AG' => 'Siemens AG', -// 'Prolific' => 'Prolific', -// 'Alcatel--' => 'Alcatel (?)', -// 'InterBiometrics' => 'InterBiometrics', -// 'Hudson-Soft-Co.-Ltd' => 'Hudson Soft Co., Ltd', -// 'Magellan' => 'Magellan', -// 'DigiTech' => 'DigiTech', -// 'Jungsoft-Co.-Ltd' => 'Jungsoft Co., Ltd', -// 'Denver-Electronics' => 'Denver Electronics', -// 'Unknown' => 'Unknown', -// 'Novation-EMS' => 'Novation EMS', -// 'Belkin' => 'Belkin', -// 'AirVast' => 'AirVast', -// 'Nyko-Honey-Bee' => 'Nyko (Honey Bee)', -// 'Apogee-Inc.' => 'Apogee Inc.', -// 'A-DATA-Technology-Co.-Ltd.' => 'A-DATA Technology Co., Ltd.', -// 'Standard-Microsystems-Corp.' => 'Standard Microsystems Corp.', -// 'Covidien-Energy-based-Devices' => 'Covidien Energy-based Devices', -// 'Pirelli-Broadband-Solutions' => 'Pirelli Broadband Solutions', -// 'Logic3---SpectraVideo-plc' => 'Logic3 / SpectraVideo plc', -// 'Aristocrat-Technologies' => 'Aristocrat Technologies', -// 'Bel-Stewart' => 'Bel Stewart', -// 'Strobe-Data-Inc.' => 'Strobe Data, Inc.', -// 'TwinMOS' => 'TwinMOS', -// 'Ensoniq' => 'Ensoniq', -// 'zebris-Medical-GmbH' => 'zebris Medical GmbH', -// 'Marvell-Semiconductor-Inc.' => 'Marvell Semiconductor, Inc.', -// 'Innomedia' => 'Innomedia', -// 'Belkin-Components-hex' => 'Belkin Components [hex]', -// 'RISO-KAGAKU-CORP.' => 'RISO KAGAKU CORP.', -// 'CyberTAN-Technology' => 'CyberTAN Technology', -// 'Trendchip-Technologies-Corp.' => 'Trendchip Technologies Corp.', -// 'Autocue-Group-Ltd' => 'Autocue Group Ltd', -// 'Huawei-Technologies-Co.-Ltd.' => 'Huawei Technologies Co., Ltd.', -// 'EMS-Dr.-Thomas-Wuensche' => 'EMS Dr. Thomas Wuensche', -// 'BETTER-WIRE-FACTORY-CO.-LTD.' => 'BETTER WIRE FACTORY CO., LTD.', -// 'Waldorf-Music-GmbH' => 'Waldorf Music GmbH', -// 'Tapwave-Inc.' => 'Tapwave, Inc.', -// 'Memorex-Products-Inc.' => 'Memorex Products, Inc.', -// 'AIN-Comm.-Technology-Co.-Ltd' => 'AIN Comm. Technology Co., Ltd', -// 'Fascinating-Electronics-Inc.' => 'Fascinating Electronics, Inc.', -// 'Transcend-Information-Inc.' => 'Transcend Information, Inc.', -// 'Shuttle-Inc.' => 'Shuttle, Inc.', -// 'Roper' => 'Roper', -// 'ICS-Electronics' => 'ICS Electronics', -// 'Natural-Point' => 'Natural Point', -// 'Envara-Inc.' => 'Envara Inc.', -// 'Konica-Minolta' => 'Konica Minolta', -// 'Mobility' => 'Mobility', -// 'Sino-Lite-Technology-Corp.' => 'Sino Lite Technology Corp.', -// 'Moravian-Instruments' => 'Moravian Instruments', -// 'PanJit-International-Inc.' => 'PanJit International Inc.', -// 'P-E-Microcomputer-Systems' => 'P&E Microcomputer Systems', -// 'SEGGER' => 'SEGGER', -// 'STEC' => 'STEC', -// 'Swissbit' => 'Swissbit', -// 'CNet-Technology-Inc.' => 'CNet Technology Inc.', -// 'Vimtron-Electronics-Co.-Ltd.' => 'Vimtron Electronics Co., Ltd.', -// 'SCAPS-GmbH' => 'SCAPS GmbH', -// 'Netgear-Inc' => 'Netgear, Inc', -// 'Validity-Sensors-Inc.' => 'Validity Sensors, Inc.', -// 'Jungo-LTD' => 'Jungo LTD', -// 'TOMTOM-B.V.' => 'TOMTOM B.V.', -// 'IdealTEK-Inc.' => 'IdealTEK, Inc.', -// 'Sennheiser-Communications' => 'Sennheiser Communications', -// 'BEHRINGER-International-GmbH' => 'BEHRINGER International GmbH', -// 'Q-tec' => 'Q-tec', -// 'Baltech' => 'Baltech', -// 'PerkinElmer-Optoelectronics' => 'PerkinElmer Optoelectronics', -// 'Linksys' => 'Linksys', -// 'Alesis' => 'Alesis', -// 'Nippon-Dics-Co.-Ltd.' => 'Nippon Dics Co., Ltd.', -// 'Unknown' => 'Unknown', -// 'Ricoh-Printing-Systems-Ltd.' => 'Ricoh Printing Systems, Ltd.', -// 'Wisair-Ltd.' => 'Wisair Ltd.', -// 'Techsan-Electronics-Co.-Ltd.' => 'Techsan Electronics Co., Ltd.', -// 'Shark-Multimedia' => 'Shark Multimedia', -// 'IMC-Networks' => 'IMC Networks', -// 'ALEREON-INC.' => 'ALEREON, INC.', -// 'i.Tech-Dynamic-Limited' => 'i.Tech Dynamic Limited', -// 'Rane' => 'Rane', -// 'TechnoScope-Co.-Ltd.' => 'TechnoScope Co., Ltd.', -// 'Zydacron' => 'Zydacron', -// 'Initio-Corporation' => 'Initio Corporation', -// 'Axxion-Group-Corp.' => 'Axxion Group Corp.', -// 'Bowe-Bell---Howell' => 'Bowe Bell & Howell', -// 'Sitronix' => 'Sitronix', -// 'Telechips-Inc.' => 'Telechips, Inc.', -// 'Novatel-Wireless' => 'Novatel Wireless', -// 'ABILITY-ENTERPRISE-CO.-LTD.' => 'ABILITY ENTERPRISE CO., LTD.', -// 'Thales-E-Transactions' => 'Thales E-Transactions', -// 'Arbiter-Systems-Inc.' => 'Arbiter Systems, Inc.', -// 'RedOctane' => 'RedOctane', -// 'Pertech-Resources-Inc.' => 'Pertech Resources, Inc.', -// 'Wistron-NeWeb' => 'Wistron NeWeb', -// 'Denali-Software-Inc.' => 'Denali Software, Inc.', -// 'Altek-Corporation' => 'Altek Corporation', -// 'Digilent' => 'Digilent', -// 'Radio-Shack' => 'Radio Shack', -// 'Trust' => 'Trust', -// 'Tatung-Co.' => 'Tatung Co.', -// 'Staccato-Communications' => 'Staccato Communications', -// 'Micro-Star-International' => 'Micro Star International', -// 'Huawei-3Com' => 'Huawei-3Com', -// 'Upek' => 'Upek', -// 'Hama-GmbH---Co.-KG' => 'Hama GmbH & Co., KG', -// 'Vaillant' => 'Vaillant', -// 'Elsa-AG-hex' => 'Elsa AG [hex]', -// 'Silicom' => 'Silicom', -// 'DSP-Group-Ltd.' => 'DSP Group, Ltd.', -// 'EVATRONIX-SA' => 'EVATRONIX SA', -// 'Ralink-Technology-Corp.' => 'Ralink Technology, Corp.', -// 'Panstrong-Company-Ltd.' => 'Panstrong Company Ltd.', -// 'Microtek-International-Inc.' => 'Microtek International Inc.', -// 'Imagination-Technologies' => 'Imagination Technologies', -// 'WideView-Technology-Inc.' => 'WideView Technology Inc.', -// 'CTK-Corporation' => 'CTK Corporation', -// 'Printronix-Inc.' => 'Printronix Inc.', -// 'ATP-Electronics-Inc.' => 'ATP Electronics Inc.', -// 'StarTech.com-Ltd.' => 'StarTech.com Ltd.', -// 'Ralink-Technology-Corp.' => 'Ralink Technology, Corp.', -// 'Rockwell-Automation-Inc.' => 'Rockwell Automation, Inc.', -// 'Gemlight-Computer-Ltd' => 'Gemlight Computer, Ltd', -// 'Super-Top' => 'Super Top', -// 'JAMER-INDUSTRIES-CO.-LTD.' => 'JAMER INDUSTRIES CO., LTD.', -// 'Raritan-Computer-Inc.' => 'Raritan Computer, Inc.', -// 'Dialogue-Technology-Corp.' => 'Dialogue Technology Corp.', -// 'Planex-Communications' => 'Planex Communications', -// 'Shure-Inc.' => 'Shure Inc.', -// 'TechniSat-Digital-GmbH' => 'TechniSat Digital GmbH', -// 'Ellisys' => 'Ellisys', -// 'Pine-Tum-Enterprise-Co.-Ltd.' => 'Pine-Tum Enterprise Co., Ltd.', -// 'medMobile' => 'medMobile', -// 'Actel' => 'Actel', -// 'CompUSA' => 'CompUSA', -// 'Cheshire-Engineering-Corp.' => 'Cheshire Engineering Corp.', -// 'Bitwire-Corp.' => 'Bitwire Corp.', -// 'ENE-Technology-Inc' => 'ENE Technology Inc', -// 'Silicon-Portals' => 'Silicon Portals', -// 'UBIQUAM-Co.-Ltd.' => 'UBIQUAM Co., Ltd.', -// 'LG-HLDS' => 'LG (HLDS)', -// 'Razer-USA-Ltd' => 'Razer USA, Ltd', -// 'U-Blox-AG' => 'U-Blox AG', -// 'Celectronic-GmbH' => 'Celectronic GmbH', -// 'PNY' => 'PNY', -// 'ConnectCounty-Holdings-Berhad' => 'ConnectCounty Holdings Berhad', -// 'Prolink-Microsystems-Corp.' => 'Prolink Microsystems Corp.', -// 'OQO' => 'OQO', -// 'Sunf-Pu-Technology-Co.-Ltd' => 'Sunf Pu Technology Co., Ltd', -// 'Quantum-Corporation' => 'Quantum Corporation', -// 'ALLTOP-TECHNOLOGY-CO.-LTD.' => 'ALLTOP TECHNOLOGY CO., LTD.', -// 'Ketron-SRL' => 'Ketron SRL', -// 'TRENDnet' => 'TRENDnet', -// 'Fiberline' => 'Fiberline', -// 'SMA-Technologie-AG' => 'SMA Technologie AG', -// 'Oakley-Inc.' => 'Oakley Inc.', -// 'Freescale-Semiconductor-Inc.' => 'Freescale Semiconductor, Inc.', -// 'Afatech-Technologies-Inc.' => 'Afatech Technologies, Inc.', -// 'Teams-Power-Limited' => 'Teams Power Limited', -// 'Gemtek' => 'Gemtek', -// 'VMware-Inc.' => 'VMware Inc.', -// 'Olimex-Ltd.' => 'Olimex Ltd.', -// 'XL-Imaging' => 'XL Imaging', -// 'SoundGraph-Inc.' => 'SoundGraph Inc.', -// 'Laboratoires-MXM' => 'Laboratoires MXM', -// 'KTF-Technologies' => 'KTF Technologies', -// 'D-Box-Technologies' => 'D-Box Technologies', -// 'Textech-International-Ltd.' => 'Textech International Ltd.', -// 'Coulomb-Electronics-Ltd.' => 'Coulomb Electronics Ltd.', -// 'Trust-International-B.V.' => 'Trust International B.V.', -// 'Hynix-Semiconductor-Inc.' => 'Hynix Semiconductor Inc.', -// 'Seong-Ji-Industrial-Co.-Ltd.' => 'Seong Ji Industrial Co., Ltd.', -// 'RSA' => 'RSA', -// 'SohoWare' => 'SohoWare', -// 'Pacific-Digital-Corp.' => 'Pacific Digital Corp.', -// 'Belcarra-Technologies-Corp.' => 'Belcarra Technologies Corp.', -// 'HanfTek' => 'HanfTek', -// 'Tascam' => 'Tascam', -// 'Umax' => 'Umax', -// 'Inside-Out-Networks-hex' => 'Inside Out Networks [hex]', -// 'VIA-Technologies-Inc.' => 'VIA Technologies, Inc.', -// 'Amoi-Electronics' => 'Amoi Electronics', -// 'Wionics-Research' => 'Wionics Research', -// 'Stonestreet-One-Inc.' => 'Stonestreet One, Inc.', -// 'Airgo-Networks-Inc.' => 'Airgo Networks Inc.', -// 'WiQuest-Communications-Inc.' => 'WiQuest Communications, Inc.', -// '2Wire-Inc.' => '2Wire, Inc.', -// 'Good-Way-Technology' => 'Good Way Technology', -// 'Cross-Match-Technologies-GmbH' => 'Cross Match Technologies GmbH', -// 'SofTec-Microsystems' => 'SofTec Microsystems', -// 'ChipX' => 'ChipX', -// 'Matrix-Vision-GmbH' => 'Matrix Vision GmbH', -// 'Frontier-Design-Group' => 'Frontier Design Group', -// 'Creatix-Polymedia-GmbH' => 'Creatix Polymedia GmbH', -// 'PiKRON-Ltd.-hex' => 'PiKRON Ltd. [hex]', -// 'Total-Phase' => 'Total Phase', -// 'Golden-Bridge-Electech-Inc.' => 'Golden Bridge Electech Inc.', -// 'Prevo-Technologies-Inc.' => 'Prevo Technologies, Inc.', -// 'Godspeed-Computer-Corp.' => 'Godspeed Computer Corp.', -// 'Delock' => 'Delock', -// 'ZOOM-Corporation' => 'ZOOM Corporation', -// 'Kingmax-Digital-Inc.' => 'Kingmax Digital Inc.', -// 'Saab-AB' => 'Saab AB', -// 'Atheros-Communications' => 'Atheros Communications', -// 'Askey-Computer-Corp.-hex' => 'Askey Computer Corp. [hex]', -// 'VTec-Test-Inc.' => 'VTec Test, Inc.', -// 'Unigraf' => 'Unigraf', -// 'Global-Sun-Technology' => 'Global Sun Technology', -// 'iStation' => 'iStation', -// 'Persentec-Inc.' => 'Persentec, Inc.', -// 'VOTI' => 'VOTI', -// 'Wireless-Cables-Inc.' => 'Wireless Cables, Inc.', -// 'silex-technology-Inc.' => 'silex technology, Inc.', -// 'GrauTec' => 'GrauTec', -// 'AnyDATA-Corporation' => 'AnyDATA Corporation', -// 'JABLOCOM-s.r.o.' => 'JABLOCOM s.r.o.', -// 'CMOTECH-Co.-Ltd.' => 'CMOTECH Co., Ltd.', -// 'Wiener-Plein---Baus' => 'Wiener, Plein & Baus', -// 'GN-ReSound-A-S' => 'GN ReSound A/S', -// 'Futurelogic-Inc.' => 'Futurelogic Inc.', -// 'BlueView-Technologies-Inc.' => 'BlueView Technologies, Inc.', -// 'ARTIMI' => 'ARTIMI', -// 'Swissonic' => 'Swissonic', -// 'Avnera' => 'Avnera', -// 'Vitesse-Semiconductor' => 'Vitesse Semiconductor', -// 'Axesstel-Inc.' => 'Axesstel, Inc.', -// 'Waltop-International-Corp.' => 'Waltop International Corp.', -// 'Cellink-Technology-Co.-Ltd' => 'Cellink Technology Co., Ltd', -// 'Linksys' => 'Linksys', -// 'Senao' => 'Senao', -// 'General-Atomics' => 'General Atomics', -// 'ASMedia-Technology-Inc.' => 'ASMedia Technology Inc.', -// 'Syntek' => 'Syntek', -// 'GERTEC-Telecomunicacoes-Ltda.' => 'GERTEC Telecomunicacoes Ltda.', -// 'LucidPort-Technology-Inc.' => 'LucidPort Technology, Inc.', -// 'System-Level-Solutions-Inc.' => 'System Level Solutions, Inc.', -// 'Arowana' => 'Arowana', -// 'Sweex' => 'Sweex', -// 'Multiple-Vendors' => 'Multiple Vendors', -// 'TopSeed-Technology-Corp.' => 'TopSeed Technology Corp.', -// 'ATI-AIB' => 'ATI AIB', -// 'Printrex-Inc.' => 'Printrex, Inc.', -// 'JALCO-CO.-LTD.' => 'JALCO CO., LTD.', -// 'Belkin-Components' => 'Belkin Components', -// 'Samson-Technologies-Corp.' => 'Samson Technologies Corp.', -// 'Concept2' => 'Concept2', -// 'MICOMSOFT-CO.-LTD.' => 'MICOMSOFT CO., LTD.', -// 'Grey-Innovation' => 'Grey Innovation', -// 'Singim-International-Corp.' => 'Singim International Corp.', -// 'Native-Instruments' => 'Native Instruments', -// 'Sanford-L.P.' => 'Sanford L.P.', -// 'Korea-Techtron-Co.-Ltd.' => 'Korea Techtron Co., Ltd.', -// 'Newnham-Research' => 'Newnham Research', -// 'Cornice-Inc.' => 'Cornice, Inc.', -// 'Lenovo' => 'Lenovo', -// 'K.K.-Rocky' => 'K.K. Rocky', -// 'Unicomp-Inc' => 'Unicomp, Inc', -// 'Advantech' => 'Advantech', -// 'Twinhan' => 'Twinhan', -// 'Gwo-Jinn-Industries-Co.-Ltd.' => 'Gwo Jinn Industries Co., Ltd.', -// 'VIVOphone' => 'VIVOphone', -// 'Vaisala' => 'Vaisala', -// 'ASRock-Incorporation' => 'ASRock Incorporation', -// 'GYROCOM-C-C-Co.-LTD' => 'GYROCOM C&C Co., LTD', -// 'Memory-Devices-Ltd.' => 'Memory Devices Ltd.', -// 'Compro' => 'Compro', -// 'Teridian-Semiconductor-Corp.' => 'Teridian Semiconductor Corp.', -// 'Nexio-Co.-Ltd' => 'Nexio Co., Ltd', -// 'Aveo-Technology-Corp.' => 'Aveo Technology Corp.', -// 'Alienware-Corporation' => 'Alienware Corporation', -// 'Siano-Mobile-Silicon' => 'Siano Mobile Silicon', -// 'Vast-Technologies-Inc.' => 'Vast Technologies, Inc.', -// 'Topseed' => 'Topseed', -// 'Evertop-Wire-Cable-Co.' => 'Evertop Wire Cable Co.', -// 'Verbatim-Ltd' => 'Verbatim, Ltd', -// 'Petalynx' => 'Petalynx', -// 'e3C-Technologies' => 'e3C Technologies', -// 'Mikkon-Technology-Limited' => 'Mikkon Technology Limited', -// 'Zotek-Electronic-Co.-Ltd.' => 'Zotek Electronic Co., Ltd.', -// 'AMIT-Technology-Inc.' => 'AMIT Technology, Inc.', -// 'Ecamm' => 'Ecamm', -// 'Google-Inc.' => 'Google Inc.', -// 'Kaba' => 'Kaba', -// 'Planon-System-Solutions-Inc.' => 'Planon System Solutions Inc.', -// 'Qcom' => 'Qcom', -// 'Matrox-Graphics-Inc.' => 'Matrox Graphics, Inc.', -// 'Arkmicro-Technologies-Inc.' => 'Arkmicro Technologies Inc.', -// 'FineArch-Inc.' => 'FineArch Inc.', -// 'GEMBIRD' => 'GEMBIRD', -// 'Motorola-GSG' => 'Motorola GSG', -// 'Alco-Digital-Devices-Limited' => 'Alco Digital Devices Limited', -// 'Nordic-Semiconductor-ASA' => 'Nordic Semiconductor ASA', -// 'NextWindow' => 'NextWindow', -// 'Avago-Technologies-Pte.' => 'Avago Technologies, Pte.', -// 'Dream-Link' => 'Dream Link', -// 'Sensoray-Co.-Inc.' => 'Sensoray Co., Inc.', -// 'Lab126' => 'Lab126', -// 'Hyperstone-AG' => 'Hyperstone AG', -// 'Ironkey-Inc.' => 'Ironkey Inc.', -// 'Radiient-Technologies' => 'Radiient Technologies', -// 'Itron-Technology-iONE' => 'Itron Technology iONE', -// 'Wispro-Technology-Inc.' => 'Wispro Technology Inc.', -// 'Dane-Elec-Corp.-USA' => 'Dane-Elec Corp. USA', -// 'T-Logic' => 'T-Logic', -// 'Nuconn-Technology-Corp.' => 'Nuconn Technology Corp.', -// 'Beceem-Communications-Inc.' => 'Beceem Communications Inc.', -// 'Trillium-Technology-Pty.-Ltd.' => 'Trillium Technology Pty. Ltd.', -// 'Benica-Corporation' => 'Benica Corporation', -// 'Biforst-Technology-Inc.' => 'Biforst Technology Inc.', -// 'Bodelin' => 'Bodelin', -// 'S-Life' => 'S Life', -// 'Batronix' => 'Batronix', -// 'Celestron' => 'Celestron', -// 'B---W-Group' => 'B & W Group', -// 'Infotech-Logistic-LLC' => 'Infotech Logistic, LLC', -// 'Data-Robotics' => 'Data Robotics', -// 'Mindtribe' => 'Mindtribe', -// 'Parrot-SA' => 'Parrot SA', -// 'ONDA-Communication-S.p.A.' => 'ONDA Communication S.p.A.', -// 'RODE-Microphones' => 'RODE Microphones', -// 'Gampaq-Co.Ltd' => 'Gampaq Co.Ltd', -// 'Dynex' => 'Dynex', -// 'Bellwood-International-Inc.' => 'Bellwood International, Inc.', -// 'USB-IF-non-workshop' => 'USB-IF non-workshop', -// 'KES-Co.-Ltd.' => 'KES Co., Ltd.', -// 'Amphenol-East-Asia-Ltd.' => 'Amphenol East Asia Ltd.', -// 'Seagate-Branded-Solutions' => 'Seagate Branded Solutions', -// 'Quanta-Microsystems-Inc.' => 'Quanta Microsystems, Inc.', -// 'Biwin-Technology-Ltd.' => 'Biwin Technology Ltd.', -// 'TERMINUS-TECHNOLOGY-INC.' => 'TERMINUS TECHNOLOGY INC.', -// 'Action-Electronics-Co.-Ltd.' => 'Action Electronics Co., Ltd.', -// 'Silicon-Image' => 'Silicon Image', -// 'SafeBoot-International-B.V.' => 'SafeBoot International B.V.', -// 'Abbott-Diabetes-Care' => 'Abbott Diabetes Care', -// 'Spansion-Inc.' => 'Spansion Inc.', -// 'SamYoung-Electronics-Co.-Ltd' => 'SamYoung Electronics Co., Ltd', -// 'Global-Unichip-Corp.' => 'Global Unichip Corp.', -// 'Sagem-Orga-GmbH' => 'Sagem Orga GmbH', -// 'Bayer-Health-Care-LLC' => 'Bayer Health Care LLC', -// 'Lumberg-Connect-GmbH---Co.-KG' => 'Lumberg Connect GmbH & Co. KG', -// 'Evoluent' => 'Evoluent', -// 'QinHeng-Electronics' => 'QinHeng Electronics', -// 'Dynalith-Systems-Co.-Ltd.' => 'Dynalith Systems Co., Ltd.', -// 'SGS-Taiwan-Ltd.' => 'SGS Taiwan Ltd.', -// 'BandRich-Inc.' => 'BandRich, Inc.', -// 'Corsair-Voyager-GT-16GB' => 'Corsair Voyager GT 16GB', -// 'Leica-Camera-AG' => 'Leica Camera AG', -// 'Data-Drive-Thru-Inc.' => 'Data Drive Thru, Inc.', -// 'UBeacon-Technologies-Inc.' => 'UBeacon Technologies, Inc.', -// 'eFortune-Technology-Corp.' => 'eFortune Technology Corp.', -// 'Salcomp-Plc' => 'Salcomp Plc', -// 'Desay-Wire-Co.-Ltd.' => 'Desay Wire Co., Ltd.', -// 'X-TENSIONS' => 'X-TENSIONS', -// 'Meilhaus-Electronic-GmBH' => 'Meilhaus Electronic GmBH', -// 'MStar-Semiconductor-Inc.' => 'MStar Semiconductor, Inc.', -// 'WiLinx-Corp.' => 'WiLinx Corp.', -// 'Cellex-Power-Products-Inc.' => 'Cellex Power Products, Inc.', -// 'Current-Electronics-Inc.' => 'Current Electronics Inc.', -// 'NAVIsis-Inc.' => 'NAVIsis Inc.', -// 'Ugobe-Life-Forms-Inc.' => 'Ugobe Life Forms, Inc.', -// 'ViXS-Systems-Inc.' => 'ViXS Systems, Inc.', -// 'iPassion-Technology-Inc.' => 'iPassion Technology Inc.', -// 'Generalplus-Technology-Inc.' => 'Generalplus Technology Inc.', -// 'Energizer-Holdings-Inc.' => 'Energizer Holdings, Inc.', -// 'Plastron-Precision-Co.-Ltd.' => 'Plastron Precision Co., Ltd.', -// 'K.S.-Terminals-Inc.' => 'K.S. Terminals Inc.', -// 'ATERGI-TECHNOLOGY-CO.-LTD.' => 'ATERGI TECHNOLOGY CO., LTD.', -// 'Fresco-Logic' => 'Fresco Logic', -// 'Ovislink-Corp.' => 'Ovislink Corp.', -// 'Legend-Silicon-Corp.' => 'Legend Silicon Corp.', -// 'Afatech' => 'Afatech', -// 'Altium-Limited' => 'Altium Limited', -// 'e-MOVE-Technology-Co.-Ltd.' => 'e-MOVE Technology Co., Ltd.', -// 'Amlogic-Inc.' => 'Amlogic, Inc.', -// 'MA-LABS-Inc.' => 'MA LABS, Inc.', -// 'N-Trig' => 'N-Trig', -// 'YMax-Communications-Corp.' => 'YMax Communications Corp.', -// 'Shenzhen-Yuanchuan-Electronic' => 'Shenzhen Yuanchuan Electronic', -// 'Ember-Corporation' => 'Ember Corporation', -// 'Abilis-Systems' => 'Abilis Systems', -// 'Harmonix-Music' => 'Harmonix Music', -// 'Vuzix-Corporation' => 'Vuzix Corporation', -// 'T---A-Mobile-Phones' => 'T & A Mobile Phones', -// 'Ford-Motor-Co.' => 'Ford Motor Co.', -// 'AVIXE-Technology-China-Ltd.' => 'AVIXE Technology (China) Ltd.', -// 'P-TWO-INDUSTRIES-INC.' => 'P-TWO INDUSTRIES, INC.', -// 'RealVision-Inc.' => 'RealVision Inc.', -// 'Extranet-Systems-Inc.' => 'Extranet Systems Inc.', -// 'TouchPack' => 'TouchPack', -// 'Kreton-Corporation' => 'Kreton Corporation', -// 'QNAP-System-Inc.' => 'QNAP System Inc.', -// 'Relm-Wireless' => 'Relm Wireless', -// 'Lanterra-Industrial-Co.-Ltd.' => 'Lanterra Industrial Co., Ltd.', -// 'ALECTRONIC-LIMITED' => 'ALECTRONIC LIMITED', -// 'Datel-Electronics-Ltd.' => 'Datel Electronics Ltd.', -// 'Volkswagen-of-America-Inc.' => 'Volkswagen of America, Inc.', -// 'Goldvish-S.A.' => 'Goldvish S.A.', -// 'ADDMM-LLC' => 'ADDMM LLC', -// 'HuiYang-D---S-Cable-Co.-Ltd.' => 'HuiYang D & S Cable Co., Ltd.', -// 'LS-Cable-Ltd.' => 'LS Cable Ltd.', -// 'SpringCard' => 'SpringCard', -// 'Authorizer-Technologies-Inc.' => 'Authorizer Technologies, Inc.', -// 'NONIN-MEDICAL-INC.' => 'NONIN MEDICAL INC.', -// 'Wep-Peripherals' => 'Wep Peripherals', -// 'Cherng-Weei-Technology-Corp.' => 'Cherng Weei Technology Corp.', -// 'SiGma-Micro' => 'SiGma Micro', -// 'Skydigital-Inc.' => 'Skydigital Inc.', -// 'AMT' => 'AMT', -// 'Kaetat-Industrial-Co.-Ltd.' => 'Kaetat Industrial Co., Ltd.', -// 'Datascope-Corp.' => 'Datascope Corp.', -// 'Unigen-Corporation' => 'Unigen Corporation', -// 'LighTuning-Technology-Inc.' => 'LighTuning Technology Inc.', -// '2N-TELEKOMUNIKACE-a.s.' => '2N TELEKOMUNIKACE a.s.', -// 'Somagic-Inc.' => 'Somagic, Inc.', -// 'ASTRON-INTERNATIONAL-CORP.' => 'ASTRON INTERNATIONAL CORP.', -// 'ALPINE-ELECTRONICS-INC.' => 'ALPINE ELECTRONICS, INC.', -// 'ACCARIO-Inc.' => 'ACCARIO Inc.', -// 'Kinstone' => 'Kinstone', -// 'Aces-Electronic-Co.-Ltd.' => 'Aces Electronic Co., Ltd.', -// 'OPEX-CORPORATION' => 'OPEX CORPORATION', -// 'Luminary-Micro-Inc.' => 'Luminary Micro Inc.', -// 'PlantSense' => 'PlantSense', -// 'NextWave-Broadband-Inc.' => 'NextWave Broadband Inc.', -// 'adp-corporation' => 'adp corporation', -// 'Firecomms-Ltd.' => 'Firecomms Ltd.', -// 'WonTen-Technology-Co.-Ltd.' => 'WonTen Technology Co., Ltd.', -// 'EDIMAX-TECHNOLOGY-CO.-LTD.' => 'EDIMAX TECHNOLOGY CO., LTD.', -// 'Amphenol-KAE' => 'Amphenol KAE', -// 'ANDES-TECHNOLOGY-CORPORATION' => 'ANDES TECHNOLOGY CORPORATION', -// 'Solid-Motion' => 'Solid-Motion', -// 'ALPHA-SAT-TECHNOLOGY-LIMITED' => 'ALPHA-SAT TECHNOLOGY LIMITED', -// 'C-Thru-Music-Ltd.' => 'C-Thru Music Ltd.', -// 'Dexatek-Technology-Ltd.' => 'Dexatek Technology Ltd.', -// 'Diostech-Co.-Ltd.' => 'Diostech Co., Ltd.', -// 'SAMTACK-INC.' => 'SAMTACK INC.', -// 'PEGATRON-CORPORATION' => 'PEGATRON CORPORATION', -// 'OpenMoko-Inc.' => 'OpenMoko, Inc.', -// 'Smartronix-Inc.' => 'Smartronix, Inc.', -// 'Linux-Foundation' => 'Linux Foundation', -// 'Qualcomm---Option' => 'Qualcomm / Option', -// 'Point-Grey-Research-Inc.' => 'Point Grey Research, Inc.', -// 'Lumension-Security' => 'Lumension Security', -// 'INVIA' => 'INVIA', -// 'Festo-AG---Co.-KG' => 'Festo AG & Co. KG', -// 'Cleverscope' => 'Cleverscope', -// 'TypeMatrix' => 'TypeMatrix', -// 'TrekStor-GmbH---Co.-KG' => 'TrekStor GmbH & Co. KG', -// 'NZXT' => 'NZXT', -// 'Coby-Electronics-Corporation' => 'Coby Electronics Corporation', -// 'ROCCAT' => 'ROCCAT', -// 'NuCORE-Technology-Inc.' => 'NuCORE Technology, Inc.', -// 'AirTies-Wireless-Networks' => 'AirTies Wireless Networks', -// 'EADS-Deutschland-GmbH' => 'EADS Deutschland GmbH', -// 'Cal-Comp' => 'Cal-Comp', -// 'G-Tek-Electronics-Group' => 'G-Tek Electronics Group', -// 'TANDBERG' => 'TANDBERG', -// 'Alere-Inc.' => 'Alere, Inc.', -// 'Stantum' => 'Stantum', -// 'Delphin-Technology-AG' => 'Delphin Technology AG', -// 'NXP-Semiconductors' => 'NXP Semiconductors', -// 'Vertex-Wireless-Co.-Ltd.' => 'Vertex Wireless Co., Ltd.', -// 'D-Link-Corp.' => 'D-Link Corp.', -// 'Unknown-Pinnacle-' => 'Unknown (Pinnacle?)', -// 'PLANEX' => 'PLANEX', -// 'Hauppauge' => 'Hauppauge', -// 'Texas-Instruments' => 'Texas Instruments', -// 'Barnes---Noble' => 'Barnes & Noble', -// 'Cando' => 'Cando', -// 'Clay-Logic' => 'Clay Logic', -// 'XMOS-Ltd' => 'XMOS Ltd', -// 'Hanvon' => 'Hanvon', -// 'Qi-Hardware' => 'Qi Hardware', -// 'Simtec-Electronics' => 'Simtec Electronics', -// 'ActionStar' => 'ActionStar', -// 'Creative--' => 'Creative (?)', -// 'GW-Instek' => 'GW Instek', -// 'Emotiv-Systems-Pty.-Ltd.' => 'Emotiv Systems Pty. Ltd.', -// 'Agecodagis-SARL' => 'Agecodagis SARL', -// 'MacAlly' => 'MacAlly', -// 'SAMWOO-Enterprise' => 'SAMWOO Enterprise', -// 'RadioShack-Corporation' => 'RadioShack Corporation', -// 'Kobo-Inc.' => 'Kobo Inc.', -// 'Pie-Digital-Inc.' => 'Pie Digital, Inc.', -// 'Motorola-PCS' => 'Motorola PCS', -// 'eTurboTouch-Technology-Inc.' => 'eTurboTouch Technology, Inc.', -// 'Pinnacle-Systems-Inc.' => 'Pinnacle Systems, Inc.', -// 'Pumatronix-Ltda' => 'Pumatronix Ltda', -// 'Digit-at-lway-Inc.' => 'Digit@lway, Inc.', -// 'Tripp-Lite' => 'Tripp-Lite', -// 'TwinMOS' => 'TwinMOS', -// 'Citizen' => 'Citizen', -// 'DigitalWay' => 'DigitalWay', -// 'NHJ-Ltd' => 'NHJ, Ltd', -// 'ASUSTek-Computer-Inc.' => 'ASUSTek Computer Inc.', -// 'Toptronic-Industrial-Co.-Ltd' => 'Toptronic Industrial Co., Ltd', -// 'Planex-Communications' => 'Planex Communications', -// 'Dolphin-Peripherals' => 'Dolphin Peripherals', -// 'Fujitsu-Ltd' => 'Fujitsu, Ltd', -// 'Eagletron' => 'Eagletron', -// 'Whanam-Electronics-Co.-Ltd' => 'Whanam Electronics Co., Ltd', -// 'VidzMedia-Pte-Ltd' => 'VidzMedia Pte Ltd', -// 'AEI' => 'AEI', -// 'Yakumo' => 'Yakumo', -// 'Micro-Star' => 'Micro Star', -// 'DIVA' => 'DIVA', -// 'InVibro' => 'InVibro', -// 'WEM' => 'WEM', -// 'National-Instruments-Corp.' => 'National Instruments Corp.', -// 'I-O-Data' => 'I-O Data', -// 'i-rocks' => 'i-rocks', -// 'iRiver-Ltd.' => 'iRiver, Ltd.', -// 'Dell-Computer-Corp.' => 'Dell Computer Corp.', -// 'USBest-Technology' => 'USBest Technology', -// 'USB-Design-by-Example' => 'USB Design by Example', -// 'Broadcom-Corp.' => 'Broadcom Corp.', -// 'WinChipHead' => 'WinChipHead', -// 'Shuttle-Inc.' => 'Shuttle, Inc.', -// 'Panram' => 'Panram', -// 'EMS-Production' => 'EMS Production', -// 'Miditech' => 'Miditech', -// 'GW-Instek' => 'GW Instek', -// 'Aceeca' => 'Aceeca', -// 'Memorex' => 'Memorex', -// 'SimpleTech' => 'SimpleTech', -// 'Grandtec' => 'Grandtec', -// 'Linksys--' => 'Linksys (?)', -// 'Averatec--' => 'Averatec (?)', -// 'Sweex' => 'Sweex', -// 'I-Tetra' => 'I-Tetra', -// 'Owon' => 'Owon', -// 'Transmeta-Corp.' => 'Transmeta Corp.', -// 'UC-Logic-Technology-Corp.' => 'UC-Logic Technology Corp.', -// 'Epiphan-Systems-Inc.' => 'Epiphan Systems Inc.', -// 'OnSpec-Electronic-Inc.' => 'OnSpec Electronic, Inc.', -// 'Uni-Trend-Group-Limited' => 'Uni-Trend Group Limited', -// 'IRTOUCHSYSTEMS-Co.-Ltd.' => 'IRTOUCHSYSTEMS Co. Ltd.', -// 'Acer-Inc' => 'Acer, Inc', -// 'Zinwell' => 'Zinwell', -// 'Beholder-International-Ltd.' => 'Beholder International Ltd.', -// 'Ingenic-Semiconductor-Ltd.' => 'Ingenic Semiconductor Ltd.', -// 'Sitecom' => 'Sitecom', -// 'TwinHan-Technology-Co.-Ltd' => 'TwinHan Technology Co., Ltd', -// 'CoreLogic-Inc.' => 'CoreLogic, Inc.', -// 'Unknown-Sony-' => 'Unknown (Sony?)', -// 'Arkmicro-Technologies-Inc.' => 'Arkmicro Technologies Inc.', -// 'IRTOUCHSYSTEMS-Co.-Ltd.' => 'IRTOUCHSYSTEMS Co. Ltd.', -// 'Prototype-product-Vendor-ID' => 'Prototype product Vendor ID', -// 'WiseGroup-Ltd.' => 'WiseGroup, Ltd.', -// '3Com' => '3Com', -// 'Opera1' => 'Opera1', -// 'CME-Central-Music-Co.' => 'CME (Central Music Co.)', -// 'StackFoundry-LLC' => 'StackFoundry LLC', -// 'TBS-Technologies-China' => 'TBS Technologies China', -// 'Edimax-Technology-Co.-Ltd' => 'Edimax Technology Co., Ltd', -// 'Intel-Corp.' => 'Intel Corp.', -// 'Intel-Corp.' => 'Intel Corp.', -// 'VirtualBox' => 'VirtualBox', -// 'Keio' => 'Keio', -// 'EGO-Systems-Inc.' => 'EGO Systems, Inc.', -// 'Sitecom' => 'Sitecom', -// 'TeVii-Technology-Ltd.' => 'TeVii Technology Ltd.', -// 'GeoLab-Ltd' => 'GeoLab, Ltd', -// 'MosChip-Semiconductor' => 'MosChip Semiconductor', -// 'Grandtec' => 'Grandtec', -// 'J.-Westhues' => 'J. Westhues', -// 'AnMo-Electronics-Corporation' => 'AnMo Electronics Corporation', -// 'Asix' => 'Asix', -// '3Com' => '3Com', -// 'Unknown' => 'Unknown', -// 'Keil-Software-Inc.' => 'Keil Software, Inc.', -// 'CACE-Technologies-Inc.' => 'CACE Technologies Inc.', -// 'Ultimarc' => 'Ultimarc', -// 'Xorcom-Ltd.' => 'Xorcom Ltd.', -// 'MakingThings' => 'MakingThings', -// 'eMPIA-Technology-Inc.' => 'eMPIA Technology, Inc.', -// 'KWorld' => 'KWorld', -// 'Hewlett-Packard' => 'Hewlett Packard', -// 'Sunplus-Innovation-Technology-Inc' => 'Sunplus Innovation Technology Inc', -// 'Feiya-Technology-Corp' => 'Feiya Technology Corp.', -// "CLEVO-CO" => "CLEVO CO.", -// ); -// -// return (array_key_exists($string,$names)) ? $names[$string] : $string; -} diff --git a/h-source/Application/Include/vendors.php b/h-source/Application/Include/vendors.php deleted file mode 100644 index 1f2bcc3..0000000 --- a/h-source/Application/Include/vendors.php +++ /dev/null @@ -1,4191 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Vendors -{ - - public static function getName($id,$interface) - { - if (self::check($id,$interface)) - { - $idArray = strcmp($interface,'USB') === 0 ? self::$usbId : self::$pciId; - - $temp = explode(':',$id); - $vendorId = $temp[0]; - return $idArray[$vendorId]; - } - return 'not-known'; - } - - public static function check($id,$interface = 'USB') - { - if (preg_match('/^[a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}$/',$id)) - { - $idArray = strcmp($interface,'USB') === 0 ? self::$usbId : self::$pciId; - - $temp = explode(':',$id); - $vendorId = $temp[0]; - if (array_key_exists($vendorId,$idArray)) - { - return true; - } - } - return false; - } - - public static $pciId = array( - '0010' => 'Allied-Telesis-Inc', - '001a' => 'Ascend-Communications-Inc.', - '001c' => 'PEAK-System-Technik-GmbH', - '0033' => 'Paradyne-corp.', - '003d' => 'Lockheed-Martin-Marietta-Corp', - '0070' => 'Hauppauge-computer-works-Inc.', - '0071' => 'Nebula-Electronics-Ltd.', - '00f5' => 'BFG-Technologies-Inc.', - '0100' => 'Ncipher-Corp-Ltd', - '0123' => 'General-Dynamics', - '0291' => 'Davicom-Semiconductor-Inc.', - '02e0' => 'XFX-Pine-Group-Inc', - '0315' => 'SK-Electronics-Co.-Ltd.', - '0357' => 'TTTech-AG', - '036f' => 'Trigem-Computer-Inc.', - '03f0' => 'Hewlett-Packard', - '0432' => 'SCM-Microsystems-Inc.', - '045e' => 'Microsoft', - '0482' => 'Kyocera', - '04cf' => 'Myson-Century-Inc', - '050d' => 'Belkin', - '058f' => 'Alcor-Micro-Corporation', - '05a9' => 'OmniVision', - '05e3' => 'CyberDoor', - '066f' => 'Sigmatel-Inc.', - '0675' => 'Dynalink', - '069d' => 'Hughes-Network-Systems-HNS', - '0721' => 'Sapphire-Inc.', - '0795' => 'Wired-Inc.', - '07ca' => 'AVerMedia-Technologies-Inc.', - '07d0' => 'ITT-Geospatial-Systems', - '08ff' => 'AuthenTec', - '093a' => 'PixArt-Imaging-Inc.', - '09c1' => 'Arris', - '0a89' => 'BREA-Technologies-Inc', - '0ace' => 'ZyDAS', - '0b0b' => 'Rhino-Equipment-Corp.', - '0b3d' => 'Brontes-Technologies', - '0b49' => 'ASCII-Corporation', - '0ccd' => 'TerraTec-Electronic-GmbH', - '0e11' => 'Compaq-Computer-Corporation', - '0e21' => 'Cowon-Systems-Inc.', - '0e55' => 'HaSoTec-GmbH', - '0f62' => 'Acrox-Technologies-Co.-Ltd.', - '1001' => 'Kolter-Electronic', - '1002' => 'Advanced-Micro-Devices-AMD', - '1003' => 'ULSI-Systems', - '1004' => 'VLSI-Technology-Inc', - '1005' => 'Avance-Logic-Inc.-ALI', - '1006' => 'Reply-Group', - '1007' => 'NetFrame-Systems-Inc', - '1008' => 'EPSON', - '100a' => 'Phoenix-Technologies', - '100b' => 'National-Semiconductor-Corp.', - '100c' => 'Tseng-Labs-Inc', - '100d' => 'AST-Research-Inc', - '100e' => 'Weitek', - '1010' => 'Video-Logic-Ltd.', - '1011' => 'Digital-Equipment-Corporation', - '1012' => 'Micronics-Computers-Inc', - '1013' => 'Cirrus-Logic', - '1014' => 'IBM', - '1015' => 'LSI-Logic-Corp-of-Canada', - '1016' => 'ICL-Personal-Systems', - '1017' => 'SPEA-Software-AG', - '1018' => 'Unisys-Systems', - '1019' => 'Elitegroup-Computer-Systems', - '101a' => 'AT-T-GIS-NCR', - '101b' => 'Vitesse-Semiconductor', - '101c' => 'Western-Digital', - '101e' => 'American-Megatrends-Inc.', - '101f' => 'PictureTel', - '1020' => 'Hitachi-Computer-Products', - '1022' => 'Advanced-Micro-Devices-AMD', - '1023' => 'Trident-Microsystems', - '1024' => 'Zenith-Data-Systems', - '1025' => 'Acer', - '1028' => 'Dell', - '1029' => 'Siemens-Nixdorf-IS', - '102a' => 'LSI-Logic', - '102b' => 'Matrox-Graphics-Inc.', - '102c' => 'Chips-and-Technologies', - '102d' => 'Wyse-Technology-Inc.', - '102e' => 'Olivetti-Advanced-Technology', - '102f' => 'Toshiba-America', - '1030' => 'TMC-Research', - '1031' => 'Miro-Computer-Products-AG', - '1032' => 'Compaq', - '1033' => 'NEC-Corporation', - '1034' => 'Framatome-Connectors-USA-Inc.', - '1035' => 'Comp.---Comm.-Research-Lab', - '1036' => 'Future-Domain-Corp.', - '1037' => 'Hitachi-Micro-Systems', - '1038' => 'AMP-Inc', - '103a' => 'Seiko-Epson-Corporation', - '103b' => 'Tatung-Corp.-Of-America', - '103c' => 'Hewlett-Packard', - '103e' => 'Solliday-Engineering', - '103f' => 'Synopsys-Logic-Modeling-Group', - '1040' => 'Accelgraphics-Inc.', - '1041' => 'Computrend', - '1042' => 'Micron', - '1043' => 'ASUSTeK-Computer-Inc.', - '1044' => 'Adaptec-formerly-DPT', - '1045' => 'OPTi-Inc.', - '1046' => 'IPC-Corporation-Ltd.', - '1047' => 'Genoa-Systems-Corp', - '1048' => 'Elsa-AG', - '1049' => 'Fountain-Technologies-Inc.', - '104b' => 'BusLogic', - '104c' => 'Texas-Instruments', - '104d' => 'Sony-Corporation', - '104e' => 'Oak-Technology-Inc', - '104f' => 'Co-time-Computer-Ltd', - '1050' => 'Winbond-Electronics-Corp', - '1051' => 'Anigma-Inc.', - '1052' => '-Young-Micro-Systems', - '1053' => 'Young-Micro-Systems', - '1054' => 'Hitachi-Ltd', - '1055' => 'Efar-Microsystems', - '1056' => 'ICL', - '105a' => 'Promise-Technology-Inc.', - '105b' => 'Foxconn-International-Inc.', - '105c' => 'Wipro-Infotech-Limited', - '105d' => 'Number-9-Computer-Company', - '105e' => 'Vtech-Computers-Ltd', - '105f' => 'Infotronic-America-Inc', - '1060' => 'United-Microelectronics-UMC', - '1061' => 'I.I.T.', - '1062' => 'Maspar-Computer-Corp', - '1063' => 'Ocean-Office-Automation', - '1064' => 'Alcatel', - '1065' => 'Texas-Microsystems', - '1066' => 'PicoPower-Technology', - '1067' => 'Mitsubishi-Electric', - '1068' => 'Diversified-Technology', - '1069' => 'Mylex-Corporation', - '106a' => 'Aten-Research-Inc', - '106b' => 'Apple-Computer-Inc.', - '106c' => 'Hynix-Semiconductor', - '106d' => 'Sequent-Computer-Systems', - '106e' => 'DFI-Inc', - '106f' => 'City-Gate-Development-Ltd', - '1070' => 'Daewoo-Telecom-Ltd', - '1071' => 'Mitac', - '1072' => 'GIT-Co-Ltd', - '1073' => 'Yamaha-Corporation', - '1074' => 'NexGen-Microsystems', - '1076' => 'Chaintech-Computer-Co.-Ltd', - '1077' => 'QLogic-Corp.', - '1078' => 'Cyrix-Corporation', - '1079' => 'I-Bus', - '107a' => 'NetWorth', - '107b' => 'Gateway-2000', - '107d' => 'LeadTek-Research-Inc.', - '107e' => 'Interphase-Corporation', - '107f' => 'Data-Technology-Corporation', - '1080' => 'Contaq-Microsystems', - '1081' => 'Supermac-Technology', - '1082' => 'EFA-Corporation-of-America', - '1083' => 'Forex-Computer-Corporation', - '1084' => 'Parador', - '1085' => 'Tulip-Computers-Int.B.V.', - '1086' => 'J.-Bond-Computer-Systems', - '1087' => 'Cache-Computer', - '1088' => 'Microcomputer-Systems-M-Son', - '1089' => 'Data-General-Corporation', - '108c' => 'Oakleigh-Systems-Inc.', - '108d' => 'Olicom', - '108f' => 'Systemsoft', - '1091' => 'Intergraph-Corporation', - '1092' => 'Diamond-Multimedia-Systems', - '1093' => 'National-Instruments', - '1096' => 'Alacron', - '1097' => 'Appian-Technology', - '1098' => 'Quantum-Designs-H.K.-Ltd', - '1099' => 'Samsung-Electronics-Co.-Ltd', - '109a' => 'Packard-Bell', - '109b' => 'Gemlight-Computer-Ltd.', - '109c' => 'Megachips-Corporation', - '109d' => 'Zida-Technologies-Ltd.', - '109e' => 'Brooktree-Corporation', - '109f' => 'Trigem-Computer-Inc.', - '10a0' => 'Meidensha-Corporation', - '10a1' => 'Juko-Electronics-Ind.-Co.-Ltd', - '10a2' => 'Quantum-Corporation', - '10a3' => 'Everex-Systems-Inc', - '10a4' => 'Globe-Manufacturing-Sales', - '10a5' => 'Smart-Link-Ltd.', - '10a6' => 'Informtech-Industrial-Ltd.', - '10a7' => 'Benchmarq-Microelectronics', - '10a8' => 'Sierra-Semiconductor', - '10a9' => 'Silicon-Graphics-Inc.', - '10aa' => 'ACC-Microelectronics', - '10ab' => 'Digicom', - '10ac' => 'Honeywell-IAC', - '10ad' => 'Symphony-Labs', - '10ae' => 'Cornerstone-Technology', - '10af' => 'Micro-Computer-Systems-Inc', - '10b0' => 'CardExpert-Technology', - '10b1' => 'Cabletron-Systems-Inc', - '10b2' => 'Raytheon-Company', - '10b3' => 'Databook-Inc', - '10b4' => 'STB-Systems-Inc', - '10b5' => 'PLX-Technology-Inc.', - '10b6' => 'Madge-Networks', - '10b7' => '3Com-Corporation', - '10b9' => 'ALi-Corporation', - '10ba' => 'Mitsubishi-Electric-Corp.', - '10bb' => 'Dapha-Electronics-Corporation', - '10bc' => 'Advanced-Logic-Research', - '10bd' => 'Surecom-Technology', - '10be' => 'Tseng-Labs-International-Co.', - '10bf' => 'Most-Inc', - '10c0' => 'Boca-Research-Inc.', - '10c1' => 'ICM-Co.-Ltd.', - '10c2' => 'Auspex-Systems-Inc.', - '10c3' => 'Samsung-Semiconductors-Inc.', - '10c5' => 'Xerox-Corporation', - '10c6' => 'Rambus-Inc.', - '10c7' => 'Media-Vision', - '10c8' => 'Neomagic-Corporation', - '10c9' => 'Dataexpert-Corporation', - '10ca' => 'Fujitsu-Microelectr.-Inc.', - '10cb' => 'Omron-Corporation', - '10cd' => 'Advanced-System-Products-Inc', - '10ce' => 'Radius', - '10d1' => 'FuturePlus-Systems-Corp.', - '10d2' => 'Molex-Incorporated', - '10d3' => 'Jabil-Circuit-Inc', - '10d4' => 'Hualon-Microelectronics', - '10d5' => 'Autologic-Inc.', - '10d6' => 'Cetia', - '10d7' => 'BCM-Advanced-Research', - '10d8' => 'Advanced-Peripherals-Labs', - '10d9' => 'Macronix-Inc.-MXIC', - '10da' => 'Compaq-IPG-Austin', - '10db' => 'Rohm-LSI-Systems-Inc.', - '10dc' => 'CERN-ECP-EDU', - '10dd' => 'Evans---Sutherland', - '10de' => 'NVIDIA', - '10df' => 'Emulex-Corporation', - '10e1' => 'Tekram-Technology-Co.Ltd.', - '10e2' => 'Aptix-Corporation', - '10e3' => 'Tundra-Semiconductor-Corp.', - '10e4' => 'Tandem-Computers', - '10e5' => 'Micro-Industries-Corporation', - '10e7' => 'Vadem', - '10e8' => 'Applied-Micro-Circuits-Corp.', - '10e9' => 'Alps-Electric-Co.-Ltd.', - '10ea' => 'Integraphics', - '10ec' => 'Realtek', - '10eb' => 'Artists-Graphics', - '10ed' => 'Ascii-Corporation', - '10ee' => 'Xilinx-Corporation', - '10f0' => 'Peritek-Corporation', - '10f1' => 'Tyan-Computer', - '10f2' => 'Achme-Computer-Inc.', - '10f3' => 'Alaris-Inc.', - '10f4' => 'S-MOS-Systems-Inc.', - '10f5' => 'NKK-Corporation', - '10f8' => 'Altos-India-Ltd', - '10f9' => 'PC-Direct', - '10fa' => 'Truevision', - '10fc' => 'I-O-Data-Device-Inc.', - '10fd' => 'Soyo-Computer-Inc', - '10fe' => 'Fast-Multimedia-AG', - '10ff' => 'NCube', - '1100' => 'Jazz-Multimedia', - '1101' => 'Initio-Corporation', - '1102' => 'Creative-Labs', - '1104' => 'RasterOps-Corp.', - '1105' => 'Sigma-Designs-Inc.', - '1106' => 'VIA-Technologies-Inc.', - '1107' => 'Stratus-Computers', - '1108' => 'Proteon-Inc.', - '110a' => 'Siemens-Nixdorf-AG', - '110b' => 'Chromatic-Research-Inc.', - '110c' => 'Mini-Max-Technology-Inc.', - '110d' => 'Znyx-Advanced-Systems', - '110e' => 'CPU-Technology', - '110f' => 'Ross-Technology', - '1110' => 'Powerhouse-Systems', - '1111' => 'Santa-Cruz-Operation', - '1113' => 'Accton-Technology-Corporation', - '1114' => 'Atmel-Corporation', - '1115' => '3D-Labs', - '1116' => 'Data-Translation', - '1117' => 'Datacube-Inc', - '1118' => 'Berg-Electronics', - '111a' => 'Efficient-Networks-Inc', - '111b' => 'Teledyne-Electronic-Systems', - '111c' => 'Tricord-Systems-Inc.', - '111e' => 'Eldec', - '111f' => 'Precision-Digital-Images', - '1120' => 'EMC-Corporation', - '1121' => 'Zilog', - '1122' => 'Multi-tech-Systems-Inc.', - '1123' => 'Excellent-Design-Inc.', - '1124' => 'Leutron-Vision-AG', - '1125' => 'Eurocore', - '1126' => 'Vigra', - '1127' => 'FORE-Systems-Inc', - '1129' => 'Firmworks', - '112b' => 'Linotype---Hell-AG', - '112c' => 'Zenith-Data-Systems', - '112d' => 'Ravicad', - '112f' => 'Dalsa-Inc.', - '1130' => 'Computervision', - '1131' => 'Philips', - '1132' => 'Mitel-Corp.', - '1133' => 'Dialogic-Corporation', - '1134' => 'Mercury-Computer-Systems', - '1135' => 'Fuji-Xerox-Co-Ltd', - '1136' => 'Momentum-Data-Systems', - '1137' => 'Cisco-Systems-Inc', - '1138' => 'Ziatech-Corporation', - '1139' => 'Dynamic-Pictures-Inc', - '113a' => 'FWB-Inc', - '113b' => 'Network-Computing-Devices', - '113c' => 'Cyclone-Microsystems-Inc.', - '113d' => 'Leading-Edge-Products-Inc', - '113f' => 'Equinox-Systems-Inc.', - '1140' => 'Intervoice-Inc', - '1141' => 'Crest-Microsystem-Inc', - '1143' => 'NetPower-Inc', - '1144' => 'Cincinnati-Milacron', - '1145' => 'Workbit-Corporation', - '1146' => 'Force-Computers', - '1147' => 'Interface-Corp', - '1149' => 'Win-System-Corporation', - '114a' => 'VMIC', - '114b' => 'Canopus-Co.-Ltd', - '114c' => 'Annabooks', - '114d' => 'IC-Corporation', - '114e' => 'Nikon-Systems-Inc', - '114f' => 'Digi-International', - '1150' => 'Thinking-Machines-Corp', - '1151' => 'JAE-Electronics-Inc.', - '1152' => 'Megatek', - '1153' => 'Land-Win-Electronic-Corp', - '1154' => 'Melco-Inc', - '1155' => 'Pine-Technology-Ltd', - '1156' => 'Periscope-Engineering', - '1157' => 'Avsys-Corporation', - '1158' => 'Voarx-R---D-Inc', - '1159' => 'Mutech-Corp', - '115a' => 'Harlequin-Ltd', - '115b' => 'Parallax-Graphics', - '115c' => 'Photron-Ltd.', - '115d' => 'Xircom', - '115e' => 'Peer-Protocols-Inc', - '115f' => 'Maxtor-Corporation', - '1160' => 'Megasoft-Inc', - '1161' => 'PFU-Limited', - '1162' => 'OA-Laboratory-Co-Ltd', - '1163' => 'Rendition', - '1165' => 'Imagraph-Corporation', - '1166' => 'Broadcom', - '1167' => 'Mutoh-Industries-Inc', - '1168' => 'Thine-Electronics-Inc', - '116b' => 'Connectware-Inc', - '116d' => 'Martin-Marietta', - '116e' => 'Electronics-for-Imaging', - '116f' => 'Workstation-Technology', - '1170' => 'Inventec-Corporation', - '1171' => 'Loughborough-Sound-Images-Plc', - '1172' => 'Altera-Corporation', - '1173' => 'Adobe-Systems-Inc', - '1174' => 'Bridgeport-Machines', - '1175' => 'Mitron-Computer-Inc.', - '1176' => 'SBE-Incorporated', - '1177' => 'Silicon-Engineering', - '1178' => 'Alfa-Inc.', - '1179' => 'Toshiba-America-Info-Systems', - '117a' => 'A-Trend-Technology', - '117b' => 'L-G-Electronics-Inc.', - '117c' => 'Atto-Technology', - '117d' => 'Becton---Dickinson', - '117e' => 'T-R-Systems', - '117f' => 'Integrated-Circuit-Systems', - '1180' => 'Ricoh-Co-Ltd', - '1181' => 'Telmatics-International', - '1183' => 'Fujikura-Ltd', - '1184' => 'Forks-Inc', - '1185' => 'Dataworld-International-Ltd', - '1186' => 'D-Link', - '1189' => 'Matsushita-Electronics-Co-Ltd', - '118a' => 'Hilevel-Technology', - '118b' => 'Hypertec-Pty-Limited', - '118c' => 'Corollary-Inc', - '118d' => 'BitFlow-Inc', - '118e' => 'Hermstedt-GmbH', - '118f' => 'Green-Logic', - '1190' => 'Tripace', - '1191' => 'Artop-Electronic-Corp', - '1192' => 'Densan-Company-Ltd', - '1193' => 'Zeitnet-Inc.', - '1194' => 'Toucan-Technology', - '1195' => 'Ratoc-System-Inc', - '1196' => 'Hytec-Electronics-Ltd', - '1197' => 'Gage-Applied-Sciences-Inc.', - '1198' => 'Lambda-Systems-Inc', - '1199' => 'Attachmate-Corporation', - '119a' => 'Mind-Share-Inc.', - '119b' => 'Omega-Micro-Inc.', - '119c' => 'Information-Technology-Inst.', - '119d' => 'Bug-Inc.-Sapporo-Japan', - '119e' => 'Fujitsu-Microelectronics-Ltd.', - '119f' => 'Bull-HN-Information-Systems', - '11a0' => 'Convex-Computer-Corporation', - '11a1' => 'Hamamatsu-Photonics-K.K.', - '11a4' => 'Barco-Graphics-NV', - '11a5' => 'Microunity-Systems-Eng.-Inc', - '11a6' => 'Pure-Data-Ltd.', - '11a7' => 'Power-Computing-Corp.', - '11a8' => 'Systech-Corp.', - '11a9' => 'InnoSys-Inc.', - '11aa' => 'Actel', - '11ab' => 'Marvell-Technology-Group-Ltd.', - '11ad' => 'Lite-On-Communications-Inc', - '11ae' => 'Aztech-System-Ltd', - '11af' => 'Avid-Technology-Inc.', - '11b0' => 'V3-Semiconductor-Inc.', - '11b1' => 'Apricot-Computers', - '11b2' => 'Eastman-Kodak', - '11b3' => 'Barr-Systems-Inc.', - '11b5' => 'Radstone-Technology-Plc', - '11b6' => 'United-Video-Corp', - '11b7' => 'Motorola', - '11b8' => 'XPoint-Technologies-Inc', - '11b9' => 'Pathlight-Technology-Inc.', - '11ba' => 'Videotron-Corp', - '11bb' => 'Pyramid-Technology', - '11bc' => 'Network-Peripherals-Inc', - '11bd' => 'Pinnacle-Systems-Inc.', - '11bf' => 'Astrodesign-Inc.', - '11c0' => 'Hewlett-Packard', - '11c2' => 'Sand-Microelectronics', - '11c3' => 'NEC-Corporation', - '11c4' => 'Document-Technologies-Inc', - '11c5' => 'Shiva-Corporation', - '11c6' => 'Dainippon-Screen-Mfg.-Co.-Ltd', - '11c7' => 'D.C.M.-Data-Systems', - '11c9' => 'Magma', - '11ca' => 'LSI-Systems-Inc', - '11cb' => 'Specialix-Research-Ltd.', - '11cd' => 'HAL-Computer-Systems-Inc.', - '11ce' => 'Netaccess', - '11d1' => 'Auravision', - '11d2' => 'Intercom-Inc.', - '11d3' => 'Trancell-Systems-Inc', - '11d4' => 'Analog-Devices', - '11d5' => 'Ikon-Corporation', - '11d6' => 'Tekelec-Telecom', - '11d7' => 'Trenton-Technology-Inc.', - '11d9' => 'TEC-Corporation', - '11da' => 'Novell', - '11db' => 'Sega-Enterprises-Ltd', - '11dc' => 'Questra-Corporation', - '11dd' => 'Crosfield-Electronics-Limited', - '11de' => 'Zoran-Corporation', - '11df' => 'New-Wave-PDG', - '11e0' => 'Cray-Communications-A-S', - '11e1' => 'GEC-Plessey-Semi-Inc.', - '11e3' => 'Quicklogic-Corporation', - '11e4' => 'Second-Wave-Inc', - '11e5' => 'IIX-Consulting', - '11e6' => 'Mitsui-Zosen-System-Research', - '11e9' => 'Highwater-Designs-Ltd.', - '11ea' => 'Elsag-Bailey', - '11eb' => 'Formation-Inc.', - '11ec' => 'Coreco-Inc', - '11ed' => 'Mediamatics', - '11ee' => 'Dome-Imaging-Systems-Inc', - '11ef' => 'Nicolet-Technologies-B.V.', - '11f0' => 'Compu-Shack', - '11f1' => 'Symbios-Logic-Inc', - '11f2' => 'Picture-Tel-Japan-K.K.', - '11f3' => 'Keithley-Metrabyte', - '11f4' => 'Kinetic-Systems-Corporation', - '11f6' => 'Compex', - '11f7' => 'Scientific-Atlanta', - '11f8' => 'PMC-Sierra-Inc.', - '11f9' => 'I-Cube-Inc', - '11fb' => 'Datel-Inc', - '11fc' => 'Silicon-Magic', - '11fd' => 'High-Street-Consultants', - '11fe' => 'Comtrol-Corporation', - '11ff' => 'Scion-Corporation', - '1200' => 'CSS-Corporation', - '1201' => 'Vista-Controls-Corp', - '1202' => 'Network-General-Corp.', - '1205' => 'Array-Corporation', - '1206' => 'Amdahl-Corporation', - '1208' => 'Parsytec-GmbH', - '1209' => 'SCI-Systems-Inc', - '120a' => 'Synaptel', - '120b' => 'Adaptive-Solutions', - '120c' => 'Technical-Corp.', - '120d' => 'Compression-Labs-Inc.', - '120e' => 'Cyclades-Corporation', - '120f' => 'Essential-Communications', - '1210' => 'Hyperparallel-Technologies', - '1211' => 'Braintech-Inc', - '1212' => 'Kingston-Technology-Corp.', - '1215' => 'Interware-Co.-Ltd', - '1216' => 'Purup-Prepress-A-S', - '1217' => 'O2-Micro-Inc.', - '1218' => 'Hybricon-Corp.', - '1219' => 'First-Virtual-Corporation', - '121a' => '3Dfx-Interactive-Inc.', - '121c' => 'Nippon-Texaco.-Ltd', - '121e' => 'CSPI', - '121f' => 'Arcus-Technology-Inc.', - '1220' => 'Ariel-Corporation', - '1221' => 'Contec-Co.-Ltd', - '1222' => 'Ancor-Communications-Inc.', - '1224' => 'Interactive-Images', - '1225' => 'Power-I-O-Inc.', - '1227' => 'Tech-Source', - '1228' => 'Norsk-Elektro-Optikk-A-S', - '1229' => 'Data-Kinesis-Inc.', - '122a' => 'Integrated-Telecom', - '122c' => 'Sican-GmbH', - '122d' => 'Aztech-System-Ltd', - '122e' => 'Xyratex', - '122f' => 'Andrew-Corporation', - '1230' => 'Fishcamp-Engineering', - '1231' => 'Woodward-McCoach-Inc.', - '1232' => 'GPT-Limited', - '1233' => 'Bus-Tech-Inc.', - '1235' => 'Risq-Modular-Systems-Inc.', - '1236' => 'Sigma-Designs-Corporation', - '1237' => 'Alta-Technology-Corporation', - '1238' => 'Adtran', - '1239' => '3DO-Company', - '123a' => 'Visicom-Laboratories-Inc.', - '123b' => 'Seeq-Technology-Inc.', - '123c' => 'Century-Systems-Inc.', - '123d' => 'Engineering-Design-Team-Inc.', - '123e' => 'Simutech-Inc.', - '123f' => 'C-Cube-Microsystems', - '1240' => 'Marathon-Technologies-Corp.', - '1241' => 'DSC-Communications', - '1243' => 'Delphax', - '1245' => 'A.P.D.-S.A.', - '1246' => 'Dipix-Technologies-Inc.', - '1247' => 'Xylon-Research-Inc.', - '1248' => 'Central-Data-Corporation', - '1249' => 'Samsung-Electronics-Co.-Ltd.', - '124a' => 'AEG-Electrocom-GmbH', - '124b' => 'SBS-Greenspring-Modular-I-O', - '124c' => 'Solitron-Technologies-Inc.', - '124d' => 'Stallion-Technologies-Inc.', - '124e' => 'Cylink', - '124f' => 'Infortrend-Technology-Inc.', - '1251' => 'VLSI-Solutions-Oy', - '1253' => 'Guzik-Technical-Enterprises', - '1254' => 'Linear-Systems-Ltd.', - '1255' => 'Optibase-Ltd', - '1256' => 'Perceptive-Solutions-Inc.', - '1257' => 'Vertex-Networks-Inc.', - '1258' => 'Gilbarco-Inc.', - '1259' => 'Allied-Telesyn-International', - '125a' => 'ABB-Power-Systems', - '125b' => 'Asix-Electronics-Corporation', - '125c' => 'Aurora-Technologies-Inc.', - '125d' => 'ESS-Technology', - '125e' => 'Specialvideo-Engineering-SRL', - '125f' => 'Concurrent-Technologies-Inc.', - '1260' => 'Intersil-Corporation', - '1262' => 'ES-Computer-Company-Ltd.', - '1263' => 'Sonic-Solutions', - '1264' => 'Aval-Nagasaki-Corporation', - '1265' => 'Casio-Computer-Co.-Ltd.', - '1266' => 'Microdyne-Corporation', - '1267' => 'S.-A.-Telecommunications', - '1268' => 'Tektronix', - '1269' => 'Thomson-CSF-TTM', - '126a' => 'Lexmark', - '126b' => 'Adax-Inc.', - '126c' => 'Northern-Telecom', - '126d' => 'Splash-Technology-Inc.', - '126f' => 'Silicon-Motion-Inc.', - '1270' => 'Olympus-Optical-Co.-Ltd.', - '1271' => 'GW-Instruments', - '1272' => 'Telematics-International', - '1273' => 'Hughes-Network-Systems', - '1274' => 'Ensoniq', - '1275' => 'Network-Appliance-Corporation', - '1277' => 'Comstream', - '1279' => 'Transmeta-Corporation', - '127a' => 'Rockwell-International', - '127b' => 'Pixera-Corporation', - '127c' => 'Crosspoint-Solutions-Inc.', - '127d' => 'Vela-Research', - '127e' => 'Winnov-L.P.', - '127f' => 'Fujifilm', - '1280' => 'Photoscript-Group-Ltd.', - '1281' => 'Yokogawa-Electric-Corporation', - '1282' => 'Davicom-Semiconductor-Inc.', - '1284' => 'Sahara-Networks-Inc.', - '1285' => 'Platform-Technologies-Inc.', - '1286' => 'Mazet-GmbH', - '1287' => 'M-Pact-Inc.', - '1288' => 'Timestep-Corporation', - '1289' => 'AVC-Technology-Inc.', - '128a' => 'Asante-Technologies-Inc.', - '128b' => 'Transwitch-Corporation', - '128c' => 'Retix-Corporation', - '128d' => 'G2-Networks-Inc.', - '128f' => 'Tateno-Dennou-Inc.', - '1290' => 'Sord-Computer-Corporation', - '1291' => 'NCS-Computer-Italia', - '1292' => 'Tritech-Microelectronics-Inc', - '1293' => 'Media-Reality-Technology', - '1294' => 'Rhetorex-Inc.', - '1295' => 'Imagenation-Corporation', - '1296' => 'Kofax-Image-Products', - '1299' => 'Knowledge-Technology-Lab.', - '129a' => 'VMetro-inc.', - '129b' => 'Image-Access', - '129c' => 'Jaycor', - '129d' => 'Compcore-Multimedia-Inc.', - '129e' => 'Victor-Company-of-Japan-Ltd.', - '129f' => 'OEC-Medical-Systems-Inc.', - '12a0' => 'Allen-Bradley-Company', - '12a1' => 'Simpact-Associates-Inc.', - '12a2' => 'Newgen-Systems-Corporation', - '12a3' => 'Lucent-Technologies', - '12a5' => 'Vision-Dynamics-Ltd.', - '12a6' => 'Scalable-Networks-Inc.', - '12a7' => 'AMO-GmbH', - '12a8' => 'News-Datacom', - '12a9' => 'Xiotech-Corporation', - '12aa' => 'SDL-Communications-Inc.', - '12ac' => 'Measurex-Corporation', - '12ad' => 'Multidata-GmbH', - '12ae' => 'Alteon-Networks-Inc.', - '12af' => 'TDK-USA-Corp', - '12b0' => 'Jorge-Scientific-Corp', - '12b1' => 'GammaLink', - '12b2' => 'General-Signal-Networks', - '12b3' => 'Inter-Face-Co-Ltd', - '12b4' => 'FutureTel-Inc', - '12b5' => 'Granite-Systems-Inc.', - '12b6' => 'Natural-Microsystems', - '12b8' => 'Korg', - '12ba' => 'BittWare-Inc.', - '12bb' => 'Nippon-Unisoft-Corporation', - '12bc' => 'Array-Microsystems', - '12bd' => 'Computerm-Corp.', - '12be' => 'Anchor-Chips-Inc.', - '12bf' => 'Fujifilm-Microdevices', - '12c0' => 'Infimed', - '12c1' => 'GMM-Research-Corp', - '12c2' => 'Mentec-Limited', - '12c3' => 'Holtek-Microelectronics-Inc', - '12c4' => 'Connect-Tech-Inc', - '12c5' => 'Picture-Elements-Incorporated', - '12c6' => 'Mitani-Corporation', - '12c7' => 'Dialogic-Corp', - '12c8' => 'G-Force-Co-Ltd', - '12c9' => 'Gigi-Operations', - '12ca' => 'Integrated-Computing-Engines', - '12cb' => 'Antex-Electronics-Corporation', - '12cd' => 'Aims-Lab', - '12ce' => 'Netspeed-Inc.', - '12cf' => 'Prophet-Systems-Inc.', - '12d0' => 'GDE-Systems-Inc.', - '12d1' => 'PSITech', - '12d3' => 'Vingmed-Sound-A-S', - '12d4' => 'Ulticom-Formerly-DGM-S', - '12d5' => 'Equator-Technologies-Inc', - '12d6' => 'Analogic-Corp', - '12d7' => 'Biotronic-SRL', - '12d8' => 'Pericom-Semiconductor', - '12d9' => 'Aculab-PLC', - '12da' => 'True-Time-Inc.', - '12db' => 'Annapolis-Micro-Systems-Inc', - '12dd' => 'Management-Graphics', - '12de' => 'Rainbow-Technologies', - '12df' => 'SBS-Technologies-Inc', - '12e0' => 'Chase-Research', - '12e1' => 'Nintendo-Co-Ltd', - '12e4' => 'Brooktrout-Technology-Inc', - '12e5' => 'Apex-Semiconductor-Inc', - '12e6' => 'Cirel-Systems', - '12e7' => 'Sunsgroup-Corporation', - '12e8' => 'Crisc-Corp', - '12e9' => 'GE-Spacenet', - '12ea' => 'Zuken', - '12eb' => 'Aureal-Semiconductor', - '12ec' => '3A-International-Inc.', - '12ed' => 'Optivision-Inc.', - '12ee' => 'Orange-Micro', - '12ef' => 'Vienna-Systems', - '12f0' => 'Pentek', - '12f1' => 'Sorenson-Vision-Inc', - '12f2' => 'Gammagraphx-Inc.', - '12f3' => 'Radstone-Technology', - '12f4' => 'Megatel', - '12f5' => 'Forks', - '12f6' => 'Dawson-France', - '12f7' => 'Cognex', - '12f8' => 'Electronic-Design-GmbH', - '12f9' => 'Four-Fold-Ltd', - '12fb' => 'Spectrum-Signal-Processing', - '12fc' => 'Capital-Equipment-Corp', - '12fd' => 'I2S', - '12ff' => 'Lexicon', - '1302' => 'Computer-Sciences-Corp', - '1303' => 'Innovative-Integration', - '1304' => 'Juniper-Networks', - '1305' => 'Netphone-Inc', - '1306' => 'Duet-Technologies', - '1308' => 'Jato-Technologies-Inc.', - '1309' => 'AB-Semiconductor-Ltd', - '130c' => 'Ambex-Technologies-Inc', - '130d' => 'Accelerix-Inc', - '130e' => 'Yamatake-Honeywell-Co.-Ltd', - '130f' => 'Advanet-Inc', - '1310' => 'Gespac', - '1311' => 'Videoserver-Inc', - '1312' => 'Acuity-Imaging-Inc', - '1313' => 'Yaskawa-Electric-Co.', - '1315' => 'Wavesat', - '1316' => 'Teradyne-Inc', - '1317' => 'ADMtek', - '1318' => 'Packet-Engines-Inc.', - '1319' => 'Fortemedia-Inc', - '131a' => 'Finisar-Corp.', - '131d' => 'Sysmic-Inc.', - '131e' => 'Xinex-Networks-Inc', - '131f' => 'Siig-Inc', - '1320' => 'Crypto-AG', - '1321' => 'Arcobel-Graphics-BV', - '1322' => 'MTT-Co.-Ltd', - '1323' => 'Dome-Inc', - '1324' => 'Sphere-Communications', - '1325' => 'Salix-Technologies-Inc', - '1326' => 'Seachange-international', - '1327' => 'Voss-scientific', - '1328' => 'quadrant-international', - '1329' => 'Productivity-Enhancement', - '132a' => 'Microcom-Inc.', - '132b' => 'Broadband-Technologies', - '132c' => 'Micrel-Inc', - '1330' => 'MMC-Networks', - '1331' => 'RadiSys-Corporation', - '1332' => 'Micro-Memory', - '1334' => 'Redcreek-Communications-Inc', - '1335' => 'Videomail-Inc', - '1337' => 'Third-Planet-Publishing', - '1338' => 'BT-Electronics', - '133a' => 'Vtel-Corp', - '133b' => 'Softcom-Microsystems', - '133c' => 'Holontech-Corp', - '133d' => 'SS-Technologies', - '133e' => 'Virtual-Computer-Corp', - '133f' => 'SCM-Microsystems', - '1340' => 'Atalla-Corp', - '1341' => 'Kyoto-Microcomputer-Co', - '1342' => 'Promax-Systems-Inc', - '1343' => 'Phylon-Communications-Inc', - '1345' => 'Arescom-Inc', - '1347' => 'Odetics', - '134a' => 'DTC-Technology-Corp.', - '134b' => 'ARK-Research-Corp.', - '134c' => 'Chori-Joho-System-Co.-Ltd', - '134d' => 'PCTel-Inc', - '134e' => 'CSTI', - '134f' => 'Algo-System-Co-Ltd', - '1350' => 'Systec-Co.-Ltd', - '1351' => 'Sonix-Inc', - '1353' => 'Thales-Idatys', - '1354' => 'Dwave-System-Inc', - '1355' => 'Kratos-Analytical-Ltd', - '1356' => 'The-Logical-Co', - '1359' => 'Prisa-Networks', - '135a' => 'Brain-Boxes', - '135b' => 'Giganet-Inc', - '135c' => 'Quatech-Inc', - '135d' => 'ABB-Network-Partner-AB', - '135e' => 'Sealevel-Systems-Inc', - '135f' => 'I-Data-International-A-S', - '1360' => 'Meinberg-Funkuhren', - '1361' => 'Soliton-Systems-K.K.', - '1362' => 'Fujifacom-Corporation', - '1363' => 'Phoenix-Technology-Ltd', - '1364' => 'ATM-Communications-Inc', - '1365' => 'Hypercope-GmbH', - '1366' => 'Teijin-Seiki-Co.-Ltd', - '1367' => 'Hitachi-Zosen-Corporation', - '1368' => 'Skyware-Corporation', - '1369' => 'Digigram', - '136a' => 'High-Soft-Tech', - '136b' => 'Kawasaki-Steel-Corporation', - '136c' => 'Adtek-System-Science-Co-Ltd', - '136d' => 'Gigalabs-Inc', - '136f' => 'Applied-Magic-Inc', - '1370' => 'ATL-Products', - '1371' => 'CNet-Technology-Inc', - '1373' => 'Silicon-Vision-Inc', - '1374' => 'Silicom-Ltd.', - '1375' => 'Argosystems-Inc', - '1376' => 'LMC', - '1378' => 'Telemann-Co.-Ltd', - '137a' => 'Mark-of-the-Unicorn-Inc', - '137b' => 'PPT-Vision', - '137c' => 'Iwatsu-Electric-Co-Ltd', - '137d' => 'Dynachip-Corporation', - '137f' => 'Japan-Satellite-Systems-Inc', - '1380' => 'Sanritz-Automation-Co-Ltd', - '1381' => 'Brains-Co.-Ltd', - '1383' => 'Controlnet-Inc', - '1385' => 'Netgear', - '1386' => 'Video-Domain-Technologies', - '1387' => 'Systran-Corp', - '1389' => 'Applicom-International', - '138a' => 'Fusion-Micromedia-Corp', - '138b' => 'Tokimec-Inc', - '138c' => 'Silicon-Reality', - '138d' => 'Future-Techno-Designs-pte-Ltd', - '138e' => 'Basler-GmbH', - '138f' => 'Patapsco-Designs-Inc', - '1390' => 'Concept-Development-Inc', - '1391' => 'Development-Concepts-Inc', - '1392' => 'Medialight-Inc', - '1393' => 'Moxa-Technologies-Co-Ltd', - '1394' => 'Level-One-Communications', - '1395' => 'Ambicom-Inc', - '1396' => 'Cipher-Systems-Inc', - '1397' => 'Cologne-Chip-Designs-GmbH', - '1398' => 'Clarion-co.-Ltd', - '1399' => 'Rios-systems-Co-Ltd', - '139a' => 'Alacritech-Inc', - '139c' => 'Quantum-3d-Inc', - '139d' => 'EPL-limited', - '139e' => 'Media4', - '139f' => 'Aethra-s.r.l.', - '13a0' => 'Crystal-Group-Inc', - '13a1' => 'Kawasaki-Heavy-Industries-Ltd', - '13a2' => 'Ositech-Communications-Inc', - '13a3' => 'Hifn-Inc.', - '13a4' => 'Rascom-Inc', - '13a5' => 'Audio-Digital-Imaging-Inc', - '13a6' => 'Videonics-Inc', - '13a7' => 'Teles-AG', - '13a8' => 'Exar-Corp.', - '13aa' => 'Broadband-Networks-Inc', - '13ab' => 'Arcom-Control-Systems-Ltd', - '13ac' => 'Motion-Media-Technology-Ltd', - '13ad' => 'Nexus-Inc', - '13ae' => 'ALD-Technology-Ltd', - '13af' => 'T.Sqware', - '13b0' => 'Maxspeed-Corp', - '13b1' => 'Tamura-corporation', - '13b2' => 'Techno-Chips-Co.-Ltd', - '13b3' => 'Lanart-Corporation', - '13b4' => 'Wellbean-Co-Inc', - '13b5' => 'ARM', - '13b6' => 'Dlog-GmbH', - '13b7' => 'Logic-Devices-Inc', - '13b8' => 'Nokia-Telecommunications-oy', - '13b9' => 'Elecom-Co-Ltd', - '13ba' => 'Oxford-Instruments', - '13bb' => 'Sanyo-Technosound-Co-Ltd', - '13bc' => 'Bitran-Corporation', - '13bd' => 'SHARP', - '13be' => 'Miroku-Jyoho-Service-Co.-Ltd', - '13bf' => 'Sharewave-Inc', - '13c0' => 'Microgate-Corporation', - '13c1' => '3ware-Inc', - '13c3' => 'Janz-Computer-AG', - '13c4' => 'Phase-Metrics', - '13c5' => 'Alphi-Technology-Corp', - '13c6' => 'Condor-Engineering-Inc', - '13c7' => 'Blue-Chip-Technology-Ltd', - '13c8' => 'Apptech-Inc', - '13c9' => 'Eaton-Corporation', - '13ca' => 'Iomega-Corporation', - '13cb' => 'Yano-Electric-Co-Ltd', - '13cc' => 'Metheus-Corporation', - '13ce' => 'Cocom-A-S', - '13cf' => 'Studio-Audio---Video-Ltd', - '13d0' => 'Techsan-Electronics-Co-Ltd', - '13d1' => 'Abocom-Systems-Inc', - '13d2' => 'Shark-Multimedia-Inc', - '13d3' => 'IMC-Networks', - '13d4' => 'Graphics-Microsystems-Inc', - '13d5' => 'Media-100-Inc', - '13d6' => 'K.I.-Technology-Co-Ltd', - '13d8' => 'Phobos-corporation', - '13d9' => 'Apex-PC-Solutions-Inc', - '13da' => 'Intresource-Systems-pte-Ltd', - '13dc' => 'Netboost-Corporation', - '13dd' => 'Multimedia-Bundle-Inc', - '13de' => 'ABB-Robotics-Products-AB', - '13df' => 'E-Tech-Inc', - '13e0' => 'GVC-Corporation', - '13e2' => 'Dynamics-Research-Corporation', - '13e3' => 'Nest-Inc', - '13e4' => 'Calculex-Inc', - '13e5' => 'Telesoft-Design-Ltd', - '13e6' => 'Argosy-research-Inc', - '13e7' => 'NAC-Incorporated', - '13e8' => 'Chip-Express-Corporation', - '13e9' => 'Intraserver-Technology-Inc', - '13ea' => 'Dallas-Semiconductor', - '13eb' => 'Hauppauge-Computer-Works-Inc', - '13ec' => 'Zydacron-Inc', - '13ed' => 'Raytheion-E-Systems', - '13ef' => 'Coppercom-Inc', - '13f0' => 'Sundance-Technology-Inc---IC-Plus-Corp', - '13f1' => 'Oce---Technologies-B.V.', - '13f2' => 'Ford-Microelectronics-Inc', - '13f3' => 'Mcdata-Corporation', - '13f4' => 'Troika-Networks-Inc.', - '13f5' => 'Kansai-Electric-Co.-Ltd', - '13f6' => 'C-Media-Electronics-Inc', - '13f7' => 'Wildfire-Communications', - '13f8' => 'Ad-Lib-Multimedia-Inc', - '13f9' => 'NTT-Advanced-Technology-Corp.', - '13fa' => 'Pentland-Systems-Ltd', - '13fb' => 'Aydin-Corp', - '13fd' => 'Micro-Science-Inc', - '13fe' => 'Advantech-Co.-Ltd', - '13ff' => 'Silicon-Spice-Inc', - '1400' => 'Artx-Inc', - '1401' => 'CR-Systems-A-S', - '1402' => 'Meilhaus-Electronic-GmbH', - '1403' => 'Ascor-Inc', - '1404' => 'Fundamental-Software-Inc', - '1405' => 'Excalibur-Systems-Inc', - '1406' => 'Oce-Printing-Systems-GmbH', - '1407' => 'Lava-Computer-mfg-Inc', - '1408' => 'Aloka-Co.-Ltd', - '1409' => 'Timedia-Technology-Co-Ltd', - '140a' => 'DSP-Research-Inc', - '140c' => 'Elmic-Systems-Inc', - '140d' => 'Matsushita-Electric-Works-Ltd', - '140e' => 'Goepel-Electronic-GmbH', - '140f' => 'Salient-Systems-Corp', - '1410' => 'Midas-lab-Inc', - '1411' => 'Ikos-Systems-Inc', - '1412' => 'VIA-Technologies-Inc.', - '1413' => 'Addonics', - '1414' => 'Microsoft', - '1415' => 'Oxford-Semiconductor-Ltd', - '1416' => 'Multiwave-Innovation-pte-Ltd', - '1417' => 'Convergenet-Technologies-Inc', - '1419' => 'Excel-Switching-Corp', - '141a' => 'Apache-Micro-Peripherals-Inc', - '141b' => 'Zoom-Telephonics-Inc', - '141d' => 'Digitan-Systems-Inc', - '141e' => 'Fanuc-Ltd', - '141f' => 'Visiontech-Ltd', - '1420' => 'Psion-Dacom-plc', - '1421' => 'Ads-Technologies-Inc', - '1422' => 'Ygrec-Systems-Co-Ltd', - '1423' => 'Custom-Technology-Corp.', - '1424' => 'Videoserver-Connections', - '1425' => 'Chelsio-Communications-Inc', - '1426' => 'Storage-Technology-Corp.', - '1427' => 'Better-On-Line-Solutions', - '1428' => 'Edec-Co-Ltd', - '1429' => 'Unex-Technology-Corp.', - '142a' => 'Kingmax-Technology-Inc', - '142b' => 'Radiolan', - '142c' => 'Minton-Optic-Industry-Co-Ltd', - '142d' => 'Pix-stream-Inc', - '142e' => 'Vitec-Multimedia', - '142f' => 'Radicom-Research-Inc', - '1431' => 'Gilat-Satellite-Networks', - '1432' => 'Edimax-Computer-Co.', - '1433' => 'Eltec-Elektronik-GmbH', - '1436' => 'CIS-Technology-Inc', - '1437' => 'Nissin-Inc-Co', - '1438' => 'Atmel-dream', - '143a' => 'Stargate-Solutions-Inc', - '143c' => 'Amlogic-Inc', - '143d' => 'Tamarack-Microelectronics-Inc', - '143e' => 'Jones-Futurex-Inc', - '1440' => 'ALGOL-Corp.', - '1441' => 'AGIE-Ltd', - '1442' => 'Phoenix-Contact-GmbH---Co.', - '1443' => 'Unibrain-S.A.', - '1444' => 'TRW', - '1445' => 'Logical-DO-Ltd', - '1446' => 'Graphin-Co-Ltd', - '1447' => 'AIM-GmBH', - '1448' => 'Alesis-Studio-Electronics', - '1449' => 'TUT-Systems-Inc', - '144a' => 'Adlink-Technology', - '144c' => 'Catalina-Research-Inc', - '144d' => 'Samsung-Electronics-Co-Ltd', - '144e' => 'OLITEC', - '144f' => 'Askey-Computer-Corp.', - '1450' => 'Octave-Communications-Ind.', - '1451' => 'SP3D-Chip-Design-GmBH', - '1453' => 'MYCOM-Inc', - '1454' => 'Altiga-Networks', - '1455' => 'Logic-Plus-Plus-Inc', - '1457' => 'Nuera-Communications-Inc', - '1458' => 'Giga-byte-Technology', - '1459' => 'DOOIN-Electronics', - '145a' => 'Escalate-Networks-Inc', - '145b' => 'PRAIM-SRL', - '145c' => 'Cryptek', - '145d' => 'Gallant-Computer-Inc', - '145e' => 'Aashima-Technology-B.V.', - '145f' => 'Baldor-Electric-Company', - '1460' => 'DYNARC-INC', - '1461' => 'Avermedia-Technologies-Inc', - '1463' => 'Fast-Corporation', - '1465' => 'GN-NETTEST-Telecom-DIV.', - '1466' => 'Designpro-Inc.', - '1467' => 'DIGICOM-SPA', - '1468' => 'AMBIT-Microsystem-Corp.', - '1469' => 'Cleveland-Motion-Controls', - '146a' => 'IFR', - '146b' => 'Parascan-Technologies-Ltd', - '146c' => 'Ruby-Tech-Corp.', - '146d' => 'Tachyon-INC.', - '1470' => 'Bay-Networks', - '1472' => 'DAIKIN-Industries-Ltd', - '1473' => 'ZAPEX-Technologies-Inc', - '1474' => 'Doug-Carson---Associates', - '1475' => 'PICAZO-Communications', - '1476' => 'MORTARA-Instrument-Inc', - '1477' => 'Net-Insight', - '1478' => 'DIATREND-Corporation', - '1479' => 'TORAY-Industries-Inc', - '147a' => 'FORMOSA-Industrial-Computing', - '147b' => 'ABIT-Computer-Corp.', - '147c' => 'AWARE-Inc.', - '147d' => 'Interworks-Computer-Products', - '147f' => 'NIHON-UNISYS-Ltd.', - '1480' => 'SCII-Telecom', - '1481' => 'BIOPAC-Systems-Inc', - '1483' => 'LABWAY-Corporation', - '1484' => 'Logic-Corporation', - '1485' => 'ERMA---Electronic-GmBH', - '1487' => 'MARQUETTE-Medical-Systems', - '1488' => 'KONTRON-Electronik-GmBH', - '1489' => 'KYE-Systems-Corp', - '148a' => 'OPTO', - '148b' => 'INNOMEDIALOGIC-Inc.', - '148c' => 'C.P.-Technology-Co.-Ltd', - '148d' => 'DIGICOM-Systems-Inc.', - '148e' => 'OSI-Plus-Corporation', - '148f' => 'Plant-Equipment-Inc.', - '1490' => 'Stone-Microsystems-PTY-Ltd.', - '1491' => 'ZEAL-Corporation', - '1492' => 'Time-Logic-Corporation', - '1493' => 'MAKER-Communications', - '1494' => 'WINTOP-Technology-Inc.', - '1496' => 'JOYTECH-Computer-Co.-Ltd.', - '1497' => 'SMA-Regelsysteme-GmBH', - '1498' => 'TEWS-Technologies-GmbH', - '1499' => 'EMTEC-CO.-Ltd', - '149a' => 'ANDOR-Technology-Ltd', - '149b' => 'SEIKO-Instruments-Inc', - '149c' => 'OVISLINK-Corp.', - '149d' => 'NEWTEK-Inc', - '149e' => 'Mapletree-Networks-Inc.', - '149f' => 'LECTRON-Co-Ltd', - '14a0' => 'SOFTING-GmBH', - '14a1' => 'Systembase-Co-Ltd', - '14a2' => 'Millennium-Engineering-Inc', - '14a3' => 'Maverick-Networks', - '14a4' => 'GVC-BCM-Advanced-Research', - '14a6' => 'INOVA-Computers-GmBH---Co-KG', - '14a7' => 'MYTHOS-Systems-Inc', - '14a9' => 'HIVERTEC-Inc', - '14aa' => 'Advanced-MOS-Technology-Inc', - '14ab' => 'Mentor-Graphics-Corp.', - '14ac' => 'Novaweb-Technologies-Inc', - '14ad' => 'Time-Space-Radio-AB', - '14ae' => 'CTI-Inc', - '14af' => 'Guillemot-Corporation', - '14b1' => 'Nextcom-K.K.', - '14b2' => 'ENNOVATE-Networks-Inc', - '14b3' => 'XPEED-Inc', - '14b5' => 'Creamware-GmBH', - '14b6' => 'Quantum-Data-Corp.', - '14b7' => 'PROXIM-Inc', - '14b8' => 'Techsoft-Technology-Co-Ltd', - '14b9' => 'Cisco-Systems-Inc.', - '14ba' => 'INTERNIX-Inc.', - '14bb' => 'SEMTECH-Corporation', - '14bc' => 'Globespan-Semiconductor-Inc.', - '14bd' => 'CARDIO-Control-N.V.', - '14be' => 'L3-Communications', - '14bf' => 'SPIDER-Communications-Inc.', - '14c0' => 'COMPAL-Electronics-Inc', - '14c1' => 'MYRICOM-Inc.', - '14c2' => 'DTK-Computer', - '14c3' => 'MEDIATEK-Corp.', - '14c5' => 'Automation-Products-AB', - '14c6' => 'Data-Race-Inc', - '14c8' => 'Turbocomm-Tech.-Inc.', - '14c9' => 'ODIN-Telesystems-Inc', - '14ca' => 'PE-Logic-Corp.', - '14cb' => 'Billionton-Systems-Inc', - '14cc' => 'NAKAYO-Telecommunications-Inc', - '14cd' => 'Universal-Scientific-Ind.', - '14ce' => 'Whistle-Communications', - '14cf' => 'TEK-Microsystems-Inc.', - '14d0' => 'Ericsson-Axe-R---D', - '14d1' => 'Computer-Hi-Tech-Co-Ltd', - '14d2' => 'Titan-Electronics-Inc', - '14d3' => 'CIRTECH-UK-Ltd', - '14d4' => 'Panacom-Technology-Corp', - '14d5' => 'Nitsuko-Corporation', - '14d6' => 'Accusys-Inc', - '14d7' => 'Hirakawa-Hewtech-Corp', - '14d8' => 'HOPF-Elektronik-GmBH', - '14db' => 'AFAVLAB-Technology-Inc', - '14dc' => 'Amplicon-Liveline-Ltd', - '14dd' => 'Boulder-Design-Labs-Inc', - '14df' => 'ASIC-Communications-Corp', - '14e1' => 'INVERTEX', - '14e2' => 'INFOLIBRIA', - '14e3' => 'AMTELCO', - '14e4' => 'Broadcom', - '14e5' => 'Pixelfusion-Ltd', - '14e6' => 'SHINING-Technology-Inc', - '14e7' => '3CX', - '14e8' => 'RAYCER-Inc', - '14e9' => 'GARNETS-System-CO-Ltd', - '14ea' => 'Planex-Communications-Inc', - '14eb' => 'SEIKO-EPSON-Corp', - '14ec' => 'ACQIRIS', - '14ed' => 'DATAKINETICS-Ltd', - '14ee' => 'MASPRO-KENKOH-Corp', - '14ef' => 'CARRY-Computer-ENG.-CO-Ltd', - '14f0' => 'CANON-RESEACH-CENTRE-FRANCE', - '14f1' => 'Conexant-Systems-Inc.', - '14f2' => 'MOBILITY-Electronics', - '14f3' => 'BroadLogic', - '14f5' => 'SOPAC-Ltd', - '14f6' => 'COYOTE-Technologies-LLC', - '14f7' => 'WOLF-Technology-Inc', - '14f8' => 'AUDIOCODES-Inc', - '14f9' => 'AG-COMMUNICATIONS', - '14fa' => 'WANDEL---GOLTERMANN', - '14fb' => 'TRANSAS-MARINE-UK-Ltd', - '14fc' => 'Quadrics-Ltd', - '14fd' => 'JAPAN-Computer-Industry-Inc', - '14fe' => 'ARCHTEK-TELECOM-Corp', - '14ff' => 'TWINHEAD-INTERNATIONAL-Corp', - '1500' => 'DELTA-Electronics-Inc', - '1501' => 'BANKSOFT-CANADA-Ltd', - '1503' => 'KAWASAKI-LSI-USA-Inc', - '1504' => 'KAISER-Electronics', - '1506' => 'CHAMELEON-Systems-Inc', - '150a' => 'FORVUS-RESEARCH-Inc', - '150b' => 'YAMASHITA-Systems-Corp', - '150c' => 'KYOPAL-CO-Ltd', - '150d' => 'WARPSPPED-Inc', - '150e' => 'C-PORT-Corp', - '150f' => 'INTEC-GmbH', - '1510' => 'BEHAVIOR-TECH-Computer-Corp', - '1511' => 'CENTILLIUM-Technology-Corp', - '1512' => 'ROSUN-Technologies-Inc', - '1513' => 'Raychem', - '1514' => 'TFL-LAN-Inc', - '1515' => 'Advent-design', - '1516' => 'MYSON-Technology-Inc', - '1517' => 'ECHOTEK-Corp', - '151a' => 'Globetek', - '151b' => 'COMBOX-Ltd', - '151c' => 'DIGITAL-AUDIO-LABS-Inc', - '151e' => 'MATRIX-Corp', - '151f' => 'TOPIC-SEMICONDUCTOR-Corp', - '1520' => 'CHAPLET-System-Inc', - '1521' => 'BELL-Corp', - '1522' => 'MainPine-Ltd', - '1523' => 'MUSIC-Semiconductors', - '1524' => 'ENE-Technology-Inc', - '1525' => 'IMPACT-Technologies', - '1526' => 'ISS-Inc', - '1527' => 'SOLECTRON', - '1528' => 'ACKSYS', - '1529' => 'AMERICAN-MICROSystems-Inc', - '152a' => 'QUICKTURN-DESIGN-Systems', - '152b' => 'FLYTECH-Technology-CO-Ltd', - '152c' => 'MACRAIGOR-Systems-LLC', - '152d' => 'QUANTA-Computer-Inc', - '152e' => 'MELEC-Inc', - '152f' => 'Philips---CRYPTO', - '1530' => 'ACQIS-Technology-Inc', - '1531' => 'CHRYON-Corp', - '1532' => 'ECHELON-Corp', - '1533' => 'BALTIMORE', - '1534' => 'ROAD-Corp', - '1535' => 'EVERGREEN-Technologies-Inc', - '1536' => 'ACTIS-Computer', - '1537' => 'DATALEX-COMMUNCATIONS', - '1538' => 'ARALION-Inc', - '153a' => 'ONO-SOKKI', - '153b' => 'TERRATEC-Electronic-GmbH', - '153c' => 'ANTAL-Electronic', - '153d' => 'FILANET-Corp', - '153e' => 'TECHWELL-Inc', - '153f' => 'MIPS-Technologies-Inc.', - '1540' => 'PROVIDEO-MULTIMEDIA-Co-Ltd', - '1541' => 'MACHONE-Communications', - '1543' => 'SILICON-Laboratories', - '1544' => 'DCM-DATA-Systems', - '1545' => 'VISIONTEK', - '1546' => 'IOI-Technology-Corp', - '1547' => 'MITUTOYO-Corp', - '1548' => 'JET-PROPULSION-Laboratory', - '154a' => 'MAX-Technologies-Inc', - '154b' => 'COMPUTEX-Co-Ltd', - '154c' => 'VISUAL-Technology-Inc', - '154e' => 'SERVOTEST-Ltd', - '154f' => 'STRATABEAM-Technology', - '1550' => 'OPEN-NETWORK-Co-Ltd', - '1552' => 'RACAL-AIRTECH-Ltd', - '1553' => 'Chicony-Electronics-CO', - '1554' => 'PROLINK-Microsystems-Corp', - '1555' => 'GESYTEC-GmBH', - '1556' => 'PLD-APPLICATIONS', - '1557' => 'MEDIASTAR-Co-Ltd', - '1558' => 'CLEVO-KAPOK-Computer', - '1559' => 'SI-LOGIC-Ltd', - '155a' => 'INNOMEDIA-Inc', - '155b' => 'PROTAC-INTERNATIONAL-Corp', - '155c' => 'Cemax-Icon-Inc', - '155d' => 'Mac-System-Co-Ltd', - '155e' => 'LP-Elektronik-GmbH', - '155f' => 'Perle-Systems-Ltd', - '1561' => 'Viewgraphics-Inc', - '1562' => 'Symbol-Technologies', - '1563' => 'A-Trend-Technology-Co-Ltd', - '1565' => 'Biostar-Microtech-Intl-Corp', - '1566' => 'Ardent-Technologies-Inc', - '1567' => 'Jungsoft', - '1568' => 'DDK-Electronics-Inc', - '1569' => 'Palit-Microsystems-Inc.', - '156a' => 'Avtec-Systems', - '156b' => '2wire-Inc', - '156c' => 'Vidac-Electronics-GmbH', - '156d' => 'Alpha-Top-Corp', - '156e' => 'Alfa-Inc', - '1570' => 'Lecroy-Corp', - '1571' => 'Contemporary-Controls', - '1572' => 'Otis-Elevator-Company', - '1573' => 'Lattice---Vantis', - '1574' => 'Fairchild-Semiconductor', - '1576' => 'Viewcast-COM', - '1578' => 'HITT', - '1579' => 'Dual-Technology-Corp', - '157a' => 'Japan-Elecronics-Ind-Inc', - '157b' => 'Star-Multimedia-Corp', - '157c' => 'Eurosoft-UK', - '157d' => 'Gemflex-Networks', - '157e' => 'Transition-Networks', - '157f' => 'PX-Instruments-Technology-Ltd', - '1580' => 'Primex-Aerospace-Co', - '1581' => 'SEH-Computertechnik-GmbH', - '1582' => 'Cytec-Corp', - '1583' => 'Inet-Technologies-Inc', - '1584' => 'Uniwill-Computer-Corp', - '1585' => 'Logitron', - '1586' => 'Lancast-Inc', - '1587' => 'Konica-Corp', - '1588' => 'Solidum-Systems-Corp', - '1589' => 'Atlantek-Microsystems-Pty-Ltd', - '158a' => 'Digalog-Systems-Inc', - '158b' => 'Allied-Data-Technologies', - '158d' => 'Point-Multimedia-Systems', - '158e' => 'Lara-Technology-Inc', - '158f' => 'Ditect-Coop', - '1590' => '3PAR-Inc.', - '1591' => 'ARN', - '1592' => 'Syba-Tech-Ltd', - '1593' => 'Bops-Inc', - '1594' => 'Netgame-Ltd', - '1595' => 'Diva-Systems-Corp', - '1596' => 'Folsom-Research-Inc', - '1597' => 'Memec-Design-Services', - '1598' => 'Granite-Microsystems', - '1599' => 'Delta-Electronics-Inc', - '159a' => 'General-Instrument', - '159b' => 'Faraday-Technology-Corp', - '159c' => 'Stratus-Computer-Systems', - '159e' => 'A-Max-Technology-Co-Ltd', - '159f' => 'Galea-Network-Security', - '15a0' => 'Compumaster-SRL', - '15a1' => 'Geocast-Network-Systems', - '15a2' => 'Catalyst-Enterprises-Inc', - '15a3' => 'Italtel', - '15a4' => 'X-Net-OY', - '15a5' => 'Toyota-Macs-Inc', - '15a7' => 'SSE-Telecom-Inc', - '15aa' => 'Moreton-Bay', - '15ab' => 'Bluesteel-Networks-Inc', - '15ac' => 'North-Atlantic-Instruments', - '15ad' => 'VMware', - '15ae' => 'Amersham-Pharmacia-Biotech', - '15b0' => 'Zoltrix-International-Ltd', - '15b1' => 'Source-Technology-Inc', - '15b2' => 'Mosaid-Technologies-Inc', - '15b3' => 'Mellanox-Technologies', - '15b4' => 'CCI-TRIAD', - '15b5' => 'Cimetrics-Inc', - '15b6' => 'Texas-Memory-Systems-Inc', - '15b7' => 'Sandisk-Corp', - '15b8' => 'ADDI-DATA-GmbH', - '15ba' => 'Impacct-Technology-Corp', - '15bb' => 'Portwell-Inc', - '15bc' => 'Agilent-Technologies', - '15bd' => 'DFI-Inc', - '15be' => 'Sola-Electronics', - '15bf' => 'High-Tech-Computer-Corp-HTC', - '15c0' => 'BVM-Ltd', - '15c1' => 'Quantel', - '15c2' => 'Newer-Technology-Inc', - '15c3' => 'Taiwan-Mycomp-Co-Ltd', - '15c4' => 'EVSX-Inc', - '15c5' => 'Procomp-Informatics-Ltd', - '15c8' => 'Penta-Media-Co-Ltd', - '15c9' => 'Serome-Technology-Inc', - '15ca' => 'Bitboys-OY', - '15cb' => 'AG-Electronics-Ltd', - '15cc' => 'Hotrail-Inc', - '15cd' => 'Dreamtech-Co-Ltd', - '15ce' => 'Genrad-Inc', - '15cf' => 'Hilscher-GmbH', - '15d1' => 'Infineon-Technologies-AG', - '15d3' => 'NDS-Technologies-Israel-Ltd', - '15d4' => 'Iwill-Corp', - '15d5' => 'Tatung-Co', - '15d6' => 'Entridia-Corp', - '15d7' => 'Rockwell-Collins-Inc', - '15d8' => 'Cybernetics-Technology-Co-Ltd', - '15d9' => 'Super-Micro-Computer-Inc', - '15da' => 'Cyberfirm-Inc', - '15db' => 'Applied-Computing-Systems-Inc', - '15dc' => 'Litronic-Inc', - '15dd' => 'Sigmatel-Inc', - '15de' => 'Malleable-Technologies-Inc', - '15df' => 'Infinilink-Corp', - '15e0' => 'Cacheflow-Inc', - '15e1' => 'Voice-Technologies-Group-Inc', - '15e2' => 'Quicknet-Technologies-Inc', - '15e3' => 'Networth-Technologies-Inc', - '15e4' => 'VSN-Systemen-BV', - '15e5' => 'Valley-technologies-Inc', - '15e6' => 'Agere-Inc', - '15e7' => 'Get-Engineering-Corp', - '15e8' => 'National-Datacomm-Corp', - '15e9' => 'Pacific-Digital-Corp', - '15ea' => 'Tokyo-Denshi-Sekei-K.K.', - '15ec' => 'Beckhoff-GmbH', - '15ed' => 'Macrolink-Inc', - '15ee' => 'In-Win-Development-Inc', - '15ef' => 'Intelligent-Paradigm-Inc', - '15f0' => 'B-Tree-Systems-Inc', - '15f1' => 'Times-N-Systems-Inc', - '15f2' => 'Diagnostic-Instruments-Inc', - '15f3' => 'Digitmedia-Corp', - '15f4' => 'Valuesoft', - '15f5' => 'Power-Micro-Research', - '15f6' => 'Extreme-Packet-Device-Inc', - '15f7' => 'Banctec', - '15f8' => 'Koga-Electronics-Co', - '15f9' => 'Zenith-Electronics-Corp', - '15fa' => 'J.P.-Axzam-Corp', - '15fb' => 'Zilog-Inc', - '15fc' => 'Techsan-Electronics-Co-Ltd', - '15fd' => 'N-CUBED.NET', - '15fe' => 'Kinpo-Electronics-Inc', - '15ff' => 'Fastpoint-Technologies-Inc', - '1600' => 'Northrop-Grumman---Canada-Ltd', - '1601' => 'Tenta-Technology', - '1602' => 'Prosys-tec-Inc', - '1603' => 'Nokia-Wireless-Communications', - '1605' => 'Pairgain-Technologies', - '1606' => 'Europop-AG', - '1609' => 'Scimetric-Instruments-Inc', - '1612' => 'Telesynergy-Research-Inc.', - '1618' => 'Stone-Ridge-Technology', - '1619' => 'FarSite-Communications-Ltd', - '161f' => 'Rioworks', - '1626' => 'TDK-Semiconductor-Corp.', - '1629' => 'Kongsberg-Spacetec-AS', - '1631' => 'Packard-Bell-B.V.', - '163c' => 'Smart-Link-Ltd.', - '1641' => 'MKNet-Corp.', - '165a' => 'Epix-Inc', - '165f' => 'Linux-Media-Labs-LLC', - '1661' => 'Worldspace-Corp.', - '1668' => 'Actiontec-Electronics-Inc', - '1677' => 'Bernecker-+-Rainer', - '1678' => 'NetEffect', - '1679' => 'Tokyo-Electron-Device-Ltd.', - '167b' => 'ZyDAS-Technology-Corp.', - '167e' => 'ONNTO-Corp.', - '1681' => 'Hercules', - '1682' => 'XFX-Pine-Group-Inc.', - '1688' => 'CastleNet-Technology-Inc.', - '168c' => 'Atheros', - '1695' => 'EPoX-Computer-Co.-Ltd.', - '169c' => 'Netcell-Corporation', - '16a5' => 'Tekram-Technology-Co.Ltd.', - '16ab' => 'Global-Sun-Technology-Inc', - '16ae' => 'SafeNet-Inc', - '16af' => 'SparkLAN-Communications-Inc.', - '16b4' => 'Aspex-Semiconductor-Ltd', - '16b8' => 'Sonnet-Technologies-Inc.', - '16be' => 'Creatix-Polymedia-GmbH', - '16c6' => 'Micrel-Kendin', - '16c8' => 'Octasic-Inc.', - '16c9' => 'EONIC-B.V.-The-Netherlands', - '16ca' => 'CENATEK-Inc', - '16cd' => 'Densitron-Technologies', - '16ce' => 'Roland-Corp.', - '16d5' => 'Acromag-Inc.', - '16da' => 'Advantech-Co.-Ltd.', - '16df' => 'PIKA-Technologies-Inc.', - '16e2' => 'Geotest-MTS', - '16e3' => 'European-Space-Agency', - '16e5' => 'Intellon-Corp.', - '16ec' => 'U.S.-Robotics', - '16ed' => 'Sycron-N.-V.', - '16f3' => 'Jetway-Information-Co.-Ltd.', - '16f4' => 'Vweb-Corp', - '16f6' => 'VideoTele.com-Inc.', - '1705' => 'Digital-First-Inc.', - '170b' => 'NetOctave', - '170c' => 'YottaYotta-Inc.', - '1719' => 'EZChip-Technologies', - '172a' => 'Accelerated-Encryption', - '1734' => 'Fujitsu-Technology-Solutions', - '1735' => 'Aten-International-Co.-Ltd.', - '1737' => 'Linksys', - '173b' => 'Altima-nee-Broadcom', - '1743' => 'Peppercon-AG', - '1745' => 'ViXS-Systems-Inc.', - '1749' => 'RLX-Technologies', - '174b' => 'PC-Partner-Limited', - '174d' => 'WellX-Telecom-SA', - '175c' => 'AudioScience-Inc', - '175e' => 'Sanera-Systems-Inc.', - '1760' => 'TEDIA-spol.-s-r.-o.', - '1771' => 'InnoVISION-Multimedia-Ltd.', - '177d' => 'Cavium-Networks', - '1789' => 'Ennyah-Technologies-Corp.', - '1797' => 'Techwell-Inc.', - '1799' => 'Belkin', - '179a' => 'id-Quantique', - '179c' => 'Data-Patterns', - '17a0' => 'Genesys-Logic-Inc', - '17aa' => 'Lenovo', - '17ab' => 'Phillips-Components', - '17b3' => 'Hawking-Technologies', - '17b4' => 'Indra-Networks-Inc.', - '17c0' => 'Wistron-Corp.', - '17c2' => 'Newisys-Inc.', - '17cb' => 'Airgo-Networks-Inc', - '17cc' => 'NetChip-Technology-Inc', - '17cf' => 'Z-Com-Inc.', - '17d3' => 'Areca-Technology-Corp.', - '17db' => 'Cray-Inc', - '17de' => 'KWorld-Computer-Co.-Ltd.', - '17e4' => 'Sectra-AB', - '17e6' => 'Entropic-Communications-Inc.', - '17ee' => 'Connect-Components-Ltd', - '17f2' => 'Albatron-Corp.', - '17f3' => 'RDC-Semiconductor-Inc.', - '17f7' => 'Topdek-Semiconductor-Inc.', - '17fe' => 'InProComm-Inc.', - '17ff' => 'Benq-Corporation', - '1803' => 'ProdaSafe-GmbH', - '1805' => 'Euresys-S.A.', - '1809' => 'Lumanate-Inc.', - '1813' => 'Ambient-Technologies-Inc', - '1814' => 'RaLink', - '1815' => 'Devolo-AG', - '1820' => 'InfiniCon-Systems-Inc.', - '1822' => 'Twinhan-Technology-Co.-Ltd', - '182d' => 'SiteCom-Europe-BV', - '182e' => 'Raza-Microelectronics-Inc.', - '1830' => 'Credence-Systems-Corporation', - '183b' => 'MikroM-GmbH', - '1849' => 'ASRock-Incorporation', - '184a' => 'Thales-Computers', - '1851' => 'Microtune-Inc.', - '1852' => 'Anritsu-Corp.', - '1854' => 'LG-Electronics-Inc.', - '185b' => 'Compro-Technology-Inc.', - '185f' => 'Wistron-NeWeb-Corp.', - '1864' => 'SilverBack', - '1867' => 'Topspin-Communications', - '186c' => 'Humusoft-s.r.o.', - '186f' => 'WiNRADiO-Communications', - '1876' => 'L-3-Communications', - '1885' => 'Avvida-Systems-Inc.', - '1888' => 'Varisys-Ltd', - '188a' => 'Ample-Communications-Inc', - '1890' => 'Egenera-Inc.', - '1894' => 'KNC-One', - '1897' => 'AMtek', - '18a1' => 'Astute-Networks-Inc.', - '18a2' => 'Stretch-Inc.', - '18a3' => 'AT-T', - '18ac' => 'DViCO-Corporation', - '18b8' => 'Ammasso', - '18bc' => 'Info-Tek-Corp.', - '18c8' => 'Cray-Inc Nee-Octigabay-System', - '18c9' => 'ARVOO-Engineering-BV', - '18d2' => 'Sitecom', - '18d8' => 'Dialogue-Technology-Corp.', - '18dd' => 'Artimi-Inc', - '18e6' => 'MPL-AG', - '18ec' => 'Cesnet-z.s.p.o.', - '18ee' => 'Chenming-Mold-Ind.-Corp.', - '18f1' => 'Spectrum-GmbH', - '18f4' => 'Napatech-A-S', - '18f6' => 'NextIO', - '18f7' => 'Commtech-Inc.', - '18fb' => 'Resilience-Corporation', - '1905' => 'Micronas-USA-Inc.', - '1912' => 'Renesas-Technology-Corp.', - '1919' => 'Soltek-Computer-Inc.', - '1923' => 'Sangoma-Technologies-Corp.', - '1924' => 'Solarflare-Communications', - '192e' => 'TransDimension', - '1931' => 'Option-N.V.', - '1932' => 'DiBcom', - '193c' => 'MAXIM-Integrated-Products', - '193f' => 'Comtech-AHA-Corp.', - '1942' => 'ClearSpeed-Technology-plc', - '1947' => 'C-guys-Inc.', - '1948' => 'Enterasys-Networks', - '194a' => 'DapTechnology-B.V.', - '1954' => 'Curtis-Inc.', - '1957' => 'Freescale-Semiconductor-Inc', - '1958' => 'Faster-Technology-LLC.', - '1959' => 'PA-Semi-Inc', - '1966' => 'Orad-Hi-Tec-Systems', - '1969' => 'Atheros', - '196a' => 'Sensory-Networks-Inc.', - '196d' => 'Club-3D-BV', - '1971' => 'AGEIA-Technologies-Inc.', - '1977' => 'Parsec', - '197b' => 'JMicron-Technology-Corp.', - '1989' => 'Montilio-Inc.', - '198a' => 'Nallatech-Ltd.', - '199a' => 'Pulse-LINK-Inc.', - '199d' => 'Xsigo-Systems', - '199f' => 'Auvitek', - '19a8' => 'DAQDATA-GmbH', - '19ac' => 'Kasten-Chase-Applied-Research', - '19ae' => 'Progeny-Systems-Corporation', - '19c1' => 'Exegy-Inc.', - '19d4' => 'Quixant-Limited', - '19de' => 'Pico-Computing', - '19e2' => 'Vector-Informatik-GmbH', - '19e3' => 'DDRdrive-LLC', - '19ee' => 'Netronome-Systems-Inc.', - '1a03' => 'ASPEED-Technology-Inc.', - '1a07' => 'Kvaser-AB', - '1a08' => 'Sierra-semiconductor', - '1a0e' => 'DekTec-Digital-Video-B.V.', - '1a17' => 'Force10-Networks-Inc.', - '1a1d' => 'GFaI-e.V.', - '1a1e' => '3Leaf-Systems-Inc.', - '1a22' => 'Ambric-Inc.', - '1a29' => 'Fortinet-Inc.', - '1a2b' => 'Ascom-AG', - '1a3b' => 'AzureWave', - '1a51' => 'Hectronic-AB', - '1a56' => 'Bigfoot-Networks-Inc.', - '1a57' => 'Highly-Reliable-Systems', - '1a58' => 'Razer-USA-Ltd.', - '1a5d' => 'Celoxica', - '1a5e' => 'Aprius-Inc.', - '1a5f' => 'System-TALKS-Inc.', - '1a68' => 'VirtenSys-Limited', - '1a71' => 'XenSource-Inc.', - '1a73' => 'Violin-Memory-Inc', - '1a76' => 'Wavesat', - '1a77' => 'Lightfleet-Corporation', - '1a78' => 'Virident-Systems-Inc.', - '1a84' => 'Commex-Technologies', - '1a88' => 'MEN-Mikro-Elektronik', - '1a8c' => 'Verigy-Pte.-Ltd.', - '1a8e' => 'DRS-Technologies', - '1aa8' => 'Ciprico-Inc.', - '1aae' => 'Global-Velocity-Inc.', - '1ab6' => 'CalDigit-Inc.', - '1ab9' => 'Espia-Srl', - '1ad7' => 'Spectracom-Corporation', - '1ade' => 'Spin-Master-Ltd.', - '1ae0' => 'Google-Inc.', - '1ae8' => 'Silicon-Software-GmbH', - '1aec' => 'Wolfson-Microelectronics', - '1aed' => 'Fusion-io', - '1aee' => 'Caustic-Graphics-Inc.', - '1af5' => 'Netezza-Corp.', - '1afa' => 'J---W-Electronics-Co.-Ltd.', - '1b03' => 'Magnum-Semiconductor-Inc', - '1b13' => 'Jaton-Corp', - '1b1a' => 'K-F-Computing-Research-Co.', - '1b36' => 'Red-Hat-Inc.', - '1b3a' => 'Westar-Display-Technologies', - '1b3e' => 'Teradata-Corp.', - '1b4b' => 'Marvell-Technology-Group-Ltd.', - '1b55' => 'NetUP-Inc.', - '1b73' => 'Fresco-Logic', - '1bad' => 'ReFLEX-CES', - '1bb3' => 'Bluecherry', - '1bf4' => 'VTI-Instruments-Corporation', - '1c1c' => 'Symphony', - '1d44' => 'DPT', - '1de1' => 'Tekram-Technology-Co.Ltd.', - '1fc9' => 'Tehuti-Networks-Ltd.', - '1fce' => 'Cognio-Inc.', - '1fd4' => 'SUNIX-Co.-Ltd.', - '2000' => 'Smart-Link-Ltd.', - '2001' => 'Temporal-Research-Ltd', - '2003' => 'Smart-Link-Ltd.', - '2004' => 'Smart-Link-Ltd.', - '2116' => 'ZyDAS-Technology-Corp.', - '21c3' => '21st-Century-Computer-Corp.', - '2348' => 'Racore', - '2646' => 'Kingston-Technologies', - '270b' => 'Xantel-Corporation', - '270f' => 'Chaintech-Computer-Co.-Ltd', - '2711' => 'AVID-Technology-Inc.', - '29b4' => '82q35-Express-MEI-Controller', - '2a15' => '3D-Vision---', - '3000' => 'Hansol-Electronics-Inc.', - '3142' => 'Post-Impression-Systems.', - '3388' => 'Hint-Corp', - '3411' => 'Quantum-Designs-H.K.-Inc', - '3442' => 'Bihl+Wiedemann-GmbH', - '3475' => 'Arastra-Inc.', - '3513' => 'ARCOM-Control-Systems-Ltd', - '3842' => 'eVga.com.-Corp.', - '38ef' => '4Links', - '3d3d' => '3DLabs', - '4005' => 'Avance-Logic-Inc.', - '4033' => 'Addtron-Technology-Co-Inc.', - '4040' => 'NetXen-Incorporated', - '4143' => 'Digital-Equipment-Corp', - '4144' => 'Alpha-Data', - '4150' => 'ONA-Electroerosion', - '415a' => 'Auzentech-Inc.', - '416c' => 'Aladdin-Knowledge-Systems', - '434e' => 'CAST-Navigation-LLC', - '4444' => 'Internext-Compression-Inc', - '4468' => 'Bridgeport-machines', - '4594' => 'Cogetec-Informatique-Inc', - '45fb' => 'Baldor-Electric-Company', - '4680' => 'Umax-Computer-Corp', - '4916' => 'RedCreek-Communications-Inc', - '4943' => 'Growth-Networks', - '494f' => 'ACCES-I-O-Products-Inc.', - '4978' => 'Axil-Computer-Inc', - '4a14' => 'NetVin', - '4b10' => 'Buslogic-Inc.', - '4c48' => 'LUNG-HWA-Electronics', - '4c53' => 'SBS-Technologies', - '4ca1' => 'Seanix-Technology-Inc', - '4d51' => 'MediaQ-Inc.', - '4d54' => 'Microtechnica-Co-Ltd', - '4d56' => 'MATRIX-VISION-GmbH', - '4ddc' => 'ILC-Data-Device-Corp', - '5045' => 'University-of-Toronto', - '5046' => 'GemTek-Technology-Corporation', - '5053' => 'Voyetra-Technologies', - '50b2' => 'TerraTec-Electronic-GmbH', - '5136' => 'S-S-Technologies', - '5143' => 'Qualcomm-Inc', - '5145' => 'Ensoniq-Old', - '5168' => 'Animation-Technologies-Inc.', - '5301' => 'Alliance-Semiconductor-Corp.', - '5333' => 'S3-Inc.', - '5431' => 'AuzenTech-Inc.', - '544c' => 'Teralogic-Inc', - '5455' => 'Technische-University-Berlin', - '5456' => 'GoTView', - '5519' => 'Cnet-Technologies-Inc.', - '5544' => 'Dunord-Technologies', - '5555' => 'Genroco-Inc', - '5646' => 'Vector-Fabrics-BV', - '5654' => 'VoiceTronix-Pty-Ltd', - '5700' => 'Netpower', - '584d' => 'AuzenTech-Co.-Ltd.', - '5851' => 'Exacq-Technologies', - '5853' => 'XenSource-Inc.', - '5ace' => 'Beholder-International-Ltd.', - '631c' => 'SmartInfra-Ltd', - '6356' => 'UltraStor', - '6409' => 'Logitec-Corp.', - '6549' => 'Teradici-Corp.', - '6900' => 'Red-Hat-Inc. nee-Qumranet', - '7063' => 'pcHDTV', - '7284' => 'HT-OMEGA-Inc.', - '7604' => 'O.N.-Electronic-Co-Ltd.', - '7bde' => 'MIDAC-Corporation', - '7fed' => 'PowerTV', - '8008' => 'Quancom-Electronic-GmbH', - '8086' => 'Intel', - '80ee' => 'InnoTek-Systemberatung-GmbH', - '8322' => 'Sodick-America-Corp.', - '8384' => 'SigmaTel', - '8401' => 'TRENDware-International-Inc.', - '8686' => 'ScaleMP', - '8800' => 'Trigem-Computer-Inc.', - '8866' => 'T-Square-Design-Inc.', - '8888' => 'Silicon-Magic', - '8912' => 'TRX', - '8e0e' => 'Computone-Corporation', - '8e2e' => 'KTI', - '9004' => 'Adaptec', - '9005' => 'Adaptec', - '907f' => 'Atronics', - '919a' => 'Gigapixel-Corp', - '9412' => 'Holtek', - '9699' => 'Omni-Media-Technology-Inc', - '9710' => 'NetMos-Technology', - '9902' => 'Stargen-Inc.', - 'a0a0' => 'AOPEN-Inc.', - 'a0f1' => 'UNISYS-Corporation', - 'a200' => 'NEC-Corporation', - 'a259' => 'Hewlett-Packard', - 'a25b' => 'Hewlett-Packard', - 'a304' => 'Sony', - 'a727' => '3Com-Corporation', - 'aa42' => 'Scitex-Digital-Video', - 'aa55' => 'Ncomputing-X300-PCI-Engine', - 'aaaa' => 'Adnaco-Technology-Inc.', - 'abcd' => 'Vadatech-Inc.', - 'ac3d' => 'Actuality-Systems', - 'ad00' => 'Alta-Data-Technologies-LLC', - 'b1b3' => 'Shiva-Europe-Limited', - 'bdbd' => 'Blackmagic-Design', - 'c001' => 'TSI-Telsys', - 'c0a9' => 'Micron-Crucial-Technology', - 'c0de' => 'Motorola', - 'c0fe' => 'Motion-Engineering-Inc.', - 'ca50' => 'Varian-Australia-Pty-Ltd', - 'cace' => 'CACE-Technologies-Inc.', - 'cafe' => 'Chrysalis-ITS', - 'cccc' => 'Catapult-Communications', - 'cddd' => 'Tyzx-Inc.', - 'ceba' => 'KEBA-AG', - 'd161' => 'Digium-Inc.', - 'd4d4' => 'Dy4-Systems-Inc', - 'd531' => 'I+ME-ACTIA-GmbH', - 'd84d' => 'Exsys', - 'db10' => 'Diablo-Technologies', - 'dead' => 'Indigita-Corporation', - 'deaf' => 'Middle-Digital-Inc.', - 'deda' => 'SoftHard-Technology-Ltd.', - 'e000' => 'Winbond', - 'e159' => 'Tiger-Jet-Network-Inc.', - 'e4bf' => 'EKF-Elektronik-GmbH', - 'e55e' => 'Essence-Technology-Inc.', - 'ea01' => 'Eagle-Technology', - 'eabb' => 'Aashima-Technology-B.V.', - 'ec80' => 'Belkin-Corporation', - 'edd8' => 'ARK-Logic-Inc', - 'f1d0' => 'AJA-Video', - 'f5f5' => 'F5-Networks-Inc.', - 'fa57' => 'Interagon-AS', - 'fab7' => 'Fabric7-Systems-Inc.', - 'febd' => 'Ultraview-Corp.', - 'feda' => 'Broadcom', - 'fede' => 'Fedetec-Inc.', - 'fffd' => 'XenSource-Inc.', - '1039' => 'Silicon-Integrated-Systems', - 'A259' => 'Hewlett-Packard', - ); - - public static $usbId = array( - '0001' => 'Frys-Electronics', - '0002' => 'Ingram', - '0003' => 'Club-Mac', - '0004' => 'Nebraska-Furniture-Mart', - '0053' => 'Planex', - '0079' => 'DragonRise-Inc.', - '0105' => 'Trust-International-B.V.', - '0145' => 'Unknown', - '0154' => 'LW154-Wireless-150N-Adapter', - '0218' => 'Hangzhou-Worlde', - '02ad' => 'HUMAX-Co.-Ltd.', - '0300' => 'MM300-eBook-Reader', - '0324' => 'OCZ-Technology-Inc', - '0325' => 'OCZ-Technology-Inc', - '0386' => 'LTS', - '03e8' => 'EndPoints-Inc.', - '03e9' => 'Thesys-Microelectronics', - '03ea' => 'Data-Broadcasting-Corp.', - '03eb' => 'Atmel-Corp.', - '03ec' => 'Iwatsu-America-Inc.', - '03ed' => 'Mitel-Corp.', - '03ee' => 'Mitsumi', - '03f0' => 'Hewlett-Packard', - '03f1' => 'Genoa-Technology', - '03f2' => 'Oak-Technology-Inc.', - '03f3' => 'Adaptec-Inc.', - '03f4' => 'Diebold-Inc.', - '03f5' => 'Siemens-Electromechanical', - '03f9' => 'KeyTronic-Corp.', - '03fb' => 'OPTi-Inc.', - '03fc' => 'Elitegroup-Computer-Systems', - '03fd' => 'Xilinx-Inc.', - '03fe' => 'Farallon-Comunications', - '0400' => 'National-Semiconductor-Corp.', - '0401' => 'National-Registry-Inc.', - '0402' => 'ALi-Corp.', - '0404' => 'NCR-Corp.', - '0405' => 'Synopsys-Inc.', - '0406' => 'Fujitsu-ICL-Computers', - '0408' => 'Quanta-Computer-Inc.', - '0409' => 'NEC-Corp.', - '040a' => 'Kodak-Co.', - '040b' => 'Weltrend-Semiconductor', - '040c' => 'VTech-Computers-Ltd', - '040d' => 'VIA-Technologies-Inc.', - '040e' => 'MCCI', - '040f' => 'Echo-Speech-Corp.', - '0411' => 'BUFFALO-INC---formerly-MelCo---Inc--', - '0412' => 'Award-Software-International', - '0413' => 'Leadtek-Research-Inc.', - '0414' => 'Giga-Byte-Technology-Co.-Ltd', - '0416' => 'Winbond-Electronics-Corp.', - '0417' => 'Symbios-Logic', - '0418' => 'AST-Research', - '041a' => 'Phoenix-Technologies-Ltd', - '041b' => 'dTV', - '041d' => 'S3-Inc.', - '041e' => 'Creative-Technology-Ltd', - '041f' => 'LCS-Telegraphics', - '0420' => 'Chips-and-Technologies', - '0421' => 'Nokia-Mobile-Phones', - '0422' => 'ADI-Systems-Inc.', - '0424' => 'Standard-Microsystems-Corp.', - '0429' => 'Cirrus-Logic', - '042a' => 'Ericsson-Austrian-AG', - '042b' => 'Intel', - '042d' => 'Micronics', - '042e' => 'Acer', - '042f' => 'Molex-Inc.', - '0430' => 'Sun-Microsystems-Inc.', - '0431' => 'Itac-Systems-Inc.', - '0432' => 'Unisys-Corp.', - '0433' => 'Alps-Electric-Inc.', - '0435' => 'Hyundai-Electronics-America', - '0436' => 'Taugagreining-HF', - '0437' => 'Framatome-Connectors-USA', - '0438' => 'Advanced-Micro-Devices-Inc.', - '0439' => 'Voice-Technologies-Group', - '043d' => 'Lexmark-International-Inc.', - '043e' => 'LG-Electronics-USA-Inc.', - '043f' => 'RadiSys-Corp.', - '0440' => 'Eizo-Nanao-Corp.', - '0441' => 'Winbond-Systems-Lab.', - '0442' => 'Ericsson-Inc.', - '0443' => 'Gateway-Inc.', - '0445' => 'Lucent-Technologies-Inc.', - '0446' => 'NMB-Technologies-Corp.', - '0447' => 'Momentum-Microsystems', - '044a' => 'Shamrock-Tech.-Co.-Ltd', - '044b' => 'WSI', - '044c' => 'CCL-ITRI', - '044d' => 'Siemens-Nixdorf-AG', - '044e' => 'Alps-Electric-Co.-Ltd', - '044f' => 'ThrustMaster-Inc.', - '0450' => 'DFI-Inc.', - '0451' => 'Texas-Instruments-Inc.', - '0453' => 'CMD-Technology', - '0454' => 'Vobis-Microcomputer-AG', - '0456' => 'Analog-Devices-Inc.', - '0457' => 'Silicon-Integrated-Systems', - '0459' => 'Adobe-Systems-Inc.', - '045a' => 'SONICblue-Inc.', - '045b' => 'Hitachi-Ltd', - '045d' => 'Nortel-Networks-Ltd', - '045e' => 'Microsoft', - '0460' => 'Ace-Cad-Enterprise-Co.-Ltd', - '0461' => 'Primax-Electronics-Ltd', - '0463' => 'MGE-UPS-Systems', - '0464' => 'AMP-Tycoelectronics-Corp.', - '0467' => 'AT-T-Paradyne', - '0468' => 'Wieson-Technologies-Co.-Ltd', - '046a' => 'Cherry-GmbH', - '046b' => 'American-Megatrends-Inc.', - '046d' => 'Logitech', - '046e' => 'Behavior-Tech.-Computer-Corp.', - '046f' => 'Crystal-Semiconductor', - '0471' => 'Philips-or-NXP', - '0472' => 'Chicony-Electronics-CO', - '0474' => 'Sanyo-Electric-Co.-Ltd', - '0476' => 'AESP', - '0477' => 'Seagate-Technology-Inc.', - '0478' => 'Connectix-Corp.', - '047a' => 'Semtech-Corp.', - '047b' => 'Silitek-Corp.', - '047c' => 'Dell-Computer-Corp.', - '047d' => 'Kensington', - '047e' => 'Agere-Systems-Inc.-Lucent', - '047f' => 'Plantronics-Inc.', - '0481' => 'Zenith-Data-Systems', - '0482' => 'Kyocera-Corp.', - '0483' => 'SGS-Thomson-Microelectronics', - '0484' => 'Specialix', - '0485' => 'Nokia-Monitors', - '0486' => 'ASUS-Computers-Inc.', - '0487' => 'Stewart-Connector', - '0488' => 'Cirque-Corp.', - '0489' => 'Foxconn---Hon-Hai', - '048a' => 'S-MOS-Systems-Inc.', - '048c' => 'Alps-Electric-Ireland-Ltd', - '048f' => 'Eicon-Tech.', - '0490' => 'United-Microelectronics-Corp.', - '0491' => 'Capetronic', - '0492' => 'Samsung-SemiConductor-Inc.', - '0493' => 'MAG-Technology-Co.-Ltd', - '0495' => 'ESS-Technology-Inc.', - '0496' => 'Micron-Electronics', - '0497' => 'Smile-International', - '0498' => 'Capetronic-Kaohsiung-Corp.', - '0499' => 'Yamaha-Corp.', - '049a' => 'Gandalf-Technologies-Ltd', - '049b' => 'Curtis-Computer-Products', - '049c' => 'Acer', - '049d' => 'VLSI-Technology', - '049f' => 'Compaq-Computer-Corp.', - '04a0' => 'Digital-Equipment-Corp.', - '04a1' => 'SystemSoft-Corp.', - '04a2' => 'FirePower-Systems', - '04a3' => 'Trident-Microsystems-Inc.', - '04a4' => 'Hitachi-Ltd', - '04a6' => 'Nokia-Display-Products', - '04a7' => 'Visioneer', - '04a8' => 'Multivideo-Labs-Inc.', - '04a9' => 'Canon-Inc.', - '04aa' => 'DaeWoo-Telecom-Ltd', - '04ab' => 'Chromatic-Research', - '04ac' => 'Micro-Audiometrics-Corp.', - '04ad' => 'Dooin-Electronics', - '04af' => 'Winnov-L.P.', - '04b0' => 'Nikon-Corp.', - '04b1' => 'Pan-International', - '04b3' => 'IBM-Corp.', - '04b4' => 'Cypress-Semiconductor-Corp.', - '04b5' => 'ROHM-LSI-Systems-USA-LLC', - '04b6' => 'Hint-Corp.', - '04b7' => 'Compal-Electronics-Inc.', - '04b8' => 'Seiko-Epson-Corp.', - '04b9' => 'Rainbow-Technologies-Inc.', - '04ba' => 'Toucan-Systems-Ltd', - '04bb' => 'I-O-Data-Device-Inc.', - '04be' => 'Telia-Research-AB', - '04bf' => 'TDK-Corp.', - '04c1' => 'U.S.-Robotics-3Com', - '04c3' => 'Maxi-Switch-Inc.', - '04c5' => 'Fujitsu-Ltd', - '04c7' => 'Micro-Macro-Technologies', - '04c8' => 'Konica-Corp.', - '04ca' => 'Lite-On-Technology-Corp.', - '04cb' => 'Fuji-Photo-Film-Co.-Ltd', - '04cc' => 'ST-Ericsson', - '04cd' => 'Tatung-Co.-Of-America', - '04ce' => 'ScanLogic-Corp.', - '04cf' => 'Myson-Century-Inc.', - '04d0' => 'Digi-International', - '04d1' => 'ITT-Canon', - '04d2' => 'Altec-Lansing-Technologies', - '04d3' => 'VidUS-Inc.', - '04d4' => 'LSI-Logic-Inc.', - '04d5' => 'Forte-Technologies-Inc.', - '04d6' => 'Mentor-Graphics', - '04d7' => 'Oki-Semiconductor', - '04d8' => 'Microchip-Technology-Inc.', - '04d9' => 'Holtek-Semiconductor-Inc.', - '04da' => 'Panasonic', - '04db' => 'Hypertec-Pty-Ltd', - '04dc' => 'Huan-Hsin-Holdings-Ltd', - '04dd' => 'SHARP', - '04de' => 'MindShare-Inc.', - '04df' => 'Interlink-Electronics', - '04e1' => 'Iiyama-North-America-Inc.', - '04e2' => 'Exar-Corp.', - '04e3' => 'Zilog-Inc.', - '04e4' => 'ACC-Microelectronics', - '04e5' => 'Promise-Technology', - '04e6' => 'SCM-Microsystems-Inc.', - '04e7' => 'Elo-TouchSystems', - '04e8' => 'Samsung-Electronics-Co.-Ltd', - '04e9' => 'PC-Tel-Inc.', - '04ea' => 'Brooktree-Corp.', - '04eb' => 'Northstar-Systems-Inc.', - '04ec' => 'Tokyo-Electron-Device-Ltd', - '04ed' => 'Annabooks', - '04f0' => 'Daewoo-Electronics-Co.-Ltd', - '04f1' => 'Victor-Company-of-Japan-Ltd', - '04f2' => 'Chicony-Electronics-CO', - '04f3' => 'Elan-Microelectronics-Corp.', - '04f4' => 'Harting-Elektronik-Inc.', - '04f5' => 'Fujitsu-ICL-Systems-Inc.', - '04f6' => 'Norand-Corp.', - '04f7' => 'Newnex-Technology-Corp.', - '04f8' => 'FuturePlus-Systems', - '04f9' => 'brother', - '04fa' => 'Dallas-Semiconductor', - '04fc' => 'Sunplus-Technology-Co.-Ltd', - '04fd' => 'Soliton-Systems-K.K.', - '04fe' => 'PFU-Ltd', - '04ff' => 'E-CMOS-Corp.', - '0500' => 'Siam-United-Hi-Tech', - '0501' => 'Fujikura-DDK-Ltd', - '0502' => 'Acer', - '0503' => 'Hitachi-America-Ltd', - '0504' => 'Hayes-Microcomputer-Products', - '0506' => '3Com-Corp.', - '0507' => 'Hosiden-Corp.', - '0508' => 'Clarion-Co.-Ltd', - '0509' => 'Aztech-Systems-Ltd', - '050a' => 'Cinch-Connectors', - '050b' => 'Cable-System-International', - '050c' => 'InnoMedia-Inc.', - '050d' => 'Belkin-Components', - '050e' => 'Neon-Technology-Inc.', - '050f' => 'KC-Technology-Inc.', - '0510' => 'Sejin-Electron-Inc.', - '0512' => 'Hualon-Microelectronics-Corp.', - '0513' => 'digital-X-Inc.', - '0514' => 'FCI-Electronics', - '0515' => 'ACTC', - '0516' => 'Longwell-Electronics', - '0517' => 'Butterfly-Communications', - '0518' => 'EzKEY-Corp.', - '0519' => 'Star-Micronics-Co.-Ltd', - '051a' => 'WYSE-Technology', - '051b' => 'Silicon-Graphics', - '051c' => 'Shuttle-Inc.', - '051d' => 'American-Power-Conversion', - '051e' => 'Scientific-Atlanta-Inc.', - '0521' => 'Airborn-Connectors', - '0522' => 'Advanced-Connectek-Inc.', - '0523' => 'ATEN-GmbH', - '0524' => 'Sola-Electronics', - '0525' => 'Netchip-Technology-Inc.', - '0526' => 'Temic-MHS-S.A.', - '0527' => 'ALTRA', - '0528' => 'ATI', - '0529' => 'Aladdin-Knowledge-Systems', - '052a' => 'Crescent-Heart-Software', - '052b' => 'Tekom-Technologies-Inc.', - '052d' => 'Avid-Electronics-Corp.', - '052e' => 'Standard-Microsystems-Corp.', - '052f' => 'Unicore-Software-Inc.', - '0530' => 'American-Microsystems-Inc.', - '0531' => 'Wacom-Technology-Corp.', - '0532' => 'Systech-Corp.', - '0533' => 'Alcatel-Mobile-Phones', - '0534' => 'Motorola-Inc.', - '0535' => 'LIH-TZU-Electric-Co.-Ltd', - '0537' => 'Inventec-Corp.', - '0539' => 'Shyh-Shiun-Terminals-Co.-Ltd', - '053a' => 'PrehKeyTec-GmbH', - '053b' => 'Global-Village-Communication', - '053d' => 'Silicon-Architect', - '053e' => 'Mobility-Electronics', - '053f' => 'Synopsys-Inc.', - '0540' => 'UniAccess-AB', - '0541' => 'Sirf-Technology-Inc.', - '0543' => 'ViewSonic-Corp.', - '0544' => 'Cristie-Electronics-Ltd', - '0545' => 'Xirlink-Inc.', - '0546' => 'Polaroid-Corp.', - '0547' => 'Anchor-Chips-Inc.', - '0548' => 'Tyan-Computer-Corp.', - '0549' => 'Pixera-Corp.', - '054b' => 'New-Media-Corp.', - '054c' => 'Sony-Corp.', - '054d' => 'Try-Corp.', - '054e' => 'Proside-Corp.', - '054f' => 'WYSE-Technology-Taiwan', - '0550' => 'Fuji-Xerox-Co.-Ltd', - '0551' => 'CompuTrend-Systems-Inc.', - '0552' => 'Philips-Monitors', - '0554' => 'Dictaphone-Corp.', - '0555' => 'ANAM-S-T-Co.-Ltd', - '0557' => 'ATEN-International-Co.-Ltd', - '0558' => 'Truevision-Inc.', - '0559' => 'Cadence-Design-Systems-Inc.', - '055a' => 'Kenwood-USA', - '055b' => 'KnowledgeTek-Inc.', - '055c' => 'Proton-Electronic-Ind.', - '055d' => 'Samsung-Electro-Mechanics-Co.', - '055e' => 'CTX-Opto-Electronics-Corp.', - '055f' => 'Mustek-Systems-Inc.', - '0560' => 'Interface-Corp.', - '0561' => 'Oasis-Design-Inc.', - '0562' => 'Telex-Communications-Inc.', - '0563' => 'Immersion-Corp.', - '0565' => 'Peracom-Networks-Inc.', - '0566' => 'Monterey-International-Corp.', - '0567' => 'Xyratex-International-Ltd', - '0568' => 'Quartz-Ingenierie', - '0569' => 'SegaSoft', - '056a' => 'Wacom-Co.-Ltd', - '056b' => 'Decicon-Inc.', - '056c' => 'eTEK-Labs', - '056d' => 'EIZO-Corp.', - '056e' => 'Elecom-Co.-Ltd', - '056f' => 'Korea-Data-Systems-Co.-Ltd', - '0570' => 'Epson-America', - '0571' => 'Interex-Inc.', - '0574' => 'City-University-of-Hong-Kong', - '0577' => 'ELSA', - '0578' => 'Intrinsix-Corp.', - '0579' => 'GVC-Corp.', - '057a' => 'Samsung-Electronics-America', - '057b' => 'Y-E-Data-Inc.', - '057c' => 'AVM-GmbH', - '057d' => 'Shark-Multimedia-Inc.', - '057e' => 'Nintendo-Co.-Ltd', - '057f' => 'QuickShot-Ltd', - '0580' => 'Denron-Inc.', - '0581' => 'Racal-Data-Group', - '0582' => 'Roland-Corp.', - '0583' => 'Padix-Co.-Ltd-Rockfire', - '0584' => 'RATOC-System-Inc.', - '0585' => 'FlashPoint-Technology-Inc.', - '0586' => 'ZyXEL-Communications-Corp.', - '0588' => 'Sapien-Design', - '0589' => 'Victron', - '058a' => 'Nohau-Corp.', - '058b' => 'Infineon-Technologies', - '058c' => 'In-Focus-Systems', - '058d' => 'Micrel-Semiconductor', - '058e' => 'Tripath-Technology-Inc.', - '058f' => 'Alcor-Micro-Corp.', - '0590' => 'Omron-Corp.', - '0591' => 'Questra-Consulting', - '0592' => 'Powerware-Corp.', - '0593' => 'Incite', - '0594' => 'Princeton-Graphic-Systems', - '0595' => 'Zoran-Microelectronics-Ltd', - '0596' => 'MicroTouch-Systems-Inc.', - '0597' => 'Trisignal-Communications', - '0598' => 'Niigata-Canotec-Co.-Inc.', - '059b' => 'Iomega-Corp.', - '059c' => 'A-Trend-Technology-Co.-Ltd', - '059d' => 'Advanced-Input-Devices', - '059e' => 'Intelligent-Instrumentation', - '059f' => 'LaCie-Ltd', - '05a0' => 'Vetronix-Corp.', - '05a1' => 'USC-Corp.', - '05a3' => 'ARC-International', - '05a4' => 'Ortek-Technology-Inc.', - '05a5' => 'Sampo-Technology-Corp.', - '05a6' => 'Cisco-Systems-Inc.', - '05a7' => 'Bose-Corp.', - '05a8' => 'Spacetec-IMC-Corp.', - '05a9' => 'OmniVision-Technologies-Inc.', - '05aa' => 'Utilux-South-China-Ltd', - '05ab' => 'In-System-Design', - '05ac' => 'Apple-Inc.', - '05ad' => 'Y.C.-Cable-U.S.A.-Inc.', - '05ae' => 'Synopsys-Inc.', - '05af' => 'Jing-Mold-Enterprise-Co.-Ltd', - '05b0' => 'Fountain-Technologies-Inc.', - '05b4' => 'LG-Semicon-Co.-Ltd', - '05b5' => 'Dialogic-Corp.', - '05b6' => 'Proxima-Corp.', - '05b7' => 'Medianix-Semiconductor-Inc.', - '05b8' => 'Agiler-Inc.', - '05b9' => 'Philips-Research-Laboratories', - '05ba' => 'DigitalPersona-Inc.', - '05bb' => 'Grey-Cell-Systems', - '05bc' => '3G-Green-Green-Globe-Co.-Ltd', - '05bd' => 'RAFI-GmbH---Co.-KG', - '05be' => 'Tyco-Electronics-Raychem', - '05bf' => 'S---S-Research', - '05c0' => 'Keil-Software', - '05c2' => 'Media-Phonics-Suisse-S.A.', - '05c5' => 'Digi-International-Inc.', - '05c6' => 'Qualcomm-Inc.', - '05c7' => 'Qtronix-Corp.', - '05c9' => 'Semtech-Corp.', - '05ca' => 'Ricoh-Co.-Ltd', - '05cc' => 'ELSA-AG', - '05cd' => 'Silicom-Ltd', - '05ce' => 'sci-worx-GmbH', - '05cf' => 'Sung-Forn-Co.-Ltd', - '05d0' => 'GE-Medical-Systems-Lunar', - '05d1' => 'Brainboxes-Ltd', - '05d2' => 'Wave-Systems-Corp.', - '05d3' => 'Tohoku-Ricoh-Co.-Ltd', - '05d6' => 'Philips-Semiconductors-CICT', - '05d7' => 'Thomas---Betts-Corp.', - '05d8' => 'Ultima-Electronics-Corp.', - '05d9' => 'Axiohm-Transaction-Solutions', - '05da' => 'Microtek-International-Inc.', - '05db' => 'Sun-Corp.-Suntac-', - '05dc' => 'Lexar-Media-Inc.', - '05dd' => 'Delta-Electronics-Inc.', - '05df' => 'Silicon-Vision-Inc.', - '05e0' => 'Symbol-Technologies', - '05e1' => 'Syntek-Semiconductor-Co.-Ltd', - '05e2' => 'ElecVision-Inc.', - '05e3' => 'Genesys-Logic-Inc.', - '05e4' => 'Red-Wing-Corp.', - '05e5' => 'Fuji-Electric-Co.-Ltd', - '05e6' => 'Keithley-Instruments', - '05e8' => 'ICC-Inc.', - '05e9' => 'Kawasaki-LSI', - '05eb' => 'FFC-Ltd', - '05ec' => 'COM21-Inc.', - '05ee' => 'Cytechinfo-Inc.', - '05ef' => 'AVB-Inc.-anko-', - '05f0' => 'Canopus-Co.-Ltd', - '05f1' => 'Compass-Communications', - '05f2' => 'Dexin-Corp.-Ltd', - '05f3' => 'PI-Engineering-Inc.', - '05f5' => 'Unixtar-Technology-Inc.', - '05f6' => 'AOC-International', - '05f7' => 'RFC-Distributions-PTE-Ltd', - '05f9' => 'PSC-Scanning-Inc.', - '05fc' => 'Harman-Multimedia', - '05fd' => 'InterAct-Inc.', - '05fe' => 'Chic-Technology-Corp.', - '05ff' => 'LeCroy-Corp.', - '0600' => 'Barco-Display-Systems', - '0601' => 'Jazz-Hipster-Corp.', - '0602' => 'Vista-Imaging-Inc.', - '0604' => 'Jean-Co.-Ltd', - '0605' => 'Anchor-C-C-Co.-Ltd', - '0607' => 'Bridge-Information-Co.-Ltd', - '0608' => 'Genrad-Ads', - '0609' => 'SMK-Manufacturing-Inc.', - '060b' => 'Solid-Year', - '060c' => 'EEH-Datalink-GmbH', - '060d' => 'Auctor-Corp.', - '060e' => 'Transmonde-Technologies-Inc.', - '0610' => 'Costar-Electronics-Inc.', - '0611' => 'Totoku-Electric-Co.-Ltd', - '0613' => 'TransAct-Technologies-Inc.', - '0614' => 'Bio-Rad-Laboratories', - '0618' => 'MacAlly', - '0619' => 'Seiko-Instruments-Inc.', - '061a' => 'Veridicom-International-Inc.', - '061b' => 'Promptus-Communications-Inc.', - '061c' => 'Act-Labs-Ltd', - '061d' => 'Quatech-Inc.', - '061e' => 'Nissei-Electric-Co.', - '0620' => 'Alaris-Inc.', - '0622' => 'Iotech-Inc.', - '0623' => 'Littelfuse-Inc.', - '0624' => 'Avocent-Corp.', - '0625' => 'TiMedia-Technology-Co.-Ltd', - '0627' => 'Adomax-Technology-Co.-Ltd', - '0628' => 'Tasking-Software-Inc.', - '0629' => 'Zida-Technologies-Ltd', - '062a' => 'Creative-Labs', - '0631' => 'JUJO-Electronics-Corp.', - '0633' => 'Cyrix-Corp.', - '0634' => 'Micron-Technology-Inc.', - '0635' => 'Methode-Electronics-Inc.', - '0636' => 'Sierra-Imaging-Inc.', - '0638' => 'Avision-Inc.', - '0639' => 'Chrontel-Inc.', - '063a' => 'Techwin-Corp.', - '063b' => 'Taugagreining-HF', - '063d' => 'Fong-Kai-Industrial-Co.-Ltd', - '063e' => 'RealMedia-Technology-Inc.', - '063f' => 'New-Technology-Cable-Ltd', - '0640' => 'Hitex-Development-Tools', - '0641' => 'Woods-Industries-Inc.', - '0642' => 'VIA-Medical-Corp.', - '0644' => 'TEAC-Corp.', - '0645' => 'Who--Vision-Systems-Inc.', - '0646' => 'UMAX', - '0647' => 'Acton-Research-Corp.', - '0648' => 'Inside-Out-Networks', - '0649' => 'Weli-Science-Co.-Ltd', - '064c' => 'Ji-Haw-Industrial-Co.-Ltd', - '064d' => 'TriTech-Microelectronics-Ltd', - '064e' => 'Suyin-Corp.', - '064f' => 'WIBU-Systems-AG', - '0650' => 'Dynapro-Systems', - '0651' => 'Likom-Technology-Sdn.-Bhd.', - '0652' => 'Stargate-Solutions-Inc.', - '0653' => 'CNF-Inc.', - '0654' => 'Granite-Microsystems-Inc.', - '0656' => 'Glory-Mark-Electronic-Ltd', - '0657' => 'Tekcon-Electronics-Corp.', - '0658' => 'Sigma-Designs-Inc.', - '0659' => 'Aethra', - '065a' => 'Optoelectronics-Co.-Ltd', - '065b' => 'Tracewell-Systems', - '065e' => 'Silicon-Graphics', - '0661' => 'Hamamatsu-Photonics-K.K.', - '0662' => 'Kansai-Electric-Co.-Ltd', - '0663' => 'Topmax-Electronic-Co.-Ltd', - '0664' => 'Groovy-Technology-Corp.', - '0665' => 'Cypress-Semiconductor', - '0667' => 'Aiwa-Co.-Ltd', - '0668' => 'WordWand', - '0669' => 'Oce-Printing-Systems-GmbH', - '066a' => 'Total-Technologies-Ltd', - '066b' => 'Linksys', - '066d' => 'Entrega-Inc.', - '066f' => 'SigmaTel-Inc.', - '0670' => 'Sequel-Imaging', - '0672' => 'Labtec-Inc.', - '0673' => 'HCL', - '0675' => 'DrayTek-Corp.', - '0676' => 'Teles-AG', - '0677' => 'Aiwa-Co.-Ltd', - '0678' => 'ACard-Technology-Corp.', - '067b' => 'Prolific-Technology-Inc.', - '067c' => 'Efficient-Networks-Inc.', - '067d' => 'Hohner-Corp.', - '067e' => 'Intermec-Technologies-Corp.', - '067f' => 'Virata-Ltd', - '0682' => 'Victor-Company-of-Japan-Ltd', - '0684' => 'Actiontec-Electronics-Inc.', - '0686' => 'Minolta-Co.-Ltd', - '068a' => 'Pertech-Inc.', - '068b' => 'Potrans-International-Inc.', - '068e' => 'CH-Products-Inc.', - '0690' => 'Golden-Bridge-Electech-Inc.', - '0693' => 'Hagiwara-Sys-Com-Co.-Ltd', - '0694' => 'Lego-Group', - '0698' => 'Chuntex-CTX', - '0699' => 'Tektronix-Inc.', - '069a' => 'Askey-Computer-Corp.', - '069b' => 'Thomson-Inc.', - '069d' => 'Hughes-Network-Systems-HNS', - '069e' => 'Marx', - '069f' => 'Allied-Data-Technologies-BV', - '06a2' => 'Topro-Technology-Inc.', - '06a3' => 'Saitek-PLC', - '06a5' => 'Divio', - '06a7' => 'MicroStore-Inc.', - '06a8' => 'Topaz-Systems-Inc.', - '06a9' => 'Westell', - '06aa' => 'Sysgration-Ltd', - '06b8' => 'Pixela-Corp.', - '06b9' => 'Alcatel-Telecom', - '06bb' => 'EDA-Inc.', - '06bc' => 'Oki-Data-Corp.', - '06bd' => 'AGFA-Gevaert-NV', - '06bf' => 'Leoco-Corp.', - '06c2' => 'Phidgets-Inc.-formerly-GLAB', - '06c4' => 'Bizlink-International-Corp.', - '06c5' => 'Hagenuk-GmbH', - '06c6' => 'Infowave-Software-Inc.', - '06c8' => 'SIIG-Inc.', - '06c9' => 'Taxan-Europe-Ltd', - '06ca' => 'Newer-Technology-Inc.', - '06cb' => 'Synaptics-Inc.', - '06cc' => 'Terayon-Communication-Systems', - '06cd' => 'Keyspan', - '06cf' => 'SpheronVR-AG', - '06d0' => 'LapLink-Inc.', - '06d1' => 'Daewoo-Electronics-Co.-Ltd', - '06d3' => 'Mitsubishi-Electric-Corp.', - '06d4' => 'Cisco-Systems', - '06d5' => 'TOSHIBA', - '06d6' => 'Aashima-Technology-B.V.', - '06da' => 'Phoenixtec-Power-Co.-Ltd', - '06db' => 'Paradyne', - '06de' => 'Heisei-Electronics-Co.-Ltd', - '06e0' => 'Multi-Tech-Systems-Inc.', - '06e1' => 'ADS-Technologies-Inc.', - '06e4' => 'Alcatel-Microelectronics', - '06e6' => 'Tiger-Jet-Network-Inc.', - '06ea' => 'Sirius-Technologies', - '06eb' => 'PC-Expert-Tech.-Co.-Ltd', - '06f0' => 'T.N.C-Industrial-Co.-Ltd', - '06f1' => 'Opcode-Systems-Inc.', - '06f2' => 'Emine-Technology-Co.', - '06f6' => 'Wintrend-Technology-Co.-Ltd', - '06f7' => 'Wailly-Technology-Ltd', - '06f8' => 'Guillemot-Corp.', - '06f9' => 'ASYST-electronic-d.o.o.', - '06fa' => 'HSD-S.r.L', - '06fd' => 'Boston-Acoustics', - '06fe' => 'Gallant-Computer-Inc.', - '0703' => 'Bvtech-Industry-Inc.', - '0705' => 'NKK-Corp.', - '0706' => 'Ariel-Corp.', - '0707' => 'Standard-Microsystems-Corp.', - '0708' => 'Putercom-Co.-Ltd', - '0709' => 'Silicon-Systems-Ltd-SSL', - '070d' => 'Comoss-Electronic-Co.-Ltd', - '0710' => 'Connect-Tech-Inc.', - '0713' => 'Interval-Research-Corp.', - '0714' => 'NewMotion-Inc.', - '0717' => 'ZNK-Corp.', - '0718' => 'Imation-Corp.', - '0719' => 'Tremon-Enterprises-Co.-Ltd', - '071b' => 'Domain-Technologies-Inc.', - '071d' => 'Eicon-Networks-Corp.', - '071e' => 'Ariston-Technologies', - '0729' => 'Amitm', - '072e' => 'Sunix-Co.-Ltd', - '072f' => 'Advanced-Card-Systems-Ltd', - '0731' => 'Susteen-Inc.', - '0733' => 'ViewQuest-Technologies-Inc.', - '0734' => 'Lasat-Communications-A-S', - '0735' => 'Asuscom-Network', - '0736' => 'Lorom-Industrial-Co.-Ltd', - '0738' => 'Mad-Catz-Inc.', - '073a' => 'Chaplet-Systems-Inc.', - '073b' => 'Suncom-Technologies', - '073d' => 'Eutron-S.p.a.', - '073e' => 'NEC-Inc.', - '0745' => 'Syntech-Information-Co.-Ltd', - '0746' => 'Onkyo-Corp.', - '0747' => 'Labway-Corp.', - '0749' => 'EVer-Electronics-Corp.', - '074b' => 'Polestar-Tech.-Corp.', - '074c' => 'C-C-C-Group-PLC', - '074d' => 'Micronas-GmbH', - '074e' => 'Digital-Stream-Corp.', - '0755' => 'Aureal-Semiconductor', - '0757' => 'Network-Technologies-Inc.', - '075b' => 'Sophisticated-Circuits-Inc.', - '0763' => 'Midiman', - '0764' => 'Cyber-Power-System-Inc.', - '0765' => 'X-Rite-Inc.', - '0766' => 'Jess-Link-Products-Co.-Ltd', - '0767' => 'Tokheim-Corp.', - '0768' => 'Camtel-Technology-Corp.', - '0769' => 'Surecom-Technology-Corp.', - '076b' => 'OmniKey-AG', - '076c' => 'Partner-Tech', - '076d' => 'Denso-Corp.', - '076e' => 'Kuan-Tech-Enterprise-Co.-Ltd', - '076f' => 'Jhen-Vei-Electronic-Co.-Ltd', - '0771' => 'Observator-Instruments-BV', - '0774' => 'AmTRAN-Technology-Co.-Ltd', - '0775' => 'Longshine-Electronics-Corp.', - '0776' => 'Inalways-Corp.', - '0777' => 'Comda-Enterprise-Corp.', - '0778' => 'Volex-Inc.', - '0779' => 'Fairchild-Semiconductor', - '077a' => 'Sankyo-Seiki-Mfg.-Co.-Ltd', - '077b' => 'Linksys', - '077c' => 'Forward-Electronics-Co.-Ltd', - '077d' => 'Griffin-Technology', - '077f' => 'Well-Excellent---Most-Corp.', - '0780' => 'Sagem-Monetel-GmbH', - '0781' => 'SanDisk-Corp.', - '0782' => 'Trackerball', - '0783' => 'C3PO', - '0784' => 'Vivitar-Inc.', - '0785' => 'NTT-ME', - '0789' => 'Logitec-Corp.', - '078b' => 'Happ-Controls-Inc.', - '078c' => 'GTCO-CalComp', - '078e' => 'Brincom-Inc.', - '0792' => 'Axis-Communications-AB', - '0793' => 'Wha-Yu-Industrial-Co.-Ltd', - '0794' => 'ABL-Electronics-Corp.', - '0795' => 'RealChip-Inc.', - '0796' => 'Certicom-Corp.', - '0797' => 'Grandtech-Semiconductor-Corp.', - '0798' => 'Optelec', - '0799' => 'Altera', - '079b' => 'Sagem', - '079d' => 'Alfadata-Computer-Corp.', - '07a1' => 'Digicom-S.p.A.', - '07a2' => 'National-Technical-Systems', - '07a3' => 'Onnto-Corp.', - '07a4' => 'Be-Inc.', - '07a6' => 'ADMtek-Inc.', - '07aa' => 'Corega-K.K.', - '07ab' => 'Freecom-Technologies', - '07af' => 'Microtech', - '07b0' => 'Trust-Technologies', - '07b1' => 'IMP-Inc.', - '07b2' => 'Motorola-BCS-Inc.', - '07b3' => 'Plustek-Inc.', - '07b4' => 'Olympus-Optical-Co.-Ltd', - '07b5' => 'Mega-World-International-Ltd', - '07b6' => 'Marubun-Corp.', - '07b7' => 'TIME-Interconnect-Ltd', - '07b8' => 'AboCom-Systems-Inc', - '07bc' => 'Canon', - '07bd' => 'Webgear-Inc.', - '07be' => 'Veridicom', - '07c1' => 'Keisokugiken', - '07c4' => 'Datafab-Systems-Inc.', - '07c5' => 'APG-Cash-Drawer', - '07c6' => 'ShareWave-Inc.', - '07c7' => 'Powertech-Industrial-Co.-Ltd', - '07c8' => 'B.U.G.-Inc.', - '07c9' => 'Allied-Telesyn-International', - '07ca' => 'AVerMedia-Technologies-Inc.', - '07cb' => 'Kingmax-Technology-Inc.', - '07cc' => 'Carry-Computer-Eng.-Co.-Ltd', - '07cd' => 'Elektor', - '07cf' => 'Casio-Computer-Co.-Ltd', - '07d0' => 'Dazzle', - '07d1' => 'D-Link', - '07d2' => 'Aptio-Products-Inc.', - '07d3' => 'Cyberdata-Corp.', - '07d5' => 'Radiant-Systems', - '07d7' => 'GCC-Technologies-Inc.', - '07da' => 'Arasan-Chip-Systems', - '07de' => 'Diamond-Multimedia', - '07df' => 'David-Electronics-Co.-Ltd', - '07e1' => 'Ambient-Technologies-Inc.', - '07e2' => 'Elmeg-GmbH---Co.-Ltd', - '07e3' => 'Planex-Communications-Inc.', - '07e4' => 'Movado-Enterprise-Co.-Ltd', - '07e5' => 'QPS-Inc.', - '07e6' => 'Allied-Cable-Corp.', - '07e7' => 'Mirvo-Toys-Inc.', - '07e8' => 'Labsystems', - '07ea' => 'Iwatsu-Electric-Co.-Ltd', - '07eb' => 'Double-H-Technology-Co.-Ltd', - '07ef' => 'STSN', - '07f6' => 'Circuit-Assembly-Corp.', - '07f7' => 'Century-Corp.', - '07f9' => 'Dotop-Technology-Inc.', - '07fa' => 'DrayTek-Corp.', - '07fd' => 'Mark-of-the-Unicorn', - '07ff' => 'Unknown', - '0801' => 'Mag-Tek', - '0802' => 'Mako-Technologies-LLC', - '0803' => 'Zoom-Telephonics-Inc.', - '0809' => 'Genicom-Technology-Inc.', - '080a' => 'Evermuch-Technology-Co.-Ltd', - '080b' => 'Cross-Match-Technologies', - '080c' => 'Datalogic-S.p.A.', - '080d' => 'Teco-Image-Systems-Co.-Ltd', - '0813' => 'Mattel-Inc.', - '0819' => 'eLicenser', - '081a' => 'MG-Logic', - '081b' => 'Indigita-Corp.', - '081c' => 'Mipsys', - '081e' => 'AlphaSmart-Inc.', - '0822' => 'Reudo-Corp.', - '0825' => 'GC-Protronics', - '0826' => 'Data-Transit', - '0827' => 'BroadLogic-Inc.', - '0828' => 'Sato-Corp.', - '082d' => 'Handspring', - '0830' => 'Palm-Inc.', - '0832' => 'Kouwell-Electronics-Corp.', - '0833' => 'Sourcenext-Corp.', - '0839' => 'Samsung-Techwin-Co.-Ltd', - '083a' => 'Accton-Technology-Corp.', - '083f' => 'Global-Village', - '0840' => 'Argosy-Research-Inc.', - '0841' => 'Rioport.com-Inc.', - '0844' => 'Welland-Industrial-Co.-Ltd', - '0846' => 'NetGear', - '084e' => 'KB-Gear', - '084f' => 'Empeg', - '0850' => 'Fast-Point-Technologies-Inc.', - '0852' => 'CSEM', - '0853' => 'Topre-Corporation', - '0854' => 'ActiveWire-Inc.', - '0856' => 'B-B-Electronics', - '0858' => 'Hitachi-Maxell-Ltd', - '085a' => 'Xircom', - '085c' => 'ColorVision-Inc.', - '0862' => 'Teletrol-Systems-Inc.', - '0863' => 'Filanet-Corp.', - '0864' => 'NetGear', - '0867' => 'Data-Translation-Inc.', - '086e' => 'System-TALKS-Inc.', - '086f' => 'MEC-IMEX-Inc.', - '0870' => 'Metricom', - '0871' => 'SanDisk-Inc.', - '0873' => 'Xpeed-Inc.', - '0874' => 'A-Tec-Subsystem-Inc.', - '0879' => 'Comtrol-Corp.', - '087c' => 'Adesso-Kbtek-America-Inc.', - '087d' => 'Jaton-Corp.', - '087f' => 'Virtual-IP-Group-Inc.', - '0880' => 'APT-Technologies-Inc.', - '0885' => 'Boca-Research-Inc.', - '0886' => 'XAC-Automation-Corp.', - '0887' => 'Hannstar-Electronics-Corp.', - '088b' => 'MassWorks-Inc.', - '088c' => 'Swecoin-AB', - '088e' => 'iLok', - '0892' => 'DioGraphy-Inc.', - '0897' => 'Lauterbach', - '089d' => 'Icron-Technologies-Corp.', - '089e' => 'NST-Co.-Ltd', - '089f' => 'Primex-Aerospace-Co.', - '08a5' => 'e9-Inc.', - '08a8' => 'Andrea-Electronics', - '08ae' => 'Macally-Mace-Group-Inc.', - '08b4' => 'Sorenson-Vision-Inc.', - '08b7' => 'NATSU', - '08b9' => 'RadioShack-Corp.-Tandy', - '08bb' => 'Texas-Instruments-Japan', - '08bd' => 'Citizen-Watch-Co.-Ltd', - '08c3' => 'Precise-Biometrics', - '08c4' => 'Proxim-Inc.', - '08c7' => 'Key-Nice-Enterprise-Co.-Ltd', - '08c8' => '2Wire-Inc.', - '08ca' => 'Aiptek-International-Inc.', - '08cd' => 'Jue-Hsun-Ind.-Corp.', - '08ce' => 'Long-Well-Electronics-Corp.', - '08d1' => 'smartBridges-Inc.', - '08d3' => 'Virtual-Ink', - '08d4' => 'Fujitsu-Siemens-Computers', - '08d8' => 'IXXAT-Automation-GmbH', - '08d9' => 'Increment-P-Corp.', - '08dd' => 'Billionton-Systems-Inc.', - '08de' => '---', - '08df' => 'Spyrus-Inc.', - '08e3' => 'Olitec-Inc.', - '08e4' => 'Pioneer-Corp.', - '08e5' => 'Litronic', - '08e6' => 'Gemplus', - '08e8' => 'Integrated-Memory-Logic', - '08e9' => 'Extended-Systems-Inc.', - '08ec' => 'M-Systems-Flash-Disk-Pioneers', - '08ed' => 'MediaTek-Inc.', - '08ee' => 'CCSI-Hesso', - '08f0' => 'Corex-Technologies', - '08f1' => 'CTI-Electronics-Corp.', - '08f2' => 'Gotop-Information-Inc.', - '08f5' => 'SysTec-Co.-Ltd', - '08f6' => 'Logic-3-International-Ltd', - '08f7' => 'Vernier', - '08f9' => 'Wipro-Technologies', - '08fa' => 'Caere', - '08fb' => 'Socket-Communications', - '08fd' => 'Digianswer-A-S', - '08ff' => 'AuthenTec-Inc.', - '0900' => 'Pinnacle-Systems-Inc.', - '0901' => 'VST-Technologies', - '0906' => 'Faraday-Technology-Corp.', - '0909' => 'Audio-Technica-Corp.', - '090b' => 'Neurosmith', - '090c' => 'Feiya-Technology-Corp', - '090e' => 'Shining-Technology-Inc.', - '090f' => 'Fujitsu-Devices-Inc.', - '0910' => 'Alation-Systems-Inc.', - '0911' => 'Philips-Speech-Processing', - '0912' => 'Voquette-Inc.', - '0915' => 'GlobeSpan-Inc.', - '0917' => 'SmartDisk-Corp.', - '0919' => 'Tiger-Electronics', - '091e' => 'Garmin-International', - '0920' => 'Echelon-Co.', - '0921' => 'GoHubs-Inc.', - '0922' => 'Dymo-CoStar-Corp.', - '0923' => 'IC-Media-Corp.', - '0924' => 'XEROX', - '0925' => 'Lakeview-Research', - '0927' => 'Summus-Ltd', - '0928' => 'Oxford-Semiconductor-Ltd', - '0929' => 'American-Biometric-Co.', - '092b' => 'Sena-Technologies-Inc.', - '0930' => 'Toshiba-Corp.', - '0931' => 'Harmonic-Data-Systems-Ltd', - '0932' => 'Crescentec-Corp.', - '0933' => 'Quantum-Corp.', - '0934' => 'Netcom-Systems', - '0936' => 'NuTesla', - '0939' => 'Lumberg-Inc.', - '093a' => 'Pixart-Imaging-Inc.', - '093b' => 'Plextor-Corp.', - '093d' => 'InnoSync-Inc.', - '093e' => 'J.S.T.-Mfg.-Co.-Ltd', - '0941' => 'Photobit-Corp.', - '0942' => 'i2Go.com-LLC', - '0944' => 'KORG-Inc.', - '0945' => 'Pasco-Scientific', - '0948' => 'Kronauer-music-in-digital', - '094b' => 'Linkup-Systems-Corp.', - '094d' => 'Cable-Television-Laboratories', - '094f' => 'Yano', - '0951' => 'Kingston-Technology', - '0954' => 'RPM-Systems-Corp.', - '0955' => 'NVIDIA', - '0956' => 'BSquare-Corp.', - '0957' => 'Agilent-Technologies-Inc.', - '0958' => 'CompuLink-Research-Inc.', - '0959' => 'Cologne-Chip-AG', - '095a' => 'Portsmith', - '095b' => 'Medialogic-Corp.', - '095c' => 'K-Tec-Electronics', - '095d' => 'Polycom-Inc.', - '0967' => 'Acer', - '0968' => 'Catalyst-Enterprises-Inc.', - '096e' => 'Feitian-Technologies-Inc.', - '0971' => 'Gretag-Macbeth-AG', - '0973' => 'Schlumberger', - '0975' => 'OLE-Communications-Inc.', - '0976' => 'Adirondack-Wire---Cable', - '0977' => 'Lightsurf-Technologies', - '0978' => 'Beckhoff-GmbH', - '0979' => 'Jeilin-Technology-Corp.-Ltd', - '097a' => 'Minds-At-Work-LLC', - '097b' => 'Knudsen-Engineering-Ltd', - '097c' => 'Marunix-Co.-Ltd', - '097d' => 'Rosun-Technologies-Inc.', - '097f' => 'Barun-Electronics-Co.-Ltd', - '0981' => 'Oak-Technology-Ltd', - '0984' => 'Apricorn', - '098c' => 'Vitana-Corp.', - '098d' => 'INDesign', - '098f' => 'Kenwood-TMI-Corp.', - '0993' => 'Gemstar-eBook-Group-Ltd', - '099a' => 'Zippy-Technology-Corp.', - '09a3' => 'PairGain-Technologies', - '09a4' => 'Contech-Research-Inc.', - '09a5' => 'VCON-Telecommunications', - '09a6' => 'Poinchips', - '09aa' => 'Intersil-Corp.', - '09ab' => 'Japan-Cash-Machine-Co.-Ltd.', - '09ae' => 'Tripp-Lite', - '09b3' => 'Altius-Solutions-Inc.', - '09b4' => 'MDS-Telephone-Systems', - '09b5' => 'Celltrix-Technology-Co.-Ltd', - '09bc' => 'Grundig', - '09be' => 'MySmart.Com', - '09bf' => 'Auerswald-GmbH---Co.-KG', - '09c1' => 'Arris-Interactive-LLC', - '09c2' => 'Nisca-Corp.', - '09c3' => 'ActivCard-Inc.', - '09c4' => 'ACTiSYS-Corp.', - '09c5' => 'Memory-Corp.', - '09cc' => 'Workbit-Corp.', - '09ce' => 'City-Electronics-Ltd', - '09d1' => 'NeoMagic-Inc.', - '09d2' => 'Vreelin-Engineering-Inc.', - '09d3' => 'Com-One', - '09d7' => 'Novatel-Wireless', - '09d9' => 'KRF-Tech-Ltd', - '09da' => 'A4-Tech-Co.-Ltd', - '09db' => 'Measurement-Computing-Corp.', - '09dc' => 'Aimex-Corp.', - '09dd' => 'Fellowes-Inc.', - '09df' => 'Addonics-Technologies-Corp.', - '09e1' => 'Intellon-Corp.', - '09e5' => 'Jo-Dan-International-Inc.', - '09e6' => 'Silutia-Inc.', - '09e7' => 'Real-3D-Inc.', - '09e8' => 'AKAI-Professional-M.I.-Corp.', - '09e9' => 'Chen-Source-Inc.', - '09eb' => 'IM-Networks-Inc.', - '09ef' => 'Xitel', - '09f3' => 'GoFlight-Inc.', - '09f5' => 'AresCom', - '09f6' => 'RocketChips-Inc.', - '09f7' => 'Edu-Science-H.K.-Ltd', - '09f8' => 'SoftConnex-Technologies-Inc.', - '09f9' => 'Bay-Associates', - '09fa' => 'Mtek-Vision', - '09fb' => 'Altera', - '09ff' => 'Gain-Technology-Corp.', - '0a00' => 'Liquid-Audio', - '0a01' => 'ViA-Inc.', - '0a07' => 'Ontrak-Control-Systems-Inc.', - '0a0b' => 'Cybex-Computer-Products-Co.', - '0a11' => 'Xentec-Inc.', - '0a12' => 'Cambridge-Silicon-Radio-Ltd', - '0a13' => 'Telebyte-Inc.', - '0a14' => 'Spacelabs-Medical-Inc.', - '0a15' => 'Scalar-Corp.', - '0a16' => 'Trek-Technology-S-PTE-Ltd', - '0a17' => 'Pentax-Corp.', - '0a19' => 'Hua-Geng-Technologies-Inc.', - '0a27' => 'Datacard-Group', - '0a2c' => 'AK-Modul-Bus-Computer-GmbH', - '0a34' => 'TG3-Electronics-Inc.', - '0a35' => 'Radikal-Technologies', - '0a39' => 'Gilat-Satellite-Networks-Ltd', - '0a3a' => 'PentaMedia-Co.-Ltd', - '0a3c' => 'NTT-DoCoMo-Inc.', - '0a3d' => 'Varo-Vision', - '0a3f' => 'Swissonic-AG', - '0a43' => 'Boca-Systems-Inc.', - '0a46' => 'Davicom-Semiconductor-Inc.', - '0a47' => 'Hirose-Electric', - '0a48' => 'I-O-Interconnect', - '0a4b' => 'Fujitsu-Media-Devices-Ltd', - '0a4c' => 'Computex-Co.-Ltd', - '0a4d' => 'Evolution-Electronics-Ltd', - '0a4f' => 'Litton-Systems-Inc.', - '0a50' => 'Mimaki-Engineering-Co.-Ltd', - '0a51' => 'Sony-Electronics-Inc.', - '0a52' => 'Jebsee-Electronics-Co.-Ltd', - '0a53' => 'Portable-Peripheral-Co.-Ltd', - '0a5a' => 'Electronics-For-Imaging-Inc.', - '0a5b' => 'EAsics-NV', - '0a5c' => 'Broadcom', - '0a5d' => 'Diatrend-Corp.', - '0a5f' => 'Zebra', - '0a62' => 'MPMan', - '0a66' => 'ClearCube-Technology', - '0a67' => 'Medeli-Electronics-Co.-Ltd', - '0a68' => 'Comaide-Corp.', - '0a69' => 'Chroma-ate-Inc.', - '0a6b' => 'Green-House-Co.-Ltd', - '0a6d' => 'UPS-Manufacturing', - '0a6e' => 'Benwin', - '0a6f' => 'Core-Technology-Inc.', - '0a70' => 'International-Game-Technology', - '0a72' => 'Sanwa-Denshi', - '0a7d' => 'NSTL-Inc.', - '0a7e' => 'Octagon-Systems-Corp.', - '0a80' => 'Rexon-Technology-Corp.-Ltd', - '0a81' => 'Chesen-Electronics-Corp.', - '0a82' => 'Syscan', - '0a83' => 'NextComm-Inc.', - '0a84' => 'Maui-Innovative-Peripherals', - '0a85' => 'Idexx-Labs', - '0a86' => 'NITGen-Co.-Ltd', - '0a8d' => 'Picturetel', - '0a90' => 'Candy-Technology-Co.-Ltd', - '0a91' => 'Globlink-Technology-Inc.', - '0a92' => 'EGO-SYStems-Inc.', - '0a93' => 'C-Technologies-AB', - '0a94' => 'Intersense', - '0aa3' => 'Lava-Computer-Mfg.-Inc.', - '0aa4' => 'Develco-Elektronik', - '0aa5' => 'First-International-Digital', - '0aa6' => 'Perception-Digital-Ltd', - '0aa8' => 'TriGem-Computer-Inc.', - '0aa9' => 'Baromtec-Co.', - '0aaa' => 'Japan-CBM-Corp.', - '0aab' => 'Vision-Shape-Europe-SA', - '0aac' => 'iCompression-Inc.', - '0aad' => 'Rohde---Schwarz-GmbH---Co.-KG', - '0aae' => 'NEC-infrontia-Corp.-Nitsuko', - '0aaf' => 'Digitalway-Co.-Ltd', - '0ab1' => 'FEIG-ELECTRONIC-GmbH', - '0aba' => 'Ellisys', - '0abe' => 'Stereo-Link', - '0abf' => 'Diolan', - '0ac4' => 'Leco-Corp.', - '0ac5' => 'I---C-Corp.', - '0ac6' => 'Singing-Electrons-Inc.', - '0ac7' => 'Panwest-Corp.', - '0ac8' => 'Z-Star-Microelectronics-Corp.', - '0ac9' => 'Micro-Solutions-Inc.', - '0aca' => 'OPEN-Networks-Ltd', - '0acc' => 'Koga-Electronics-Co.', - '0acd' => 'ID-Tech', - '0ace' => 'ZyDAS', - '0acf' => 'Intoto-Inc.', - '0ad0' => 'Intellix-Corp.', - '0ad1' => 'Remotec-Technology-Ltd', - '0ada' => 'Data-Encryption-Systems-Ltd.', - '0ae3' => 'Allion-Computer-Inc.', - '0ae4' => 'Taito-Corp.', - '0ae7' => 'Neodym-Systems-Inc.', - '0ae8' => 'System-Support-Co.-Ltd', - '0aea' => 'SciEssence-LLC', - '0aeb' => 'TTP-Communications-Ltd', - '0aec' => 'Neodio-Technologies-Corp.', - '0af0' => 'Option', - '0af6' => 'Silver-I-Co.-Ltd', - '0af7' => 'B2C2-Inc.', - '0af9' => 'Hama-Inc.', - '0afc' => 'Zaptronix-Ltd', - '0afd' => 'Tateno-Dennou-Inc.', - '0afe' => 'Cummins-Engine-Co.', - '0b00' => 'INGENICO', - '0b05' => 'ASUSTek-Computer-Inc.', - '0b0b' => 'Datamax-ONeil', - '0b0c' => 'Todos-AB', - '0b0d' => 'ProjectLab', - '0b0e' => 'GN-Netcom', - '0b0f' => 'AVID-Technology', - '0b10' => 'Pcally', - '0b11' => 'I-Tech-Solutions-Co.-Ltd', - '0b1f' => 'Insyde-Software-Corp.', - '0b20' => 'TransDimension-Inc.', - '0b21' => 'Yokogawa-Electric-Corp.', - '0b23' => 'Pan-Asia-Electronics-Co.-Ltd', - '0b24' => 'Link-Evolution-Corp.', - '0b27' => 'Ritek-Corp.', - '0b28' => 'Kenwood-Corp.', - '0b2c' => 'Village-Center-Inc.', - '0b30' => 'PNY-Technologies-Inc.', - '0b33' => 'Contour-Design-Inc.', - '0b37' => 'Hitachi-ULSI-Systems-Co.-Ltd', - '0b38' => 'Gear-Head', - '0b3a' => 'IPaxess', - '0b3b' => 'Tekram-Technology-Co.-Ltd', - '0b3c' => 'Olivetti-Techcenter', - '0b3e' => 'Kikusui-Electronics-Corp.', - '0b41' => 'Hal-Corp.', - '0b43' => 'Play.com-Inc.', - '0b47' => 'Sportbug.com-Inc.', - '0b48' => 'TechnoTrend-AG', - '0b49' => 'ASCII-Corp.', - '0b4b' => 'Pine-Corp.-Ltd.', - '0b4d' => 'Graphtec-America-Inc.', - '0b4e' => 'Musical-Electronics-Ltd', - '0b50' => 'Dumpries-Co.-Ltd', - '0b51' => 'Comfort-Keyboard-Co.', - '0b52' => 'Colorado-MicroDisplay-Inc.', - '0b54' => 'Sinbon-Electronics-Co.-Ltd', - '0b56' => 'TYI-Systems-Ltd', - '0b59' => 'Lake-Communications-Ltd', - '0b5a' => 'Corel-Corp.', - '0b5f' => 'Green-Electronics-Co.-Ltd', - '0b60' => 'Nsine-Ltd', - '0b61' => 'NEC-Viewtechnology-Ltd', - '0b62' => 'Orange-Micro-Inc.', - '0b63' => 'ADLink-Technology-Inc.', - '0b64' => 'Wonderful-Wire-Cable-Co.-Ltd', - '0b65' => 'Expert-Magnetics-Corp.', - '0b69' => 'CacheVision', - '0b6a' => 'Maxim-Integrated-Products', - '0b6f' => 'Nagano-Japan-Radio-Co.-Ltd', - '0b70' => 'PortalPlayer-Inc.', - '0b71' => 'SHIN-EI-Sangyo-Co.-Ltd', - '0b73' => 'Computone-Corp.', - '0b75' => 'Roland-DG-Corp.', - '0b79' => 'Sunrise-Telecom-Inc.', - '0b7a' => 'Zeevo-Inc.', - '0b7b' => 'Taiko-Denki-Co.-Ltd', - '0b7c' => 'ITRAN-Communications-Ltd', - '0b7d' => 'Astrodesign-Inc.', - '0b81' => 'id3-Semiconductors', - '0b84' => 'Rextron-Technology-Inc.', - '0b85' => 'Elkat-Electronics-Sdn.-Bhd.', - '0b86' => 'Exputer-Systems-Inc.', - '0b87' => 'Plus-One-I---T-Inc.', - '0b8c' => 'SMART-Technologies-Inc.', - '0b95' => 'ASIX-Electronics-Corp.', - '0b96' => 'Sewon-Telecom', - '0b97' => 'O2-Micro-Inc.', - '0b98' => 'Playmates-Toys-Inc.', - '0b99' => 'Audio-International-Inc.', - '0b9b' => 'Dipl.-Ing.-Stefan-Kunde', - '0b9d' => 'Softprotec-Co.', - '0b9f' => 'Chippo-Technologies', - '0baf' => 'U.S.-Robotics', - '0bb0' => 'Concord-Camera-Corp.', - '0bb1' => 'Infinilink-Corp.', - '0bb2' => 'Ambit-Microsystems-Corp.', - '0bb3' => 'Ofuji-Technology', - '0bb4' => 'High-Tech-Computer-Corp.', - '0bb5' => 'Murata-Manufacturing-Co.-Ltd', - '0bb6' => 'Network-Alchemy', - '0bb7' => 'Joytech-Computer-Co.-Ltd', - '0bb9' => 'Eiger-M-C-Co.-Ltd', - '0bba' => 'ZAccess-Systems', - '0bbb' => 'General-Meters-Corp.', - '0bbc' => 'Assistive-Technology-Inc.', - '0bbd' => 'System-Connection-Inc.', - '0bc0' => 'Knilink-Technology-Inc.', - '0bc1' => 'Fuw-Yng-Electronics-Co.-Ltd', - '0bc2' => 'Seagate-RSS-LLC', - '0bc3' => 'IPWireless-Inc.', - '0bc4' => 'Microcube-Corp.', - '0bc5' => 'JCN-Co.-Ltd', - '0bc6' => 'ExWAY-Inc.', - '0bc7' => 'X10-Wireless-Technology-Inc.', - '0bc8' => 'Telmax-Communications', - '0bc9' => 'ECI-Telecom-Ltd', - '0bca' => 'Startek-Engineering-Inc.', - '0bd7' => 'Andrew-Pargeter---Associates', - '0bda' => 'Realtek', - '0bdc' => 'Y-Media-Corp.', - '0bdd' => 'Orange-PCS', - '0be2' => 'Kanda-Tsushin-Kogyo-Co.-Ltd', - '0be3' => 'TOYO-Corp.', - '0be4' => 'Elka-International-Ltd', - '0be5' => 'DOME-imaging-systems-Inc.', - '0bed' => 'Silicon-Labs', - '0bee' => 'LTK-Industries-Ltd', - '0bef' => 'Way2Call-Communications', - '0bf0' => 'Pace-Micro-Technology-PLC', - '0bf1' => 'Intracom-S.A.', - '0bf2' => 'Konexx', - '0bf6' => 'Addonics-Technologies-Inc.', - '0bf7' => 'Sunny-Giken-Inc.', - '0bf8' => 'Fujitsu-Siemens-Computers', - '0c04' => 'MOTO-Development-Group-Inc.', - '0c05' => 'Appian-Graphics', - '0c06' => 'Hasbro-Games-Inc.', - '0c07' => 'Infinite-Data-Storage-Ltd', - '0c08' => 'Agate', - '0c09' => 'Comjet-Information-System', - '0c0a' => 'Highpoint-Technologies-Inc.', - '0c0b' => 'Dura-Micro-Inc.-Acomdata', - '0c12' => 'Zeroplus', - '0c15' => 'Iris-Graphics', - '0c16' => 'Gyration-Inc.', - '0c17' => 'Cyberboard-A-S', - '0c18' => 'SynerTek-Korea-Inc.', - '0c19' => 'cyberPIXIE-Inc.', - '0c1a' => 'Silicon-Motion-Inc.', - '0c1b' => 'MIPS-Technologies', - '0c22' => 'Tally-Printer-Corp.', - '0c23' => 'Lernout-+-Hauspie', - '0c24' => 'Taiyo-Yuden', - '0c25' => 'Sampo-Corp.', - '0c26' => 'Prolific-Technology-Inc.', - '0c27' => 'RFIDeas-Inc', - '0c2e' => 'Metro', - '0c35' => 'Eagletron-Inc.', - '0c36' => 'E-Ink-Corp.', - '0c37' => 'e.Digital', - '0c39' => 'IFR', - '0c3b' => 'Komatsu-Ltd', - '0c3c' => 'Radius-Co.-Ltd', - '0c3d' => 'Innocom-Inc.', - '0c3e' => 'Nextcell-Inc.', - '0c44' => 'Motorola-iDEN', - '0c45' => 'Microdia-Ltd', - '0c4b' => 'Reiner-SCT-Kartensysteme-GmbH', - '0c52' => 'Sealevel-Systems-Inc.', - '0c53' => 'ViewPLUS-Inc.', - '0c54' => 'Glory-Ltd', - '0c55' => 'Spectrum-Digital-Inc.', - '0c56' => 'Billion-Bright-Ltd', - '0c58' => 'Vidar-Systems-Corp.', - '0c5a' => 'TRS-International-Mfg.-Inc.', - '0c5e' => 'Xytronix-Research---Design', - '0c60' => 'Apogee-Electronics-Corp.', - '0c62' => 'Chant-Sincere-Co.-Ltd', - '0c63' => 'Toko-Inc.', - '0c65' => 'Eminence-Enterprise-Co.-Ltd', - '0c66' => 'Rexon-Electronics-Corp.', - '0c67' => 'Concept-Telecom-Ltd', - '0c70' => 'MCT-Elektronikladen', - '0c74' => 'Optronic-Laboratories-Inc.', - '0c76' => 'JMTek-LLC.', - '0c77' => 'Sipix-Group-Ltd', - '0c78' => 'Detto-Corp.', - '0c7a' => 'Wing-Span-Enterprise-Co.-Ltd', - '0c86' => 'NDA-Technologies-Inc.', - '0c88' => 'Kyocera-Wireless-Corp.', - '0c89' => 'Honda-Tsushin-Kogyo-Co.-Ltd', - '0c8a' => 'Pathway-Connectivity-Inc.', - '0c8b' => 'Wavefly-Corp.', - '0c8c' => 'Coactive-Networks', - '0c8d' => 'Tempo', - '0c8e' => 'Cesscom-Co.-Ltd', - '0c8f' => 'Applied-Microsystems', - '0c98' => 'Berkshire-Products-Inc.', - '0c99' => 'Innochips-Co.-Ltd', - '0c9a' => 'Hanwool-Robotics-Corp.', - '0c9b' => 'Jobin-Yvon-Inc.', - '0c9d' => 'SemTek', - '0ca2' => 'Zyfer', - '0ca3' => 'Sega-Corp.', - '0ca4' => 'ST-T-Instrument-Corp.', - '0ca5' => 'BAE-Systems-Canada-Inc.', - '0ca6' => 'Castles-Technology-Co.-Ltd', - '0cad' => 'Motorola-CGISS', - '0cae' => 'Ascom-Business-Systems-Ltd', - '0caf' => 'Buslink', - '0cb0' => 'Flying-Pig-Systems', - '0cb1' => 'Innovonics-Inc.', - '0cb6' => 'Celestix-Networks-Pte.-Ltd', - '0cb7' => 'Singatron-Enterprise-Co.-Ltd', - '0cb8' => 'Opticis-Co.-Ltd', - '0cbc' => 'Palmax-Technology-Co.-Ltd', - '0cbe' => 'Keryx-Technologies-Inc.', - '0cc0' => 'Kuon-Yi-Industrial-Corp.', - '0cc1' => 'Given-Imaging-Ltd', - '0cc2' => 'Timex-Corp.', - '0cc3' => 'Rimage-Corp.', - '0cc4' => 'emsys-GmbH', - '0cc5' => 'Sendo', - '0cc6' => 'Intermagic-Corp.', - '0cc7' => 'Kontron-Medical-AG', - '0cc8' => 'Technotools-Corp.', - '0cc9' => 'BroadMAX-Technologies-Inc.', - '0cca' => 'Amphenol', - '0ccb' => 'SKNet-Co.-Ltd', - '0ccc' => 'Domex-Technology-Corp.', - '0ccd' => 'TerraTec-Electronic-GmbH', - '0cd4' => 'Bang-Olufsen', - '0cd5' => 'LabJack-Corporation', - '0cd7' => 'NewChip-S.r.l.', - '0cd8' => 'JS-Digitech-Inc.', - '0cd9' => 'Hitachi-Shin-Din-Cable-Ltd', - '0cde' => 'Z-Com', - '0ce9' => 'pico-Technology', - '0cf1' => 'e-Conn-Electronic-Co.-Ltd', - '0cf2' => 'ENE-Technology-Inc.', - '0cf3' => 'Atheros', - '0cf4' => 'Fomtex-Corp.', - '0cf5' => 'Cellink-Co.-Ltd', - '0cf6' => 'Compucable-Corp.', - '0cf7' => 'ishoni-Networks', - '0cf8' => 'Clarisys-Inc.', - '0cfa' => 'Inviso-Inc.', - '0cfc' => 'Minolta-QMS-Inc.', - '0cff' => 'SAFA-MEDIA-Co.-Ltd.', - '0d08' => 'UTStarcom', - '0d0b' => 'Contemporary-Controls', - '0d0c' => 'Astron-Electronics-Co.-Ltd', - '0d0d' => 'MKNet-Corp.', - '0d0e' => 'Hybrid-Networks-Inc.', - '0d0f' => 'Feng-Shin-Cable-Co.-Ltd', - '0d10' => 'Elastic-Networks', - '0d11' => 'Maspro-Denkoh-Corp.', - '0d12' => 'Hansol-Electronics-Inc.', - '0d13' => 'BMF-Corp.', - '0d14' => 'Array-Comm-Inc.', - '0d15' => 'OnStream-b.v.', - '0d17' => 'NALTEC-Inc.', - '0d18' => 'coaXmedia', - '0d28' => 'NXP', - '0d33' => 'AirSpeak-Inc.', - '0d34' => 'Rearden-Steel-Technologies', - '0d35' => 'Dah-Kun-Co.-Ltd', - '0d3a' => 'Posiflex-Technologies-Inc.', - '0d3c' => 'Sri-Cable-Technology-Ltd', - '0d3d' => 'Tangtop-Technology-Co.-Ltd', - '0d3e' => 'Fitcom-inc.', - '0d3f' => 'MTS-Systems-Corp.', - '0d40' => 'Ascor-Inc.', - '0d42' => 'Full-Der-Co.-Ltd', - '0d46' => 'Kobil-Systems-GmbH', - '0d49' => 'Maxtor', - '0d4a' => 'NF-Corp.', - '0d4b' => 'Grape-Systems-Inc.', - '0d4c' => 'Tedas-AG', - '0d4d' => 'Coherent-Inc.', - '0d4e' => 'Agere-Systems-Netherland-BV', - '0d4f' => 'EADS-Airbus-France', - '0d50' => 'Cleware-GmbH', - '0d51' => 'Volex-Asia-Pte.-Ltd', - '0d53' => 'HMI-Co.-Ltd', - '0d54' => 'Holon-Corp.', - '0d55' => 'ASKA-Technologies-Inc.', - '0d56' => 'AVLAB-Technology-Inc.', - '0d57' => 'Solomon-Microtech-Ltd', - '0d5c' => 'SMC-Networks-Inc.', - '0d5e' => 'Myacom-Ltd', - '0d5f' => 'CSI-Inc.', - '0d60' => 'IVL-Technologies-Ltd', - '0d62' => 'Darfon-Electronics-Corp.', - '0d63' => 'Fritz-Gegauf-AG', - '0d64' => 'DXG-Technology-Corp.', - '0d65' => 'KMJP-Co.-Ltd', - '0d66' => 'TMT', - '0d67' => 'Advanet-Inc.', - '0d69' => 'NSI', - '0d6a' => 'Megapower-International-Corp.', - '0d6b' => 'And-Or-Logic', - '0d70' => 'Try-Computer-Co.-Ltd', - '0d71' => 'Hirakawa-Hewtech-Corp.', - '0d72' => 'Winmate-Communication-Inc.', - '0d73' => 'Hits-Communications-Inc.', - '0d76' => 'MFP-Korea-Inc.', - '0d77' => 'Power-Sentry-Newpoint', - '0d78' => 'Japan-Distributor-Corp.', - '0d7a' => 'MARX-Datentechnik-GmbH', - '0d7b' => 'Wellco-Technology-Co.-Ltd', - '0d7d' => 'Phison-Electronics-Corp.', - '0d7f' => 'Essential-Reality-LLC', - '0d81' => 'TechnoVision', - '0d83' => 'Think-Outside-Inc.', - '0d87' => 'Dolby-Laboratories-Inc.', - '0d89' => 'Oz-Software', - '0d8a' => 'King-Jim-Co.-Ltd', - '0d8b' => 'Ascom-Telecommunications-Ltd', - '0d8c' => 'C-Media-Electronics-Inc.', - '0d8e' => 'Global-Sun-Technology-Inc.', - '0d8f' => 'Pitney-Bowes', - '0d90' => 'Sure-Fire-Electrical-Corp.', - '0d96' => 'Skanhex-Technology-Inc.', - '0d98' => 'Mars-Semiconductor-Corp.', - '0d99' => 'Trazer-Technologies-Inc.', - '0d9a' => 'RTX-Telecom-AS', - '0d9b' => 'Tat-Shing-Electrical-Co.', - '0d9d' => 'Sanwa-Supply-Inc.', - '0d9e' => 'Avaya', - '0d9f' => 'Powercom-Co.-Ltd', - '0da0' => 'Danger-Research', - '0da4' => 'Polar-Electro-OY', - '0da7' => 'IOGear-Inc.', - '0da8' => 'softDSP-Co.-Ltd', - '0dab' => 'Cubig-Group', - '0dad' => 'Westover-Scientific', - '0db0' => 'Micro-Star-International', - '0db1' => 'Wen-Te-Electronics-Co.-Ltd', - '0db3' => 'Tekram-Technology-Co.-Ltd', - '0db7' => 'ELCON-Systemtechnik', - '0dbc' => 'A-D-Medical', - '0dbf' => 'Quik-Tech-Solutions', - '0dc1' => 'Tamagawa-Seiki-Co.-Ltd', - '0dc4' => 'Macpower-Peripherals-Ltd', - '0dc5' => 'SDK-Co.-Ltd', - '0dc7' => 'First-Cable-Line-Inc.', - '0dcd' => 'NetworkFab-Corp.', - '0dd0' => 'Access-Solutions', - '0dd1' => 'Contek-Electronics-Co.-Ltd', - '0dd3' => 'MediaQ', - '0dd4' => 'Custom-Engineering-SPA', - '0dd5' => 'California-Micro-Devices', - '0dd7' => 'Kocom-Co.-Ltd', - '0dd8' => 'Netac-Technology-Co.-Ltd', - '0dd9' => 'HighSpeed-Surfing', - '0ddb' => 'Tamarack-Inc.', - '0ddd' => 'Datelink-Technology-Co.-Ltd', - '0dde' => 'Ubicom-Inc.', - '0de0' => 'BD-Consumer-Healthcare', - '0ded' => 'Novasonics', - '0dee' => 'Lifetime-Memory-Products', - '0def' => 'Full-Rise-Electronic-Co.-Ltd', - '0df4' => 'NET-SYS', - '0df6' => 'Sitecom-Europe-B.V.', - '0e03' => 'Nippon-Systemware-Co.-Ltd', - '0e08' => 'Winbest-Technology-Co.-Ltd', - '0e0b' => 'Amigo-Technology-Inc.', - '0e0c' => 'Gesytec', - '0e0f' => 'VMware-Inc.', - '0e16' => 'JMTek-LLC', - '0e17' => 'Walex-Electronic-Ltd', - '0e1b' => 'Crewave', - '0e20' => 'Pegasus-Technologies-Ltd.', - '0e21' => 'Cowon-Systems-Inc.', - '0e22' => 'Symbian-Ltd.', - '0e25' => 'VinChip-Systems-Inc.', - '0e26' => 'J-Phone-East-Co.-Ltd', - '0e30' => 'HeartMath-LLC', - '0e34' => 'Micro-Computer-Control-Corp.', - '0e35' => '3Pea-Technologies-Inc.', - '0e36' => 'TiePie-engineering', - '0e38' => 'Stratitec-Inc.', - '0e3a' => 'Neostar-Technology-Co.-Ltd', - '0e3b' => 'Mansella-Ltd', - '0e41' => 'Line6-Inc.', - '0e48' => 'Julia-Corp.-Ltd', - '0e4c' => 'Radica-Games-Ltd', - '0e55' => 'Speed-Dragon-Multimedia-Ltd', - '0e5a' => 'Active-Co.-Ltd', - '0e5d' => 'Neltron-Industrial-Co.-Ltd', - '0e5e' => 'Conwise-Technology-Co.-Ltd.', - '0e66' => 'Hawking-Technologies', - '0e67' => 'Fossil-Inc.', - '0e6a' => 'Megawin-Technology-Co.-Ltd', - '0e6f' => 'Logic3', - '0e72' => 'Hsi-Chin-Electronics-Co.-Ltd', - '0e75' => 'TVS-Electronics-Ltd', - '0e79' => 'Archos-Inc.', - '0e7b' => 'On-Tech-Industry-Co.-Ltd', - '0e7e' => 'Gmate-Inc.', - '0e83' => 'Shin-An-Wire---Cable-Co.', - '0e8d' => 'MediaTek-Inc.', - '0e8f' => 'GreenAsia-Inc.', - '0e90' => 'WiebeTech-LLC', - '0e91' => 'VTech-Engineering-Canada-Ltd', - '0e92' => 'Cs-Glory-Enterprise-Co.-Ltd', - '0e93' => 'eM-Technics-Co.-Ltd', - '0e95' => 'Future-Technology-Co.-Ltd', - '0e96' => 'Aplux-Communications-Ltd', - '0e97' => 'Fingerworks-Inc.', - '0e99' => 'Parallel-Dice-Co.-Ltd', - '0e9a' => 'TA-HSING-Industries-Ltd', - '0e9b' => 'ADTEC-Corp.', - '0e9c' => 'Streamzap-Inc.', - '0e9f' => 'Tamura-Corp.', - '0ea0' => 'Ours-Technology-Inc.', - '0ea6' => 'Nihon-Computer-Co.-Ltd', - '0ea7' => 'MSL-Enterprises-Corp.', - '0ea8' => 'CenDyne-Inc.', - '0ead' => 'Humax-Co.-Ltd', - '0eb0' => 'NovaTech', - '0eb1' => 'WIS-Technologies-Inc.', - '0eb2' => 'Y-S-Electronic-Co.-Ltd', - '0eb3' => 'Saint-Technology-Corp.', - '0eb7' => 'Endor-AG', - '0ebe' => 'VWeb-Corp.', - '0ec1' => 'Abit-Computer-Corp.', - '0ec2' => 'Sweetray-Industrial-Ltd', - '0ec3' => 'Axell-Co.-Ltd', - '0ec4' => 'Ballracing-Developments-Ltd', - '0ec6' => 'InnoVISION-Multimedia-Ltd', - '0ec7' => 'Theta-Link-Corp.', - '0ecd' => 'Lite-On-IT-Corp.', - '0ece' => 'TaiSol-Electronics-Co.-Ltd', - '0ecf' => 'Phogenix-Imaging-LLC', - '0ed1' => 'WinMaxGroup', - '0ed2' => 'Kyoto-Micro-Computer-Co.-Ltd', - '0ed3' => 'Wing-Tech-Enterprise-Co.-Ltd', - '0ed5' => 'Fiberbyte', - '0eda' => 'Noriake-Itron-Corp.', - '0edf' => 'e-MDT-Co.-Ltd', - '0ee0' => 'Shima-Seiki-Mfg.-Ltd', - '0ee1' => 'Sarotech-Co.-Ltd', - '0ee2' => 'AMI-Semiconductor-Inc.', - '0ee3' => 'ComTrue-Technology-Corp.', - '0ee4' => 'Sunrich-Technology-Ltd', - '0eef' => 'D-WAV-Scientific-Co.-Ltd', - '0ef0' => 'Hitachi-Cable-Ltd', - '0ef1' => 'Aichi-Micro-Intelligent-Corp.', - '0ef2' => 'I-O-Magic-Corp.', - '0ef3' => 'Lynn-Products-Inc.', - '0ef4' => 'DSI-Datotech', - '0ef5' => 'PointChips', - '0ef6' => 'Yield-Microelectronics-Corp.', - '0ef7' => 'SM-Tech-Co.-Ltd-Tulip', - '0efd' => 'Oasis-Semiconductor', - '0efe' => 'Wem-Technology-Inc.', - '0f0c' => 'CAS-Corp.', - '0f0d' => 'Hori-Co.-Ltd', - '0f0e' => 'Energy-Full-Corp.', - '0f11' => 'LD-Didactic-GmbH', - '0f12' => 'Mars-Engineering-Corp.', - '0f13' => 'Acetek-Technology-Co.-Ltd', - '0f18' => 'Finger-Lakes-Instrumentation', - '0f19' => 'Oracom-Co.-Ltd', - '0f1b' => 'Onset-Computer-Corp.', - '0f1c' => 'Funai-Electric-Co.-Ltd', - '0f1d' => 'Iwill-Corp.', - '0f21' => 'IOI-Technology-Corp.', - '0f22' => 'Senior-Industries-Inc.', - '0f24' => 'Flex-P-Industries-Snd.-Bhd.', - '0f2d' => 'ViPower-Inc.', - '0f2f' => 'Priva-Design-Services', - '0f30' => 'Jess-Technology-Co.-Ltd', - '0f31' => 'Chrysalis-Development', - '0f37' => 'Kokuyo-Co.-Ltd', - '0f38' => 'Nien-Yi-Industrial-Corp.', - '0f3d' => 'Airprime-Incorporated', - '0f41' => 'RDC-Semiconductor-Co.-Ltd', - '0f44' => 'Polhemus', - '0f4b' => 'St.-John-Technology-Co.-Ltd', - '0f4c' => 'WorldWide-Cable-Opto-Corp.', - '0f4d' => 'Microtune-Inc.', - '0f4e' => 'Freedom-Scientific', - '0f52' => 'Wing-Key-Electrical-Co.-Ltd', - '0f55' => 'AmbiCom-Inc.', - '0f5c' => 'Prairiecomm-Inc.', - '0f5d' => 'NewAge-International-LLC', - '0f5f' => 'Key-Technology-Corp.', - '0f60' => 'NTK-Ltd', - '0f61' => 'Varian-Inc.', - '0f62' => 'Acrox-Technologies-Co.-Ltd', - '0f63' => 'LeapFrog-Enterprises', - '0f68' => 'Kobe-Steel-Ltd', - '0f69' => 'Dionex-Corp.', - '0f6a' => 'Vibren-Technologies-Inc.', - '0f6e' => 'INTELLIGENT-SYSTEMS', - '0f73' => 'DFI', - '0f7c' => 'DQ-Technology-Inc.', - '0f7d' => 'NetBotz-Inc.', - '0f7e' => 'Fluke-Corp.', - '0f88' => 'VTech-Holdings-Ltd', - '0f8b' => 'Yazaki-Corp.', - '0f8d' => 'Uniwill-Computer-Corp.', - '0f8e' => 'Kingnet-Technology-Co.-Ltd', - '0f8f' => 'Soma-Networks', - '0f97' => 'CviLux-Corp.', - '0f98' => 'CyberBank-Corp.', - '0f9c' => 'Hyun-Won-Inc.', - '0f9e' => 'Lucent-Technologies', - '0fa3' => 'Starconn-Electronic-Co.-Ltd', - '0fa4' => 'ATL-Technology', - '0fa5' => 'Sotec-Co.-Ltd', - '0fa7' => 'Epox-Computer-Co.-Ltd', - '0fa8' => 'Logic-Controls-Inc.', - '0faf' => 'Winpoint-Electronic-Corp.', - '0fb1' => 'Inclose-Design-Inc.', - '0fb8' => 'Wistron-Corp.', - '0fb9' => 'AACom-Corp.', - '0fbb' => 'Bitwise-Systems-Inc.', - '0fc1' => 'Mitac-Internatinal-Corp.', - '0fc5' => 'Delcom-Engineering', - '0fc6' => 'Dataplus-Supplies-Inc.', - '0fca' => 'Research-In-Motion-Ltd.', - '0fcf' => 'Dynastream-Innovations-Inc.', - '0fd0' => 'Tulip-Computers-B.V.', - '0fd1' => 'Giant-Electronics-Ltd.', - '0fd4' => 'Tenovis-GmbH---Co.-KG', - '0fdc' => 'Micro-Plus', - '0fe4' => 'IN-Tech-Electronics-Ltd', - '0fe5' => 'Greenconn-U.S.A.-Inc.', - '0fe9' => 'DVICO', - '0fea' => 'United-Computer-Accessories', - '0feb' => 'CRS-Electronic-Co.-Ltd', - '0fec' => 'UMC-Electronics-Co.-Ltd', - '0fed' => 'Access-Co.-Ltd', - '0fee' => 'Xsido-Corp.', - '0fef' => 'MJ-Research-Inc.', - '0ff6' => 'Core-Valley-Co.-Ltd', - '0fff' => 'Aopen-Inc.', - '1000' => 'Speed-Tech-Corp.', - '1003' => 'Sigma-Corp.', - '1004' => 'LG-Electronics-Inc.', - '1005' => 'Apacer-Technology-Inc.', - '1006' => 'iRiver-Ltd.', - '1009' => 'Emuzed-Inc.', - '100a' => 'AV-Chaseway-Ltd', - '100b' => 'Chou-Chin-Industrial-Co.-Ltd', - '100d' => 'Netopia-Inc.', - '1010' => 'Fukuda-Denshi-Co.-Ltd', - '1011' => 'Mobile-Media-Tech.', - '1014' => 'Densitron-Technologies-PLC', - '1015' => 'Softronics-Pty.-Ltd', - '1020' => 'Labtec', - '1022' => 'Shinko-Shoji-Co.-Ltd', - '1025' => 'Hyper-Paltek', - '1026' => 'Newly-Corp.', - '1027' => 'Time-Domain', - '1028' => 'Inovys-Corp.', - '1029' => 'Atlantic-Coast-Telesys', - '102a' => 'Ramos-Technology-Co.-Ltd', - '102b' => 'Infotronic-America-Inc.', - '102c' => 'Etoms-Electronics-Corp.', - '102d' => 'Winic-Corp.', - '1031' => 'Comax-Technology-Inc.', - '1032' => 'C-One-Technology-Corp.', - '1033' => 'Nucam-Corp.', - '1038' => 'Ideazon-Inc.', - '1039' => 'Silicon-Integrated-Systems', - '103d' => 'Stanton', - '1043' => 'iCreate-Technologies-Corp.', - '1044' => 'Chu-Yuen-Enterprise-Co.-Ltd', - '1048' => 'Targus-Group-International', - '104b' => 'Mylex---Buslogic', - '104c' => 'AMCO-TEC-International-Inc.', - '104d' => 'Newport-Corporation', - '104f' => 'WB-Electronics', - '1050' => 'Yubico.com', - '1053' => 'Immanuel-Electronics-Co.-Ltd', - '1054' => 'BMS-International-Beheer-N.V.', - '1056' => 'Hsin-Chen-Ent-Co.-Ltd', - '1057' => 'ON-Semiconductor', - '1059' => 'Giesecke---Devrient-GmbH', - '105d' => 'Delkin-Devices-Inc.', - '1060' => 'Easthome-Industrial-Co.-Ltd', - '1065' => 'CCYU-Technology', - '106a' => 'Loyal-Legend-Ltd', - '106c' => 'Curitel-Communications-Inc.', - '106d' => 'San-Chieh-Manufacturing-Ltd', - '106e' => 'ConectL', - '106f' => 'Money-Controls', - '1076' => 'GCT-Semiconductor-Inc.', - '107b' => 'Gateway-Inc.', - '107d' => 'Arlec-Australia-Ltd', - '107e' => 'Midoriya-Electric-Co.-Ltd', - '107f' => 'KidzMouse-Inc.', - '1082' => 'Shin-Etsukaken-Co.-Ltd', - '1083' => 'Canon-Electronics-Inc.', - '1084' => 'Pantech-Co.-Ltd', - '108a' => 'Chloride-Power-Protection', - '108b' => 'Grand-tek-Technology-Co.-Ltd', - '108c' => 'Robert-Bosch-GmbH', - '108e' => 'Lotes-Co.-Ltd.', - '1099' => 'Surface-Optics-Corp.', - '109a' => 'DATASOFT-Systems-GmbH', - '109f' => 'eSOL-Co.-Ltd', - '10a0' => 'Hirotech-Inc.', - '10a3' => 'Mitsubishi-Materials-Corp.', - '10a9' => 'SK-Teletech-Co.-Ltd', - '10aa' => 'Cables-To-Go', - '10ab' => 'USI-Co.-Ltd', - '10ac' => 'Honeywell-Inc.', - '10ae' => 'Princeton-Technology-Corp.', - '10af' => 'Liebert-Corp.', - '10b5' => 'Comodo-PLX-', - '10b8' => 'DiBcom', - '10bb' => 'TM-Technology-Inc.', - '10bc' => 'Dinging-Technology-Co.-Ltd', - '10bd' => 'TMT-Technology-Inc.', - '10bf' => 'SmartHome', - '10c5' => 'Sanei-Electric-Inc.', - '10c6' => 'Intec-Inc.', - '10cb' => 'Eratech', - '10cc' => 'GBM-Connector-Co.-Ltd', - '10cd' => 'Kycon-Inc.', - '10ce' => 'Silicon-Labs', - '10cf' => 'Velleman-Components-Inc.', - '10d1' => 'Hottinger-Baldwin-Measurement', - '10d4' => 'Man-Boon-Manufactory-Ltd', - '10d5' => 'Uni-Class-Technology-Co.-Ltd', - '10de' => 'Authenex-Inc.', - '10df' => 'In-Win-Development-Inc.', - '10e0' => 'Post-Op-Video-Inc.', - '10e1' => 'CablePlus-Ltd', - '10e2' => 'Nada-Electronics-Ltd', - '10ec' => 'Vast-Technologies-Inc.', - '10f0' => 'Nexio-Co.-Ltd', - '10f1' => 'Importek', - '10f5' => 'Turtle-Beach', - '10fb' => 'Pictos-Technologies-Inc.', - '10fd' => 'Anubis-Electronics-Ltd', - '1100' => 'VirTouch-Ltd', - '1101' => 'EasyPass-Industrial-Co.-Ltd', - '1108' => 'Brightcom-Technologies-Ltd', - '110a' => 'Moxa-Technologies-Co.-Ltd.', - '1111' => 'Pandora-International-Ltd.', - '1112' => 'YM-ELECTRIC-CO.-Ltd', - '1113' => 'Medion-AG', - '111e' => 'VSO-Electric-Co.-Ltd', - '112a' => 'RedRat', - '112f' => 'Cellon-International-Inc.', - '1130' => 'Tenx-Technology-Inc.', - '1136' => 'CTS-Electronincs', - '113c' => 'Arin-Tech-Co.-Ltd', - '113d' => 'Mapower-Electronics-Co.-Ltd', - '1141' => 'V-One-Multimedia-Pte.-Ltd', - '1142' => 'CyberScan-Technologies-Inc.', - '1145' => 'Japan-Radio-Company', - '114b' => 'Sphairon-Access-Systems-GmbH', - '114f' => 'Wavecom', - '115b' => 'Salix-Technology-Co.-Ltd.', - '1162' => 'Secugen-Corp.', - '1163' => 'DeLorme-Publishing-Inc.', - '1165' => 'Telson-Electronics-Co.-Ltd', - '1167' => 'Salient-Systems-Corp.', - '1168' => 'BizConn-International-Corp.', - '116e' => 'Gigastorage-Corp.', - '116f' => 'Silicon-10-Technology-Corp.', - '1175' => 'Shengyih-Steel-Mold-Co.-Ltd', - '117d' => 'Santa-Electronic-Inc.', - '117e' => 'JNC-Inc.', - '1182' => 'Venture-Corp.-Ltd', - '1184' => 'Kyocera-Elco-Corp.', - '1188' => 'Bloomberg-L.P.', - '118f' => 'You-Yang-Technology-Co.-Ltd', - '1190' => 'Tripace', - '1196' => 'Yankee-Robotics-LLC', - '1197' => 'Technoimagia-Co.-Ltd', - '1198' => 'StarShine-Technology-Corp.', - '1199' => 'Sierra-Wireless-Inc.', - '119a' => 'ZHAN-QI-Technology-Co.-Ltd', - '119b' => 'ruwido-austria-GmbH', - '11a0' => 'Chipcon-AS', - '11a3' => 'Technovas-Co.-Ltd', - '11aa' => 'GlobalMedia-Group-LLC', - '11ab' => 'Exito-Electronics-Co.-Ltd', - '11b0' => 'ATECH-FLASH-TECHNOLOGY', - '11c5' => 'Inmax', - '11db' => 'Topfield-Co.-Ltd.', - '11e6' => 'K.I.-Technology-Co.-Ltd.', - '11f5' => 'Siemens-AG', - '11f6' => 'Prolific', - '11f7' => 'Alcatel--', - '1209' => 'InterBiometrics', - '120e' => 'Hudson-Soft-Co.-Ltd', - '120f' => 'Magellan', - '1210' => 'DigiTech', - '121e' => 'Jungsoft-Co.-Ltd', - '1233' => 'Denver-Electronics', - '1234' => 'Unknown', - '1235' => 'Novation-EMS', - '1241' => 'Belkin', - '124a' => 'AirVast', - '124b' => 'Nyko-Honey-Bee', - '125c' => 'Apogee-Inc.', - '125f' => 'A-DATA-Technology-Co.-Ltd.', - '1260' => 'Standard-Microsystems-Corp.', - '1264' => 'Covidien-Energy-based-Devices', - '1266' => 'Pirelli-Broadband-Solutions', - '1267' => 'Logic3---SpectraVideo-plc', - '126c' => 'Aristocrat-Technologies', - '126d' => 'Bel-Stewart', - '126e' => 'Strobe-Data-Inc.', - '126f' => 'TwinMOS', - '1274' => 'Ensoniq', - '1283' => 'zebris-Medical-GmbH', - '1286' => 'Marvell-Semiconductor-Inc.', - '1292' => 'Innomedia', - '1293' => 'Belkin-Components-hex', - '1294' => 'RISO-KAGAKU-CORP.', - '129b' => 'CyberTAN-Technology', - '12a7' => 'Trendchip-Technologies-Corp.', - '12c4' => 'Autocue-Group-Ltd', - '12d1' => 'Huawei-Technologies-Co.-Ltd.', - '12d6' => 'EMS-Dr.-Thomas-Wuensche', - '12d7' => 'BETTER-WIRE-FACTORY-CO.-LTD.', - '12e6' => 'Waldorf-Music-GmbH', - '12ef' => 'Tapwave-Inc.', - '12f7' => 'Memorex-Products-Inc.', - '12fd' => 'AIN-Comm.-Technology-Co.-Ltd', - '12ff' => 'Fascinating-Electronics-Inc.', - '1307' => 'Transcend-Information-Inc.', - '1308' => 'Shuttle-Inc.', - '1310' => 'Roper', - '1312' => 'ICS-Electronics', - '131d' => 'Natural-Point', - '132a' => 'Envara-Inc.', - '132b' => 'KONICA-MINOLTA', - '1342' => 'Mobility', - '1345' => 'Sino-Lite-Technology-Corp.', - '1347' => 'Moravian-Instruments', - '134c' => 'PanJit-International-Inc.', - '1357' => 'P-E-Microcomputer-Systems', - '1366' => 'SEGGER', - '136b' => 'STEC', - '1370' => 'Swissbit', - '1371' => 'CNet-Technology-Inc.', - '1376' => 'Vimtron-Electronics-Co.-Ltd.', - '137b' => 'SCAPS-GmbH', - '1385' => 'Netgear', - '138a' => 'Validity-Sensors-Inc.', - '138e' => 'Jungo-LTD', - '1390' => 'TOMTOM-B.V.', - '1391' => 'IdealTEK-Inc.', - '1395' => 'Sennheiser-Communications', - '1397' => 'BEHRINGER-International-GmbH', - '1398' => 'Q-tec', - '13ad' => 'Baltech', - '13b0' => 'PerkinElmer-Optoelectronics', - '13b1' => 'Linksys', - '13b2' => 'Alesis', - '13b3' => 'Nippon-Dics-Co.-Ltd.', - '13ba' => 'Unknown', - '13be' => 'Ricoh-Printing-Systems-Ltd.', - '13cf' => 'Wisair-Ltd.', - '13d0' => 'Techsan-Electronics-Co.-Ltd.', - '13d2' => 'Shark-Multimedia', - '13d3' => 'IMC-Networks', - '13dc' => 'ALEREON-INC.', - '13dd' => 'i.Tech-Dynamic-Limited', - '13e5' => 'Rane', - '13e6' => 'TechnoScope-Co.-Ltd.', - '13ec' => 'Zydacron', - '13fd' => 'Initio-Corporation', - '1400' => 'Axxion-Group-Corp.', - '1402' => 'Bowe-Bell---Howell', - '1403' => 'Sitronix', - '140e' => 'Telechips-Inc.', - '1410' => 'Novatel-Wireless', - '1419' => 'ABILITY-ENTERPRISE-CO.-LTD.', - '142a' => 'Thales-E-Transactions', - '142b' => 'Arbiter-Systems-Inc.', - '1430' => 'RedOctane', - '1431' => 'Pertech-Resources-Inc.', - '1435' => 'Wistron-NeWeb', - '1436' => 'Denali-Software-Inc.', - '143c' => 'Altek-Corporation', - '1443' => 'Digilent', - '1453' => 'Radio-Shack', - '145f' => 'Trust', - '1460' => 'Tatung-Co.', - '1461' => 'Staccato-Communications', - '1462' => 'Micro-Star-International', - '1472' => 'Huawei-3Com', - '147e' => 'Upek', - '147f' => 'Hama-GmbH---Co.-KG', - '1482' => 'Vaillant', - '1484' => 'Elsa-AG-hex', - '1485' => 'Silicom', - '1487' => 'DSP-Group-Ltd.', - '148e' => 'EVATRONIX-SA', - '148f' => 'Ralink', - '1497' => 'Panstrong-Company-Ltd.', - '1498' => 'Microtek-International-Inc.', - '149a' => 'Imagination-Technologies', - '14aa' => 'WideView-Technology-Inc.', - '14ad' => 'CTK-Corporation', - '14ae' => 'Printronix-Inc.', - '14af' => 'ATP-Electronics-Inc.', - '14b0' => 'StarTech.com-Ltd.', - '14b2' => 'Ralink', - '14c0' => 'Rockwell-Automation-Inc.', - '14c2' => 'Gemlight-Computer-Ltd', - '14cd' => 'Super-Top', - '14d8' => 'JAMER-INDUSTRIES-CO.-LTD.', - '14dd' => 'Raritan-Computer-Inc.', - '14e1' => 'Dialogue-Technology-Corp.', - '14ea' => 'Planex-Communications', - '14ed' => 'Shure-Inc.', - '14f7' => 'TechniSat-Digital-GmbH', - '1500' => 'Ellisys', - '1501' => 'Pine-Tum-Enterprise-Co.-Ltd.', - '1513' => 'medMobile', - '1514' => 'Actel', - '1516' => 'CompUSA', - '1518' => 'Cheshire-Engineering-Corp.', - '1520' => 'Bitwire-Corp.', - '1524' => 'ENE-Technology-Inc', - '1527' => 'Silicon-Portals', - '1529' => 'UBIQUAM-Co.-Ltd.', - '152e' => 'LG-HLDS', - '1532' => 'Razer-USA-Ltd', - '1546' => 'U-Blox-AG', - '154a' => 'Celectronic-GmbH', - '154b' => 'PNY', - '154d' => 'ConnectCounty-Holdings-Berhad', - '1554' => 'Prolink-Microsystems-Corp.', - '1557' => 'OQO', - '1568' => 'Sunf-Pu-Technology-Co.-Ltd', - '156f' => 'Quantum-Corporation', - '1570' => 'ALLTOP-TECHNOLOGY-CO.-LTD.', - '157b' => 'Ketron-SRL', - '157e' => 'TRENDnet', - '1582' => 'Fiberline', - '1587' => 'SMA-Technologie-AG', - '158d' => 'Oakley-Inc.', - '15a2' => 'Freescale-Semiconductor-Inc.', - '15a4' => 'Afatech-Technologies-Inc.', - '15a8' => 'Teams-Power-Limited', - '15a9' => 'Gemtek', - '15ad' => 'VMware-Inc.', - '15ba' => 'Olimex-Ltd.', - '15c0' => 'XL-Imaging', - '15c2' => 'SoundGraph-Inc.', - '15c6' => 'Laboratoires-MXM', - '15c8' => 'KTF-Technologies', - '15c9' => 'D-Box-Technologies', - '15ca' => 'Textech-International-Ltd.', - '15d5' => 'Coulomb-Electronics-Ltd.', - '15d9' => 'Trust-International-B.V.', - '15dc' => 'Hynix-Semiconductor-Inc.', - '15e0' => 'Seong-Ji-Industrial-Co.-Ltd.', - '15e1' => 'RSA', - '15e8' => 'SohoWare', - '15e9' => 'Pacific-Digital-Corp.', - '15ec' => 'Belcarra-Technologies-Corp.', - '15f4' => 'HanfTek', - '1604' => 'Tascam', - '1606' => 'Umax', - '1608' => 'Inside-Out-Networks-hex', - '160a' => 'VIA-Technologies-Inc.', - '1614' => 'Amoi-Electronics', - '1621' => 'Wionics-Research', - '1628' => 'Stonestreet-One-Inc.', - '162a' => 'Airgo-Networks-Inc.', - '162f' => 'WiQuest-Communications-Inc.', - '1630' => '2Wire-Inc.', - '1631' => 'Good-Way-Technology', - '1645' => 'Cross-Match-Technologies-GmbH', - '1649' => 'SofTec-Microsystems', - '164a' => 'ChipX', - '164c' => 'Matrix-Vision-GmbH', - '165b' => 'Frontier-Design-Group', - '1660' => 'Creatix-Polymedia-GmbH', - '1668' => 'Actiontec-Electronics-Inc', - '1669' => 'PiKRON-Ltd.-hex', - '1679' => 'Total-Phase', - '1680' => 'Golden-Bridge-Electech-Inc.', - '1681' => 'Prevo-Technologies-Inc.', - '1684' => 'Godspeed-Computer-Corp.', - '1685' => 'Delock', - '1686' => 'ZOOM-Corporation', - '1687' => 'Kingmax-Digital-Inc.', - '1688' => 'Saab-AB', - '168c' => 'Atheros', - '1690' => 'Askey-Computer-Corp.-hex', - '1697' => 'VTec-Test-Inc.', - '16a6' => 'Unigraf', - '16ab' => 'Global-Sun-Technology', - '16b4' => 'iStation', - '16b5' => 'Persentec-Inc.', - '16c0' => 'VOTI', - '16ca' => 'Wireless-Cables-Inc.', - '16cc' => 'silex-technology-Inc.', - '16d0' => 'GrauTec', - '16d5' => 'AnyDATA-Corporation', - '16d6' => 'JABLOCOM-s.r.o.', - '16d8' => 'CMOTECH-Co.-Ltd.', - '16dc' => 'Wiener-Plein---Baus', - '16f0' => 'GN-ReSound-A-S', - '16f5' => 'Futurelogic-Inc.', - '1706' => 'BlueView-Technologies-Inc.', - '1707' => 'ARTIMI', - '170b' => 'Swissonic', - '170d' => 'Avnera', - '1725' => 'Vitesse-Semiconductor', - '1726' => 'Axesstel-Inc.', - '172f' => 'Waltop-International-Corp.', - '1733' => 'Cellink-Technology-Co.-Ltd', - '1737' => 'Linksys', - '1740' => 'Senao', - '1743' => 'General-Atomics', - '174c' => 'ASMedia-Technology-Inc.', - '174f' => 'Syntek', - '1753' => 'GERTEC-Telecomunicacoes-Ltda.', - '1759' => 'LucidPort-Technology-Inc.', - '1772' => 'System-Level-Solutions-Inc.', - '1776' => 'Arowana', - '177f' => 'Sweex', - '1781' => 'Multiple-Vendors', - '1784' => 'TopSeed-Technology-Corp.', - '1787' => 'ATI-AIB', - '1796' => 'Printrex-Inc.', - '1797' => 'JALCO-CO.-LTD.', - '1799' => 'Belkin-Components', - '17a0' => 'Samson-Technologies-Corp.', - '17a4' => 'Concept2', - '17a7' => 'MICOMSOFT-CO.-LTD.', - '17b3' => 'Grey-Innovation', - '17c3' => 'Singim-International-Corp.', - '17cc' => 'Native-Instruments', - '17d0' => 'Sanford-L.P.', - '17d3' => 'Korea-Techtron-Co.-Ltd.', - '17e9' => 'Newnham-Research', - '17eb' => 'Cornice-Inc.', - '17ef' => 'Lenovo', - '17f5' => 'K.K.-Rocky', - '17f6' => 'Unicomp-Inc', - '1809' => 'Advantech', - '1822' => 'Twinhan', - '1831' => 'Gwo-Jinn-Industries-Co.-Ltd.', - '183d' => 'VIVOphone', - '1843' => 'Vaisala', - '1849' => 'ASRock-Incorporation', - '1852' => 'GYROCOM-C-C-Co.-LTD', - '1854' => 'Memory-Devices-Ltd.', - '185b' => 'Compro', - '1862' => 'Teridian-Semiconductor-Corp.', - '1870' => 'Nexio-Co.-Ltd', - '1871' => 'Aveo-Technology-Corp.', - '187c' => 'Alienware-Corporation', - '187f' => 'Siano-Mobile-Silicon', - '1892' => 'Vast-Technologies-Inc.', - '1894' => 'Topseed', - '1897' => 'Evertop-Wire-Cable-Co.', - '18a5' => 'Verbatim-Ltd', - '18b1' => 'Petalynx', - '18b4' => 'e3C-Technologies', - '18b6' => 'Mikkon-Technology-Limited', - '18b7' => 'Zotek-Electronic-Co.-Ltd.', - '18c5' => 'amit-Inc', - '18cd' => 'Ecamm', - '18d1' => 'Google-Inc.', - '18d9' => 'Kaba', - '18dd' => 'Planon-System-Solutions-Inc.', - '18e8' => 'Qcom', - '18ea' => 'Matrox-Graphics-Inc.', - '18ec' => 'Arkmicro-Technologies-Inc.', - '18fd' => 'FineArch-Inc.', - '1908' => 'GEMBIRD', - '190d' => 'Motorola-GSG', - '1914' => 'Alco-Digital-Devices-Limited', - '1915' => 'Nordic-Semiconductor-ASA', - '1926' => 'NextWindow', - '192f' => 'Avago-Technologies-Pte.', - '1941' => 'Dream-Link', - '1943' => 'Sensoray-Co.-Inc.', - '1949' => 'Lab126', - '1951' => 'Hyperstone-AG', - '1953' => 'Ironkey-Inc.', - '1954' => 'Radiient-Technologies', - '195d' => 'Itron-Technology-iONE', - '196b' => 'Wispro-Technology-Inc.', - '1970' => 'Dane-Elec-Corp.-USA', - '1977' => 'T-Logic', - '1989' => 'Nuconn-Technology-Corp.', - '198f' => 'Beceem-Communications-Inc.', - '1995' => 'Trillium-Technology-Pty.-Ltd.', - '199f' => 'Benica-Corporation', - '19a8' => 'Biforst-Technology-Inc.', - '19ab' => 'Bodelin', - '19af' => 'S-Life', - '19b2' => 'Batronix', - '19b4' => 'Celestron', - '19b5' => 'B---W-Group', - '19b6' => 'Infotech-Logistic-LLC', - '19b9' => 'Data-Robotics', - '19ca' => 'Mindtribe', - '19cf' => 'Parrot-SA', - '19d2' => 'ONDA-Communication-S.p.A.', - '19f7' => 'RODE-Microphones', - '19fa' => 'Gampaq-Co.Ltd', - '19ff' => 'Dynex', - '1a08' => 'Bellwood-International-Inc.', - '1a0a' => 'USB-IF-non-workshop', - '1a12' => 'KES-Co.-Ltd.', - '1a25' => 'Amphenol-East-Asia-Ltd.', - '1a2a' => 'Seagate-Branded-Solutions', - '1a32' => 'Quanta-Microsystems-Inc.', - '1a36' => 'Biwin-Technology-Ltd.', - '1a40' => 'TERMINUS-TECHNOLOGY-INC.', - '1a41' => 'Action-Electronics-Co.-Ltd.', - '1a4a' => 'Silicon-Image', - '1a4b' => 'SafeBoot-International-B.V.', - '1a61' => 'Abbott-Diabetes-Care', - '1a6a' => 'Spansion-Inc.', - '1a6d' => 'SamYoung-Electronics-Co.-Ltd', - '1a6e' => 'Global-Unichip-Corp.', - '1a6f' => 'Sagem-Orga-GmbH', - '1a79' => 'Bayer-Health-Care-LLC', - '1a7b' => 'Lumberg-Connect-GmbH---Co.-KG', - '1a7c' => 'Evoluent', - '1a86' => 'QinHeng-Electronics', - '1a89' => 'Dynalith-Systems-Co.-Ltd.', - '1a8b' => 'SGS-Taiwan-Ltd.', - '1a8d' => 'BandRich-Inc.', - '1a90' => 'Corsair-Voyager-GT-16GB', - '1a98' => 'Leica-Camera-AG', - '1aa4' => 'Data-Drive-Thru-Inc.', - '1aa5' => 'UBeacon-Technologies-Inc.', - '1aa6' => 'eFortune-Technology-Corp.', - '1acb' => 'Salcomp-Plc', - '1ad1' => 'Desay-Wire-Co.-Ltd.', - '1ae7' => 'X-TENSIONS', - '1b04' => 'Meilhaus-Electronic-GmBH', - '1b20' => 'MStar-Semiconductor-Inc.', - '1b22' => 'WiLinx-Corp.', - '1b26' => 'Cellex-Power-Products-Inc.', - '1b27' => 'Current-Electronics-Inc.', - '1b28' => 'NAVIsis-Inc.', - '1b32' => 'Ugobe-Life-Forms-Inc.', - '1b36' => 'ViXS-Systems-Inc.', - '1b3b' => 'iPassion-Technology-Inc.', - '1b3f' => 'Generalplus-Technology-Inc.', - '1b47' => 'Energizer-Holdings-Inc.', - '1b48' => 'Plastron-Precision-Co.-Ltd.', - '1b59' => 'K.S.-Terminals-Inc.', - '1b72' => 'ATERGI-TECHNOLOGY-CO.-LTD.', - '1b73' => 'Fresco-Logic', - '1b75' => 'Ovislink-Corp.', - '1b76' => 'Legend-Silicon-Corp.', - '1b80' => 'Afatech', - '1b8c' => 'Altium-Limited', - '1b8d' => 'e-MOVE-Technology-Co.-Ltd.', - '1b8e' => 'Amlogic-Inc.', - '1b8f' => 'MA-LABS-Inc.', - '1b96' => 'N-Trig', - '1b98' => 'YMax-Communications-Corp.', - '1b99' => 'Shenzhen-Yuanchuan-Electronic', - '1ba4' => 'Ember-Corporation', - '1ba6' => 'Abilis-Systems', - '1bad' => 'Harmonix-Music', - '1bae' => 'Vuzix-Corporation', - '1bbb' => 'T---A-Mobile-Phones', - '1bc4' => 'Ford-Motor-Co.', - '1bc5' => 'AVIXE-Technology-China-Ltd.', - '1bcf' => 'Sunplus-Innovation-Technology-Inc', - '1bde' => 'P-TWO-INDUSTRIES-INC.', - '1bf0' => 'RealVision-Inc.', - '1bf5' => 'Extranet-Systems-Inc.', - '1bfd' => 'TouchPack', - '1c02' => 'Kreton-Corporation', - '1c04' => 'QNAP-System-Inc.', - '1c0d' => 'Relm-Wireless', - '1c10' => 'Lanterra-Industrial-Co.-Ltd.', - '1c13' => 'ALECTRONIC-LIMITED', - '1c1a' => 'Datel-Electronics-Ltd.', - '1c1b' => 'Volkswagen-of-America-Inc.', - '1c1f' => 'Goldvish-S.A.', - '1c21' => 'ADDMM-LLC', - '1c27' => 'HuiYang-D---S-Cable-Co.-Ltd.', - '1c31' => 'LS-Cable-Ltd.', - '1c34' => 'SpringCard', - '1c37' => 'Authorizer-Technologies-Inc.', - '1c3d' => 'NONIN-MEDICAL-INC.', - '1c3e' => 'Wep-Peripherals', - '1c49' => 'Cherng-Weei-Technology-Corp.', - '1c4f' => 'SiGma-Micro', - '1c6c' => 'Skydigital-Inc.', - '1c73' => 'AMT', - '1c77' => 'Kaetat-Industrial-Co.-Ltd.', - '1c78' => 'Datascope-Corp.', - '1c79' => 'Unigen-Corporation', - '1c7a' => 'LighTuning-Technology-Inc.', - '1c87' => '2N-TELEKOMUNIKACE-a.s.', - '1c88' => 'Somagic-Inc.', - '1c8e' => 'ASTRON-INTERNATIONAL-CORP.', - '1c98' => 'ALPINE-ELECTRONICS-INC.', - '1ca0' => 'ACCARIO-Inc.', - '1cac' => 'Kinstone', - '1cb3' => 'Aces-Electronic-Co.-Ltd.', - '1cb4' => 'OPEX-CORPORATION', - '1cbe' => 'Luminary-Micro-Inc.', - '1cc0' => 'PlantSense', - '1cca' => 'NextWave-Broadband-Inc.', - '1cd4' => 'adp-corporation', - '1cd5' => 'Firecomms-Ltd.', - '1cdf' => 'WonTen-Technology-Co.-Ltd.', - '1ce0' => 'EDIMAX-TECHNOLOGY-CO.-LTD.', - '1ce1' => 'Amphenol-KAE', - '1cfc' => 'ANDES-TECHNOLOGY-CORPORATION', - '1d07' => 'Solid-Motion', - '1d14' => 'ALPHA-SAT-TECHNOLOGY-LIMITED', - '1d17' => 'C-Thru-Music-Ltd.', - '1d19' => 'Dexatek-Technology-Ltd.', - '1d1f' => 'Diostech-Co.-Ltd.', - '1d20' => 'SAMTACK-INC.', - '1d4d' => 'PEGATRON-CORPORATION', - '1d50' => 'OpenMoko-Inc.', - '1d5b' => 'Smartronix-Inc.', - '1d6b' => 'Linux-Foundation', - '1e0e' => 'Qualcomm---Option', - '1e10' => 'Point-Grey-Research-Inc.', - '1e1d' => 'Lumension-Security', - '1e1f' => 'INVIA', - '1e29' => 'Festo-AG---Co.-KG', - '1e41' => 'Cleverscope', - '1e54' => 'TypeMatrix', - '1e68' => 'TrekStor-GmbH---Co.-KG', - '1e71' => 'NZXT', - '1e74' => 'Coby-Electronics-Corporation', - '1e7d' => 'ROCCAT', - '1ebb' => 'NuCORE-Technology-Inc.', - '1eda' => 'AirTies-Wireless-Networks', - '1ef6' => 'EADS-Deutschland-GmbH', - '1f28' => 'Cal-Comp', - '1f4d' => 'G-Tek-Electronics-Group', - '1f82' => 'TANDBERG', - '1f84' => 'Alere-Inc.', - '1f87' => 'Stantum', - '1fbd' => 'Delphin-Technology-AG', - '1fc9' => 'NXP-Semiconductors', - '1fe7' => 'Vertex-Wireless-Co.-Ltd.', - '2001' => 'D-Link', - '2013' => 'Unknown-Pinnacle-', - '2019' => 'PLANEX', - '2040' => 'Hauppauge', - '2047' => 'Texas-Instruments', - '2080' => 'Barnes---Noble', - '2087' => 'Cando', - '20a0' => 'Clay-Logic', - '20b1' => 'XMOS-Ltd', - '20b3' => 'Hanvon', - '20b7' => 'Qi-Hardware', - '20df' => 'Simtec-Electronics', - '2101' => 'ActionStar', - '2162' => 'Creative--', - '2184' => 'GW-Instek', - '21a1' => 'Emotiv-Systems-Pty.-Ltd.', - '21d6' => 'Agecodagis-SARL', - '2222' => 'MacAlly', - '2227' => 'SAMWOO-Enterprise', - '2233' => 'RadioShack-Corporation', - '2237' => 'Kobo-Inc.', - '22a6' => 'Pie-Digital-Inc.', - '22b8' => 'Motorola-PCS', - '22b9' => 'eTurboTouch-Technology-Inc.', - '2304' => 'Pinnacle-Systems-Inc.', - '2373' => 'Pumatronix-Ltda', - '2375' => 'Digit-at-lway-Inc.', - '2478' => 'Tripp-Lite', - '2632' => 'TwinMOS', - '2730' => 'Citizen', - '2735' => 'DigitalWay', - '2770' => 'NHJ-Ltd', - '2821' => 'ASUSTek-Computer-Inc.', - '2899' => 'Toptronic-Industrial-Co.-Ltd', - '2c02' => 'Planex-Communications', - '2c1a' => 'Dolphin-Peripherals', - '2fb2' => 'Fujitsu-Ltd', - '3125' => 'Eagletron', - '3176' => 'Whanam-Electronics-Co.-Ltd', - '3275' => 'VidzMedia-Pte-Ltd', - '3334' => 'AEI', - '3340' => 'Yakumo', - '3504' => 'Micro-Star', - '3579' => 'DIVA', - '3636' => 'InVibro', - '3838' => 'WEM', - '3923' => 'National-Instruments-Corp.', - '40bb' => 'I-O-Data', - '4101' => 'i-rocks', - '4102' => 'iRiver-Ltd.', - '413c' => 'Dell-Computer-Corp.', - '4146' => 'USBest-Technology', - '4242' => 'USB-Design-by-Example', - '4317' => 'Broadcom', - '4348' => 'WinChipHead', - '4572' => 'Shuttle-Inc.', - '4586' => 'Panram', - '4670' => 'EMS-Production', - '4752' => 'Miditech', - '4757' => 'GW-Instek', - '4766' => 'Aceeca', - '4855' => 'Memorex', - '4971' => 'SimpleTech', - '5032' => 'Grandtec', - '5041' => 'Linksys', - '50c2' => 'Averatec--', - '5173' => 'Sweex', - '5219' => 'I-Tetra', - '5345' => 'Owon', - '544d' => 'Transmeta-Corp.', - '5543' => 'UC-Logic-Technology-Corp.', - '5555' => 'Epiphan-Systems-Inc.', - '55aa' => 'OnSpec-Electronic-Inc.', - '5656' => 'Uni-Trend-Group-Limited', - '595a' => 'IRTOUCHSYSTEMS-Co.-Ltd.', - '5986' => 'Acer', - '5a57' => 'Zinwell', - '6000' => 'Beholder-International-Ltd.', - '601a' => 'Ingenic-Semiconductor-Ltd.', - '6189' => 'Sitecom', - '6253' => 'TwinHan-Technology-Co.-Ltd', - '636c' => 'CoreLogic-Inc.', - '6472' => 'Unknown-Sony-', - '6547' => 'Arkmicro-Technologies-Inc.', - '6615' => 'IRTOUCHSYSTEMS-Co.-Ltd.', - '6666' => 'Prototype-product-Vendor-ID', - '6677' => 'WiseGroup-Ltd.', - '6891' => '3Com', - '695c' => 'Opera1', - '7104' => 'CME-Central-Music-Co.', - '726c' => 'StackFoundry-LLC', - '734c' => 'TBS-Technologies-China', - '7392' => 'Edimax-Technology-Co.-Ltd', - '8086' => 'Intel-Corp.', - '8087' => 'Intel-Corp.', - '80ee' => 'VirtualBox', - '8282' => 'Keio', - '8341' => 'EGO-Systems-Inc.', - '9016' => 'Sitecom', - '9022' => 'TeVii-Technology-Ltd.', - '9148' => 'GeoLab-Ltd', - '9710' => 'MosChip-Semiconductor', - '99fa' => 'Grandtec', - '9ac4' => 'J.-Westhues', - 'a168' => 'AnMo-Electronics-Corporation', - 'a600' => 'Asix', - 'a727' => '3Com', - 'abcd' => 'Unknown', - 'c251' => 'Keil-Software-Inc.', - 'cace' => 'CACE-Technologies-Inc.', - 'd209' => 'Ultimarc', - 'e4e4' => 'Xorcom-Ltd.', - 'eb03' => 'MakingThings', - 'eb1a' => 'eMPIA-Technology-Inc.', - 'eb2a' => 'KWorld', - 'f003' => 'Hewlett-Packard', - '1412' => 'ESI', - '7012' => 'VIA-Technologies-Inc', - ); - -} \ No newline at end of file diff --git a/h-source/Application/Include/version.php b/h-source/Application/Include/version.php deleted file mode 100644 index 7e348f6..0000000 --- a/h-source/Application/Include/version.php +++ /dev/null @@ -1,138 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - - -class Version -{ - - public static $mobileAllowed = array( - 'home,index', - 'contact,index', - 'credits,index', - 'project,index', - 'hardware,catalogue', - 'wifi,catalogue', - 'wifi,view', - 'videocards,catalogue', - 'videocards,view', - 'printers,catalogue', - 'printers,view', - 'scanners,catalogue', - 'scanners,view', - 'threegcards,catalogue', - 'threegcards,view', - 'soundcards,catalogue', - 'soundcards,view', - 'webcams,catalogue', - 'webcams,view', - 'bluetooth,catalogue', - 'bluetooth,view', - 'acquisitioncards,catalogue', - 'acquisitioncards,view', - 'fingerprintreaders,catalogue', - 'fingerprintreaders,view', - 'ethernetcards,catalogue', - 'ethernetcards,view', - 'sdcardreaders,catalogue', - 'sdcardreaders,view', - 'modems,catalogue', - 'modems,view', - 'notebooks,catalogue', - 'notebooks,view', - 'raidadapters,catalogue', - 'raidadapters,view', - 'hostcontrollers,catalogue', - 'hostcontrollers,view', - ); - - //get the subfolder of the Views folder where to look for the view files - public static function getViewSubfolder() - { - $type = self::get(); - - if ($type === 'mobile') - { - return 'Mobile'; - } - return 'Desktop'; - } - - //get the type of version: desktop or mobile - public static function get() - { - if (isset($_COOKIE['version'])) - { - if (strcmp($_COOKIE['version'],'mobile') === 0) - { - return 'mobile'; - } - else if (strcmp($_COOKIE['version'],'desktop') === 0) - { - return 'desktop'; - } - } - else - { - //Regular expression to detect mobile browsers - //taken from http://detectmobilebrowsers.com/ - $useragent=$_SERVER['HTTP_USER_AGENT']; - if(preg_match('/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|e\-|e\/|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|xda(\-|2|g)|yas\-|your|zeto|zte\-/i',substr($useragent,0,4))) - return 'mobile'; - } - return 'desktop'; - } - - //set the version - public static function set() - { - if (isset($_GET['version'])) - { - if (strcmp($_GET['version'],'mobile') === 0) - { - self::setMobile(); - } - else if (strcmp($_GET['version'],'desktop') === 0) - { - self::setDesktop(); - } - $h = new HeaderObj(DOMAIN_NAME); - $h->redirect("home/index/".Lang::$current); - } - } - - public static function setMobile() - { - if (!isset($_COOKIE['version']) or strcmp($_COOKIE['version'],'desktop') === 0) - { - setcookie("version","mobile",0,'/'); - } - } - - public static function setDesktop() - { - if (!isset($_COOKIE['version']) or strcmp($_COOKIE['version'],'mobile') === 0) - { - setcookie("version","desktop",0,'/'); - } - } - -} \ No newline at end of file diff --git a/h-source/Application/Include/wikiFormatting.php b/h-source/Application/Include/wikiFormatting.php deleted file mode 100644 index 6eb93f7..0000000 --- a/h-source/Application/Include/wikiFormatting.php +++ /dev/null @@ -1,356 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - - -$decodeCounter = 0; -$decodeAnotherTime = false; - -//decode the text of the wiki -function decodeWikiText($string) -{ - global $decodeAnotherTime; - global $decodeCounter; - - $decodeCounter++; - - $decodeAnotherTime = false; - - $string = preg_replace('/(\[hr\])/', '
          ',$string); - - $string = preg_replace_callback('/(\[\[)(.*?)\|(.*?)(\]\])/', 'linkToInternalPageWithText' ,$string); - - $string = preg_replace_callback('/(\[\[)(.*?)(\]\])/', 'linkToInternalPage' ,$string); - - $string = preg_replace_callback('/(\[a\])(.*?)(\[\/a\])/', 'linkTo',$string); - - $string = preg_replace_callback('/(\[a\])(.*?)\|(.*?)(\[\/a\])/', 'linkToWithText',$string); - - $string = preg_replace_callback('/(\[notebook\])([0-9]*?)(\[\/notebook\])/s', 'linkToNotebook',$string); - - $string = preg_replace_callback('/(\[wifi\])([0-9]*?)(\[\/wifi\])/s', 'linkToWifi',$string); - - $string = preg_replace_callback('/(\[videocard\])([0-9]*?)(\[\/videocard\])/s', 'linkToVideocard',$string); - - $string = preg_replace('/(\[b\])(.*?)(\[\/b\])/s', '${2}',$string); - - $string = preg_replace('/(\[u\])(.*?)(\[\/u\])/s', '${2}',$string); - - $string = preg_replace('/(\[i\])(.*?)(\[\/i\])/s', '${2}',$string); - - $string = preg_replace('/(\[del\])(.*?)(\[\/del\])/s', '${2}',$string); - - $string = preg_replace_callback('/(\[\*\])(.*?)(\[\/\*\])/s', 'createItem',$string); - - $string = preg_replace_callback('/(\[list\])(.*?)(\[\/list\])/s', 'createList',$string); - - $string = preg_replace_callback('/(\[enum\])(.*?)(\[\/enum\])/s', 'createEnum',$string); - - $string = preg_replace('/(\[code\])(.*?)(\[\/code\])/s', '
          ${2}
          ',$string); - - $string = preg_replace('/(\[p\])(.*?)(\[\/p\])/s', '

          ${2}

          ',$string); - - $string = preg_replace_callback('/(\[)(h)(1|2|3)(\])(.*?)(\[\/)(h)(1|2|3)(\])/s', 'createHeadGeneric',$string); - - $string = preg_replace_callback('/(\[tab )(lang=)([^\s]+)(\s*\])(.*?)(\[\/tab\])/s', 'createTabs',$string); - - $string = preg_replace_callback('/(__TOC__)/s', 'createToc',$string); - - $string = preg_replace('/(\[lang\])(.*?)(\[\/lang\])/s', '
          ${2}
          ',$string); - - $string = preg_replace('/(\{\{)/s', '[',$string); - - $string = preg_replace('/(\}\})/s', ']',$string); - - if ($decodeAnotherTime and $decodeCounter<=30) - { - return decodeWikiText(Tabs::render().$string); - } - else - { - return Tabs::render().$string; - } -} - -//create the list of the tabs in the description entry -function createTabs($match) -{ - $label = Lang::getLabel($match[3]); - Tabs::$tabList[] = "
        • ".$label."
        • \n"; - Tabs::$htmlList[] = "
          $label
          \n
          ".$match[5]."
          \n"; - return null; -} - -//create the HTML of the tabs in the description entry -class Tabs -{ - public static $tabList = array(); - public static $htmlList = array(); - - public static function render() - { - $html = null; - if (count(self::$tabList) > 0) - { - $html .= "
          \n"; - $html .= "\n"; - $html .= "
            \n"; - foreach (self::$tabList as $label) - { - $html .= $label; - } - $html .= "
          \n
          \n"; - foreach (self::$htmlList as $content) - { - $html .= $content; - } - $html .= "
          \n
          \n"; - } - self::$tabList = array(); - self::$htmlList = array(); - return $html; - } - -} - -function checkUrl($url) -{ - $match = '/^http(s)?\:\/\/(www\.)?[a-zA-Z0-9\-\_]+(\.[a-zA-Z0-9\-\_]+)*\.([a-z]{2,4})((\/[a-zA-Z0-9\_\.\-\:\%\+]+)*(\/([a-zA-Z0-9\_\:\-\.\+]+\.(php|html|htm|asp|aspx|jsp|cgi))?)?)?(\?([a-zA-Z0-9\_\-\+\s]+\=[a-zA-Z0-9\_\-\s\%\+\&]+)+)?(#[a-zA-Z0-9\_\-\+\s\%]+)?([\s]*)?$/'; - - if (preg_match($match,$url)) - { - return true; - } - else - { - return false; - } -} - -function vitalizeUrl($string) -{ - if (checkUrl($string)) - { - return "".$string.""; - } - return $string; -} - -function linkTo($match) -{ - if (checkUrl($match[2])) - { - return "".$match[2].""; - } - else - { - return $match[0]; - } -} - -function createNode($match,$hnodeTag,$htmlTagBegin,$htmlTagEng) -{ - $numb = strlen($hnodeTag); - global $decodeAnotherTime; - - if (strstr($match[2],$hnodeTag)) - { - $string = substr($match[0],$numb); - $string = decodeWikiText($string); - $decodeAnotherTime = true; - return $hnodeTag.$string; - } - else - { -// $decodeAnotherTime = false; - return $htmlTagBegin.$match[2].$htmlTagEng; - } -} - -function createToc($match) -{ - return Toc::render(); -} - -//table of contents -class Toc -{ - - public static $links = array(); - public static $level = 1; - - private static $html = null; - - public function render() - { - $c=0; - foreach (self::$links as $link) - { - if ((int)substr($link,0,1) === 1) - { - break; - } - $c++; - } - - self::$links = array_slice(self::$links,$c); - - $res = array(); - - if (count(self::$links) > 0) - { - self::$links[] = '1fine'; - - $res[] = "
          ".gtext("Table of contents")."
            "; - foreach (self::$links as $link) - { - $startChar = (int)substr($link,0,1); - - if (strcmp(self::$level,$startChar) === 0) - { - $res[] = "
          • ".substr($link,1)."
          • "; - } - else if ($startChar > self::$level) - { - $diff = (int)$startChar - (int)self::$level; - if ($diff !== 1) - { - return null; - } - - self::$level = $startChar; - $res[] = "
            • ".substr($link,1)."
            • "; - } - else - { - $diff = (int)self::$level - (int)$startChar; - - for ($i=0;$i<$diff;$i++) - { - $res[] = "
            "; - } - self::$level = $startChar; - $res[] = "
          • ".substr($link,1)."
          • "; - } - } - array_pop($res); - $res[] = "
          "; - } - self::$links = array(); - return implode('',$res); - } -} - -//create h1, h2, h3 ($level=1,2,3) -function createHead($match,$level) -{ - Toc::$links[] = $level.$match[5]; - - return "
          ".$match[5]."
          "; -} - -//create

          ,

          ,

          -function createHeadGeneric($match) -{ - if (strcmp($match[3],'1') === 0) - { - return createHead($match,'1'); - } - else if (strcmp($match[3],'2') === 0) - { - return createHead($match,'2'); - } - else - { - return createHead($match,'3'); - } -} - -//create
        • -function createItem($match) -{ - return createNode($match,'[*]',"
        • ","
        • "); -} - -//create
            -function createList($match) -{ - return createNode($match,'[list]',"
              ","
            "); -} - -//create
              -function createEnum($match) -{ - return createNode($match,'[enum]',"
                ","
              "); -} - -function linkToInternalPage($match) -{ - return "".$match[2].""; -} - -function linkToInternalPageWithText($match) -{ - return "".$match[3].""; -} - -function linkToWithText($match) -{ - if (checkUrl($match[2])) - { - - return "".$match[3].""; - } - else - { - return $match[0]; - } -} - -//create the link to the wiki page of the notebook -function linkToNotebook($match) -{ - $hardware = new HardwareModel(); - $clean['id_hard'] = (int)$match[2]; - $name = encodeUrl($hardware->getTheModelName($clean['id_hard'])); - $href = Url::getRoot()."notebooks/view/".Lang::$current."/".$clean['id_hard']."/$name"; - return (strcmp($name,'') !== 0) ? "".$name."" : $match[0]; -} - -//create the link to the wiki page of the wifi -function linkToWifi($match) -{ - $hardware = new HardwareModel(); - $clean['id_hard'] = (int)$match[2]; - $name = encodeUrl($hardware->getTheModelName($clean['id_hard'])); - $href = Url::getRoot()."wifi/view/".Lang::$current."/".$clean['id_hard']."/$name"; - return (strcmp($name,'') !== 0) ? "".$name."" : $match[0]; -} - -//create the link to the wiki page of the videocard -function linkToVideocard($match) -{ - $hardware = new HardwareModel(); - $clean['id_hard'] = (int)$match[2]; - $name = encodeUrl($hardware->getTheModelName($clean['id_hard'])); - $href = Url::getRoot()."videocards/view/".Lang::$current."/".$clean['id_hard']."/$name"; - return (strcmp($name,'') !== 0) ? "".$name."" : $match[0]; -} \ No newline at end of file diff --git a/h-source/Application/Models/AcquisitioncardsModel.php b/h-source/Application/Models/AcquisitioncardsModel.php deleted file mode 100644 index 147aa94..0000000 --- a/h-source/Application/Models/AcquisitioncardsModel.php +++ /dev/null @@ -1,68 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class AcquisitioncardsModel extends GenericModel -{ - - public $type = 'acquisition-card'; //device type - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'comm_year' => 'comm_year', - 'compatibility' => 'compatibility', - 'interface' => 'interface', - ); - - $this->_popupLabels = array( - 'vendor' => gtext("vendor"), - 'comm_year' => gtext("year"), - 'compatibility' => gtext("does it work?"), - 'interface' => gtext("interface"), - ); - - $this->setPopupFunctions(); - - $this->createPopupWhere('vendor,compatibility,comm_year,interface'); - - $this->diffFields = array( - 'vendor' => gtext("vendor"), - 'model' => gtext('model name'), - 'other_names' => gtext('possible other names of the device'), - 'pci_id' => gtext("VendorID:ProductID code of the device"), - 'comm_year' => gtext('year of commercialization'), - 'interface' => gtext("interface"), - 'distribution' => gtext('GNU/Linux distribution used for the test'), - 'kernel' => gtext('tested with the following kernel libre'), - 'compatibility' => gtext("does it work with free software?"), - 'driver' => gtext("free driver used"), - 'description' => gtext('Description'), - ); - - $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/BaseModel.php b/h-source/Application/Models/BaseModel.php deleted file mode 100644 index 2f3a142..0000000 --- a/h-source/Application/Models/BaseModel.php +++ /dev/null @@ -1,43 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class BaseModel extends Model_Tree -{ - - public function updateHistory($type) - { - $clean['created_by'] = (int)$this->values['created_by']; - $clean['last_id'] = (int)$this->lastId(); - - $history = new HistoryModel(); - $history->values = array( - 'created_by' => $clean['created_by'], - 'type' => sanitizeAll($type), - 'action' => "insert", - 'id' => $clean['last_id'], - 'message' => '', - 'gr' => 'registered', - ); - $history->insert(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/BluetoothModel.php b/h-source/Application/Models/BluetoothModel.php deleted file mode 100644 index 022c889..0000000 --- a/h-source/Application/Models/BluetoothModel.php +++ /dev/null @@ -1,68 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class BluetoothModel extends GenericModel -{ - - public $type = 'bluetooth'; //device type - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'comm_year' => 'comm_year', - 'bluetooth_works' => 'bluetooth_works', - 'interface' => 'interface', - ); - - $this->_popupLabels = array( - 'vendor' => gtext("vendor"), - 'comm_year' => gtext("year"), - 'bluetooth_works' => gtext("does it work?"), - 'interface' => gtext("interface"), - ); - - $this->createPopupWhere('vendor,bluetooth_works,comm_year,interface'); - - $this->setPopupFunctions(); - - $this->diffFields = array( - 'vendor' => gtext("vendor"), - 'model' => gtext('model name'), - 'other_names' => gtext('possible other names of the device'), - 'pci_id' => gtext("VendorID:ProductID code of the device"), - 'comm_year' => gtext('year of commercialization'), - 'interface' => gtext("interface"), - 'distribution' => gtext('GNU/Linux distribution used for the test'), - 'kernel' => gtext('tested with the following kernel libre'), - 'bluetooth_works' => gtext("does it work with free software?"), - 'driver' => gtext("free driver used"), - 'description' => gtext('Description'), - ); - - $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/BoxesModel.php b/h-source/Application/Models/BoxesModel.php deleted file mode 100644 index a6035cb..0000000 --- a/h-source/Application/Models/BoxesModel.php +++ /dev/null @@ -1,42 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class BoxesModel extends Model_Tree { - - public function __construct() { - $this->_tables = 'boxes'; - $this->_idFields = 'id_box'; - - parent::__construct(); - } - - public $formStruct = array( - 'entries' => array( - 'title' => array(), - 'message' => array('type'=>'Textarea'), - 'id_box' => array( - 'type' => 'Hidden' - ) - ), - ); - -} \ No newline at end of file diff --git a/h-source/Application/Models/DeletionModel.php b/h-source/Application/Models/DeletionModel.php deleted file mode 100644 index 9b5dc1a..0000000 --- a/h-source/Application/Models/DeletionModel.php +++ /dev/null @@ -1,53 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class DeletionModel extends Model_Tree -{ - - public function __construct() - { - $this->_tables = 'deletion'; - $this->_idFields = 'id_del'; - -// $this->_where=array( -// 'id_hard' => 'talk' -// ); -// - $this->_popupItemNames = array( - 'object' => 'object', - ); - - $this->_popupLabels = array( - 'object' => 'OBJECT', - ); -// - $this->orderBy = 'deletion.id_del desc'; - - $this->strongConditions['insert'] = array( - "checkIsStrings|duplication,other" => 'object', - "+checkLength|500" => 'message' - ); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/DistrosModel.php b/h-source/Application/Models/DistrosModel.php deleted file mode 100644 index 58cd435..0000000 --- a/h-source/Application/Models/DistrosModel.php +++ /dev/null @@ -1,34 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class DistrosModel extends Model_Tree { - - public function __construct() { - $this->_tables = 'distros'; - $this->_idFields = 'id_distro'; - - $this->_idOrder = 'id_order'; - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/EthernetcardsModel.php b/h-source/Application/Models/EthernetcardsModel.php deleted file mode 100644 index 08dc997..0000000 --- a/h-source/Application/Models/EthernetcardsModel.php +++ /dev/null @@ -1,68 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class EthernetcardsModel extends GenericModel -{ - - public $type = 'ethernet-card'; //device type - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'comm_year' => 'comm_year', - 'ethernet_card_works' => 'ethernet_card_works', - 'interface' => 'interface', - ); - - $this->_popupLabels = array( - 'vendor' => gtext("vendor"), - 'comm_year' => gtext("year"), - 'ethernet_card_works' => gtext("does it work?"), - 'interface' => gtext("interface"), - ); - - $this->setPopupFunctions(); - - $this->createPopupWhere('vendor,ethernet_card_works,comm_year,interface'); - - $this->diffFields = array( - 'vendor' => gtext("vendor"), - 'model' => gtext('model name'), - 'other_names' => gtext('possible other names of the device'), - 'pci_id' => gtext("VendorID:ProductID code of the device"), - 'comm_year' => gtext('year of commercialization'), - 'interface' => gtext("interface"), - 'distribution' => gtext('GNU/Linux distribution used for the test'), - 'kernel' => gtext('tested with the following kernel libre'), - 'ethernet_card_works' => gtext("does it work with free software?"), - 'driver' => gtext("free driver used"), - 'description' => gtext('Description'), - ); - - $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/FingerprintreadersModel.php b/h-source/Application/Models/FingerprintreadersModel.php deleted file mode 100644 index 7a2f3e8..0000000 --- a/h-source/Application/Models/FingerprintreadersModel.php +++ /dev/null @@ -1,68 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class FingerprintreadersModel extends GenericModel -{ - - public $type = 'fingerprint-reader'; //device type - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'comm_year' => 'comm_year', - 'fingerprint_works' => 'fingerprint_works', - 'interface' => 'interface', - ); - - $this->_popupLabels = array( - 'vendor' => gtext("vendor"), - 'comm_year' => gtext("year"), - 'fingerprint_works' => gtext("does it work?"), - 'interface' => gtext("interface"), - ); - - $this->setPopupFunctions(); - - $this->createPopupWhere('vendor,fingerprint_works,comm_year,interface'); - - $this->diffFields = array( - 'vendor' => gtext("vendor"), - 'model' => gtext('model name'), - 'other_names' => gtext('possible other names of the device'), - 'pci_id' => gtext("VendorID:ProductID code of the device"), - 'comm_year' => gtext('year of commercialization'), - 'interface' => gtext("interface"), - 'distribution' => gtext('GNU/Linux distribution used for the test'), - 'kernel' => gtext('tested with the following kernel libre'), - 'fingerprint_works' => gtext("does it work with free software?"), - 'driver' => gtext("free driver used"), - 'description' => gtext('Description'), - ); - - $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/GenericModel.php b/h-source/Application/Models/GenericModel.php deleted file mode 100644 index 3a0f8fa..0000000 --- a/h-source/Application/Models/GenericModel.php +++ /dev/null @@ -1,103 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class GenericModel extends Model_Tree { - - public $type = ''; //device type - public $diffFields = array(); - public $fieldsWithBreaks = array(); - - public function __construct() { - $this->_tables = 'hardware'; - $this->_idFields = 'id_hard'; - - $this->_where=array( - 'type' => 'hardware', - 'vendor' => 'hardware', - 'compatibility' => 'hardware', - 'comm_year' => 'hardware', - ); - - $this->orderBy = 'hardware.id_hard desc'; - parent::__construct(); - } - - public function checkType($id_hard = 0) - { - $clean['id_hard'] = (int)$id_hard; - $res = $this->db->select('hardware','type','id_hard='.$clean['id_hard']); - if (count($res) > 0) - { - return (strcmp($this->type,$res[0]['hardware']['type']) === 0 ) ? true : false; - } - return false; - } - - public function getDiffArray($oldArray, $newArray) - { - return getDiffArray($this->diffFields, $oldArray, $newArray); - } - - //create the $_popupWhere property - public function createPopupWhere($list) - { - $listArray = explode(',',$list); - foreach ($listArray as $field) - { - $this->_popupWhere[$field] = 'type="'.$this->type.'" and deleted="no" and cleared="no"'; - } - } - - //set the fuction to be applied upon each popup name - public function setPopupFunctions() - { - foreach ($this->_popupItemNames as $name => $field) - { - $this->_popupFunctions[$name] = getTranslationFunction($name); - } - } - - //get the HTML of the popup labels - public function getPopupLabel($viewArgs) - { - $html = null; - $listArray = array('page','history_page','search_string'); - - $count = 0; - - foreach ($viewArgs as $field => $value) - { - if ($count < 5) - { - if (!in_array($field,$listArray)) - { - $value = call_user_func(getTranslationFunction($field),$value); - $html .= "
              ".$value."
              \n"; - - $count++; - } - } - } - return $html; - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/HardwareModel.php b/h-source/Application/Models/HardwareModel.php deleted file mode 100644 index 9c8a5db..0000000 --- a/h-source/Application/Models/HardwareModel.php +++ /dev/null @@ -1,348 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class HardwareModel extends Model_Map { - - public $id_user = 0; - public $type = ''; //device type - public $lastId = 0; //the id of the last record inserted - - public $formStruct = array( - 'entries' => array( - 'deleted'=> array('type'=>'Select','options'=>'no,yes'), - 'id_hard' => array( - 'type' => 'Hidden' - ) - ), - ); - - public function __construct() { - $this->_tables='hardware,regusers,hardware_users'; - $this->_idFields='id_hard,id_user'; - $this->_where=array( - 'type' => 'hardware', - 'username' => 'regusers', - 'id_user' => 'regusers', - 'has_confirmed' => 'regusers', - 'deleted' => 'regusers', - '-deleted' => 'hardware' - ); - $this->orderBy = 'hardware.id_hard desc'; - $this->printAssError = "no"; - - $this->_popupItemNames = array( - 'type'=>'type', - 'ask_for_del'=>'ask_for_del', - '-deleted'=>'deleted', - ); - - $this->_popupLabels = array( - 'type'=>'TYPE', - 'ask_for_del'=>'ASK FOR DEL?', - '-deleted'=>'DELETED?', - ); - -// $this->databaseConditions['insert'] = array( -// 'checkUnique' => 'model', -// ); -// -// $this->databaseConditions['update'] = array( -// 'checkUniqueCompl' => 'model', -// ); - - parent::__construct(); - } - - //set the soft and strong conditions - public function setConditions($worksOptions,$worksField,$interfaceOptions) - { - $this->strongConditions['update'] = array( - "checkNotEmpty" => "model|you have to fill the model name entry", - "checkMatch|".Hardware::$regExpressions['model'] => "model|characters not allowed in the model name entry", - "+checkMatch|".Hardware::$regExpressions['vendorid_productid'] => "pci_id|VendorID:ProductID has to have the following format: [a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}", - "checkLength|190" => "model", - "+checkLength|299" => "distribution", - "++checkIsStrings|".Hardware::getCommYears() => "comm_year", - "+++checkIsStrings|".$worksOptions => $worksField, - "++++checkIsStrings|".$interfaceOptions => "interface", - ); - - $this->strongConditions['insert'] = $this->strongConditions['update']; - - $this->softConditions['update'] = array( - "checkMatch|".Hardware::$regExpressions['kernel'] => "kernel|characters not allowed in the kernel entry", - "checkLength|40000" => "description", - "+checkLength|99" => "kernel", - "++checkLength|49" => "driver", - "++checkMatch|".Hardware::$regExpressions['driver'] => "driver|only the following characters are allowed for the driver entry: a-z A-Z 0-9 - _ . + s / , : ; ( ) [ ]", - "+++checkLength|1000" => "other_names|the other names entry exceeds the value of 1000 characters", - ); - - $this->softConditions['insert'] = $this->softConditions['update']; - } - - public function permanentlyDelete($id) - { - $clean['id'] = (int)$id; - - $record = $this->selectId($clean['id']); - - $this->values['deleted'] = 'no'; - $this->values['approved'] = 'yes'; - $this->values['pci_id'] = ''; - $this->values['model'] = '[permanently deleted] '.$record['model']; - - return parent::update($clean['id']); - } - - public function pUpdate($id) - { - if (isset($this->values['approved'])) - { - if (strcmp($this->values['approved'],'yes') === 0) - { - $this->values['deleted'] = 'no'; - } - } - else if (isset($this->values['deleted'])) - { - if (strcmp($this->values['deleted'],'no') === 0) - { - $this->values['approved'] = 'yes'; - } - } - return parent::update($id); - } - - public function insert() - { - $this->values['created_by'] = (int)$this->id_user; - $this->values['updated_by'] = (int)$this->id_user; - $this->values['update_date'] = date('Y-m-d H:i:s'); - - if ($this->values['created_by'] === 0) - { - $this->values['deleted'] = 'yes'; - $this->values['approved'] = 'no'; - } - - //random ID - $randomId = md5(uniqid(mt_rand(),true)); - $this->values["type"] = $randomId; - - parent::insert(); -// echo $this->getQuery(); - //associate the user to the record - if ($this->queryResult) - { - $resId = $this->db->select("hardware","id_hard","type='$randomId'"); - $clean['id'] = $resId[0]['hardware']['id_hard']; - $this->lastId = $clean['id']; - $this->db->update('hardware','type',array($this->type),'id_hard='.$clean['id']); - - //update the history table - $this->updateHistory('insert'); - - if ($this->values['created_by'] !== 0) - { - $this->associate($clean['id']); - } - } - - } - - public function update($id = null, $where = null) - { - $clean['id'] = (int)$id; - - $this->values['updated_by'] = (int)$this->id_user; - $this->values['update_date'] = date('Y-m-d H:i:s'); - - //save the old fields in the revisions table - $this->setWhereQueryClause(array('id_hard' => $clean['id'])); - $oldStruct = $this->getFields($this->fields.',vendor,created_by,updated_by,update_date,type,id_hard'); - - if (count($oldStruct > 0)) - { - if (strcmp($oldStruct[0]['hardware']['type'],$this->type) === 0) - { - $oldValues = $oldStruct[0]['hardware']; - - $revisions = new RevisionsModel(); - $revisions->values = $oldValues; - $revisions->sanitize(); - - if ($revisions->insert()) - { - parent::update($clean['id']); - if ($this->queryResult) - { - $this->lastId = $clean['id']; - - //update the history table - $this->updateHistory('update'); - - if (!$this->checkAssociation($clean['id'],(int)$this->id_user)) - { - $this->associate($clean['id']); - } - } - } - } - } - } - - public function makeCurrent($id_rev) - { - $clean['id_rev'] = (int)$id_rev; - - $revisions = new RevisionsModel(); - - $clean['id_hard'] = (int)$revisions->getIdHard($clean['id_rev']); - - //save the old fields in the revisions table - $this->setWhereQueryClause(array('id_hard'=>$clean['id_hard'])); - $oldStruct = $this->getFields($this->fields.',vendor,created_by,updated_by,update_date,type,id_hard'); - - if (count($oldStruct > 0)) - { - if (strcmp($oldStruct[0]['hardware']['type'],$this->type) === 0) - { - //get the values of the revision - $revisions->setWhereQueryClause(array('id_rev'=>$clean['id_rev'])); - $newStruct = $revisions->getFields($this->fields.',vendor,created_by,updated_by,update_date,type'); - - if (count($newStruct > 0)) - { - $revisions->values = $oldStruct[0]['hardware']; - $revisions->sanitize(); - - $this->values = $newStruct[0]['revisions']; - $this->values['updated_by'] = (int)$this->id_user; - $this->values['update_date'] = date('Y-m-d H:i:s'); - - $this->sanitize(); - - if ($revisions->insert()) - { - if (parent::update($clean['id_hard'])) - { - $this->lastId = $clean['id_hard']; - - //update the history table - $this->updateHistory('update'); - - if (!$this->checkAssociation($clean['id_hard'],(int)$this->id_user)) - { - $this->associate($clean['id_hard']); - } - } - } - } - } - else - { - $this->notice = "
              Wrong type..
              \n"; - } - } - - } - - public function associate($id_record = null, $idGroup = null) - { - return parent::associate((int)$id_record,(int)$this->id_user); - } - - //get the model name - public function getTheModelName($id) - { - $clean['id'] = (int)$id; - $this->setWhereQueryClause(array('id_hard' => $clean['id'])); - $res = $this->getFields('model'); - $name = count($res) > 0 ? $res[0]['hardware']['model'] : ''; - return $name; - } - - //get the model info by the vendorid:productid code - public function getModelByCode($code) - { - $res = $this->clear()->where(array('pci_id'=>sanitizePciid($code)))->send(); - - if (count($res) > 0) - { - return $res[0]['hardware']; - } - return false; - } - - //save in the history all the action carried out by users - protected function updateHistory($action) - { - $translations = array( - 'insert' => 'inserted', - 'update' => 'updated', - ); - - $allowedActions = array('insert','update'); - - if (in_array($action,$allowedActions)) - { - $users = new UsersModel(); - - $clean['user'] = sanitizeAll($users->getUser($this->id_user)); - - $history = new HistoryModel(); - $history->values = array( - 'created_by' => $this->id_user, - 'type' => 'hardware', - 'action' => $action, - 'id' => $this->lastId, - 'message' => 'The device having id='.$this->lastId.' has been '.$translations[$action].' by the user ' . $clean['user'] . ' (id_user='.$this->id_user.') ', - 'gr' => 'registered', - ); - $history->insert(); - } - } - - public function isDeleted($id) - { - $clean['id'] = (int)$id; - $res = $this->select('hardware.deleted')->where(array('id_hard'=>$clean['id']))->send(); - if ( count($res) > 0 ) - { - return strcmp($res[0]['hardware']['deleted'],'no') === 0 ? false : true; - } - return false; - } - - public function isCleared($id) - { - $clean['id'] = (int)$id; - $res = $this->select('hardware.cleared')->where(array('id_hard'=>$clean['id']))->send(); - if ( count($res) > 0 ) - { - return strcmp($res[0]['hardware']['cleared'],'no') === 0 ? false : true; - } - return false; - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/HistoryModel.php b/h-source/Application/Models/HistoryModel.php deleted file mode 100644 index d94f745..0000000 --- a/h-source/Application/Models/HistoryModel.php +++ /dev/null @@ -1,56 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class HistoryModel extends Model_Tree { - - public function __construct() { - $this->_tables = 'history'; - $this->_idFields = 'id_history'; - - $this->_where=array( - 'approved' => 'hardware', - 'deleted' => 'hardware', - 'cleared' => 'hardware', - 'username' => 'regusers', - ); - $this->orderBy = 'history.id_history'; - - $this->_popupFunctions = array( - 'created_by'=> 'getUserName', - ); - - $this->_popupItemNames = array( - 'type' => 'type', - 'action' => 'action', - 'created_by'=> 'created_by', - ); - - $this->_popupLabels = array( - 'type' => 'TYPE', - 'action' => 'ACTION', - 'created_by'=> 'MODERATOR', - ); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/HostcontrollersModel.php b/h-source/Application/Models/HostcontrollersModel.php deleted file mode 100644 index 8908052..0000000 --- a/h-source/Application/Models/HostcontrollersModel.php +++ /dev/null @@ -1,69 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class HostcontrollersModel extends GenericModel -{ - - public $type = 'host-controller'; //device type - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'comm_year' => 'comm_year', - 'compatibility' => 'compatibility', - 'subtype' => 'subtype', - ); - - $this->_popupLabels = array( - 'vendor' => gtext("vendor"), - 'comm_year' => gtext("year"), - 'compatibility' => gtext("does it work?"), - 'subtype' => gtext("subtype"), - ); - - $this->setPopupFunctions(); - - $this->createPopupWhere('vendor,compatibility,comm_year,subtype'); - - $this->diffFields = array( - 'vendor' => gtext("vendor"), - 'model' => gtext('model name'), - 'other_names' => gtext('possible other names of the device'), - 'subtype' => gtext('subtype')." (laser, inkjet, ..)", - 'pci_id' => gtext("VendorID:ProductID code of the device"), - 'comm_year' => gtext('year of commercialization'), - 'interface' => gtext("interface"), - 'distribution' => gtext('GNU/Linux distribution used for the test'), - 'kernel' => gtext('tested with the following kernel libre'), - 'compatibility' => gtext("does it work with free software?"), - 'driver' => gtext("free driver used"), - 'description' => gtext('Description'), - ); - - $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/IssuesModel.php b/h-source/Application/Models/IssuesModel.php deleted file mode 100644 index 9d6a4ef..0000000 --- a/h-source/Application/Models/IssuesModel.php +++ /dev/null @@ -1,116 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class IssuesModel extends BaseModel { - - public function __construct() { - $this->_tables = 'issues'; - $this->_idFields = 'id_issue'; - - $this->_onDelete = 'nocheck'; - - $this->_where = array( - 'priority' => 'issues', - 'status' => 'issues', - 'topic' => 'issues', - ); - - $this->_popupItemNames = array( - 'priority' => 'priority', - 'status' => 'status', - 'topic' => 'topic', - 'deleted' => 'deleted', - ); - - $this->_popupLabels = array( - 'priority' => 'PRIORITY', - 'status' => 'STATUS', - 'topic' => 'TOPIC', - 'deleted' => 'DELETED?', - ); - - $this->orderBy = 'issues.id_issue desc'; - - $this->strongConditions['insert'] = array( - "checkLength|99" => 'title', - "+checkLength|34" => 'topic', - "++checkLength|15" => 'priority', - "+++checkLength|5000" => 'message', - "checkisStrings|low,medium,high" => 'priority', - "+checkisStrings|maybe-a-bug,new-categories-of-hardware,add-a-vendor-name,other" => 'topic', - ); - - $this->formStruct = array( - 'entries' => array( - 'title' => array('labelString' => gtext("TITLE").':'), - 'topic' => array( - 'type'=>'Select', - 'options'=>array( - 'Add a vendor name' => 'add-a-vendor-name', - 'Maybe a bug' => 'maybe-a-bug', - 'Add new categories of hardware' => 'new-categories-of-hardware', - 'Other' => 'other' - ), - 'labelString' => gtext("TOPIC").':', - ), - 'deleted'=> array( - 'type' => 'Select', - 'options' => 'no,yes', - ), - 'priority' => array( - 'type'=>'Select', - 'options'=>'low,medium,high', - 'labelString' => gtext("PRIORITY").':', - ), - 'message' => array('type'=>'Textarea','idName'=>'bb_code','labelString' => gtext("MESSAGE").':',), - 'status' => array( - 'type' => 'Select', - 'options' => 'opened,closed' - ), - 'notice' => array( - 'type' => 'Textarea', - 'idName' => 'bb_code_notice', - ), - 'id_issue' => array( - 'type' => 'Hidden' - ) - ), - ); - - parent::__construct(); - } - - public function pUpdate($id) - { - return parent::update($id); - } - - public function insert() - { - if (parent::insert()) - { - //update the history - $this->updateHistory('issue_ins'); - } - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/MessagesModel.php b/h-source/Application/Models/MessagesModel.php deleted file mode 100644 index b36e76e..0000000 --- a/h-source/Application/Models/MessagesModel.php +++ /dev/null @@ -1,73 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class MessagesModel extends BaseModel { - - public function __construct() { - $this->_tables = 'messages'; - $this->_idFields = 'id_mes'; - - $this->orderBy = 'messages.id_mes'; - - $this->_popupItemNames = array( - 'deleted' => 'deleted', - 'has_read' => 'has_read', - ); - - $this->_popupLabels = array( - 'deleted' => 'DELETED?', - 'has_read' => 'ALREADY READ?', - ); - - $this->strongConditions['insert'] = array( - "checkLength|5000" => 'message', - ); - - parent::__construct(); - } - - public function pUpdate($id) - { - return parent::update($id); - } - - public function insert() - { - if (parent::insert()) - { - //update the history - $this->updateHistory('message_ins'); - } - } - - public $formStruct = array( - 'entries' => array( - 'deleted' => array('type'=>'Select','options'=>'no,yes'), - 'has_read' => array('type'=>'Select','options'=>'no,yes'), - 'message' => array('type'=>'Textarea','idName'=>'bb_code'), - 'id_mes' => array( - 'type' => 'Hidden' - ) - ), - ); - -} \ No newline at end of file diff --git a/h-source/Application/Models/ModemsModel.php b/h-source/Application/Models/ModemsModel.php deleted file mode 100644 index 92571d2..0000000 --- a/h-source/Application/Models/ModemsModel.php +++ /dev/null @@ -1,68 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class ModemsModel extends GenericModel -{ - - public $type = 'modem'; //device type - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'comm_year' => 'comm_year', - 'compatibility' => 'compatibility', - 'interface' => 'interface', - ); - - $this->_popupLabels = array( - 'vendor' => gtext("vendor"), - 'comm_year' => gtext("year"), - 'compatibility' => gtext("does it work?"), - 'interface' => gtext("interface"), - ); - - $this->setPopupFunctions(); - - $this->createPopupWhere('vendor,compatibility,comm_year,interface'); - - $this->diffFields = array( - 'vendor' => gtext("vendor"), - 'model' => gtext('model name'), - 'other_names' => gtext('possible other names of the device'), - 'pci_id' => gtext("VendorID:ProductID code of the device"), - 'comm_year' => gtext('year of commercialization'), - 'interface' => gtext("interface"), - 'distribution' => gtext('GNU/Linux distribution used for the test'), - 'kernel' => gtext('tested with the following kernel libre'), - 'compatibility' => gtext("does it work with free software?"), - 'driver' => gtext("free driver used"), - 'description' => gtext('Description'), - ); - - $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/NewsModel.php b/h-source/Application/Models/NewsModel.php deleted file mode 100644 index cab1641..0000000 --- a/h-source/Application/Models/NewsModel.php +++ /dev/null @@ -1,44 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class NewsModel extends Model_Tree { - - public function __construct() { - $this->_tables = 'news'; - $this->_idFields = 'id_news'; - - $this->orderBy = 'news.id_news desc'; - - parent::__construct(); - } - - public $formStruct = array( - 'entries' => array( - 'title' => array(), - 'message' => array('type'=>'Textarea','idName'=>'bb_code'), - 'id_news' => array( - 'type' => 'Hidden' - ) - ), - ); - -} \ No newline at end of file diff --git a/h-source/Application/Models/NotebooksModel.php b/h-source/Application/Models/NotebooksModel.php deleted file mode 100644 index d9b9008..0000000 --- a/h-source/Application/Models/NotebooksModel.php +++ /dev/null @@ -1,94 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class NotebooksModel extends GenericModel { - - public $type = 'notebook'; //device type - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'compatibility' => 'compatibility', - 'comm_year' => 'comm_year', - 'subtype' => 'subtype', - ); - - $this->_popupLabels = array( - 'vendor' => gtext("vendor"), - 'compatibility' => gtext("compatibility"), - 'comm_year' => gtext("year"), - 'subtype' => gtext("subtype"), - ); - - $this->setPopupFunctions(); - - $this->createPopupWhere('vendor,compatibility,comm_year,subtype'); - - $this->diffFields = array( - 'vendor' => gtext("vendor"), - 'model' => gtext('model name'), - 'subtype' => gtext('subtype (notebook or netbook)'), - 'architecture' => gtext('architecture'), - 'bios' => gtext('does it have a free bios?'), - 'can_free_systems_be_installed' => gtext('can free operating systems be installed?'), - 'prevent_wifi' => gtext('does the device prevent the installation of wifi cards not-approved by the vendor?'), - 'comm_year' => gtext('year of commercialization'), - 'distribution' => gtext('GNU/Linux distribution used for the test'), - 'compatibility' => gtext('compatibility with free software'), - 'kernel' => gtext('tested with the following kernel libre'), - 'video_card_type' => gtext('video card model'), - 'video_card_works' => gtext('does the video card work?'), - 'wifi_type' => gtext('wifi model'), - 'wifi_works' => gtext('does the wifi card work?'), - 'webcam_type' => gtext('webcam model'), - 'webcam_works' => gtext('does the webcam work?'), - 'description' => gtext('Description'), - ); - - $this->fieldsWithBreaks = array(gtext('Description')); - - parent::__construct(); - } - - public function morePopups() - { - $this->_popupItemNames = array( - 'bios' => 'bios', - 'architecture' => 'architecture', - ); - - $this->_popupLabels = array( - 'bios' => gtext("free boot firmware?"), - 'architecture' => gtext("architecture"), - ); - - $this->_popupFunctions = array( - 'architecture' => 'translate_and_gtext', - 'bios' => 'translate_and_gtext', - ); - - $this->createPopupWhere('bios,architecture'); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/ParamsModel.php b/h-source/Application/Models/ParamsModel.php deleted file mode 100644 index cea99a1..0000000 --- a/h-source/Application/Models/ParamsModel.php +++ /dev/null @@ -1,43 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class ParamsModel extends Model_Tree { - - public function __construct() { - $this->_tables = 'params'; - $this->_idFields = 'id_par'; - - parent::__construct(); - } - - public $formStruct = array( - 'entries' => array( - 'updating' => array( - 'type'=>'Select', - 'options'=>'no,yes', - ), - 'id_par' => array( - 'type' => 'Hidden' - ) - ), - ); -} \ No newline at end of file diff --git a/h-source/Application/Models/PrintersModel.php b/h-source/Application/Models/PrintersModel.php deleted file mode 100644 index 355bb67..0000000 --- a/h-source/Application/Models/PrintersModel.php +++ /dev/null @@ -1,70 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class PrintersModel extends GenericModel -{ - - public $type = 'printer'; //device type - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'compatibility' => 'compatibility', - 'comm_year' => 'comm_year', - 'interface' => 'interface', - ); - - $this->_popupLabels = array( - 'vendor' => gtext("vendor"), - 'compatibility' => gtext("compatibility"), - 'comm_year' => gtext("year"), - 'interface' => gtext("interface"), - ); - - $this->setPopupFunctions(); - - $this->createPopupWhere('vendor,compatibility,comm_year,interface'); - - $this->diffFields = array( - 'vendor' => gtext("vendor"), - 'model' => gtext('model name'), - 'other_names' => gtext('possible other names of the device'), - 'subtype' => gtext('subtype')." (laser, inkjet, ..)", - 'pci_id' => gtext("VendorID:ProductID code of the device"), - 'comm_year' => gtext('year of commercialization'), - 'interface' => gtext("interface"), - 'distribution' => gtext('GNU/Linux distribution used for the test'), - 'compatibility' => gtext('compatibility with free software'), - 'it_tracks_users' => gtext('does it adopt any techniques to track users?'), - 'kernel' => gtext('tested with the following kernel libre'), - 'driver' => gtext("free driver used"), - 'description' => gtext('Description'), - ); - - $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/ProfileModel.php b/h-source/Application/Models/ProfileModel.php deleted file mode 100644 index c8818b4..0000000 --- a/h-source/Application/Models/ProfileModel.php +++ /dev/null @@ -1,78 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class ProfileModel extends Model_Tree { - - public function __construct() { - $this->_tables = 'profile'; - $this->_idFields = 'id_prof'; - - $this->_where=array( - 'username' => 'regusers', - 'has_confirmed' => 'regusers', - 'deleted' => 'regusers' - ); - - $this->softConditions['update'] = array( - "checkLength|90" => "real_name,where_you_are,fav_distro,birth_date,website|the fields 'real name', 'where_you_are', 'favorite distro', 'website' and 'birthdate' don't have to have more than 90 characters", - "checkLength|1000" => "projects,description|the fields 'projects' and 'description' don't have to have more than 1000 characters", - "checkIsStrings|no,yes" => "publish_mail", - "+checkIsStrings|no,yes" => "send_notification" - ); - - parent::__construct(); - } - - public $formStruct = array( - - 'entries' => array( - 'real_name' => array('labelString'=>'Your real name'), - 'website' => array('labelString'=>'Your website address (add http://)'), - 'where_you_are' => array('labelString'=>'I\'m from...'), - 'birth_date' => array('labelString'=>'My birthdate'), - 'fav_distro' => array('labelString'=>'My favourite distribution'), - 'projects' => array( - 'type' => 'Textarea', - 'labelString'=>'Free software projects I\'m working on' - ), - 'publish_mail' => array( - 'type' => 'Select', - 'options' => 'no,yes', - 'labelString'=> 'Would you like to publish your e-mail address?' - ), - 'send_notification' => array( - 'type' => 'Select', - 'options' => 'yes,no', - 'labelString'=> 'Would you like to receive mail notifications?' - ), - 'description' => array( - 'type' => 'Textarea', - 'labelString'=> 'Your description' - ), - 'id_prof' => array( - 'type' => 'Hidden' - ) - ), - - ); - -} \ No newline at end of file diff --git a/h-source/Application/Models/RaidadaptersModel.php b/h-source/Application/Models/RaidadaptersModel.php deleted file mode 100644 index 2e140e8..0000000 --- a/h-source/Application/Models/RaidadaptersModel.php +++ /dev/null @@ -1,68 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class RaidadaptersModel extends GenericModel -{ - - public $type = 'RAID-adapter'; //device type - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'comm_year' => 'comm_year', - 'compatibility' => 'compatibility', - 'interface' => 'interface', - ); - - $this->_popupLabels = array( - 'vendor' => gtext("vendor"), - 'comm_year' => gtext("year"), - 'compatibility' => gtext("does it work?"), - 'interface' => gtext("interface"), - ); - - $this->setPopupFunctions(); - - $this->createPopupWhere('vendor,compatibility,comm_year,interface'); - - $this->diffFields = array( - 'vendor' => gtext("vendor"), - 'model' => gtext('model name'), - 'other_names' => gtext('possible other names of the device'), - 'pci_id' => gtext("VendorID:ProductID code of the device"), - 'comm_year' => gtext('year of commercialization'), - 'interface' => gtext("interface"), - 'distribution' => gtext('GNU/Linux distribution used for the test'), - 'kernel' => gtext('tested with the following kernel libre'), - 'compatibility' => gtext("does it work with free software?"), - 'driver' => gtext("free driver used"), - 'description' => gtext('Description'), - ); - - $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/RevisionsModel.php b/h-source/Application/Models/RevisionsModel.php deleted file mode 100644 index fd56db7..0000000 --- a/h-source/Application/Models/RevisionsModel.php +++ /dev/null @@ -1,50 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class RevisionsModel extends Model_Tree { - - public $id_user = 0; - public $type = ''; //device type - - public function __construct() { - $this->_tables='revisions'; - $this->_idFields='id_rev'; - - $this->_where=array( - 'id_hard'=>'revisions' - ); - - $this->orderBy = 'id_rev desc'; - - parent::__construct(); - } - - public function getIdHard($id_rev = 0) - { - $clean['id_rev'] = (int)$id_rev; - - $res = $this->db->select('revisions','id_hard','id_rev='.$clean['id_rev']); - - return (count($res) > 0) ? $res[0]['revisions']['id_hard'] : 0; - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/ScannersModel.php b/h-source/Application/Models/ScannersModel.php deleted file mode 100644 index 4710503..0000000 --- a/h-source/Application/Models/ScannersModel.php +++ /dev/null @@ -1,68 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class ScannersModel extends GenericModel -{ - - public $type = 'scanner'; //device type - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'compatibility' => 'compatibility', - 'comm_year' => 'comm_year', - 'interface' => 'interface', - ); - - $this->_popupLabels = array( - 'vendor' => gtext("vendor"), - 'compatibility' => gtext("compatibility"), - 'comm_year' => gtext("year"), - 'interface' => gtext("interface"), - ); - - $this->createPopupWhere('vendor,compatibility,comm_year,interface'); - - $this->setPopupFunctions(); - - $this->diffFields = array( - 'vendor' => gtext("vendor"), - 'model' => gtext('model name'), - 'other_names' => gtext('possible other names of the device'), - 'pci_id' => gtext("VendorID:ProductID code of the device"), - 'comm_year' => gtext('year of commercialization'), - 'interface' => gtext("interface"), - 'distribution' => gtext('GNU/Linux distribution used for the test'), - 'compatibility' => gtext('compatibility with free software'), - 'kernel' => gtext('tested with the following kernel libre'), - 'driver' => gtext("free driver used"), - 'description' => gtext('Description'), - ); - - $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/SdcardreadersModel.php b/h-source/Application/Models/SdcardreadersModel.php deleted file mode 100644 index 85950a5..0000000 --- a/h-source/Application/Models/SdcardreadersModel.php +++ /dev/null @@ -1,68 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class SdcardreadersModel extends GenericModel -{ - - public $type = 'sd-card-reader'; //device type - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'comm_year' => 'comm_year', - 'sd_card_works' => 'sd_card_works', - 'interface' => 'interface', - ); - - $this->_popupLabels = array( - 'vendor' => gtext("vendor"), - 'comm_year' => gtext("year"), - 'sd_card_works' => gtext("does it work?"), - 'interface' => gtext("interface"), - ); - - $this->setPopupFunctions(); - - $this->createPopupWhere('vendor,sd_card_works,comm_year,interface'); - - $this->diffFields = array( - 'vendor' => gtext("vendor"), - 'model' => gtext('model name'), - 'other_names' => gtext('possible other names of the device'), - 'pci_id' => gtext("VendorID:ProductID code of the device"), - 'comm_year' => gtext('year of commercialization'), - 'interface' => gtext("interface"), - 'distribution' => gtext('GNU/Linux distribution used for the test'), - 'kernel' => gtext('tested with the following kernel libre'), - 'sd_card_works' => gtext("does it work with free software?"), - 'driver' => gtext("free driver used"), - 'description' => gtext('Description'), - ); - - $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/SoundcardsModel.php b/h-source/Application/Models/SoundcardsModel.php deleted file mode 100644 index 7137d79..0000000 --- a/h-source/Application/Models/SoundcardsModel.php +++ /dev/null @@ -1,68 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class SoundcardsModel extends GenericModel -{ - - public $type = 'soundcard'; //device type - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'comm_year' => 'comm_year', - 'sound_card_works' => 'sound_card_works', - 'interface' => 'interface', - ); - - $this->_popupLabels = array( - 'vendor' => gtext("vendor"), - 'comm_year' => gtext("year"), - 'sound_card_works' => gtext("does it work?"), - 'interface' => gtext("interface"), - ); - - $this->setPopupFunctions(); - - $this->createPopupWhere('vendor,sound_card_works,comm_year,interface'); - - $this->diffFields = array( - 'vendor' => gtext("vendor"), - 'model' => gtext('model name'), - 'other_names' => gtext('possible other names of the device'), - 'pci_id' => gtext("VendorID:ProductID code of the device"), - 'comm_year' => gtext('year of commercialization'), - 'interface' => gtext("interface"), - 'distribution' => gtext('GNU/Linux distribution used for the test'), - 'kernel' => gtext('tested with the following kernel libre'), - 'sound_card_works' => gtext("does it work with free software?"), - 'driver' => gtext("free driver used"), - 'description' => gtext('Description'), - ); - - $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/TalkModel.php b/h-source/Application/Models/TalkModel.php deleted file mode 100644 index 1d15ab7..0000000 --- a/h-source/Application/Models/TalkModel.php +++ /dev/null @@ -1,116 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class TalkModel extends BaseModel { - - public function __construct() { - $this->_tables = 'talk'; - $this->_idFields = 'id_talk'; - - $this->_where=array( - 'id_hard' => 'talk', - 'has_confirmed' => 'regusers', - '-deleted' => 'regusers', - ); - - $this->orderBy = 'talk.id_talk desc'; - - $this->strongConditions['insert'] = array( - "checkLength|99" => 'title', - "+checkNotEmpty" => 'message', - "++checkLength|5000" => 'message', - ); - - parent::__construct(); - } - - public function pUpdate($id) - { - return parent::update($id); - } - - public function insert() - { - if (parent::insert()) - { - //update the history - $this->updateHistory('talk_ins'); - - if (strcmp($this->values['id_hard'],0) !== 0) - { - $clean['id_hard'] = (int)$this->values['id_hard']; - $clean['created_by'] = (int)$this->values['created_by']; - - $hard = new HardwareModel(); - $users = $hard->select('username,e_mail') - ->where(array('id_hard'=>$clean['id_hard'],'has_confirmed'=>0,'deleted'=>'no')) - ->toList('regusers.username','regusers.e_mail') - ->send('Boxes'); - - $talkUsers = $this->select('username,e_mail') - ->from('talk inner join regusers') - ->on('talk.created_by = regusers.id_user') - ->where(array('id_hard'=>$clean['id_hard'],'has_confirmed'=>0,'-deleted'=>'no')) - ->toList('regusers.username','regusers.e_mail') - ->send(); - - $allUsers = array_merge($users,$talkUsers); - - $userObj = new UsersModel(); - $myName = $userObj->getUser($clean['created_by']); - - $arrayE = new ArrayExt(); - $fusers = $arrayE->subsetComplementary($allUsers,$myName); - - //remove users that do not want the email notification - $inString = "'".implode("','",array_keys($fusers))."'"; - $profile = new ProfileModel(); - $ffusers = $profile->select('username,e_mail') - ->from('regusers inner join profile') - ->on('regusers.id_user = profile.created_by') - ->where(array('send_notification'=>'yes','username'=>"in($inString)")) - ->toList('regusers.username','regusers.e_mail') - ->send(); - - $ffusers = array_flip($ffusers); - - //send the notice - Account::sendTalkNotice($myName,$ffusers,$clean['id_hard']); - - $domainName = rtrim(Url::getRoot(),"/"); - header('Refresh: 0;url='.$domainName.$_SERVER['REQUEST_URI']); - exit; - } - } - } - - public $formStruct = array( - 'entries' => array( - 'title' => array(), - 'message' => array('type'=>'Textarea'), - 'id_talk' => array( - 'type' => 'Hidden' - ) - ), - ); - -} \ No newline at end of file diff --git a/h-source/Application/Models/ThreegcardsModel.php b/h-source/Application/Models/ThreegcardsModel.php deleted file mode 100644 index 88ae580..0000000 --- a/h-source/Application/Models/ThreegcardsModel.php +++ /dev/null @@ -1,68 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class ThreegcardsModel extends GenericModel -{ - - public $type = '3G-card'; //device type - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'comm_year' => 'comm_year', - 'wifi_works' => 'wifi_works', - 'interface' => 'interface', - ); - - $this->_popupLabels = array( - 'vendor' => gtext("vendor"), - 'comm_year' => gtext("year"), - 'wifi_works' => gtext("does it work?"), - 'interface' => gtext("interface"), - ); - - $this->setPopupFunctions(); - - $this->createPopupWhere('vendor,wifi_works,comm_year,interface'); - - $this->diffFields = array( - 'vendor' => gtext("vendor"), - 'model' => gtext('model name'), - 'other_names' => gtext('possible other names of the device'), - 'pci_id' => gtext("VendorID:ProductID code of the device"), - 'comm_year' => gtext('year of commercialization'), - 'interface' => gtext("interface"), - 'distribution' => gtext('GNU/Linux distribution used for the test'), - 'kernel' => gtext('tested with the following kernel libre'), - 'wifi_works' => gtext("does it work with free software?"), - 'driver' => gtext("free driver used"), - 'description' => gtext('Description'), - ); - - $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/UsersModel.php b/h-source/Application/Models/UsersModel.php deleted file mode 100755 index e666e36..0000000 --- a/h-source/Application/Models/UsersModel.php +++ /dev/null @@ -1,295 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class UsersModel extends Model_Map -{ - - public static $usersList = array(); - - public function __construct() - { - $this->_tables='regusers,reggroups,regusers_groups'; - $this->_idFields='id_user,id_group'; - - $this->_where=array( - 'id_group' => 'reggroups', - 'id_user' => 'regusers', - 'name' => 'reggroups', - 'confirmation_token'=> 'regusers', - 'has_confirmed' => 'regusers', - 'deleted' => 'regusers', - 'forgot_token' => 'regusers' - ); - - $this->_popupItemNames = array( - 'has_confirmed'=>'has_confirmed', - 'deleted'=>'deleted', - 'id_group'=>'name', - ); - - $this->_popupLabels = array( - 'has_confirmed'=>'HAS CONFIRMED?', - 'deleted'=>'DELETED?', - 'id_group'=>'GROUP' - ); - - $this->orderBy = 'regusers.id_user desc'; - - parent::__construct(); - - $this->deleteNotRegistered(); - } - - public function pUpdate($id) - { - return parent::update($id); - } - - public function deleteNotRegistered() - { - $limit = time() - Account::$confirmTime; - $this->db->del('regusers','has_confirmed = 1 and deleted = "no" and creation_time < '.$limit); - } - - public function getUser($id_user = 0) - { - $clean['id_user'] = (int)$id_user; - if (array_key_exists($clean['id_user'],self::$usersList)) - { - return self::$usersList[$clean['id_user']]; - } - else - { - $user = $this->db->select('regusers','username,has_confirmed','id_user='.$clean['id_user']); - if (count($user) > 0) - { - $fuser = (strcmp($user[0]['regusers']['has_confirmed'],0) === 0) ? $user[0]['regusers']['username'] : "__".$user[0]['regusers']['username']; - self::$usersList[$clean['id_user']] = $fuser; - return $fuser; - } - else - { - return "__anonymous__"; - } - } - } - - public function getLinkToUser($user) - { - if (strstr($user,'__')) - { - return $user; -// return str_replace('__',null,$user); - } - else - { - return "$user"; - } - } - - public function getLinkToUserFromId($id_user = 0) - { - $clean['id_user'] = (int)$id_user; - return $this->getLinkToUser($this->getUser($clean['id_user'])); - } - - //check if the user exists - public function userExists($user) - { - $clean['user'] = ctype_alnum($user) ? sanitizeAll($user) : ''; - - if (strcmp($clean['user'],'') !== 0) - { - $res = $this->where(array("username"=>$clean['user'],"has_confirmed"=>"0","deleted"=>"no"))->send(); -// $res = $this->db->select('regusers','has_confirmed','username="'.$clean['user'].'" and has_confirmed=0 and deleted="no"'); - - if (count($res) > 0) - { - return true; - } - } - return false; - } - - //get the user id from the username - public function getUserId($username = '') - { - $clean['username'] = ctype_alnum($username) ? sanitizeAll($username) : ''; - - $users = $this->select('id_user')->where(array('username'=>$clean['username'],'has_confirmed'=>0,'deleted'=>'no'))->send(); - if (count($users) > 0) - { - return $users[0]['regusers']['id_user']; - } - else - { - return 0; - } - } - - public function isBlocked($idUser) - { - $clean['id_user'] = (int)$idUser; - - $res = $this->select('blocked')->where(array('id_user'=>$clean['id_user'],'has_confirmed'=>0,'deleted'=>'no'))->toList('blocked')->send(); - - if (count($res) > 0) - { - return strcmp($res[0],'yes') === 0 ? true : false; - } - - return true; - } - - public function insert() - { - //create the token - $confirmation_token = md5(randString(20)); - $this->values['confirmation_token'] = $confirmation_token; - //has_confirmed flag - $this->values['has_confirmed'] = 1; - $this->values['creation_time'] = time(); - - //random ID - $randomId = md5(randString(5).uniqid(mt_rand(),true)); - $this->values["temp_field"] = $randomId; - - if (isset($_POST['captcha'])) - { - if ( strcmp($_SESSION['captchaString'],$_POST['captcha']) === 0 ) - { - - parent::insert(); - - if ($this->queryResult) - { - $resId = $this->db->select("regusers","id_user","temp_field='$randomId'"); - $clean['id_user'] = $resId[0]['regusers']['id_user']; - $this->db->update("regusers",'temp_field',array(''),'id_user='.$clean['id_user']); - - $result = Account::confirm($this->values['username'],$this->values['e_mail'],$clean['id_user'],$confirmation_token); - - if ($result) - { - $_SESSION['status'] = 'sent'; - } - else - { - $_SESSION['status'] = 'regerror'; - } - - $hed = new HeaderObj(DOMAIN_NAME); - $hed->redirect('users/notice/'.Lang::$current); - } - - } - else - { - $this->result = false; - $this->queryResult = false; - $this->notice = "
              Wrong captcha code...
              \n"; - } - } - } - - public function close($id_user) - { - $clean['id_user'] = (int)$id_user; - - $this->values = array( - 'has_confirmed' => 1, - 'deleted' => 'yes', - 'e_mail' => '' - ); - - if ($this->update($clean['id_user'])) - { - $_SESSION['status'] = 'deleted'; - - $profile = new ProfileModel(); - $res = $profile->db->select('profile','id_prof','created_by='.$clean['id_user']); - - if (count($res) > 0) - { - $clean['id_prof'] = (int)$res[0]['profile']['id_prof']; - $profile->values = array( - 'real_name' => '', - 'where_you_are' => '', - 'birth_date' => '', - 'fav_distro' => '', - 'projects' => '', - 'description' => '' - ); - $profile->update($clean['id_prof']); - } - } - - } - - public function forgot($username) - { - $clean['username'] = ctype_alnum($username) ? sanitizeAll($username) : ''; - - if (isset($_POST['captcha'])) - { - if ( strcmp($_SESSION['captchaString'],$_POST['captcha']) === 0 ) - { - $res = $this->db->select('regusers','e_mail,id_user','username="'.$clean['username'].'" and has_confirmed = 0 and deleted = "no"'); - if (count($res) > 0) - { - $e_mail = $res[0]['regusers']['e_mail']; - $id_user = (int)$res[0]['regusers']['id_user']; - $forgot_token = md5(randString(20)); - $forgot_time = time(); - $updateArray = array($forgot_token, $forgot_time); - $this->db->update('regusers','forgot_token,forgot_time',$updateArray,'username="'.$clean['username'].'"'); - - $result = Account::sendnew($clean['username'],$e_mail,$id_user,$forgot_token); - - if ($result) - { - $_SESSION['status'] = 'sent_new'; - } - else - { - $_SESSION['status'] = 'sent_new_error'; - } - - $hed = new HeaderObj(DOMAIN_NAME); - $hed->redirect('users/notice/'.Lang::$current,1); - - } - else - { - $this->notice = "
              the user does not exist
              \n"; - } - } - else - { - $this->result = false; - $this->queryResult = false; - $this->notice = "
              Wrong captcha code...
              \n"; - } - } - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/VendorsModel.php b/h-source/Application/Models/VendorsModel.php deleted file mode 100644 index 0b06d52..0000000 --- a/h-source/Application/Models/VendorsModel.php +++ /dev/null @@ -1,82 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class VendorsModel extends Model_Tree { - - public function __construct() { - $this->_tables = 'vendors'; - $this->_idFields = 'id_vendor'; - - parent::__construct(); - } - - public function check($id,$interface = 'USB') - { - if (preg_match('/^[a-zA-Z0-9]{4}(\:)[a-zA-Z0-9]{4}$/',$id)) - { - $clean['bus'] = strcmp($interface,'USB') === 0 ? "USB" : "PCI"; - - $temp = explode(':',$id); - $clean['vendorId'] = sanitizeAlphanum($temp[0]); - - $number = $this->clear()->where(array("vendorid" => $clean['vendorId'], "bus" => $clean['bus']))->rowNumber(); - - if ($number > 0) - { - return true; - } - } - return false; - } - - public function getName($id,$interface) - { - if ($this->check($id,$interface)) - { - $clean['bus'] = strcmp($interface,'USB') === 0 ? "USB" : "PCI"; - - $temp = explode(':',$id); - $clean['vendorId'] = sanitizeAlphanum($temp[0]); - - $res = $this->clear()->where(array("vendorid" => $clean['vendorId'], "bus" => $clean['bus']))->send(); - - if (count($res) > 0) - { - return $res[0]['vendors']['clean_name']; - } - } - return 'not-known'; - } - - public function getFullName($name) - { - $clean['name'] = sanitizeAll($name); - - $res = $this->clear()->where(array("clean_name" => $clean['name']))->send(); - - if (count($res) > 0) - { - return $res[0]['vendors']['full_name']; - } - return $clean['name']; - } -} \ No newline at end of file diff --git a/h-source/Application/Models/VideocardsModel.php b/h-source/Application/Models/VideocardsModel.php deleted file mode 100644 index 961340e..0000000 --- a/h-source/Application/Models/VideocardsModel.php +++ /dev/null @@ -1,68 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class VideocardsModel extends GenericModel -{ - - public $type = 'videocard'; //device type - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'comm_year' => 'comm_year', - 'video_card_works' => 'video_card_works', - 'interface' => 'interface', - ); - - $this->_popupLabels = array( - 'vendor' => gtext("vendor"), - 'comm_year' => gtext("year"), - 'video_card_works' => gtext("does it work?"), - 'interface' => gtext("interface"), - ); - - $this->createPopupWhere('vendor,video_card_works,comm_year,interface'); - - $this->setPopupFunctions(); - - $this->diffFields = array( - 'vendor' => gtext("vendor"), - 'model' => gtext('model name'), - 'other_names' => gtext('possible other names of the device'), - 'pci_id' => gtext("VendorID:ProductID code of the device"), - 'comm_year' => gtext('year of commercialization'), - 'interface' => gtext("interface"), - 'distribution' => gtext('GNU/Linux distribution used for the test'), - 'kernel' => gtext('tested with the following kernel libre'), - 'video_card_works' => gtext("how does it work with free software?"), - 'driver' => gtext("free driver used"), - 'description' => gtext('Description'), - ); - - $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/WebcamsModel.php b/h-source/Application/Models/WebcamsModel.php deleted file mode 100644 index 0942bcb..0000000 --- a/h-source/Application/Models/WebcamsModel.php +++ /dev/null @@ -1,72 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class WebcamsModel extends GenericModel -{ - - public $type = 'webcam'; //device type - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'comm_year' => 'comm_year', - 'webcam_works' => 'webcam_works', - 'interface' => 'interface', - ); - - $this->_popupLabels = array( - 'vendor' => gtext("vendor"), - 'comm_year' => gtext("year"), - 'webcam_works' => gtext("does it work?"), - 'interface' => gtext("interface"), - ); - - $this->_popupFunctions = array( - 'vendor' => 'betterVendor', - ); - - $this->createPopupWhere('vendor,webcam_works,comm_year,interface'); - - $this->setPopupFunctions(); - - $this->diffFields = array( - 'vendor' => gtext("vendor"), - 'model' => gtext('model name'), - 'other_names' => gtext('possible other names of the device'), - 'pci_id' => gtext("VendorID:ProductID code of the device"), - 'comm_year' => gtext('year of commercialization'), - 'interface' => gtext("interface"), - 'distribution' => gtext('GNU/Linux distribution used for the test'), - 'kernel' => gtext('tested with the following kernel libre'), - 'webcam_works' => gtext("does it work with free software?"), - 'driver' => gtext("free driver used"), - 'description' => gtext('Description'), - ); - - $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/WifiModel.php b/h-source/Application/Models/WifiModel.php deleted file mode 100644 index 0b6d6c2..0000000 --- a/h-source/Application/Models/WifiModel.php +++ /dev/null @@ -1,68 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class WifiModel extends GenericModel -{ - - public $type = 'wifi'; //device type - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'comm_year' => 'comm_year', - 'wifi_works' => 'wifi_works', - 'interface' => 'interface', - ); - - $this->_popupLabels = array( - 'vendor' => gtext("vendor"), - 'comm_year' => gtext("year"), - 'wifi_works' => gtext("does it work?"), - 'interface' => gtext("interface"), - ); - - $this->setPopupFunctions(); - - $this->createPopupWhere('vendor,wifi_works,comm_year,interface'); - - $this->diffFields = array( - 'vendor' => gtext("vendor"), - 'model' => gtext('model name'), - 'other_names' => gtext('possible other names of the device'), - 'pci_id' => gtext("VendorID:ProductID code of the device"), - 'comm_year' => gtext('year of commercialization'), - 'interface' => gtext("interface"), - 'distribution' => gtext('GNU/Linux distribution used for the test'), - 'kernel' => gtext('tested with the following kernel libre'), - 'wifi_works' => gtext("does it work with free software?"), - 'driver' => gtext("free driver used"), - 'description' => gtext('Description'), - ); - - $this->fieldsWithBreaks = array(gtext('Description'),gtext('possible other names of the device')); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/WikiModel.php b/h-source/Application/Models/WikiModel.php deleted file mode 100644 index bb60b66..0000000 --- a/h-source/Application/Models/WikiModel.php +++ /dev/null @@ -1,319 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class WikiModel extends Model_Map { - - public $id_user = 0; - public $lastId = 0; //the id of the last record inserted - public $lastTitle = null; //the title of the last page inserted - public $lastTitleClean = null; //the cleaned title of the last page inserted - - public $diffFields = array(); - public $fieldsWithBreaks = array(); - - public function __construct() { - $this->_tables='wiki,regusers,wiki_users'; - $this->_idFields='id_wiki,id_user'; - $this->_where=array( - 'username' => 'regusers', - 'id_user' => 'regusers', - 'has_confirmed' => 'regusers', - 'deleted' => 'regusers', - '-deleted' => 'wiki', - '-blocked' => 'wiki', - ); - - $this->printAssError = "no"; - - $this->diffFields = array( - 'title' => gtext("the title"), - 'page' => gtext('the text of the wiki page'), - ); - - $this->fieldsWithBreaks = array(gtext('the text of the wiki page')); - - $this->strongConditions['insert'] = array( - "checkNotEmpty" => 'title', - "checkLength|99" => 'title|'.gtext('title is too long'), - "+checkNotEmpty" => 'page', - "+checkLength|49900" => 'page|'.gtext('the page text is too long'), - ); - - $this->strongConditions['update'] = array( - "checkNotEmpty" => 'title', - "checkLength|99" => 'title|'.gtext('title is too long'), - "+checkNotEmpty" => 'page', - "+checkLength|49900" => 'page|'.gtext('the page text is too long'), - ); - - $this->databaseConditions['insert'] = array( - "checkUnique" => 'title|'.gtext('a page with the same title already exists'), - ); - - $this->databaseConditions['update'] = array( - "checkUniqueCompl" => 'title|'.gtext('a page with the same title already exists'), - ); - - parent::__construct(); - } - - public function pUpdate($id) - { - return parent::update($id); - } - - public function insert() - { - $this->values['created_by'] = (int)$this->id_user; - $this->values['update_date'] = date('Y-m-d H:i:s'); - - //random ID - $randomId = md5(uniqid(mt_rand(),true)); - $this->values["title_clean"] = $randomId; - - parent::insert(); - - //associate the user to the record - if ($this->queryResult) - { - $resId = $this->select()->where(array('title_clean'=>$randomId))->send(); - $clean['id'] = $resId[0]['wiki']['id_wiki']; - $this->lastId = $clean['id']; - $this->lastTitle = $resId[0]['wiki']['title']; - $this->lastTitleClean = titleForRedirect($resId[0]['wiki']['title']); - $this->db->update('wiki','title_clean',array(encodeUrl(sanitizeDb($resId[0]['wiki']['title']))),'id_wiki='.$clean['id']); - - //update the history table - $this->updateHistory('insert'); - - $this->associate($clean['id']); - } - - } - - public function update($id = null, $where = null) - { - $clean['id'] = (int)$id; - - $this->values['created_by'] = (int)$this->id_user; - $this->values['update_date'] = date('Y-m-d H:i:s'); - $this->values['title_clean'] = encodeUrl($this->values['title']); - - //save the old fields in the revisions table - $this->setWhereQueryClause(array('id_wiki' => $clean['id'])); - $oldStruct = $this->getFields($this->fields.',title_clean,created_by,update_date,id_wiki'); - - if (count($oldStruct > 0)) - { - $oldValues = $oldStruct[0]['wiki']; - - $revisions = new WikirevisionsModel(); - $revisions->values = $oldValues; - - $revisions->sanitize(); - - if ($revisions->insert()) - { - - if ($this->isMain($clean['id'])) - { - $this->values['title'] = 'Main Page'; - $this->values['title_clean'] = 'Main-Page'; - } - - parent::update($clean['id']); - if ($this->queryResult) - { - $this->lastId = $clean['id']; - $this->lastTitle = $this->values['title']; - $this->lastTitleClean = html_entity_decode($this->values['title_clean'],ENT_QUOTES,DEFAULT_CHARSET); - - //update the history table - $this->updateHistory('update'); - - if (!$this->checkAssociation($clean['id'],(int)$this->id_user)) - { - $this->associate($clean['id']); - } - } - } - } - } - - public function makeCurrent($id_rev) - { - - $clean['id_rev'] = (int)$id_rev; - - $revisions = new WikirevisionsModel(); - - $clean['id_wiki'] = (int)$revisions->getIdPage($clean['id_rev']); - - //save the old fields in the revisions table - $this->where(array('id_wiki'=>$clean['id_wiki'])); - $oldStruct = $this->getFields($this->fields.',title_clean,created_by,update_date,id_wiki'); - - if (count($oldStruct > 0)) - { - //get the values of the revision - $revisions->where(array('id_rev'=>$clean['id_rev'])); - $newStruct = $revisions->getFields($this->fields.',title_clean,created_by,update_date'); - - if (count($newStruct > 0)) - { - $revisions->values = $oldStruct[0]['wiki']; - $revisions->sanitize(); - - $this->values = $newStruct[0]['wiki_revisions']; - $this->values['created_by'] = (int)$this->id_user; - $this->values['update_date'] = date('Y-m-d H:i:s'); - - $this->sanitize(); - - if ($this->isMain($clean['id_wiki'])) - { - $this->values['title'] = 'Main Page'; - $this->values['title_clean'] = 'Main-Page'; - } - - if ($revisions->insert()) - { - if (parent::update($clean['id_wiki'])) - { - $this->lastId = $clean['id_wiki']; - $this->lastTitle = $this->values['title']; - $this->lastTitleClean = html_entity_decode($this->values['title_clean'],ENT_QUOTES,DEFAULT_CHARSET); - - //update the history table - $this->updateHistory('update'); - - if (!$this->checkAssociation($clean['id_wiki'],(int)$this->id_user)) - { - $this->associate($clean['id_wiki']); - } - } - } - } - } - - } - - public function associate($id_record = null, $idGroup = null) - { - return parent::associate((int)$id_record,(int)$this->id_user); - } - - //get the model name - public function getTheModelName($id, $cleaned = false) - { - $clean['id'] = (int)$id; - $this->setWhereQueryClause(array('id_wiki' => $clean['id'])); - $res = $this->getFields('title,title_clean'); - $name = ''; - if (count($res) > 0) - { - if ($cleaned) - { - $name = $res[0]['wiki']['title_clean']; - } - else - { - $name = $res[0]['wiki']['title']; - } - } - return $name; - } - - //save in the history all the action carried out by users - protected function updateHistory($action) - { - $translations = array( - 'insert' => 'inserted', - 'update' => 'updated', - ); - - $allowedActions = array('insert','update'); - - if (in_array($action,$allowedActions)) - { - $users = new UsersModel(); - - $clean['user'] = sanitizeAll($users->getUser($this->id_user)); - - $history = new HistoryModel(); - $history->values = array( - 'created_by' => $this->id_user, - 'type' => 'wiki', - 'action' => $action, - 'id' => $this->lastId, - 'message' => 'The wiki page having id='.$this->lastId.' has been '.$translations[$action].' by the user ' . $clean['user'] . ' (id_user='.$this->id_user.') ', - 'gr' => 'registered', - ); - $history->insert(); - } - } - - public function isMain($id) - { - $clean['id'] = (int)$id; - $res = $this->select('is_main')->where(array('id_wiki'=>$clean['id']))->send(); - if ( count($res) > 0 ) - { - return strcmp($res[0]['wiki']['is_main'],'no') === 0 ? false : true; - } - return false; - } - - public function isDeleted($id) - { - $clean['id'] = (int)$id; - $res = $this->select('wiki.deleted')->where(array('id_wiki'=>$clean['id']))->send(); - if ( count($res) > 0 ) - { - return strcmp($res[0]['wiki']['deleted'],'no') === 0 ? false : true; - } - return false; - } - - public function isBlocked($id) - { - $clean['id'] = (int)$id; - $res = $this->select('blocked')->where(array('id_wiki'=>$clean['id']))->send(); - if ( count($res) > 0 ) - { - return strcmp($res[0]['wiki']['blocked'],'no') === 0 ? false : true; - } - return false; - } - - public function toWikiPage($id) - { - $clean['id'] = (int)$id; - $title = $this->getTheModelName($clean['id'], true); - return Url::getRoot()."wiki/page/".Lang::$current."/".$title; - } - - public function getDiffArray($oldArray, $newArray) - { - return getDiffArray($this->diffFields, $oldArray, $newArray); - } -} \ No newline at end of file diff --git a/h-source/Application/Models/WikirevisionsModel.php b/h-source/Application/Models/WikirevisionsModel.php deleted file mode 100644 index fdf5558..0000000 --- a/h-source/Application/Models/WikirevisionsModel.php +++ /dev/null @@ -1,45 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class WikirevisionsModel extends Model_Tree { - - public $id_user = 0; - - public function __construct() { - $this->_tables='wiki_revisions'; - $this->_idFields='id_rev'; - - $this->orderBy = 'id_rev desc'; - - parent::__construct(); - } - - public function getIdPage($id_rev = 0) - { - $clean['id_rev'] = (int)$id_rev; - - $res = $this->db->select('wiki_revisions','id_wiki','id_rev='.$clean['id_rev']); - - return (count($res) > 0) ? $res[0]['wiki_revisions']['id_wiki'] : 0; - } - -} \ No newline at end of file diff --git a/h-source/Application/Models/WikitalkModel.php b/h-source/Application/Models/WikitalkModel.php deleted file mode 100644 index 7dee896..0000000 --- a/h-source/Application/Models/WikitalkModel.php +++ /dev/null @@ -1,112 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class WikitalkModel extends BaseModel -{ - - public function __construct() { - $this->_tables = 'wiki_talk'; - $this->_idFields = 'id_talk'; - - $this->_where=array( - 'id_wiki' => 'wiki_talk', - 'has_confirmed' => 'regusers', - '-deleted' => 'regusers', - ); - - $this->orderBy = 'wiki_talk.id_talk'; - - $this->strongConditions['insert'] = array( - "checkLength|99" => 'title', - "+checkLength|5000" => 'message', - ); - - parent::__construct(); - } - - public function pUpdate($id) - { - return parent::update($id); - } - - public function insert() - { - if (parent::insert()) - { - //update the history - $this->updateHistory('wiki_talk_ins'); - - $clean['id_wiki'] = (int)$this->values['id_wiki']; - $clean['created_by'] = (int)$this->values['created_by']; - - $hard = new WikiModel(); - $users = $hard->select('username,e_mail') - ->where(array('id_wiki'=>$clean['id_wiki'],'has_confirmed'=>0,'deleted'=>'no')) - ->toList('regusers.username','regusers.e_mail') - ->send('Boxes'); - - $talkUsers = $this->select('username,e_mail') - ->inner('regusers') - ->on('wiki_talk.created_by = regusers.id_user') - ->where(array('id_wiki'=>$clean['id_wiki'],'has_confirmed'=>0,'-deleted'=>'no')) - ->toList('regusers.username','regusers.e_mail') - ->send(); - - $allUsers = array_merge($users,$talkUsers); - - $userObj = new UsersModel(); - $myName = $userObj->getUser($clean['created_by']); - - $arrayE = new ArrayExt(); - $fusers = $arrayE->subsetComplementary($allUsers,$myName); - - //remove users that do not want the email notification - $inString = "'".implode("','",array_keys($fusers))."'"; - $profile = new ProfileModel(); - $ffusers = $profile->select('username,e_mail') - ->from('regusers inner join profile') - ->on('regusers.id_user = profile.created_by') - ->where(array('send_notification'=>'yes','username'=>"in($inString)")) - ->toList('regusers.username','regusers.e_mail') - ->send(); - - $ffusers = array_flip($ffusers); - - //send the notice - Account::sendWikiTalkNotice($myName,$ffusers,$clean['id_wiki']); - - header('Refresh: 0;url='.Url::getRoot()."wiki/talk/".Lang::$current."/".$clean['id_wiki']); - exit; - } - } - - public $formStruct = array( - 'entries' => array( - 'title' => array(), - 'message' => array('type'=>'Textarea'), - 'id_talk' => array( - 'type' => 'Hidden' - ) - ), - ); - -} \ No newline at end of file diff --git a/h-source/Application/Modules/ModBase.php b/h-source/Application/Modules/ModBase.php deleted file mode 100644 index 44d25a2..0000000 --- a/h-source/Application/Modules/ModBase.php +++ /dev/null @@ -1,41 +0,0 @@ -simpleXmlObj->classname)) - { - return " class='".$this->simpleXmlObj->classname[0]."' "; - } - return null; - } - - //wrap the html with a
              - //look for the
              tag in the xml in order to set the class of the div - public function wrapDiv($string) - { - $divOpen = "
              "; - $divClose = "
              "; - - if (isset($this->simpleXmlObj->div)) - { - $divOpen = "
              "; - } - - return $divOpen . $string . $divClose; - } - -} \ No newline at end of file diff --git a/h-source/Application/Modules/ModImage.php b/h-source/Application/Modules/ModImage.php deleted file mode 100644 index 5a116b1..0000000 --- a/h-source/Application/Modules/ModImage.php +++ /dev/null @@ -1,45 +0,0 @@ -simpleXmlObj->width)) - { - return " width = '" . $this->simpleXmlObj->width ."' "; - } - return null; - } - - public function heightPropertyString() - { - if (isset($this->simpleXmlObj->height)) - { - return " height = '" . $this->simpleXmlObj->height ."' "; - } - return null; - } - - public function titlePropertyString() - { - if (isset($this->simpleXmlObj->title)) - { - return " title = '" . $this->simpleXmlObj->title ."' "; - } - return null; - } - - public function render() - { - $link = "getHtmlClass().$this->widthPropertyString().$this->heightPropertyString().$this->titlePropertyString()." src='".$this->simpleXmlObj->src[0]."'>"; - return $this->wrapDiv($link)."\n"; - } - -} \ No newline at end of file diff --git a/h-source/Application/Modules/ModLink.php b/h-source/Application/Modules/ModLink.php deleted file mode 100644 index 011bc78..0000000 --- a/h-source/Application/Modules/ModLink.php +++ /dev/null @@ -1,18 +0,0 @@ -getHtmlClass()." href='".$this->simpleXmlObj->href[0]."'>".$this->simpleXmlObj->text[0].""; - return $this->wrapDiv($link)."\n"; - } - -} \ No newline at end of file diff --git a/h-source/Application/Modules/ModLinkimage.php b/h-source/Application/Modules/ModLinkimage.php deleted file mode 100644 index 8e49bbf..0000000 --- a/h-source/Application/Modules/ModLinkimage.php +++ /dev/null @@ -1,18 +0,0 @@ -getHtmlClass()." href='".$this->simpleXmlObj->href[0]."'>widthPropertyString().$this->heightPropertyString().$this->titlePropertyString()." src='".$this->simpleXmlObj->src[0]."'>"; - return $this->wrapDiv($link)."\n"; - } - -} \ No newline at end of file diff --git a/h-source/Application/Modules/ModRaw.php b/h-source/Application/Modules/ModRaw.php deleted file mode 100644 index 4ed3226..0000000 --- a/h-source/Application/Modules/ModRaw.php +++ /dev/null @@ -1,18 +0,0 @@ -simpleXmlObj->text[0]; - return $this->wrapDiv($link)."\n"; - } - -} \ No newline at end of file diff --git a/h-source/Application/Modules/ModTopLink.php b/h-source/Application/Modules/ModTopLink.php deleted file mode 100644 index 6407c3e..0000000 --- a/h-source/Application/Modules/ModTopLink.php +++ /dev/null @@ -1,32 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//module to print an HTML link -//extends the ModBase class -class ModTopLink extends ModBase { - - public function render($liclass = null) - { - return "
            1. getHtmlClass()." href='".$this->simpleXmlObj->href[0]."'>".$this->simpleXmlObj->text[0]."
            2. "; - } - -} \ No newline at end of file diff --git a/h-source/Application/Modules/index.html b/h-source/Application/Modules/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Application/Modules/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Application/Strings/Lang/It/DbCondStrings.php b/h-source/Application/Strings/Lang/It/DbCondStrings.php deleted file mode 100644 index 41b57ac..0000000 --- a/h-source/Application/Strings/Lang/It/DbCondStrings.php +++ /dev/null @@ -1,34 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//error strings in the case database conditions are not satisfied -class Lang_It_DbCondStrings extends Lang_En_DbCondStrings { - - //get the error string in the case that the value of the field $field is already present in the table $table - public function getNotUniqueString($field) - { - return "
              Il valore del campo ". $field ." è già presente. Per favore scegline un altro.
              \n"; - } - -} diff --git a/h-source/Application/Strings/Lang/It/ModelStrings.php b/h-source/Application/Strings/Lang/It/ModelStrings.php deleted file mode 100644 index 7af1ca7..0000000 --- a/h-source/Application/Strings/Lang/It/ModelStrings.php +++ /dev/null @@ -1,36 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Lang_It_ModelStrings extends Lang_ResultStrings { - - public $string = array( - "error" => "
              Errore nella query: contatta l'amministratore!
              \n", - "executed" => "
              operazione eseguita!
              \n", - "associate" => "
              Problema di integrità referenziale: il record è associato ad un record di una tabella figlia. Devi prima rompere l'associazione.
              \n", - "no-id" => "
              Non è definito alcun id della query
              \n", - "not-linked" => "
              Il record non è associato, non puoi dissociarlo
              ", - "linked" => "
              Il record è già associato, non puoi associarlo un'altra volta
              " - ); - -} diff --git a/h-source/Application/Strings/Lang/It/UploadStrings.php b/h-source/Application/Strings/Lang/It/UploadStrings.php deleted file mode 100644 index fe77929..0000000 --- a/h-source/Application/Strings/Lang/It/UploadStrings.php +++ /dev/null @@ -1,44 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Lang_It_UploadStrings extends Lang_ResultStrings { - - public $string = array( - "error" => "
              Errore: verificare i permessi del file/directory
              \n", - "executed" => "
              Operazione eseguita!
              \n", - "not-child" => "
              La cartella selezionata non è una sotto directory della directory base
              \n", - "not-dir" => "
              La cartella selezionata non è una directory
              \n", - "not-empty" => "
              La cartella selezionata non è vuota
              \n", - "no-folder-specified" => "
              Non è stata specificata alcuna cartella
              \n", - "no-file-specified" => "
              Non è stato specificato alcun file
              \n", - "not-writable" => "
              La cartella non è scrivibile
              \n", - "not-writable-file" => "
              Il file non è scrivibile
              \n", - "dir-exists" => "
              Esiste già una directory con lo stesso nome
              \n", - "no-upload-file" => "
              Non c'è alcun file di cui fare l'upload
              \n", - "size-over" => "
              La dimensione del file è troppo grande
              \n", - "not-allowed-ext" => "
              L'estensione del file che vuoi caricare non è consentita
              \n", - "file-exists" => "
              Esiste già un file con lo stesso nome
              \n", - ); - -} diff --git a/h-source/Application/Strings/Lang/It/ValCondStrings.php b/h-source/Application/Strings/Lang/It/ValCondStrings.php deleted file mode 100644 index 2fe6898..0000000 --- a/h-source/Application/Strings/Lang/It/ValCondStrings.php +++ /dev/null @@ -1,92 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Lang_It_ValCondStrings extends Lang_En_ValCondStrings { - - //if the element is not defined - public function getNotDefinedResultString($element) - { - return "
              ". $element ." non è stato definito
              \n"; - } - - //if the elements are not equal - public function getNotEqualResultString($element) - { - return "
              Differenti valori: $element
              \n"; - } - - //if the element is not alphabetic - public function getNotAlphabeticResultString($element) - { - return "
              ".$element." deve essere una stringa di soli caratteri alfabetici
              \n"; - } - - //if the element is not alphanumeric - public function getNotAlphanumericResultString($element) - { - return "
              ".$element." deve essere una stringa di soli caratteri alfanumerici
              \n"; - } - - //if the element is not a decimal digit - public function getNotDecimalDigitResultString($element) - { - return "
              ".$element." deve essere una stringa di soli numeri decimali
              \n"; - } - - //if the element has the mail format - public function getNotMailFormatResultString($element) - { - return "
              ".$element." non sembra un indirizzo e-mail
              \n"; - } - - //if the element is numeric - public function getNotNumericResultString($element) - { - return "
              ".$element." deve essere un numero
              \n"; - } - - //if the element (string) length exceeds the value of characters (defined by $maxLength) - public function getLengthExceedsResultString($element,$maxLength) - { - return "
              ".$element." non deve essere composto da più di $maxLength caratteri
              \n"; - } - - //if the element is one of the strings indicated by $stringList (a comma-separated list of strings) - public function getIsForbiddenStringResultString($element,$stringList) - { - return "
              ".$element." non può assumere uno dei seguenti valori: $stringList
              \n"; - } - - //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings) - public function getIsNotStringResultString($element,$stringList) - { - return "
              ".$element." deve assumere uno dei seguenti valori: $stringList
              \n"; - } - - //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings) - public function getDoesntMatchResultString($element,$regExp) - { - return "
              ".$element." deve soddisfare la seguente espressione regolare: $regExp
              \n"; - } -} diff --git a/h-source/Application/Strings/Lang/It/index.html b/h-source/Application/Strings/Lang/It/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Application/Strings/Lang/It/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Application/Strings/Lang/index.html b/h-source/Application/Strings/Lang/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Application/Strings/Lang/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Application/Strings/index.html b/h-source/Application/Strings/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Application/Strings/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Application/Views/Desktop/Client/info.php b/h-source/Application/Views/Desktop/Client/info.php deleted file mode 100644 index 00d2927..0000000 --- a/h-source/Application/Views/Desktop/Client/info.php +++ /dev/null @@ -1,30 +0,0 @@ - -\n";?> - - - - - - - - - -. -?> \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Client/license.php b/h-source/Application/Views/Desktop/Client/license.php deleted file mode 100644 index c38d615..0000000 --- a/h-source/Application/Views/Desktop/Client/license.php +++ /dev/null @@ -1,25 +0,0 @@ - - - - ]]> - - -. -?> \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Contact/index.php b/h-source/Application/Views/Desktop/Contact/index.php deleted file mode 100644 index ac6e7d5..0000000 --- a/h-source/Application/Views/Desktop/Contact/index.php +++ /dev/null @@ -1,39 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » contact -
              - -
              - -
              - You can suggest to implement new features or add new types of hardware in the ">issues page -
              - -
              - Discussions about also take place on the h-source-users mailing list and #h-node libera.chat IRC channel. -
              - -
              - -
              diff --git a/h-source/Application/Views/Desktop/Contact/index_de.php b/h-source/Application/Views/Desktop/Contact/index_de.php deleted file mode 100644 index ab8710a..0000000 --- a/h-source/Application/Views/Desktop/Contact/index_de.php +++ /dev/null @@ -1,39 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » contact -
              - -
              - -
              - Sie können neu zu implementierende Funktionen vorschlagen oder neue Hardware-Typen in der Seite ">Web-Log hinzufügen -
              - -
              - Wenn Sie das h-node-Team direkt kontaktieren möchten: info@h-node.com -
              - -
              - -
              diff --git a/h-source/Application/Views/Desktop/Contact/index_es.php b/h-source/Application/Views/Desktop/Contact/index_es.php deleted file mode 100644 index af5c022..0000000 --- a/h-source/Application/Views/Desktop/Contact/index_es.php +++ /dev/null @@ -1,39 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » contact -
              - -
              - -
              - Puede sugerir el implementar nuevas caracteriticas o agregar nuevo hardware en la página de ">incidencias -
              - -
              - Si desea contactar directamente al equipo de use esta dirección de correo electronico: info@h-node.com -
              - -
              - -
              diff --git a/h-source/Application/Views/Desktop/Contact/index_fr.php b/h-source/Application/Views/Desktop/Contact/index_fr.php deleted file mode 100644 index 2255258..0000000 --- a/h-source/Application/Views/Desktop/Contact/index_fr.php +++ /dev/null @@ -1,39 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » contact -
              - -
              - -
              - Vous pouvez suggérez l’implémentation de nouvelles fonctionnalitée ou l’ajout d’un nouveau type de matériel dans la page ">problème. -
              - -
              - Si vous voulez contatez directement l’équipe , utilisez cette adresse mail : info@h-node.com -
              - -
              - -
              diff --git a/h-source/Application/Views/Desktop/Contact/index_gr.php b/h-source/Application/Views/Desktop/Contact/index_gr.php deleted file mode 100644 index 2b6a1bb..0000000 --- a/h-source/Application/Views/Desktop/Contact/index_gr.php +++ /dev/null @@ -1,39 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » contact -
              - -
              - -
              - Μπορείτε να εισηγηθείτε την υλοποίηση νέων χαρακτηριστικών ή την προσθήκη νέων τύπων υλικού (hardware) στην ιστοσελίδα ">issues -
              - -
              - Αν θέλετε να έρθετε σε άμεση επαφή με την ομάδα του , χρησιμοποιείστε αυτή την ηλεκτρονική διεύθυνση: info@h-node.com -
              - -
              - -
              diff --git a/h-source/Application/Views/Desktop/Contact/index_it.php b/h-source/Application/Views/Desktop/Contact/index_it.php deleted file mode 100644 index 48355d7..0000000 --- a/h-source/Application/Views/Desktop/Contact/index_it.php +++ /dev/null @@ -1,39 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » contact -
              - -
              - -
              - Potete suggerire nuove caratteristiche da implementare o aggiungere nuovi tipi di hardware nella pagina ">issues -
              - -
              - Se volete direttamente contattare il team di potete farlo a questo indirizzo e-mail: info@h-node.com -
              - -
              - -
              diff --git a/h-source/Application/Views/Desktop/Credits/index.php b/h-source/Application/Views/Desktop/Credits/index.php deleted file mode 100644 index 250fb7a..0000000 --- a/h-source/Application/Views/Desktop/Credits/index.php +++ /dev/null @@ -1,65 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » credits -
              - -
              - -
              - Icons: -
              - -
              - The icons used inside are taken from the ACUN Simgeleri 0.7 icon theme and from the H2O Icon Theme 0.0.5, both licensed under the GNU GPL license, from the Crystal Projects icons, licensed under the LGPL, from the glaze icons set (LGPL) and from the DarkGlass_Reworked icons theme (GPL). The flag icons are taken from the FAMFAMFAM flag icons set (Public Domain). -
              - -
              - jQuery: -
              - -
              - The jQuery, the jQuery UI and the jQuery Mobile javascript libraries (licensed under MIT/GPL) have been used through the website -
              - -
              - markitup: -
              - -
              - The markitup jQuery plugin (licensed under MIT/GPL) has been used in order to help the user to insert wiki tags -
              - -
              - php diff algorithm: -
              - -
              - This algorithm (licensed under the zlib free license) has been used in order to highlight the differences between two different revisions of the same hardware model. -
              - -
              - -
              diff --git a/h-source/Application/Views/Desktop/Credits/index_es.php b/h-source/Application/Views/Desktop/Credits/index_es.php deleted file mode 100644 index d3d349e..0000000 --- a/h-source/Application/Views/Desktop/Credits/index_es.php +++ /dev/null @@ -1,65 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » credits -
              - -
              - -
              - Iconos: -
              - -
              - Los iconos usados dentro de son tomados de el tema de iconos ACUN Simgeleri 0.7 y de H2O Icon Theme 0.0.5, ambos licenciados bajo la licencia GNU GPL, de Crystal Projects, licenciado bajo la LGPL, de glaze icons set (LGPL) y de DarkGlass_Reworked icons theme (GPL). Los iconos de las banderas son tomados la colección de iconos de banderas FAMFAMFAM (Dominio Público) -
              - -
              - jQuery: -
              - -
              - Las bibliotecas javascript jQuery, jQuery UI y jQuery Mobile (licenciadas bajo MIT/GPL) han sido usadas en el sitio -
              - -
              - markitup: -
              - -
              - El complemento markitup jQuery (licenciado bajo MIT/GPL) ha sido usado en orden de ayudar al usuario a insertar etiquetas wiki -
              - -
              - php diff algorithm: -
              - -
              - Este algoritmo (licenciado bajo la licencia libre de zlib) ha sido usado en orden de remarcar las diferencias entre dos diferentes revisiones del mismo modelo de hardware. -
              - -
              - -
              diff --git a/h-source/Application/Views/Desktop/Credits/index_fr.php b/h-source/Application/Views/Desktop/Credits/index_fr.php deleted file mode 100644 index d3276d2..0000000 --- a/h-source/Application/Views/Desktop/Credits/index_fr.php +++ /dev/null @@ -1,63 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » credits -
              - -
              - -
              - Icons: -
              - -
              - Les icones utilisées sur sont tirées du thème ACUN Simgeleri 0.7 et du thème H2O Icon Theme 0.0.5, les deux sont licensée sous license GPL, d’autres sont aussi tirée des thèmes Crystal Projects (LGPL), glaze icons set (LGPL), DarkGlass_Reworked icons theme (GPL). Les icones de drapeau sont tirés du thème FAMFAMFAM flag icons set distribué dans le domaine publique. -
              - -
              - jQuery: -
              - -
              - jQuery , jQuery UI et la librairie javascript jQuery Mobile (licensé sous MIT/GPL) sont utilisés sur le site. -
              - -
              - markitup: -
              - -
              - Le plugin jQuery markitup (licensé sous MIT/GPL) a été utilisé afin d’aider les utilisateurs à insérer des tags wiki. -
              - -
              - Algorithme diff php: -
              - -
              - Cet algorithme (Licensé sous license libre zlib) a été utiliser afin de souligner les différences entre deux révisions d’un même modèle matériel. -
              - -
              - -
              diff --git a/h-source/Application/Views/Desktop/Credits/index_gr.php b/h-source/Application/Views/Desktop/Credits/index_gr.php deleted file mode 100644 index 077d337..0000000 --- a/h-source/Application/Views/Desktop/Credits/index_gr.php +++ /dev/null @@ -1,65 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » credits -
              - -
              - -
              - Εικόνες: -
              - -
              - Οι εικόνες που χρησιμοποιούνται μέσα στο πάρθηκαν από το θέμα εικόνας ACUN Simgeleri 0.7 και από το H2O Icon Theme 0.0.5, που είναι αδειοδοτημένα και τα δύο υπό την Άδεια GNU GPL, από τις εικόνες Crystal Projects, που είναι αδειοδοτημένες υπό την LGPL, από το glaze icons set (LGPL) και από το DarkGlass_Reworked icons theme (GPL). Οι εικόνες flag πάρθηκαν από το FAMFAMFAM flag icons set (Public Domain). -
              - -
              - jQuery: -
              - -
              - Σε όλο τον ιστότοπο χρησιμοποιήθηκαν οι βιβλιοθήκες javascript jQuery και η jQuery UI (που αδειοδοτούνται υπό την MIT/GPL). -
              - -
              - markitup: -
              - -
              - Χρησιμοποιήθηκε το markitup jQuery plugin (που αδειοδοτείται υπό την MIT/GPL), για να βοηθηθεί ο χρήστης να εισαγάγει wiki tags -
              - -
              - php diff algorithm: -
              - -
              - Χρησιμοποιήθηκε ο αλγόριθμος This algorithm (που αδειοδοτείται υπό την ελεύθερη άδεια zlib), για να αναδειχθούν οι διαφορές ανάμεσα στις δύο διαφορετικές αναθεωρήσεις του ίδιου μοντέλου υλικού (hadrware). -
              - -
              - -
              diff --git a/h-source/Application/Views/Desktop/Credits/index_it.php b/h-source/Application/Views/Desktop/Credits/index_it.php deleted file mode 100644 index dcdb2c2..0000000 --- a/h-source/Application/Views/Desktop/Credits/index_it.php +++ /dev/null @@ -1,66 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » credits -
              - -
              - -
              - Icone: -
              - -
              - Le icone utilizzate nel sito h-node.com appartengono ai temi di icone ACUN Simgeleri 0.7 e H2O Icon Theme 0.0.5, entrambi sotto licenza GNU GPL, e al tema Crystal Projects, sotto licenza LGPL, al set di icone glaze (LGPL) e al tema DarkGlass_Reworked (GPL). Le icone bandiere derivano dal set di icone FAMFAMFAM (Public Domain). -
              - - -
              - jQuery: -
              - -
              - Le librerie javascript jQuery , jQuery UI e jQuery Mobile (sotto licenza MIT/GPL) sono state usate nel sito -
              - -
              - markitup: -
              - -
              - Il plugin jQuery markitup (sotto licenza MIT/GPL) è stato usato per aiutare gli utenti a inserire i tag della wiki
              - -
              - Algoritmo php diff: -
              - -
              - Questo algoritmo (sotto licenza libera zlib) è stato usato per sottolineare la differenza tra due diverse revisioni dello stesso modello di hardware. -
              - - -
              - -
              diff --git a/h-source/Application/Views/Desktop/Download/index.php b/h-source/Application/Views/Desktop/Download/index.php deleted file mode 100644 index 2f37f81..0000000 --- a/h-source/Application/Views/Desktop/Download/index.php +++ /dev/null @@ -1,114 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » -
              - -
              - -
              - : -
              - -
              - - -
              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
              ">
              notebooks in the database");?>">
              wifi cards in the database");?>">
              video cards in the database");?>">
              printers in the database");?>">
              scanners in the database");?>">
              3G cards in the database");?>">
              sound cards in the database");?>">
              webcams in the database");?>">
              bluetooth devices in the database");?>">
              acquisition cards in the database");?>">
              fingerprint readers in the database");?>">
              ethernet cards in the database");?>">
              SD card readers in the database");?>">
              modems in the database");?>">
              RAID adapters in the database");?>">
              Host Controllers in the database");?>">
              -
              -
              - -
              - -
              diff --git a/h-source/Application/Views/Desktop/Download/xml.php b/h-source/Application/Views/Desktop/Download/xml.php deleted file mode 100644 index 67bc38e..0000000 --- a/h-source/Application/Views/Desktop/Download/xml.php +++ /dev/null @@ -1,22 +0,0 @@ - - - -. -?> \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Hardware/left.php b/h-source/Application/Views/Desktop/Hardware/left.php deleted file mode 100644 index 03068f5..0000000 --- a/h-source/Application/Views/Desktop/Hardware/left.php +++ /dev/null @@ -1,92 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » Hardware -
              - -
              - , , -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              - -
              -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Help/index.php b/h-source/Application/Views/Desktop/Help/index.php deleted file mode 100644 index c4fcee7..0000000 --- a/h-source/Application/Views/Desktop/Help/index.php +++ /dev/null @@ -1,447 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » -
              - - - -

              Wiki Syntax

              - -

              List of - Wiki Tags

              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
              NameTagResultDescription
              boldtext [b]bold[/b]text boldtext bold
              italictext [i]italic[/i]text italictext italic
              deltext [del]deleted[/del]text deletedtext deleted
              underlinetext [u]underlined[/u]text underlinedtext underlined
              head 1[h1]heading[/h1] -
              - heading
              -
              head 1
              head 2[h2]heading[/h2] -
              - heading
              -
              head 2
              head 3[h3]heading[/h3] -
              - heading
              -
              head 3
              paragraph…[p]new paragraph[/p]… - -

              new paragraph

              -
              new paragraph
              Ordered Lists
                -
              • [list]
              • -
                • -
                • [*]first item[/*]
                • -
                • [*]second item[/*]
                • -
                -
              • -
              • [/list]
              • -
              -
                -
              • first item
              • -
              • second item
              • -
              -
              make a list of items
              Numbered List
                -
              • [enum]
              • -
                • -
                • [*]first item[/*]
                • -
                • [*]second item[/*]
                • -
                -
              • -
              • [/enum]
              • -
              -
                -
              1. first item
              2. -
              3. second item
              4. -
              -
              make a numbered list of items
              list item[*]item[/*]
                -
              • item
              • -
              -
              add an item to a list
              code[code]some code[/code]
              some code
              -
              some code
              simple link[a]url[/a]urlsimple link
              link with text[a]url|text[/a]textlink with text
              notebook[notebook]id[/notebook]idlink to the notebook with the identifier equal to id (the identifier of each device model is written in the - page of the device itself, next to the model name)
              wifi[wifi]id[/wifi]idlink to the wifi with the identifier equal to id (the identifier of each device model is written in the page - of the device itself, next to the model name)
              videocard[videocard]id[/videocard]idlink to the videocard with the identifier equal to id (the identifier of each device model is written in the - page of the device itself, next to the model name)
              - -

               

              - -

              Compatibility classes

              - -

              Notebooks

              -
              -
              Class A (Platinum)
              -
              All the notebook devices work with a very good performance.
              -
              Example: all the devices work, the 3D acceleration is supported
              -
              Class B (Gold)
              -
              All the notebook devices work but not at full performance.
              -
              A typical example: all the devices work, but the 3D acceleration is not supported
              -
              Class C (Silver)
              -
              One main device is not supported.
              -
              Example: the internal wifi card does not work. You need an external USB card
              -
              Class D (Bronze)
              -
              More than one device is not supported
              -
              Class E (Garbage)
              -
              The notebook does not work with free software
              -
              - -

              Printers

              -
              -
              Class A (Full)
              -
              All device functions and features are supported
              -
              Class B (Partial)
              -
              Printing supported but possibly at limited speed or print quality; scanning and/or faxing on some multifunction - devices may not be supported
              -
              Class C (None)
              -
              The printer does not work with free software
              -
              - -

              Scanners

              -
              -
              Class A (Full)
              -
              All device functions and features are supported
              -
              Class B (Partial)
              -
              Scanning supported but possibly at limited speed or quality; some other features may not be supported
              -
              Class C (None)
              -
              The scanner does not work with free software
              -
              - -

               

              - -

              Discover your hardware

              - -

              (Thanks lluvia)

              - -

              In order to know the details of your hardware you can carry out the following actions:

              -
              -
              How to discover the model name of your notebook
              -
              See below your notebook or netbook
              -
              How to discover the model name of your device (if it is not a notebook)
              -
              If the device is integrated (example: a video card)
              -
              Open a terminal and type the following command:
              -
              lspci
              -
              -
              or
              -
              lspci > FILENAME          # output to a file
              -
              - -
              You will obtain the list of your PCI devices, similar to the one written below
              -
              -00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
              -03:00.0 Network controller: Broadcom Corporation BCM4311 802.11b/g WLAN (rev 02)
              -05:00.0 VGA compatible controller: nVidia Corporation G86 [GeForce 8400M GS] (rev a1)
              -			
              -
              -
              Note: The name of each device is written after the colon (see the text - in bold in the above list)
              -
              If the device is an USB device (example: an external USB wifi card)
              -
              Open a terminal and type the following command:
              -
              lsusb -v
              -
              -
              or
              -
              lsusb -v > FILENAME          # output to a file
              -
              - -
              You will obtain the list of your USB devices, similar to the one written below
              -
              -Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
              -Device Descriptor:
              -	bLength						18
              -	bDescriptorType				1
              -	bcdUSB						2.00
              -	bDeviceClass				0 (Defined at Interface level)
              -	bDeviceSubClass				0
              -	bDeviceProtocol				0
              -	bMaxPacketSize0				64
              -	idVendor					0x0846 NetGear, Inc.
              -	idProduct					0x4260 WG111v3 54 Mbps Wireless [realtek RTL8187B]
              -	bcdDevice					2.00
              -	iManufacturer				1
              -	iProduct					2
              -	iSerial						3
              -	...
              -	...
              -
              -Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
              -Device Descriptor:
              -	bLength						18
              -	bDescriptorType				1
              -	bcdUSB						1.10
              -	bDeviceClass				255 Vendor Specific Class
              -	bDeviceSubClass			 	255 Vendor Specific Subclass
              -	bDeviceProtocol			 	255 Vendor Specific Protocol
              -	bMaxPacketSize0				8
              -	idVendor					0x08ff AuthenTec, Inc.
              -	idProduct					0x2580 AES2501 Fingerprint Sensor
              -	bcdDevice					6.23
              -	iManufacturer				0
              -	iProduct					1 Fingerprint Sensor
              -	iSerial						0
              -	bNumConfigurations			1
              -	...
              -	...
              -			
              -
              -
              Note: The name of each device is written at the row starting with "idProduct" (see the text - in bold in the above list)
              -
              -
              How to discover the model name of your notebook
              -
              See below your notebook or netbook
              -
              How to discover the model name of your device (if it is not a notebook)
              -
              If the device is integrated (example: a video card)
              -
              Open a terminal and type the following command:
              -
              lspci
              -
              -
              or
              -
              lspci > FILENAME          # output to a file
              -
              -
              How to discover the kernel libre version you are using
              -
              Open a terminal and type the following command:
              -
              uname -r
              -
              -
              How to discover the name of your video card
              -
              Open a terminal and type the following command:
              -
              sudo lspci
              -
              -
              Then look for the row containing the string VGA or Display controller. You can also try one of - the following commands:
              -
              lspci | grep "Display controller"
              -
              -
              or
              -
              lspci | grep "VGA"
              -
              -
              How to discover the VendorID and the ProductID of your device (VendorID:ProductID - code)
              -
              (Thanks Michał - Masłowski and Julius22)
              -
              If the device is integrated (example: a video card)
              -
              Open a terminal and type the following command:
              -
              sudo lspci -nnk
              -
              You should obtain a list of hardware similar to the one written below
              -
              -03:00.0 Network controller [0280]: Broadcom Corporation BCM4311 802.11b/g WLAN [14e4:4311] (rev 02)
              -	Kernel driver in use: b43-pci-bridge
              -	Kernel modules: ssb
              -05:00.0 VGA compatible controller [0300]: nVidia Corporation G86 [GeForce 8400M GS] [10de:0427] (rev a1)
              -	Kernel modules: nouveau, nvidiafb
              -
              -
              The strings in bold and placed inside the square brackets (in the above list) are the code you are - looking for. The first set of digits (before the colon) are the VendorID, the second set of digits are - the ProductID. In the above example: the VendorID:ProductID code of the wifi card (note the strings - "Network controller" and "WLAN") is 14e4:4311 while the VendorID:ProductID code of the video card (note - the string "VGA") is 10de:0427
              -
              If the device is an USB device (example: an external USB wifi card)
              -
              Open a terminal and type the following command:
              -
              sudo lsusb
              -
              -
              You should obtain a list of hardware similar to the one written below
              -
              -Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
              -Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
              -Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
              -
              -
              The strings in bold (in the above list) are the code you are looking for. The first set of digits - (before the colon) are the VendorID, the second set of digits are the ProductID. In the above - example: the VendorID:ProductID code of the external USB wifi card (note the strings "Wireless") is - 0846:4260
              -
              How to discover if the video card works
              -
              Install rss-glx by means of the package manager of - your distribution or compiling it from source and try some screensavers (for example Skyrocket or - Solarwinds). Check if you can play the screensaver (and/or if you can play it smoothly)
              -
              How to discover if the 3D acceleration works
              -
              Try to enable compiz
              -
              How to discover the name of your wifi card
              -

              Open a terminal and type the following command:

              -
              -
              sudo lspci
              -
              -
              Then look for the row containing the string Wireless or Network controller. You can also try - one of the following commands:
              -
              lspci | grep "Wireless" 
              -
              -
              or
              -
              lspci | grep "Network" 
              -
              -
              How to discover the printer driver you are using
              -
              If you are using cups
              -
              Open a terminal and type the following command:
              -
              dpkg-query -W -f '${Version}\n' cups
              -
              -
              How to discover the architecture of your notebook
              -
              Open a terminal and type the following command:
              -
              cat /proc/cpuinfo | grep "lm"
              -
              -
              If you get a message like this:
              -
              flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts
              acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64
              monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm
              -
              -
              then you machine is x86-64/amd64 capable and you could choose a x86-64/amd64 distro to run on it
              -
              -

               

              - -

              Fully free GNU/Linux Distributions

              - -

              Following are the GNU/Linux distributions we know of which have a firm policy - commitment to only include and only propose free software. They reject non-free applications, non-free programming - platforms, non-free drivers, or non-free firmware “blobs”. If by mistake they do include any, they remove it. To - learn more about what makes for a free GNU/Linux - distribution, see GNU Guidelines for - Free System Distributions.

              - -

              All of the distributions that follow are installable to a computer's hard drive and most can be run - live.

              - -

              (listed in alphabetical order)

              - - - -
              -
              - diff --git a/h-source/Application/Views/Desktop/Help/index_de.php b/h-source/Application/Views/Desktop/Help/index_de.php deleted file mode 100644 index e53693e..0000000 --- a/h-source/Application/Views/Desktop/Help/index_de.php +++ /dev/null @@ -1,443 +0,0 @@ - - -. -?> - -
              - -
              - ">Startseite » -
              - - - -

              Wiki-Syntax

              - -

              - Wiki-Elemente

              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
              NameElementErgebnisBeschreibung
              Fett[b]Fette[/b] SchriftFette SchriftFettschrift
              Kursiv[i]Kursive[/i] SchriftKursive SchriftKursivschrift
              Gelöschter Text[del]Gelöschter[/del] TextGelöschter TextGelöschter Text
              Unterstrichen[u]Unterstrichener[/u] TextUnterstrichener TextUnterstrichener Text
              Überschrift 1[h1]Überschrift[/h1] -
              - Überschrift
              -
              Überschrift Ebene 1
              Überschrift 2[h2]Überschrift[/h2] -
              - Überschrift
              -
              Überschrift Ebene 2
              Überschrift 3[h3]Überschrift[/h3] -
              - Überschrift
              -
              Überschrift Ebene 3
              Absatz…[p](Neuer) Absatz[/p]… - -

              (Neuer) Absatz

              -
              (Neuer) Absatz
              Auflistung
                -
              • [list]
              • -
                • -
                • [*]Erstes Element[/*]
                • -
                • [*]Zweites Element[/*]
                • -
                -
              • -
              • [/list]
              • -
              -
                -
              • Erstes Element
              • -
              • Zweites Element
              • -
              -
              Auflistung
              Nummerierung
                -
              • [enum]
              • -
                • -
                • [*]Erstes Element[/*]
                • -
                • [*]Zweites Element[/*]
                • -
                -
              • -
              • [/enum]
              • -
              -
                -
              1. Erstes Element
              2. -
              3. Zweites Element
              4. -
              -
              Geordnete Liste
              Listenelement[*]Listenelement[/*]
                -
              • Listenelement
              • -
              -
              Listenelement hinzufügen
              Quelltext[code]Quelltext[/code]
              Quelltext
              -
              Codefragment
              Verweis (einfach)[a]Internetadresse[/a]InternetadresseVerweis (einfach)
              Verweis (mit Text)[a]Internetadresse|mit Text[/a]mit TextVerweis (mit Text)
              Notebook[notebook]ID[/notebook]IDVerweis auf das Notebook mit der Kennung gleich ID (die jeweilige Geräte-Modellkennung wird auf der Seite - des Gerätes selbst, unter „Modellbezeichnung“, eingepflegt)
              WLAN[wifi]ID[/wifi]IDVerweis auf das WLAN mit der Kennung gleich ID (die jeweilige Geräte-Modellkennung wird auf der Seite des - Gerätes selbst, unter „Modellbezeichnung“, eingepflegt)
              Grafikkarte[videocard]ID/videocard]IDVerweis auf die Grafikkarte mit der Kennung gleich ID (die jeweilige Geräte-Modellkennung wird auf der Seite - des Gerätes selbst, unter „Modellbezeichnung“, eingepflegt)
              - -

               

              - -

              Kompatibilitätsklassen

              - -

              Notebooks

              -
              -
              Klasse A (Platin)
              -
              Alle Notebook-Geräte arbeiten mit sehr guter Leistung.
              -
              Beispiel: Alle Geräte funktionieren, auch die 3D-Beschleunigung wird - unterstützt.
              -
              Klasse B (Gold)
              -
              Alle Notebook-Geräte funktionieren, jedoch nicht mit voller Leistung.
              -
              Beispiel: Alle Geräte funktionieren, aber die 3D-Beschleunigung wird nicht - unterstützt.
              -
              Klasse C (Silber)
              -
              Ein wichtiges Gerät wird nicht unterstützt.
              -
              Beispiel: Die interne WLAN-Karte funktioniert nicht. Sie benötigen eine - externe USB-Karte.
              -
              Klasse D (Bronze)
              -
              Mehr als ein Gerät wird nicht unterstützt.
              -
              Klasse E (E-Schrott)
              -
              Das Notebook kann von Freie Software nicht unterstützt werden.
              -
              - -

              Drucker

              -
              -
              Klasse A (Vollständig)
              -
              Alle Gerätefunktionen und -merkmale werden unterstützt.
              -
              Klasse B (Teilweise)
              -
              Drucken wird unterstützt, aber möglicherweise mit eingeschränkter Geschwindigkeit oder Druckqualität; - Scannen und/oder Faxen wird (bei einigen Multifunktionsgeräten möglicherweise) nicht unterstützt
              -
              Klasse C (E-Schrott)
              -
              Der Drucker kann von Freie Software nicht unterstützt werden.
              -
              - -

              Scanner

              -
              -
              Klasse A (Vollständig)
              -
              Alle Gerätefunktionen und -merkmale werden unterstützt.
              -
              Klasse B (Teilweise)
              -
              Scannen unterstützt, aber möglicherweise bei eingeschränkter Geschwindigkeit oder Qualität, einige andere - Funktionen werden nicht unterstützt.
              -
              Klasse C (E-Schrott)
              -
              Der Scanner kann von Freie Software nicht unterstützt werden.
              -
              - -

               

              - -

              Entdecken Sie Ihre Hardware

              - (Vielen Dank lluvia) - -

              Um mehr Details über Ihre Hardware zu erfahren, beachten Sie bitte folgende Punkte:

              -
              -
              Wie man die Modellbezeichnung des Notebooks herausfindet
              -
              Siehe das Typenschild unterhalb Ihres tragbaren Klapprechners.
              -
              Wie man den Modellnamen der Geräte herausfindet (wenn kein tragbarer Klapprechner)
              -
              Wenn das Gerät eingebaut ist (z. B. eine Grafikkarte)
              -
              Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:
              -
              lspci
              -
              -
              oder
              -
              lspci > DATEINAME          # Ausgabe als Datei speichern
              -
              - -
              Es sollten PCI-Geräte ähnlich der folgenden angezeigt werden:
              -
              -00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
              -03:00.0 Network controller: Broadcom Corporation BCM4311 802.11b/g WLAN (rev 02)
              -05:00.0 VGA compatible controller: nVidia Corporation G86 [GeForce 8400M GS] (rev a1)
              -
              -
              Hinweis: The name of each device is written after the colon (see the text - in bold in the above list).
              -
              Wenn das Gerät ein USB-Gerät ist (bspw. ein externer WLAN-Stick)
              -
              Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:
              -
              lsusb -v
              -
              -
              oder
              -
              lsusb -v > DATEINAME          # Ausgabe als Datei speichern
              -
              - -
              Es sollten USB-Geräte ähnlich der folgenden angezeigt werden:
              -
              -Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
              -Device Descriptor:
              -	bLength						18
              -	bDescriptorType				1
              -	bcdUSB						2.00
              -	bDeviceClass				0 (Defined at Interface level)
              -	bDeviceSubClass				0
              -	bDeviceProtocol				0
              -	bMaxPacketSize0				64
              -	idVendor					0x0846 NetGear, Inc.
              -	idProduct					0x4260 WG111v3 54 Mbps Wireless [realtek RTL8187B]
              -	bcdDevice					2.00
              -	iManufacturer				1
              -	iProduct					2
              -	iSerial						3
              -	...
              -	...
              -
              -Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
              -Device Descriptor:
              -	bLength						18
              -	bDescriptorType				1
              -	bcdUSB						1.10
              -	bDeviceClass				255 Vendor Specific Class
              -	bDeviceSubClass				255 Vendor Specific Subclass
              -	bDeviceProtocol				255 Vendor Specific Protocol
              -	bMaxPacketSize0				8
              -	idVendor					0x08ff AuthenTec, Inc.
              -	idProduct					0x2580 AES2501 Fingerprint Sensor
              -	bcdDevice					6.23
              -	iManufacturer				0
              -	iProduct					1 Fingerprint Sensor
              -	iSerial						0
              -	bNumConfigurations			1
              -	...
              -	...
              -			
              -
              -
              Hinweis: Die Gerätebezeichnung wird in der Zeile „idProduct“ nach dem Doppelpunkt - angegeben (siehe Text in Fettdruck).
              - -
              Wie man den verwendeten Betriebssystemkern („Kernel“) herausfindet
              -
              Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:
              -
              uname -r
              -
              -
              Wie man den Namen der Grafikkarte herausfindet
              -
              Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:
              -
              sudo lspci
              -
              -
              Suchen Sie dann nach der Zeile mit der Zeichenfolge VGA oder - Display Controller. Alternativ können Sie auch folgenden Befehl versuchen: -
              -
              lspci | grep "Display controller"
              -
              -
              oder
              -
              lspci | grep "VGA"
              -
              -
              Wie man Anbieter- und Produkt-ID des Geräts herausfindet (VendorID:ProductID)
              -
              (Vielen Dank an Michał Masłowski - und Julius22) -
              -
              Wenn das Gerät eingebaut ist (z. B. eine Grafikkarte)
              -
              Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:
              -
              sudo lspci -nnk
              -
              -
              Es sollte eine Hardwareliste ähnlich der folgenden angezeigt werden:
              -
              -03:00.0 Network controller [0280]: Broadcom Corporation BCM4311 802.11b/g WLAN [14e4:4311] (rev 02)
              -	Kernel driver in use: b43-pci-bridge
              -	Kernel modules: ssb
              -05:00.0 VGA compatible controller [0300]: nVidia Corporation G86 [GeForce 8400M GS] [10de:0427] (rev a1)
              -	Kernel modules: nouveau, nvidiafb
              -
              -
              Hinweis: Die Zeichenfolgen in fetter Schrift und in den eckigen Klammern [… - : …] sind die Daten, nach denen Sie gesucht haben. Die erste Zeichengruppe (vor dem - Doppelpunkt) ist die Anbieter-ID, die zweite Zeichengruppe (nach dem Doppelpunkt) die Produkt-ID. - Im obigen Beispiel wären Anbieter- und Produkt-ID-Code der WLAN-Karte (beachten Sie die Zeichenfolgen „Network - Controller“ und „WLAN“) 14e4:4311, die der Grafikkarte (beachten Sie die Zeichenfolge „VGA“) - 10DE:0427.
              -
              Wenn das Gerät ein USB-Gerät ist (bspw. ein externer USB-WLAN-Stick)
              -
              Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:
              -
              sudo lsusb
              -
              -
              Es sollte eine Hardwareliste ähnlich der folgenden angezeigt werden:
              -
              Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
              Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
              Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
              -
              -
              Hinweis: Die Zeichenfolgen in fetter Schrift und in den eckigen Klammern […] sind - die Daten, nach denen Sie gesucht haben. Die erste Zeichengruppe (vor dem Doppelpunkt) ist die - Anbieter-ID, die zweite Zeichengruppe (nach dem Doppelpunkt) die Produkt-ID. Im obigen Beispiel - wären Anbieter- und Produkt-ID-Code des externen USB-WLAN-Sticks (beachten Sie die Zeichenfolge „Wireless“) - 0846:4260.
              -
              Wie man herausfindet, ob die Grafikkarte (über den VGA-Standard hinaus) funktioniert
              -
              Installieren Sie das Paket rss-glx mittels - Paketverwaltung Ihrer Distribution oder Kompilieren Sie den Quellcode und testen einige Bildschirmschoner (z. B. - Skyrocket oder Solarwinds). Überprüfen Sie, ob die Bildschirmschoner angezeigt werden können - (und/oder ruckelfrei wiedergegeben werden). -
              -
              Wie man herausfindet, ob die 3D-Beschleunigung funktioniert
              -
              Versuchen Sie, „compiz“ zu aktivieren.
              -
              Wie man den Namen Ihrer WLAN-Karte herausfindet
              -
              Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:
              -
              sudo lspci
              -
              -
              Suchen Sie dann nach der Zeile mit der Zeichenfolge Wireless oder Network - Controller. Alternativ können Sie auch folgenden Befehle versuchen: -
              -
              lspci | grep "Wireless"
              -
              oder
              -
              lspci | grep "Network"
              -
              -
              Wie man den verwendeten Druckertreiber herausfindet
              -
              Wenn Sie „cups“ verwenden
              -
              Öffnen Sie ein Terminal („Eingabeaufforderung“) und geben Sie folgenden Befehl ein:
              -
              dpkg-query -W -f '${Version}\n' cups
              -
              -
              How to discover the architecture of your notebook
              -
              Open a terminal and type the following command:
              -
              cat /proc/cpuinfo | grep "lm"
              -
              -
              If you get a message like this:
              -
              flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts
              acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64
              monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm
              -
              -
              then you machine is x86-64/amd64 capable and you could choose a x86-64/amd64 distro to run on it
              -
              - -

               

              - -

              Freie GNU/Linux-Distributionen

              - -

              Dies sind GNU/Linux-Distributionen, von denen wir von einer - festgelegten Richtlinie wissen, ausschließlich Freie Software zu verwenden und anzubieten. Unfreie Anwendungen, - unfreie Programmierplattformen, unfreie Treiber oder unfreie Firmware („BLOBs“) werden, auch wenn versehentlich - enthalten, entfernt. Weitere Informationen über Freie - GNU/Linux-Distribution finden Sie unter Richtlinien für Freie - Distributionen.

              - -

              Alle Distributionen können auf der Festplatte Ihres Rechners installiert und die meisten Live ausgeführt - werden.

              - -

              (In alphabetischer Reihenfolge)

              - - -
              - diff --git a/h-source/Application/Views/Desktop/Help/index_es.php b/h-source/Application/Views/Desktop/Help/index_es.php deleted file mode 100644 index acbdf6b..0000000 --- a/h-source/Application/Views/Desktop/Help/index_es.php +++ /dev/null @@ -1,440 +0,0 @@ - - -. -?> - -
              - -
              - ">Inicio » -
              - - - -

              Sintaxis del Wiki

              - -

              Lista de las etiquetas wiki de -

              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
              nombreetiquetaresultadodescripción
              bold[b]texto[/b]textotexto en negrita
              italic[i]texto[/i]textotexto en cursiva
              del[del]texto[/del]textotexto eliminado
              underline[u]texto[/u]textotexto subrayado
              head 1[h1]texto[/h1] -
              - texto
              -
              encabezado 1
              head 2[h2]texto[/h2] -
              - texto
              -
              encabezado 2
              head 3[h3]texto[/h3] -
              - texto
              -
              encabezado 3
              paragraph[p]texto[/p]

              texto

              -
              nuevo párrafo
              list item[*]objeto[/*]
                -
              • objeto
              • -
              -
              agrega un objeto a la lista
              lista
                -
              • [list]
              • -
                • -
                • [*]first item[/*]
                • -
                • [*]second item[/*]
                • -
                -
              • -
              • [/list]
              • -
              -
                -
              • first item
              • -
              • second item
              • -
              -
              hace una lista de objetos
              numbered list
                -
              • [enum]
              • -
                • -
                • [*]first item[/*]
                • -
                • [*]second item[/*]
                • -
                -
              • -
              • [/enum]
              • -
              -
                -
              1. first item
              2. -
              3. second item
              4. -
              -
              hace una lista numerada de objetos
              code[code]código[/code]
              código
              -
              agrega código
              link with text[a]url|text[/a]textenlace con texto
              notebook[notebook]1234:5678[/notebook]1234:5678enlace al computador portátil con el identificador id (el identificador de cada modelo de dispositivo esta escrito en la - página del dispositivo mismo, seguido del nombre del modelo)
              wifi[wifi]1234:5678[/wifi]1234:5678enlace al wifi con el identificador id (el identificador de cada modelo de dispositivo esta escrito en la - página del dispositivo mismo, seguido del nombre del modelo)
              videocard[videocard]1234:5678/videocard]1234:5678enlace a la tarjeta de video con el identificador id (el identificador de cada modelo de dispositivo esta - escrito en la página del dispositivo mismo, seguido del nombre del modelo)
              - -

              - -

              Clases de Compatibilidad

              - -

              Computadores portátiles

              -
              -
              Clase A (Platino)
              -
              Todos los dispositivos funcionan con un buen desempeño.
              -
              Ejemplo: todos los dispositivos funcionan, la aceleración 3D esta soportada
              -
              Clase B (Oro)
              -
              Todos los dispositivos funcionan pero no a su rendimiento completo.
              -
              Un ejemplo típico es: todos los dispositivos funcionan, pero la aceleración 3D no esta - soportada
              -
              Clase C (Plata)
              -
              Un dispositivo principal no esta soportado.
              -
              Ejemplo: la tarjeta inalámbrica interna no funciona. Necesita una tarjeta USB externa
              -
              Clase D (Bronce)
              -
              Más de un dispositivo no esta soportado
              -
              Clase E (Basura)
              -
              El equipo no funciona con software libre
              -
              - -

              Impresoras

              -
              -
              Clase A (Completo)
              -
              Todos los dispositivos funcionan y las características soportadas
              -
              Clase B (Parcial)
              -
              La impresión esta soportada pero a velocidad o calidad limitada; escaneo y/o envío por fax en algunos - dispositivos multifuncionales pueden no estar soportados
              -
              Clase C (Ninguno)
              -
              La impresora no funciona con software libre
              -
              - -

              Escáners

              -
              -
              Clase A (Completo)
              -
              Todos los dispositivos funcionan y las características soportadas
              -
              Clase B (Parcial)
              -
              El escanéo es soportado pero a velocidad o calidad limitada; otras características pueden no estar soportadas
              -
              Clase C (Ninguno)
              -
              El escaner no funciona con software libre
              -
              - -

               

              - -

              Descubra su hardware

              - (Gracias lluvia) - -

              En orden de conocer los detalles de su hardware puede seguir las siguientes acciones:

              -
              -
              Como descubrir el modelo de su computador portátil
              -
              Vea debajo de su computador portátil o subportátil
              -
              Como descubrir el nombre del modelo de su dispositivo (si no es un computador portátil)
              -
              Si el dispositivo es integrado (ejemplo: una tarjeta de video)
              -
              Abra una terminal y escriba la siguiente orden:
              -
              lspci
              -
              -
              o
              -
              lspci > FILENAME          # output to a file
              -
              - -
              Obtendrá la lista de sus dispositivos PCI, similar a la mostrada debajo
              -
              -00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
              -03:00.0 Network controller: Broadcom Corporation BCM4311 802.11b/g WLAN (rev 02)
              -05:00.0 VGA compatible controller: nVidia Corporation G86 [GeForce 8400M GS] (rev a1)
              -			
              -
              -
              El nombre de cada dispositivo esta escrito después de los dos puntos (vea el texto en negrita en la lista superior)
              -
              Si el dispositivo es un dispositivo USB (ejemplo: una tarjeta externa USB de red inalámbrica)
              -
              Abra una terminal y escriba la siguiente orden:
              -
              lsusb -v
              -
              -
              o
              -
              lsusb -v > filename          # write the output to a file
              -
              - -
              Obtendrá la lista de sus dispositivos USB, similar a la mostrada debajo
              -
              -Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
              -Device Descriptor:
              -	bLength						18
              -	bDescriptorType				1
              -	bcdUSB						2.00
              -	bDeviceClass				0 (Defined at Interface level)
              -	bDeviceSubClass				0
              -	bDeviceProtocol				0
              -	bMaxPacketSize0				64
              -	idVendor					0x0846 NetGear, Inc.
              -	idProduct					0x4260 WG111v3 54 Mbps Wireless [realtek RTL8187B]
              -	bcdDevice					2.00
              -	iManufacturer				1
              -	iProduct					2
              -	iSerial						3
              -	...
              -	...
              -
              -Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
              -Device Descriptor:
              -	bLength						18
              -	bDescriptorType				1
              -	bcdUSB						1.10
              -	bDeviceClass				255 Vendor Specific Class
              -	bDeviceSubClass			 	255 Vendor Specific Subclass
              -	bDeviceProtocol			 	255 Vendor Specific Protocol
              -	bMaxPacketSize0				8
              -	idVendor					0x08ff AuthenTec, Inc.
              -	idProduct					0x2580 AES2501 Fingerprint Sensor
              -	bcdDevice					6.23
              -	iManufacturer				0
              -	iProduct					1 Fingerprint Sensor
              -	iSerial						0
              -	bNumConfigurations			1
              -	...
              -	...
              -		
              -
              -
              El nombre de cada disposiitivo es escrito en la fila comenzando con "idProduct" (vea el texto en negritas en la lista superior)
              -
              Como descubrir el año de comercialización de su computador portátil
              -
              Abra una terminal y escriba la siguiente orden:
              -
              sudo dmidecode| grep "Release Date"
              -
              -
              Como descubrir la versión de kernel que esta usando
              -
              Abra una terminal y escriba la siguiente orden:
              -
              uname -r
              -
              -
              Como descubrir el nombre de su tarjeta de video
              -
              Abra una terminal y escriba la siguiente orden:
              -
              sudo lspci
              -
              -
              Después busque por la linea que contenga la cadena VGA o Display controller. También puede usar uno de las - siguientes ordenes:
              -
              lspci | grep "Display controller"
              -
              -
              o
              -
              lspci | grep "VGA"
              -
              -
              Como descubrir el ID del vendedor y el ID del producto de su dispositivo (código - VendorID:ProductID)
              -
              (Gracias Michał Masłowski - y Julius22) -
              -
              Si el dispositivo es integrado (ejemplo: una tarjeta de video)
              -
              Abra una terminal y escriba la siguiente orden:
              -
              sudo lspci -nnk
              -
              -
              Debe de obtener una lista de hardware similar a la escriba debajo
              -
              -03:00.0 Network controller [0280]: Broadcom Corporation BCM4311 802.11b/g WLAN [14e4:4311] (rev 02)
              -	Kernel driver in use: b43-pci-bridge
              -	Kernel modules: ssb
              -05:00.0 VGA compatible controller [0300]: nVidia Corporation G86 [GeForce 8400M GS] [10de:0427] (rev a1)
              -	Kernel modules: nouveau, nvidiafb
              -
              -
              Las cadenas en negritas y colocadas en los corchetes (en la lista superior) son los códigos que esta - buscando. El primer grupo de dígitos (antes de los dos puntos) son el VendorID, el segundo grupo de - dígitos son el ProductID. En el ejemplo superior: el código VendorID:ProductID de la tarjeta - inalámbrica (note las cadenas "Network controller" y "WLAN") es 14e4:4311 mientras el código - VendorID:ProductID de la tarjeta de video (note la cadena "VGA") es 10de:0427
              -
              Si el dispositivo es un dispositivo USB (ejemplo: una tarjeta USB externa)
              -
              Abra una terminal y escriba la siguiente orden:
              -
              sudo lsusb
              -
              -
              Debe de obtener una lista de hardware similar a la descrita a continuación
              -
              -Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
              -Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
              -Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
              -
              -
              Las cadenas en negritas (en la lista superior) son el código que busca. El primer grupo de dígitos - (antes de los dos puntos) son el VendorID, el segundo grupo de dígitos son el ProductID. En el - ejemplo superior: el código VendorID:ProductID de la tarjeta inalámbrica USB externa (note la cadena - "Wireless") es 0846:4260
              -
              Como descubrir si la tarjeta de video funciona
              -
              Instale rss-glx por lo medios del administrador - de paquetes de su distribución o por medio de compilar el código fuente y pruebe algunos protectores de - pantalla (por ejemplo Skyrocket o Solarwinds). Revise si puede ejecutar el protector de pantalla - (y/o si puede mostrarlo suavemente) -
              -
              Como descubrir si la aceleración 3D funciona
              -
              Intente activar compiz
              -
              Como descubrir el nombre de su tarjeta de inalámbrica
              -
              Abra una terminal y escriba la siguiente orden:
              -
              sudo lspci
              -
              -
              Después busque por la linea que contenga la cadena Wireless o Network - controller. También puede intentar una de las siguientes ordenes
              -
              lspci | grep "Wireless"
              -
              -
              o
              -
              lspci | grep "Network"
              -
              -
              Como descubrir el driver de la impresora que esta usando
              -
              Si usa cups
              -
              Abra una terminal y escriba la orden siguiente:
              -
              dpkg-query -W -f '${Version}\n' cups
              -
              -
              Como descubrir la arquitectura de su computador portátil
              -
              Abra una terminal y escriba la orden siguiente:
              -
              cat /proc/cpuinfo | grep "lm"
              -
              -
              Si obtiene un mensaje como este:
              -
              flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts
              acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64
              monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm
              -
              -
              entonces su equipo es compatible con x86-64/amd64 y podría elegir una distro x86-64/amd64 para correr en él.
              -
              - -

               

              - -

              Lista de las distribuciones GNU/Linux completamente libres

              - -

              A continuación se enlistan las distribuciones GNU/Linux que sabemos tiene un - compromiso firme en su política para solo incluir y solo proponer software libre. Estas rechazan aplicaciones no libres, plataformas de - programación no libres, controladores no libres, o “blobs” de firmware no libre. Si por error llegan a incluirlo, lo eliminarán. Para - aprender más acerca de que hace una distribución GNU/Linux libre, - vea las pautas para distribuciones de sistemas - libres de GNU.

              - -

              Todas las distribuciones que aparecen a continuación se pueden instalar en el disco duro y muchas funcionan - sin instalación.

              - -

              (En orden alfabético)

              - - -
              - diff --git a/h-source/Application/Views/Desktop/Help/index_fr.php b/h-source/Application/Views/Desktop/Help/index_fr.php deleted file mode 100644 index 3e46137..0000000 --- a/h-source/Application/Views/Desktop/Help/index_fr.php +++ /dev/null @@ -1,432 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » -
              - - - -

              Syntaxe Wiki

              - -

              Liste des tags Wiki sur -

              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
              nametagresultdescription
              bold[b]text[/b]texttext bold
              italic[i]text[/i]texttext italic
              del[del]text[/del]texttext deleted
              underline[u]text[/u]texttext underlined
              head 1[h1]text[/h1] -
              - text
              -
              head 1
              head 2[h2]text[/h2] -
              - text
              -
              head 2
              head 3[h3]text[/h3] -
              - text
              -
              head 3
              paragraph[p]text[/p]

              text

              -
              new paragraph
              list item[*]item[/*]
                -
              • item
              • -
              -
              ad an item to a list
              List
                -
              • [list]
              • -
                • -
                • [*]first item[/*]
                • -
                • [*]second item[/*]
                • -
                -
              • -
              • [/list]
              • -
              -
                -
              • first item
              • -
              • second item
              • -
              -
              make a list of items
              Numbered list
                -
              • [enum]
              • -
                • -
                • [*]first item[/*]
                • -
                • [*]second item[/*]
                • -
                -
              • -
              • [/enum]
              • -
              -
                -
              1. first item
              2. -
              3. second item
              4. -
              -
              make a numbered list of items
              code[code]some code[/code]
              some code
              -
              ad some code
              simple link[a]url[/a]urlsimple link
              link with text[a]url|text[/a]textlink with text
              notebook[notebook]id[/notebook] link to the notebook with the identifier equal to id (the identifier of each device model is written in the - page of the device itself, next to the model name)
              wifi[wifi]id[/wifi] link to the wifi with the identifier equal to id (the identifier of each device model is written in the page - of the device itself, next to the model name)
              videocard[videocard]id[/videocard] link to the videocard with the identifier equal to id (the identifier of each device model is written in the - page of the device itself, next to the model name)
              - -

               

              - -

              Niveau de compatibilitée

              - -

              Notebooks

              -
              -
              Classe A (Platinium)
              -
              Tout le matériel du notebook fonctionne avec du logiciel libre.
              -
              Exemple : la 3D fonctionne, le son et la wifi également
              -
              Classe B (Or)
              -
              Tout le matériel du notebook fonctionne, mais avec des performances réduites.
              -
              Exemple : la carte graphique est reconnues mais la 3D ne fonctionne pas
              -
              Classe C (Argent)
              -
              Un matériel principal ne fonctionne pas.
              -
              Exemple : La carte wifi ne fonctionne pas
              -
              Classe D (Bronze)
              -
              Plus d'un matériel ne fonctionne pas avec du logiciel libre
              -
              Classe E (Poubelle)
              -
              Aucun matériel ne fonctionne avec du logiciel libre
              -
              - -

              Imprimantes

              -
              -
              Classe A (Complet)
              -
              Toutes les fonctionnalitées de l'imprimante fonctionne avec du logiciel libre
              -
              Classe B (Partielle)
              -
              La fonction d'impression fonctionne, mais à une vitesse ou qualitée limitée.
              -
              Exemple : Le scan ou le fax sur certains appareils peut ne pas être supportés
              -
              Classe C (Aucun)
              -
              L'imprimante ne fonctionne pas avec du logiciel libre
              -
              - -

              Scanners

              -
              -
              Classe A (Complet)
              -
              Toutes les fonctionnalitées du scanner sont supportées
              -
              Classe B (Partielle)
              -
              Le scanner fonctionne mais à une vitesse ou qualitée limitée, d'autres fonctionnalitées peuvent ne pas - fonctionner
              -
              Classe C (Aucun)
              -
              Le scanner ne fonctionne pas avec du logiciel libre
              -
              - -

              Découvrez votre matériel

              - (Merci lluvia) - -

              Pour connaitre votre matériel en détails, vous pouviez faire les choses suivantes:

              -
              -
              Comment découvrir le modèle de votre notebook
              -
              See below your notebook or netbook
              -
              How to discover the model name of your device (if it is not a notebook)
              -
              If the device is integrated (example: a video card)
              -
              Open a terminal and type the following command:
              -
              lspci
              -
              -
              or
              -
              lspci > FILENAME          # output to a file
              -
              - -
              You will obtain the list of your PCI devices, similar to the one written below
              -
              -00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
              -03:00.0 Network controller: Broadcom Corporation BCM4311 802.11b/g WLAN (rev 02)
              -05:00.0 VGA compatible controller: nVidia Corporation G86 [GeForce 8400M GS] (rev a1)
              -			
              -
              -
              The name of each device is written after the colon (see the text in bold in the above - list)
              -
              If the device is an USB device (example: an external USB wifi card)
              -
              Open a terminal and type the following command:
              -
              lsusb -v
              -
              -
              or
              -
              lsusb -v > FILENAME          # output to a file
              -
              - -
              You will obtain the list of your USB devices, similar to the one written below
              -
              -Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
              -Device Descriptor:
              -	bLength						18
              -	bDescriptorType				1
              -	bcdUSB						2.00
              -	bDeviceClass				0 (Defined at Interface level)
              -	bDeviceSubClass				0
              -	bDeviceProtocol				0
              -	bMaxPacketSize0				64
              -	idVendor					0x0846 NetGear, Inc.
              -	idProduct					0x4260 WG111v3 54 Mbps Wireless [realtek RTL8187B]
              -	bcdDevice					2.00
              -	iManufacturer				1
              -	iProduct					2
              -	iSerial						3
              -	...
              -	...
              -
              -Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
              -Device Descriptor:
              -	bLength						18
              -	bDescriptorType				1
              -	bcdUSB						1.10
              -	bDeviceClass				255 Vendor Specific Class
              -	bDeviceSubClass				255 Vendor Specific Subclass
              -	bDeviceProtocol			 	255 Vendor Specific Protocol
              -	bMaxPacketSize0				8
              -	idVendor					0x08ff AuthenTec, Inc.
              -	idProduct					0x2580 AES2501 Fingerprint Sensor
              -	bcdDevice					6.23
              -	iManufacturer				0
              -	iProduct					1 Fingerprint Sensor
              -	iSerial						0
              -	bNumConfigurations			1
              -	...
              -	...
              -			
              -
              -
              The name of each device is written at the row starting with "idProduct" (see the text in bold in the above - list)
              -
              Trouver la version du noyau linux libre que vous utilisez
              -
              Ouvrez un terminal et tapez la commande suivant:
              -
              uname -r
              -
              -
              Comment trouver le modèle de votre carte graphique
              -
              Ouvrez un terminal et taper la commande suivante:
              -
              sudo lspci
              -
              -
              Chercher la ligne qui contient le mot VGA ou Display Controller. Vous pouvez aussi essayer l'une - des commandes suivantes:
              -
              lspci | grep "Display controller"
              -
              -
              ou
              -
              lspci | grep "VGA"
              -
              -
              Comment connaitre le VendorID ou le ProductID (VendorID:ProductID code)
              -
              (Merci à Michał Masłowski - et Julius22) -
              -
              Si le matériel est intégré (example : une puce vidéo)
              -
              Ouvrez un terminal sudo et taper la commande suivante:
              -
              sudo lspci -nnk
              -
              -
              Vous devriez obtenir une liste de matériel similaire à celle-ci
              -
              -03:00.0 Network controller [0280]: Broadcom Corporation BCM4311 802.11b/g WLAN [14e4:4311] (rev 02)
              -	Kernel driver in use: b43-pci-bridge
              -	Kernel modules: ssb
              -05:00.0 VGA compatible controller [0300]: nVidia Corporation G86 [GeForce 8400M GS] [10de:0427] (rev a1)
              -	Kernel modules: nouveau, nvidiafb
              -
              -
              Note :Les lignes en gras et placée entre crochet (dans la liste - ci-dessus) sont les lignes que vous recherchez. Le premier packet de numéros (avant la virgule) sont le - VendorID, le second sont le ProductID. Dans l’exemple ci dessus, le code VendorID:ProductID de la - carte wifi ( vous pouvez la remarquez grace aux mots "Network Controller" et "WLAN" ) est 14e4:4311
              -
              Si le périphérique est un périphérique USB : (exemple : une clé usb wifi)
              -
              Ouvrez un terminal et tapez:
              -
              sudo lsusb
              -
              -
              Vous devriez obtenir une liste de matériel similaire à celle ci
              -
              -Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
              -Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
              -Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
              -
              -
              Note : Les lignes en gras (dans la liste du dessus) sont les - lignes que vous recherchez. Les premiers nombres (avant les deux points) sont le VendorID, les autres sont - le ProductID. Dans l'exemple ci-dessus : le code VendorID:ProductID de la carte usb wifi externe - (Remarquez la ligne Wireless) est 0846:4260
              -
              Comment savoir si votre carte graphique fonctionne
              -
              Installer rss-glx en utilisant le gestionnaire de - paquet de votre distribution ou en le compilant depuis les sources et essayez certains écran de veille (par - exemple Skyrocket ou Solarwinds). Essayer de faire fonctionner le fond d'écran, et/ou le faire - fonctionner fluidement.
              -
              Comment savoir si l'accélération 3D fonctionne
              -
              Essayer d’activer compiz
              -
              Comment decouvrir le nom de votre carte wifi
              -
              Ouvrez un terminal et taper la commande suivante:
              -
              sudo lspci
              -
              -
              Regardez ensuite les lignes Wireless ou Network controller. Vous pouvez - aussi essayer l'une de ses commandes:
              -
              lspci | grep "Wireless"
              -
              -
              ou
              -
              lspci | grep "Network"
              -
              -
              Comment connaitre le pilote d’imprimante que vous utilisez
              -
              Si vous utilisez cups
              -
              Ouvrez un terminal et taper ceci:
              -
              dpkg-query -W -f '${Version}\n' cups
              -
              -
              How to discover the architecture of your notebook
              -
              Open a terminal and type the following command:
              -
              cat /proc/cpuinfo | grep "lm"
              -
              -
              If you get a message like this:
              -
              flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts
              acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64
              monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm
              -
              -
              then you machine is x86-64/amd64 capable and you could choose a x86-64/amd64 distro to run on it
              -
              - -

               

              - -

              Liste de dristributions GNU/Linux entièrement libre

              - -

              Following are the GNU/Linux distributions we know of which have a firm policy - commitment to only include and only propose free software. They reject non-free applications, non-free programming - platforms, non-free drivers, or non-free firmware “blobs”. If by mistake they do include any, they remove it. To - learn more about what makes for a free GNU/Linux - distribution, see GNU Guidelines for - Free System Distributions.

              - -

              Toutes les distributions qui suivent sont installables sur un disque dur d'ordinateur et la plupart peuvent être - exécutées à partir d'un CD.

              - -

              (Dans l'ordre alphabétique)

              - - - -
              - diff --git a/h-source/Application/Views/Desktop/Help/index_it.php b/h-source/Application/Views/Desktop/Help/index_it.php deleted file mode 100644 index c3c968e..0000000 --- a/h-source/Application/Views/Desktop/Help/index_it.php +++ /dev/null @@ -1,436 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » -
              - - - -

              Sintassi della Wiki

              - -

              Lista dei tag della wiki di -

              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
              nometagrisultatodescrizione
              grassetto[b]text[/b]texttesto in grassetto
              corsivo[i]text[/i]texttesto corsivo
              cancellare[del]text[/del]texttesto cancellato
              sottolineare[u]text[/u]texttesto sottolineato
              head 1[h1]text[/h1] -
              - text
              -
              head 1
              head 2[h2]text[/h2] -
              - text
              -
              head 2
              head 3[h3]text[/h3] -
              - text
              -
              head 3
              paragrafo…[p]nuovo paragrafo[/p]

              nuovo paragrafo

              -
              crea un nuovo paragrafo
              Lista
                -
              • [list]
              • -
                • -
                • [*]primo elemento[/*]
                • -
                • [*]secondo elemento[/*]
                • -
                -
              • -
              • [/list]
              • -
              -
                -
              • primo elemento
              • -
              • secondo elemento
              • -
              -
              crea un elenco di item
              Lista numerata
                -
              • [enum]
              • -
                • -
                • [*]primo elemento[/*]
                • -
                • [*]secondo elemento[/*]
                • -
                -
              • -
              • [/enum]
              • -
              -
                -
              1. primo elemento
              2. -
              3. secondo elemento
              4. -
              -
              crea un elenco numerato di item
              item di un elenco[*]elemento[/*]
                -
              • elemento
              • -
              -
              aggiungi un item a un elenco
              codice[code]some code[/code]
              some code
              -
              aggiungi del codice
              link semplice[a]url[/a]urlcrea un link semplice
              link con testo[a]url|text[/a]textcrea un link con testo
              notebook[notebook]id[/notebook]idcrea un link al notebook con l'identificatore corrispondente a id (l'identificatore di ogni modello di - dispositivo si trova nella pagina del dispositivo stesso, accanto al nome del modello
              wifi[wifi]id[/wifi]idcrea un link alla wifi con l'identificatore corrispondente a id (l'identificatore di ogni modello di - dispositivo si trova nella pagina del dispositivo stesso, accanto al nome del modello)
              scheda video[videocard]id[/videocard]idcrea un link alla scheda video con l'identificatore corrispondente a id (l'identificatore di ogni modello di - dispositivo si trova nella pagina del dispositivo stesso, accanto al nome del modello)
              - -

               

              - -

              Classi di compatibilità

              - -

              Notebooks

              -
              -
              Classe A (Platino)
              -
              Tutti i dispositivi del portatile funzionano ad alte prestazioni.
              -
              Per esempio: funzionano tutti i dispositivi, l'accelerazione 3D è supportata.
              -
              Classe B (Oro)
              -
              Tutti i dispositivi del portatile funzionano ma non a piene prestazioni.
              -
              Esempio tipico: funzionano tutti i dispositivi, ma l'accelerazione 3D non è supportata.
              -
              Classe C (Argento)
              -
              Uno dei dispositivi principali non è supportato.
              -
              Per esempio: la scheda wifi interna non funziona e serve una wifi esterna USB.
              -
              Classe D (Bronzo)
              -
              Più di uno dei dispositivi principali non è supportato.
              -
              Classe E (Spazzatura)
              -
              Il portatile non funziona con software libero.
              -
              - -

              Stampanti

              -
              -
              Classe A (Piena)
              -
              Sono supportate tutte le funzioni e le caratteristiche della stampante.
              -
              Classe B (Parziale)
              -
              La funzione di stampa è supportata, ma a velocità limitata o a scarsa qualità. Su alcune stampanti - multifunzione possono non essere supportate le funzioni di scanner e/o di fax.
              -
              Classe C (Nessuna)
              -
              La stampante non funziona con software libero.
              -
              - -

              Scanner

              -
              -
              Classe A (Piena)
              -
              Sono supportate tutte le funzioni e le caratteristiche dello scanner.
              -
              Classe B (Parziale)
              -
              La funzione di scannerizzazione è supportata, ma a velocità limitata o a scarsa qualità. Qualche altra - caratteristica può non essere supportata.
              -
              Classe C (Nessuna)
              -
              Lo scanner non funziona con software libero.
              -
              - -

              - -

              Scopri il tuo hardware

              - (Grazie lluvia) - -

              Per sapere le caratteristiche e i dettagli del tuo hardware puoi seguire queste istruzioni:

              -
              -
              Come scoprire il nome del modello del portatile
              -
              Guarda sotto al tuo notebook o al tuo netbook
              -
              Come scoprire il nome del modello del tuo hardware (se non è un portatile)
              -
              Se il dispositivo è integrato (ad esempio: una scheda video)
              -
              Apri un terminale e digita il seguente comando:
              -
              lspci
              -
              -
              o
              -
              lspci > FILENAME          # Puoi anche scrivere l'output del comandi lspci su un file digitando
              -
              - -
              Otterrai la lista di tutti i tuoi dispositivi PCI, simile a quella scritta sotto
              -
              -00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
              -03:00.0 Network controller: Broadcom Corporation BCM4311 802.11b/g WLAN (rev 02)
              -05:00.0 VGA compatible controller: nVidia Corporation G86 [GeForce 8400M GS] (rev a1)
              -			
              -
              -
              Il nome di ogni dispositivo è scritto dopo i due punti (guarda il testo in grassetto nella - lista superiore)
              -
              Se è un dispositivo USB (ad esempio: una stampante USB)
              -
              Apri un terminale e digita il seguente comando:
              -
              lsusb -v
              -
              -
              o
              -
              lsusb -v > FILENAME          # l'output del comandi un file digitando
              -
              - -
              Otterrai la lista di tutti i dispositivi USB, simile a quella scritta sotto
              -
              -Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
              -Device Descriptor:
              -	bLength 18
              -	bDescriptorType 1
              -	bcdUSB 2.00
              -	bDeviceClass 0 (Defined at Interface level)
              -	bDeviceSubClass 0
              -	bDeviceProtocol 0
              -	bMaxPacketSize0 64
              -	idVendor 0x0846 NetGear, Inc.
              -	idProduct 0x4260 WG111v3 54 Mbps Wireless [realtek RTL8187B]
              -	bcdDevice 2.00
              -	iManufacturer 1
              -	iProduct 2
              -	iSerial 3
              -	...
              -	...
              -
              -Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
              -Device Descriptor:
              -	bLength 18
              -	bDescriptorType 1
              -	bcdUSB 1.10
              -	bDeviceClass 255 Vendor Specific Class
              -	bDeviceSubClass 255 Vendor Specific Subclass
              -	bDeviceProtocol 255 Vendor Specific Protocol
              -	bMaxPacketSize0 8
              -	idVendor 0x08ff AuthenTec, Inc.
              -	idProduct 0x2580 AES2501 Fingerprint Sensor
              -	bcdDevice 6.23
              -	iManufacturer 0
              -	iProduct 1 Fingerprint Sensor
              -	iSerial 0
              -	bNumConfigurations 1
              -	...
              -	...
              -			
              -
              -
              Il nome di ogni dispositivo è scritto alla riga che inizia con la stringa "idProduct" (guarda il testo in - grassetto nella lista superiore)
              -
              Come scoprire che versione del kernel libre stai usando
              -
              Apri un terminale e digita questo comando
              -
              uname -r
              -
              -
              Come scoprire il nome della tua scheda video
              -
              Apri un terminale e digita questo comando:
              -
              sudo lspci
              -
              -
              Poi cerca la riga contenente la stringa VGA o Display controller. Puoi anche provare con uno di - questi comandi:
              -
              lspci | grep "Display controller"
              -
              -
              o
              -
              lspci | grep "VGA"
              -
              -
              Come scoprire il VendorID e il ProductID del tuo dispositivo (VendorID:ProductID - code)
              -
              (Grazie Michał Masłowski - e Julius22) -
              -
              Se il dispositivo è integrato (per esempio una scheda video)
              -
              Apri un terminale e digita il seguente comando:
              -
              sudo lspci -nnk
              -
              -
              Dovresti ottenere una lista di hardware simile a quella scritta qui sotto
              -
              -03:00.0 Network controller [0280]: Broadcom Corporation BCM4311 802.11b/g WLAN [14e4:4311] (rev 02)
              -	Kernel driver in use: b43-pci-bridge
              -	Kernel modules: ssb
              -05:00.0 VGA compatible controller [0300]: nVidia Corporation G86 [GeForce 8400M GS] [10de:0427] (rev a1)
              -	Kernel modules: nouveau, nvidiafb
              -
              Note: Le stringhe in grassetto e tra parentesi quadre (nella - lista qui sopra) sono il codice che stai cercando. Il primo gruppo di cifre (prima dei due punti) è il - VendorID, il secondo gruppo è il ProductID. Nell'esempio qui sopra: il codice VendorID:ProductID - della scheda wifi (nota le stringhe "Network controller" e "WLAN") è 14e4:4311 mentre il codice - VendorID:ProductID della scheda video (nota la stringa "VGA") è 10de:0427
              -
              Se si tratta di un dispositivo USB (per esempio una wifi esterna USB)
              -
              Apri un terminale e digita questo comando:
              -
              sudo lsusb
              -
              -
              Dovresti ottenere una lista di hardware simile a quella scritta qui sotto
              -
              -Bus 001 Device 002: ID 0846:4260 NetGear, Inc. WG111v3 54 Mbps Wireless [realtek RTL8187B]
              -Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
              -Bus 002 Device 003: ID 08ff:2580 AuthenTec, Inc. AES2501 Fingerprint Sensor
              -
              -
              Note: Le stringhe in grassetto (nella lista qui sopra) sono il - codice che stai cercando. Il primo gruppo di cifre (prima dei due punti) è il VendorID, il secondo gruppo - è il ProductID. Nell'esempio qui sopra: il codice VendorID:ProductID della wifi esterna USB (nota la - stringa "Wireless") è 0846:4260
              -
              Come scoprire se funziona la scheda video
              -
              Installa rss-glx tramite il gestore di pacchetti - della tua distribuzione o compilando dai sorgenti e prova degli screensaver (per esempio Skyrocket o - Solarwinds). Controlla se parte lo screensaver (e/o se si vede "fluido")
              -
              Come scoprire se funziona l'accelerazione 3D
              -
              Prova ad attivare compiz
              -
              Come scoprire il nome della tua scheda wifi
              -
              Apri un terminale e digita questo comando:
              -
              sudo lspci
              -
              -
              Poi cerca la riga contenente la stringa Wireless o Network controller. - Puoi anche provare uno dei seguenti comandi:
              -
              lspci | grep "Wireless"
              -
              -
              o
              -
              lspci | grep "Network"
              -
              -
              Come scoprire che driver per la stampante stai usando
              -
              Se stai usando cups
              -
              Apri un terminale e digita il seguente comando:
              -
              dpkg-query -W -f '${Version}\n' cups
              -
              -
              Come scoprire l'architettura del tuo portatile:
              -
              Apri un terminale e digita il seguente comando:
              -
              cat /proc/cpuinfo | grep "lm"
              -
              -
              Se ottieni un messaggio come il seguente:
              -
              flags		: fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts
              acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64
              monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm
              -
              -
              allora il tuo portatile è x86-64/amd64 e puoi usare una distribuzione x86-64/amd64
              -
              - -

               

              - -

              Lista di distribuzioni GNU/Linux completamente libere

              - - - -

              Le seguenti sono le distribuzioni GNU/Linux a noi note - che hanno una rigorosa politica di inclusione e indicazione di solo software libero. Queste distribuzioni escludono - applicazioni, piattaforme di programmazione, driver e firmware ("blob") che non siano liberi, e rimuovono quelli - inclusi per errore. Per saperne di più su cosa rende libera - una distribuzione GNU/Linux, si vedano le GNU linee guida per le distribuzioni - libere.

              - -

              Tutte le distribuzioni che seguono sono installabili sul disco di un computer e la maggior parte può essere - eseguita da un supporto (CD, memoria USB) senza che nulla debba essere installato sul computer.

              - -

              In ordine alfabetico

              - - -
              - diff --git a/h-source/Application/Views/Desktop/History/viewall.php b/h-source/Application/Views/Desktop/History/viewall.php deleted file mode 100644 index 9dc27c6..0000000 --- a/h-source/Application/Views/Desktop/History/viewall.php +++ /dev/null @@ -1,40 +0,0 @@ - - -. -?> - - - -
              -
              this has been by getUser($row['history']['created_by']));?> at with the following motivation: -
              -
              -
              - - - -
              - there are no details.. -
              - \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Home/left.php b/h-source/Application/Views/Desktop/Home/left.php deleted file mode 100644 index 0f6ce30..0000000 --- a/h-source/Application/Views/Desktop/Home/left.php +++ /dev/null @@ -1,85 +0,0 @@ - - -. -?> - -
              - -
              - Home -
              - - - -
              -
              - Objectives: -
              -
              - The project aims at the construction of a hardware database in order to identify what devices work with a fully free operating system. The website is structured like a wiki in which all the users can modify or insert new contents. The h-node project is developed in collaboration and as an activity of the FSF. -
              - -
              - Contribute: -
              -
              - You can contribute by creating an account at and editing its user-generated contents. All your modification will be saved in the history of the product you are editing/adding. Each revision (the current one or the old ones) will be marked by the name of the user who created it.
              You can also contribute by suggesting new hardware that should be added to the database or features that should be implemented. -
              - -
              - Free software: -
              -
              - - - In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: - -

              1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

              - -

              2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

              - -

              h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

              -
              - -
              - License: -
              -
              - Any text submitted by you will be put in the Public Domain (see the CC0 page for detailed information). Anyone is free to copy, modify, publish, use, sell, or distribute the text you have submitted to h-node.org, for any purpose, commercial or non-commercial, and by any means. -
              - -
              - Other resources on the net: -
              -
              -

              Here is a list of other archives collecting information about hardware working with free software:

              - -
              - -
              - About the website: -
              -
              - The has to be considered in beta version. It is constantly growing and many features have not been implemented yet (for example new hardware devices have to be inserted in the database). Some problems may occur: if you find out a bug please add an issue ">here with the topic maybe a bug. -
              -
              -
              diff --git a/h-source/Application/Views/Desktop/Home/left_de.php b/h-source/Application/Views/Desktop/Home/left_de.php deleted file mode 100644 index 7317124..0000000 --- a/h-source/Application/Views/Desktop/Home/left_de.php +++ /dev/null @@ -1,86 +0,0 @@ - - -. -?> - -
              - -
              - Home -
              - - - -
              -
              - Ziele: -
              -
              - Mit dem Projekt soll eine Hardwaredatenbank mit Peripheriegeräten aufgebaut werdem, die mit einem vollständig freien Betriebssystem arbeiten. Die Webseite von h-node.org ist wie ein Wiki aufgebaut, dessen Inhalte von allen Benutzer geändert und ergänzt werden können. Das Projekt h-node wird in Zusammenarbeit und als eine Aktivität der FSF entwickelt. -
              - -
              - Mithelfen: -
              -
              - Sie können nach Ihrer Anmeldung bei h-node.org dazu beitragen und die benutzergenerierten Inhalte bearbeiten. Alle Änderungen die Sie bearbeiten oder hinzufügen, werden im Produktverlauf protokolliert. Jede Version (die aktuelle oder die alte) wird der/dem BenutzerIn zugeordnet, die/der sie erstellte.
              - Neue Hardware, die in die Datenbank aufgenommen, oder neue Funktionen, die hinzugefügt werden sollten, können Sie ebenfalls vorschlagen. -
              - -
              - Freie Software: -
              -
              - - - In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: - -

              1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

              - -

              2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

              - -

              h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

              -
              - -
              - Lizenz: -
              -
              - Jeder von Ihnen übermittelte Text wird in die Gemeinfreiheit („Public Domain“) entlassen (siehe CC0 1.0 Universell (CC0 1.0) für detaillierte Informationen). Jede Person darf das Werk/den Inhalt, den Sie an h-node.org übermittelt haben, kopieren, verändern, verbreiten und aufführen, sogar zu kommerziellen Zwecken, ohne um weitere Erlaubnis bitten zu müssen und auf jedem Medium. -
              - -
              - Weitere Ressourcen im Internet: -
              -
              -

              Weitere Archive mit gesammelten Informationen über Hardware, die mit Freie Software arbeitet:

              - -
              - -
              - Über h-node.org: -
              -
              - h-node muss als im Beta-Stadium betrachtet werden. Es wird ständig ergänzt haben und viele Funktionen wurden noch nicht implementiert (z. B. müssen neue Hardware-Geräte in die Datenbank eingepflegt werden). Es können Probleme auftreten: Wenn Sie einen Fehler finden, melden Sie diesen bitte im ">Web-Log mit dem Thema evtl. ein Fehler. -
              -
              -
              diff --git a/h-source/Application/Views/Desktop/Home/left_es.php b/h-source/Application/Views/Desktop/Home/left_es.php deleted file mode 100644 index 882a7b1..0000000 --- a/h-source/Application/Views/Desktop/Home/left_es.php +++ /dev/null @@ -1,85 +0,0 @@ - - -. -?> - -
              - -
              - Home -
              - - - -
              -
              - Objetivos: -
              -
              - El proyecto tiene como meta la construcción de una base de datos de todo el hardware de manera que se pueda identificar que dispositivos funcionan con un sistema operativo completamente libre. El sitio esta estructurado como un wiki, en el cual todos los usuarios pueden modificar o integrar nuevos contenidos. El proyecto h-node es desarrollado en colaboración y como una actividad de la FSF. -
              - -
              - Contribuir: -
              -
              - Puede contribuir creando una cuenta en y editar los contenidos generados. Todas sus modificaciones serás guardadas en el historial del producto que edite/agregue. Cada revisión (actual o previa) será marcada con el nombre del usuario que la creo.
              También puede contribuir al sugerir nuevo hardware que deba ser agregado a la base de datos o características que deberían ser implementadas. -
              - -
              - Software Libre: -
              -
              - - - In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: - -

              1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

              - -

              2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

              - -

              h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

              -
              - -
              - Licencias: -
              -
              - Cualquier texto agregado por usted sera colocado en Dominio Publico (vea la página CC0 para información detallada). Cualquiera es libre de copiar, modificar, publicar, usar, vender o distribuir el texto que ha integrado a h-node.org, para cualquier propósito, comercial o no comercial, y por cualquier método. -
              - -
              - Otros recursos en la red: -
              -
              -

              Aquí una lista de otras actividades recolectando información acerca de hardware funcionando con software libre:

              - -
              - -
              - Acerca del sitio : -
              -
              - El sitio debe ser considerado una versión beta. Esta en constantemente crecimiento y varias características no han sido implementadas aun (por ejemplo, nuevos dispositivos de hardware tienen que ser incluidos en la base de datos). Algunos problemas pueden ocurrir: Si encuentra un error por favor agregue una incidencia ">aquí bajo el tema maybe a bug. -
              -
              -
              diff --git a/h-source/Application/Views/Desktop/Home/left_fr.php b/h-source/Application/Views/Desktop/Home/left_fr.php deleted file mode 100644 index 2056c75..0000000 --- a/h-source/Application/Views/Desktop/Home/left_fr.php +++ /dev/null @@ -1,88 +0,0 @@ - - -. -?> - -
              - -
              - Home -
              - - - -
              -
              - Objectifs: -
              - -
              - Le but du projet h-node est de créer une base de données de matériel afin d'identifier les dispositifs qui fonctionne avec un système d’exploitation entièrement libre. Le site h-node est structuré comme un wiki, dont tout les utilisateurs peuvent modifier ou insérer des contenus. Le projet h-node est dévellopé en collaboration et en tant qu'activitée de la FSF. -
              - -
              - Contribution: -
              -
              - Vous pouvez contribuer en créant un compte sur h-node et modifier le contenus créé par les utilisateurs. Toutes vos modifications seront enregistrées dans l’historique de l’élément que vous modifiez ou ajouter. Toutes versions (l’actuelle ou les précédentes) seront marquées au nom de l’utilisateur qui les a crées.
              Vous pouvez aussi contribuer en suggérant un autre type de matériel qui devrais être ajouté à la base de données ou une nouvelle fonctionnalitée qui devrais être implémentée -
              - -
              - Logiciel libre: -
              -
              - - - In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: - -

              1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

              - -

              2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

              - -

              h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

              - -
              - -
              - License: -
              - -
              - Tout les textes que vous publierez sur le site seront dans le Domain public (Consultez la page CC0 pour plus d'informations). Tout un chacun est autorisé à copier, modifier, publier, utiliser, vendre ou distribuer le texte que vous avez envoyé sur h-node.org, pour quelque utilisation que ce soit et par tout les moyens. -
              - -
              - Ressource supplémentaire sur Internet: -
              -
              -

              Voici une liste d'autres archives qui collecte des informations à propos du matériel fonctionnant avec du logiciel libre:

              - -
              - -
              - A propos du site : -
              -
              - Le site doit être considéré comme en version beta, il s’aggrandit constamment et beaucoup de fonctionnalitée n’ont pas encore été implémentée ( par exemple, de nouveau type d’appareil doivent être ajouter dans la base de données) . Des problèmes peuvent arriver, si vous trouver un bug, merci de remplir un ">ticket bug (maybe a bug). -
              -
              -
              diff --git a/h-source/Application/Views/Desktop/Home/left_gr.php b/h-source/Application/Views/Desktop/Home/left_gr.php deleted file mode 100644 index a0a4279..0000000 --- a/h-source/Application/Views/Desktop/Home/left_gr.php +++ /dev/null @@ -1,87 +0,0 @@ - - -. -?> - -
              - -
              - Home -
              - - - -
              -
              - Σκοποί: -
              -
              - - Το project έχει ως σκοπό την κατασκευή μίας βάσης δεδομένων υλικού, έτσι ώστε να μπορεί να εντοπισθεί ποιες συσκευές δουλεύουν με ένα πλήρως ελεύθερο Λειτουργικό Σύστημα. Ο ιστότοπος είναι δομημένος σαν ένα wiki, εντός του οποίου όλοι οι χρήστες μπορούν να τροποποιούν ή να εισαγάγουν νέα περιεχόμενα. Το h-node project αναπτύχθηκε σε συνεργασία με και σαν δραστηριότητα του FSF. -
              - -
              - Συνεισφέρετε: -
              -
              - Μπορείτε να συνεισφέρετε φτιάχνοντας έναν λογαριασμό στο και τροποποιώντας τα περιεχόμενα που δημιούργησαν οι ίδιοι οι χρήστες. Όλες σας οι τροποποιήσεις θα αποθηκεύονται στο ιστορικό του προϊόντος το οποίο επεξεργάζεσθε/εμπλουτίζετε. Κάθε αναθεώρηση (τόσο η τρέχουσα όσο και οι παλιές) θα επισημαίνεται με το όνομα του χρήστη που την δημιούργησε. Μπορείτε, επίσης, να συνεισφέρετε προτείνοντας νέο υλικό που θα έπρεπε να προστεθεί στη βάση δεδομένων, ή εισηγούμενοι χαρακτηριστικά που θα έπρεπε να υλοποιηθούν. -
              - -
              - Ελεύθερο Λογισμικό -
              -
              - - - In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: - -

              1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

              - -

              2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

              - -

              h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

              - -
              - -
              - Άδεια: -
              -
              - Οποιοδήποτε κείμενο που υποβάλετε, θα μπαίνει σε Δημόσια Διάθεση/Public Domain (δείτε τη σελίδα CC0 page για πιο λεπτομερείς πληροφορίες). Οποιοσδήποτε είναι ελεύθερος να αντιγράφει, να τροποποιεί, να δημοσιεύει, να χρησιμοποιεί, να πωλεί, ή και να ανδιανέμει το κείμενο που εσείς υποβάλλατε στο h-node.com, για οποιοδήποτε λόγο, εμπορικό ή μη-εμπορικό, και με οποιονδήποτε τρόπο. -
              - -
              - Άλλοι πόροι στο Διαδίκτυο: -
              -
              -

              Ακολουθεί, εδώ, ένας κατάλογος άλλων αρχείων που συγκεντρώνουν πληροφορίες σχετικά με υλικό που δουλεύει με ελεύθερο λογισμικό:

              - -
              - -
              - Σχετικά με τον ιστότοπο : -
              -
              - Το πρέπει να θεωρείται πως βρίκεται σε έκδοση beta. Αναπτύσσεται συνεχώς και πολλά χαρακτηριστικά δεν έχουν ακόμη υλοποιηθεί (π.χ. πρέπει ακόμη να προστεθούν νέες συσκευές υλικού στη βάση δεδομένων). Μπορεί να παρατηρηθούν ορισμένα προβλήματα: αν εντοπίσετε ένα σφάλμα (bug), παρακαλώ προσθέστε μία αναφορά προβλήματος ">εδώ με θέμα ίσως να πρόκειται για ένα bug. -
              -
              -
              diff --git a/h-source/Application/Views/Desktop/Home/left_it.php b/h-source/Application/Views/Desktop/Home/left_it.php deleted file mode 100644 index 561c3a1..0000000 --- a/h-source/Application/Views/Desktop/Home/left_it.php +++ /dev/null @@ -1,88 +0,0 @@ - - -. -?> - -
              - -
              - Home -
              - - - -
              -
              - Obiettivi: -
              - -
              - Il progetto h-node mira alla costruzione di un database di hardware allo scopo di identificare quali dispositivi funzionino con un sistema operativo completamente libero. Il sito h-node.org è strutturato come una wiki in cui tutti gli utenti possono inserire nuovi contenuti o modificare i contenuti già presenti. Il progetto h-node è sviluppato in collaborazione e come attività della FSF. -
              - -
              - Contribuire: -
              -
              - Puoi contribuire creandoti un account su h-node.org e modificando i suoi contenuti generati dagli utenti. Tutte le tue modifiche saranno salvate nella storia del prodotto che stai modificando/aggiungendo. Ogni revisione (quella attuale o le precedenti) sarà contrassegnata col nome dell'utente che l'ha creata.
              Puoi inoltre contribuire suggerendo del nuovo hardware da aggiungere al database o delle caratteristiche da implementare. -
              - -
              - Software libero: -
              -
              - - - Per poter aggiungere un dispositivo nel database di h-node, devi verificare che funzioni usando solo software libero. Per questo scopo, puoi unicamente utilizzare: - -

              1) Una delle distribuzioni GNU/Linux elencate nella lista delle distribuzioni approvate dalla FSF

              - -

              2) Debian GNU/Linux, con solo la zona archivio main attivata. Le aree "contrib" e "non-free" non devono essere abilitate durante il test dell'hardware. Controlla che sia così lanciando apt-cache policy. La sola zona archivio dei pacchetti deve essere main.

              - -

              h-node elenca solo hardware che funziona con driver liberi e senza firmware non libero. Le altre distribuzioni GNU/Linux (oppure Debian con contrib, non-free, o archivi di terze parti abilitati) includono file di firmware non liberi, quindi non possono essere utilizzate per i test.

              - -
              - -
              - Licenza: -
              - -
              - Qualsiasi testo da te inserito diventerà di Pubblico Dominio (visita la pagina CC0 per informazioni dettagliate). Chiunque è libero di copiare, modificare, pubblicare, usare, vendere o distribuire il testo che hai inserito su h-node.org, per qualsiasi fine, commerciale o non commerciale, e con ogni mezzo. -
              - -
              - Altre risorse in rete: -
              -
              -

              Di seguito una lista di altri archivi contenenti informazioni sull' hardware funzionante con software libero:

              - -
              - -
              - A proposito del sito : -
              -
              - deve essere considerato una versione beta. E' in costante sviluppo e molte caratteristiche non sono ancora state implementate (per esempio nuovi dispositivi hardware devono essere aggiunti al database). Potrebbero esserci dei problemi: se scopri un bug per favore invia una segnalazione ">qui con l'argomento maybe a bug. -
              -
              -
              diff --git a/h-source/Application/Views/Desktop/Issues/view.php b/h-source/Application/Views/Desktop/Issues/view.php deleted file mode 100644 index 51047b8..0000000 --- a/h-source/Application/Views/Desktop/Issues/view.php +++ /dev/null @@ -1,249 +0,0 @@ - - -. -?> - - - -
              - - - - - - - - -
              - - - - "> - - - - - "> - - - - - - "> - - -
              - - "> - - - - -
              -
              issue
              - ">view details -
              -
              - -
              - - -
              - -
              - -
              - -
              - submitted by getUser($row['issues']['created_by']));?>, -
              - -
              - - - - - - - - - - - - - -
              :
              :
              :
              -
              - -
              - : -
              - -
              - -
              - - - -
              - Response message (from h-node.com): -
              - -
              - -
              - - - - -
              - - -
              -
              - : -
              - - - - - -
              -
              -
              - getUser($row['messages']['created_by']);?>: -
              - - ">hide - - -
              - -
              - -
              -
              - submitted by getUser($row['messages']['created_by']));?>, -
              - - - -
              -
              message
              - ">view details -
              -
              - - -
              - - - - - -
              - - - ">make visible - - -
              -
              message
              - - ">view details - -
              -
              -
              - submitted by getUser($row['messages']['created_by']));?>, -
              -
              - -
              -
              -
              -
              -
              -
              - - - - - - - .. - - -
              - - - - -
              -
              - -
              - - - - - -
              - : -
              -
              -
              - -
              -
              - - - -
              - - - - - - - - - -
              - - -
              - diff --git a/h-source/Application/Views/Desktop/Issues/viewall.php b/h-source/Application/Views/Desktop/Issues/viewall.php deleted file mode 100644 index 2454e6f..0000000 --- a/h-source/Application/Views/Desktop/Issues/viewall.php +++ /dev/null @@ -1,122 +0,0 @@ - - -. -?> - - - -
              - -
              - ">Home » -
              - -
              -
              - : -
              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
              viewStatus;?>"> ()getUser($row['issues']['created_by']));?> - -
              -
              - -
              - : -
              - - - -
              -
              - -
              - - - - - -
              - : -
              -
              -
              - -
              -
              - - - -
              - - - - - - - -
              diff --git a/h-source/Application/Views/Desktop/Meet/contributions.php b/h-source/Application/Views/Desktop/Meet/contributions.php deleted file mode 100644 index 43f56dd..0000000 --- a/h-source/Application/Views/Desktop/Meet/contributions.php +++ /dev/null @@ -1,79 +0,0 @@ - - -. -?> - - \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Meet/hardware.php b/h-source/Application/Views/Desktop/Meet/hardware.php deleted file mode 100644 index b0fdfa1..0000000 --- a/h-source/Application/Views/Desktop/Meet/hardware.php +++ /dev/null @@ -1,30 +0,0 @@ - - -. -?> - - - "> \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Meet/issues.php b/h-source/Application/Views/Desktop/Meet/issues.php deleted file mode 100644 index 2e88d5f..0000000 --- a/h-source/Application/Views/Desktop/Meet/issues.php +++ /dev/null @@ -1,31 +0,0 @@ - - -. -?> - - - - baseUrl."/issues/view/$lang/$i_id'>".$i_title." at ".smartDate($i_date);?> \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Meet/list_template.php b/h-source/Application/Views/Desktop/Meet/list_template.php deleted file mode 100644 index 2c2f6d3..0000000 --- a/h-source/Application/Views/Desktop/Meet/list_template.php +++ /dev/null @@ -1,50 +0,0 @@ - - -. -?> - -
              - - - -
              - -
              - -
              - -
              - -
              - action.".php");?> -
              - -
              - -
              - - action,'hardware') !== 0) {?> -
              - : -
              - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Meet/meet.php b/h-source/Application/Views/Desktop/Meet/meet.php deleted file mode 100644 index f0e31b3..0000000 --- a/h-source/Application/Views/Desktop/Meet/meet.php +++ /dev/null @@ -1,114 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » -
              - - -
              - - This user has been blocked - - ">unblock the user - - - - ">block the user - - - - -
              -
              user
              - ">view details -
              -
              - -
              - - - - - -
              - -
              -
              Username:
              -
              - - -
              -
              :
              -
              - - - -
              -
              :
              -
              - - - -
              -
              :
              -
              - - - -
              -
              :
              -
              - - - -
              -
              :
              -
              - - - -
              -
              :
              -
              - - - -
              -
              :
              -
              - - - -
              -
              :
              -
              - - -
              - - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Meet/messages.php b/h-source/Application/Views/Desktop/Meet/messages.php deleted file mode 100644 index f85686b..0000000 --- a/h-source/Application/Views/Desktop/Meet/messages.php +++ /dev/null @@ -1,31 +0,0 @@ - - -. -?> - - - - baseUrl."/issues/view/$lang/$i_id#message-$m_id'>".smartDate($m_date)."";?> submitted to the issue \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Meet/talk.php b/h-source/Application/Views/Desktop/Meet/talk.php deleted file mode 100644 index 9ddc5b3..0000000 --- a/h-source/Application/Views/Desktop/Meet/talk.php +++ /dev/null @@ -1,32 +0,0 @@ - - -. -?> - - - - baseUrl."/$controller/talk/$lang/$t_id#talk-$t_id_talk'>".$t_title." at ".smartDate($t_date);?> \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Meet/wiki.php b/h-source/Application/Views/Desktop/Meet/wiki.php deleted file mode 100644 index 1ec339e..0000000 --- a/h-source/Application/Views/Desktop/Meet/wiki.php +++ /dev/null @@ -1,29 +0,0 @@ - - -. -?> - - - "> \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Meet/wikitalk.php b/h-source/Application/Views/Desktop/Meet/wikitalk.php deleted file mode 100644 index 351960d..0000000 --- a/h-source/Application/Views/Desktop/Meet/wikitalk.php +++ /dev/null @@ -1,31 +0,0 @@ - - -. -?> - - - - baseUrl."/wiki/talk/$lang/$t_id#wiki-talk-$t_id_talk'>".$t_title." at ".smartDate($t_date);?> \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/My/email.php b/h-source/Application/Views/Desktop/My/email.php deleted file mode 100644 index 3c9a070..0000000 --- a/h-source/Application/Views/Desktop/My/email.php +++ /dev/null @@ -1,33 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » ">panel » e-mail -
              - - - - - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/My/goodbye.php b/h-source/Application/Views/Desktop/My/goodbye.php deleted file mode 100644 index 2f83695..0000000 --- a/h-source/Application/Views/Desktop/My/goodbye.php +++ /dev/null @@ -1,63 +0,0 @@ - - -. -?> - - - -
              - -
              - ">Home » ">panel » delete account -
              - - - -
              - -
              viewStatus;?>" method="POST"> - I want to close my account: -
              - -
              - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/My/panel.php b/h-source/Application/Views/Desktop/My/panel.php deleted file mode 100644 index 67fbe1d..0000000 --- a/h-source/Application/Views/Desktop/My/panel.php +++ /dev/null @@ -1,64 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » -
              - - -
              - Your account has been blocked by an administrator of the website. You can neither insert/modify devices nor submit new issues or messages until some other moderator un-block your account. -
              - - - -
              -
              -
                -
              • -
              • -
              • ( "> )
              • -
              -
              - - - -
              -
              -
                -
              • -
              • -
              -
              - - -
                -
              • -
              • -
              • -
              • -
              • -
              - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/My/password.php b/h-source/Application/Views/Desktop/My/password.php deleted file mode 100644 index 50588ac..0000000 --- a/h-source/Application/Views/Desktop/My/password.php +++ /dev/null @@ -1,33 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » ">panel » password -
              - - - - - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/My/profile.php b/h-source/Application/Views/Desktop/My/profile.php deleted file mode 100644 index 1826337..0000000 --- a/h-source/Application/Views/Desktop/My/profile.php +++ /dev/null @@ -1,33 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » ">panel » profile -
              - - - - - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/News/index.php b/h-source/Application/Views/Desktop/News/index.php deleted file mode 100644 index f46aaae..0000000 --- a/h-source/Application/Views/Desktop/News/index.php +++ /dev/null @@ -1,51 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » -
              - -
              - -
              -
              - -
              -
              - -
              -
              - -
              -
              - -
              - - 10) { ?> -
              - -
              - - -
              diff --git a/h-source/Application/Views/Desktop/Notebooks/.svn/entries b/h-source/Application/Views/Desktop/Notebooks/.svn/entries deleted file mode 100644 index 334d6af..0000000 --- a/h-source/Application/Views/Desktop/Notebooks/.svn/entries +++ /dev/null @@ -1,96 +0,0 @@ -10 - -dir -388 -svn+ssh://tonicucoz@svn.savannah.nongnu.org/h-source/trunk/h-source/Application/Views/Desktop/Notebooks -svn+ssh://tonicucoz@svn.savannah.nongnu.org/h-source - - - -2012-10-16T05:40:07.156193Z -388 -tonicucoz - - - - - - - - - - - - - - -cdff7dbb-30cd-47f4-9d9c-15594cd9e55c - -page.php -file -389 - - - -2012-10-16T13:45:45.142595Z -ac86850a999353cbf3fdd926063fe271 -2012-10-16T13:51:26.763024Z -389 -tonicucoz - - - - - - - - - - - - - - - - - - - - - -6813 - -form.php -file -389 - - - -2012-10-16T13:46:11.783840Z -4d6c57cb69df2c9c7c736471ace8cbe4 -2012-10-16T13:51:26.763024Z -389 -tonicucoz - - - - - - - - - - - - - - - - - - - - - -7117 - diff --git a/h-source/Application/Views/Desktop/Notebooks/.svn/text-base/form.php.svn-base b/h-source/Application/Views/Desktop/Notebooks/.svn/text-base/form.php.svn-base deleted file mode 100644 index 79a9419..0000000 --- a/h-source/Application/Views/Desktop/Notebooks/.svn/text-base/form.php.svn-base +++ /dev/null @@ -1,156 +0,0 @@ - - -. -?> - - - - - -
              -
              action."/$lang/$token".$this->viewStatus;?>" method="POST"> - -
              - -
              - - - ">Vendor not present? -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - - - -
              - -
              - - - "> -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - - -
              :
              -
              - -
              - - - -
              - - - - - - -
              - * are mandatory");?> -
              - -
              - -
              -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Notebooks/.svn/text-base/page.php.svn-base b/h-source/Application/Views/Desktop/Notebooks/.svn/text-base/page.php.svn-base deleted file mode 100644 index 09bc80f..0000000 --- a/h-source/Application/Views/Desktop/Notebooks/.svn/text-base/page.php.svn-base +++ /dev/null @@ -1,120 +0,0 @@ - - -. -?> - - - - action,'view') === 0) ? 'hardware' : 'revisions'; - $displayClass = ($isDeleted and $isadmin) ? 'display_none' : null; - ?> - - -
              - - - action,'revision') === 0) { ?> -
              - getLinkToUserFromId($updated_by);?> . controller."/view/$lang/$id_hard/".$name.$this->viewStatus;?>">. -
              - - -
              - : (: ) - action,'view') === 0) { ?> - ask for removal - -
              - -
              -
              (, , , ):
              -
              -
              - -
              -
              :
              -
              -
              - -
              -
              :
              -
              -
              - -
              -
              -
              -
              - -
              -
              -
              (".gtext("see the details inside the description entry").")";?>
              -
              - -
              -
              -
              (".gtext("see the details inside the description entry").")";?>
              -
              - -
              -
              :
              -
              -
              - -
              -
              :
              - -
              - -
              -
              :
              -
              -
              - -
              -
              :
              -
              ",explode(',',$item[$tableName]['kernel']));?>
              -
              - -
              -
              :
              -
              ()
              -
              - -
              -
              :
              -
              ()
              -
              - -
              -
              :
              -
              ()
              -
              - -
              -
              :
              -
              -
              - -
              - - - \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Notebooks/form.php b/h-source/Application/Views/Desktop/Notebooks/form.php deleted file mode 100644 index 79a9419..0000000 --- a/h-source/Application/Views/Desktop/Notebooks/form.php +++ /dev/null @@ -1,156 +0,0 @@ - - -. -?> - - - - - -
              -
              action."/$lang/$token".$this->viewStatus;?>" method="POST"> - -
              - -
              - - - ">Vendor not present? -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - - - -
              - -
              - - - "> -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - - -
              :
              -
              - -
              - - - -
              - - - - - - -
              - * are mandatory");?> -
              - -
              - -
              -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Notebooks/page.php b/h-source/Application/Views/Desktop/Notebooks/page.php deleted file mode 100644 index 09bc80f..0000000 --- a/h-source/Application/Views/Desktop/Notebooks/page.php +++ /dev/null @@ -1,120 +0,0 @@ - - -. -?> - - - - action,'view') === 0) ? 'hardware' : 'revisions'; - $displayClass = ($isDeleted and $isadmin) ? 'display_none' : null; - ?> - - -
              - - - action,'revision') === 0) { ?> -
              - getLinkToUserFromId($updated_by);?> . controller."/view/$lang/$id_hard/".$name.$this->viewStatus;?>">. -
              - - -
              - : (: ) - action,'view') === 0) { ?> - ask for removal - -
              - -
              -
              (, , , ):
              -
              -
              - -
              -
              :
              -
              -
              - -
              -
              :
              -
              -
              - -
              -
              -
              -
              - -
              -
              -
              (".gtext("see the details inside the description entry").")";?>
              -
              - -
              -
              -
              (".gtext("see the details inside the description entry").")";?>
              -
              - -
              -
              :
              -
              -
              - -
              -
              :
              - -
              - -
              -
              :
              -
              -
              - -
              -
              :
              -
              ",explode(',',$item[$tableName]['kernel']));?>
              -
              - -
              -
              :
              -
              ()
              -
              - -
              -
              :
              -
              ()
              -
              - -
              -
              :
              -
              ()
              -
              - -
              -
              :
              -
              -
              - -
              - - - \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Project/index.php b/h-source/Application/Views/Desktop/Project/index.php deleted file mode 100644 index cf6fc96..0000000 --- a/h-source/Application/Views/Desktop/Project/index.php +++ /dev/null @@ -1,48 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » h-project -
              - -
              - -
              - Why: -
              - -
              - The h-node project has been created to help the free software movement by creating an archive of all the hardware that can work with a fully free operating system. -
              - -
              - Who: -
              - -
              - Antonio Gallo (tonicucoz">tonicucoz), h-node.com source code developer, Giulia Fanin (Julia">Julia), designer of the website layout and icons (thanks for your advice and support), Luis Alberto Guzman Garcia (Ark74">Ark74), member of the Spanish translation team (thanks for all of your useful ideas and suggestions), Henri (Hardisk">Hardisk), member of the French translation team, Joerg Kohne (joeko">joeko), member of the German translation team, Benjamin Rochefort (oysterboy">oysterboy), member of the French translation team, Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. -
              Also thanks to all of you who have believed in the project since it was born and to all of you who gave, give and will give their contribution. -
              - -
              - -
              diff --git a/h-source/Application/Views/Desktop/Project/index_de.php b/h-source/Application/Views/Desktop/Project/index_de.php deleted file mode 100644 index 4c996a9..0000000 --- a/h-source/Application/Views/Desktop/Project/index_de.php +++ /dev/null @@ -1,49 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » h-project -
              - -
              - -
              - Warum: -
              - -
              - Das Projekt „h-node“ wurde ins Leben gerufen, um für die Freie-Software-Bewegung ein umfassendes Hardware-Archiv für vollkommen Freie Betriebssysteme aufzubauen. -
              - -
              - Wer: -
              - -
              - Antonio Gallo (tonicucoz">tonicucoz), h-node.com source code developer, Giulia Fanin (Julia">Julia), Designer des Website-Layout und Symbole (Danke für die Ratschläge und Unterstützung), Luis Alberto Guzman Garcia (Ark74">Ark74), Mitglied des spanischen Übersetzungsteams (Danke für all die Ideen und nützlichen Anregungen), Henri (Hardisk">Hardisk), Mitglied des französischen Übersetzungsteams, Joerg Kohne (joeko">joeko), Mitglied des deutschen Übersetzungsteams, Benjamin Rochefort (oysterboy">oysterboy), Mitglied des französischen Übersetzungsteams, , Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. -
              - Vielen Dank auch an alle, die an das Projekt, seit es ins Leben gerufen wurde, geglaubt haben und an alle, die ihren Beitrag geleistet haben, leisten und leisten werden. -
              - -
              - -
              diff --git a/h-source/Application/Views/Desktop/Project/index_es.php b/h-source/Application/Views/Desktop/Project/index_es.php deleted file mode 100644 index 7e9217c..0000000 --- a/h-source/Application/Views/Desktop/Project/index_es.php +++ /dev/null @@ -1,49 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » h-project -
              - -
              - -
              - Por que: -
              - -
              - El proyecto h-node ha sido creado para ayudar al movimiento de software libre al crear un archivo de todo el hardware que puede funcionar con un sistema operativo completamente libre. -
              - -
              - Quien: -
              - -
              - Antonio Gallo (tonicucoz">tonicucoz), h-node.com source code developer, Giulia Fanin (Julia">Julia), diseñadora del tema e iconos del sitio, (gracias por su consejo y apoyo), Luis Alberto Guzman Garcia (Ark74">Ark74), miembro del equipo de traducción al Español (gracias por sus útiles ideas y sugerencias), Henri (Hardisk">Hardisk), miembro del equipo de traducción al Francés, Joerg Kohne (joeko">joeko), miembro del equipo de traducción al Alemán, Benjamin Rochefort (oysterboy">oysterboy), miembro del equipo de traducción al Francés, , Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. -
              - También gracias a todos aquellos que han creído en el proyecto desde que nació y a todos aquellos que dieron, dan y darán su contribución. -
              - -
              - -
              diff --git a/h-source/Application/Views/Desktop/Project/index_fr.php b/h-source/Application/Views/Desktop/Project/index_fr.php deleted file mode 100644 index 3e0e6ad..0000000 --- a/h-source/Application/Views/Desktop/Project/index_fr.php +++ /dev/null @@ -1,48 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » h-project -
              - -
              - -
              - Pourquoi: -
              - -
              - Le projet h-node a été créer pour aider le mouvement du logiciel libre en créant une archive de matériel fonctionnel avec des systèmes entièrement libres. -
              - -
              - Qui: -
              - -
              - Antonio Gallo (tonicucoz">tonicucoz), h-node.com source code developer, Giulia Fanin (Julia">Julia), graphiste du site et des icones (merci pour tes conseils et ton support), Luis Alberto Guzman Garcia (Ark74">Ark74), membre de l’équipe de traduction espagnole (merci pour toutes vos bonnes idée et suggestion), Henri (Hardisk">Hardisk), membre de l’équipe de traduction française, Joerg Kohne (joeko">joeko), membre de l’équipe de traduction allemande, Benjamin Rochefort (oysterboy">oysterboy), membre de l’équipe de traduction française, Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. -
              Remerciement également à tout ceux qui ont crus à ce projet depuis sa naissance et à tout ceux qui ont donné, donne ou donnerons leurs contributions. -
              - -
              - -
              diff --git a/h-source/Application/Views/Desktop/Project/index_gr.php b/h-source/Application/Views/Desktop/Project/index_gr.php deleted file mode 100644 index 2b964da..0000000 --- a/h-source/Application/Views/Desktop/Project/index_gr.php +++ /dev/null @@ -1,48 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » h-project -
              - -
              - -
              - Γιατί: -
              - -
              - Το h-node project στήθηκε για να βοηθήσει το Κίνημα Ελεύθερου Λογισμικού, με τη δημιουργία ενός αρχείου για όλο το υλικό (hardware) που μπορεί να δουλέψει με ένα πλήρως ελεύθερο Λειτουργικό Σύστημα. -
              - -
              - Ποιος: -
              - -
              - Ο Antonio Gallo (tonicucoz">tonicucoz), h-node.com developer πηγαίου κώδικα, η Giulia Fanin (Julia">Julia, designer του layout και των εικόνων αυτού του ιστοτόπου (ευχαριστούμε για τις συμβουλές σου και την υποστήριξή σου), ο Luis Alberto Guzman Garcia (Ark74">Ark74), μέλος της Ισπανικής μεταφραστικής ομάδας (ευχαριστούμε για όλες τις χρήσιμες ιδέες σου και τις προτάσεις σου), ο Henri (Hardisk">Hardisk), μέλος της Γαλλικής μεταφραστικής ομάδας, ο Joerg Kohne (joeko">joeko), μέλος της Γερμανικής μεταφραστικής ομάδας, ο Benjamin Rochefort (oysterboy">oysterboy), μέλος της Γαλλικής μεταφραστικής ομάδας, Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. -
              Ευχαριστούμε, επίσης, όλους εσάς που πιστέψατε σε αυτό το project από τη γέννησή του, καθώς και όλους εσάς που δώσατε, δίνετε και θα δίνετε την συνεισφορά σας. -
              - -
              - -
              diff --git a/h-source/Application/Views/Desktop/Project/index_it.php b/h-source/Application/Views/Desktop/Project/index_it.php deleted file mode 100644 index aa142f8..0000000 --- a/h-source/Application/Views/Desktop/Project/index_it.php +++ /dev/null @@ -1,48 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » h-project -
              - -
              - -
              - Why: -
              - -
              - Il progetto h-node è stato creato per aiutare il movimento del software libero creando un archivio di tutto l' hardware che funzioni con un sistema operativo completamente libero. -
              - -
              - Who: -
              - -
              - Antonio Gallo (tonicucoz">tonicucoz), sviluppatore del codice di h-node.com, Giulia Fanin (Julia">Julia), designer del layout del sito e delle icone (grazie per i consigli e il supporto), Luis Alberto Guzman Garcia (Ark74">Ark74), membro del team di traduzione spagnolo (grazie per tutte le idee e gli utili suggerimenti), Henri (Hardisk">Hardisk), membro del team di traduzione francese, Joerg Kohne (joeko">joeko), membro del team di traduzione tedesco, Benjamin Rochefort (oysterboy">oysterboy), membro del team di traduzione francese, , Kostas Mousafiris (kosmous">kosmous), membro del team di traduzione greco. -
              Grazie anche a tutti Voi che avete creduto nel progetto sin dalla sua nascita e a tutti quelli che hanno dato, danno e daranno il loro contributo. -
              - -
              - -
              diff --git a/h-source/Application/Views/Desktop/Rss/modifications.php b/h-source/Application/Views/Desktop/Rss/modifications.php deleted file mode 100644 index 0a9100b..0000000 --- a/h-source/Application/Views/Desktop/Rss/modifications.php +++ /dev/null @@ -1,46 +0,0 @@ - -\n";?> - - - -<?php echo Website::$generalName;?> - - - -'inserted','update'=>'updated'); -?> - - - - <?php echo $row['hardware']['model'];?> - getUser($row['history']['created_by']);?>]]> - baseUrl."/".Hardware::$typeToController[$row['hardware']['type']]."/view/$lang/".$row['hardware']['id_hard']."/".encodeUrl($row['hardware']['model']);?> - - - - - - - - -. -?> \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Rss/notapproved.php b/h-source/Application/Views/Desktop/Rss/notapproved.php deleted file mode 100644 index dec338b..0000000 --- a/h-source/Application/Views/Desktop/Rss/notapproved.php +++ /dev/null @@ -1,41 +0,0 @@ - -\n";?> - - - -<?php echo Website::$generalName;?> - - - - - - <?php echo $row['hardware']['model'];?> - ]]> - baseUrl."/".Hardware::$typeToController[$row['hardware']['type']]."/view/$lang/".$row['hardware']['id_hard']."/".encodeUrl($row['hardware']['model']);?> - - - - - - - - -. -?> \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Search/form.php b/h-source/Application/Views/Desktop/Search/form.php deleted file mode 100644 index 136c544..0000000 --- a/h-source/Application/Views/Desktop/Search/form.php +++ /dev/null @@ -1,111 +0,0 @@ - - -. -?> - - - -
              - -
              - ">Home » -
              - -
              - : -
              - -
              -
              - -
              - -
              - - - - - - - - - -
              :
              :
              -
              -
              - -
              -
              - vendorid:productid -
              -
              " method="POST"> - - - - - - - - -
              :
              -
              -
              - -
              -
              - -
              -
              " method="POST"> - - - - - - - - -
              :
              lspci -vmmnn
              -
              -
              -
              diff --git a/h-source/Application/Views/Desktop/Search/lspci_results.php b/h-source/Application/Views/Desktop/Search/lspci_results.php deleted file mode 100644 index 970789b..0000000 --- a/h-source/Application/Views/Desktop/Search/lspci_results.php +++ /dev/null @@ -1,89 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » "> » -
              - -
              - : -
              - -
              - - - -
              - "> -
              - - -
              - 0) { ?> -
              - : -
              - - - -
              -
              - ".$row['hardware']['type']." - ".$row['hardware']['model']."";?> -
              -
              - ".gtext($row['hardware'][Hardware::getWorksFieldFromType($row['hardware']['type'])]).""; - ?> -
              -
              - -
              - -
              - 0) { ?> -
              - :
              - -
              - - - -
              -
              - ".Hardware::getTypeFromClass($device['classId'])." - ".$device['deviceName'];?> -
              -
                -
              • :
              • -
              • :
              • -
              • :
              • -
              - insert -
              -
              -
              - -
              -
              - -
              diff --git a/h-source/Application/Views/Desktop/Search/results.php b/h-source/Application/Views/Desktop/Search/results.php deleted file mode 100644 index 2fb128b..0000000 --- a/h-source/Application/Views/Desktop/Search/results.php +++ /dev/null @@ -1,87 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » "> » -
              - -
              - : -
              - -
              - - -
              -
              -
              :
              -
              - -
              -
              :
              -
              - -
              -
              :
              -
              -
              -
              :
              -
              -
              - - - - - action,'pciid') === 0) { ?> - -
              - -
              -
                - $number) { ?> -
              • ">
              • - -
              -
              - - -
              - . -
              - - - -
              - - -
              - : -
              - - -
              diff --git a/h-source/Application/Views/Desktop/Special/modactions.php b/h-source/Application/Views/Desktop/Special/modactions.php deleted file mode 100644 index 3e58c62..0000000 --- a/h-source/Application/Views/Desktop/Special/modactions.php +++ /dev/null @@ -1,95 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » "> » list of actions -
              - -
              - -
              - - - - - - - - - - action,'usersactions') !== 0) { ?> - - - - - - - - - - - action,'usersactions') !== 0) { ?> - - - - - - - - - - - - action,'usersactions') !== 0) { ?> - - - - -
              ACTION IDACTIONTYPEOBJECT IDDATENOTE
                -
              "> - - - -
              -
                   
              - - - getLinkToUserFromId($row['history']['created_by']);?> - - - - - - - - - - -
              - -
              - : -
              - -
              diff --git a/h-source/Application/Views/Desktop/Special/modifications.php b/h-source/Application/Views/Desktop/Special/modifications.php deleted file mode 100644 index 1caca34..0000000 --- a/h-source/Application/Views/Desktop/Special/modifications.php +++ /dev/null @@ -1,45 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » -
              - -
              - -
              - -
              - -
              - -
              - : -
              - -
              diff --git a/h-source/Application/Views/Desktop/Special/pages_deleted.php b/h-source/Application/Views/Desktop/Special/pages_deleted.php deleted file mode 100644 index f0e69d5..0000000 --- a/h-source/Application/Views/Desktop/Special/pages_deleted.php +++ /dev/null @@ -1,45 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » "> » -
              - -
              - -
              - -
              -
                - -
              • ">
              • - -
              -
              - -
              - : -
              - -
              diff --git a/h-source/Application/Views/Desktop/Users/add.php b/h-source/Application/Views/Desktop/Users/add.php deleted file mode 100755 index 3e8de61..0000000 --- a/h-source/Application/Views/Desktop/Users/add.php +++ /dev/null @@ -1,72 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » -
              - - - - - -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - -
              - -
              - - -
              - -
              - -
              - -
              - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Users/change.php b/h-source/Application/Views/Desktop/Users/change.php deleted file mode 100644 index c5fdb3b..0000000 --- a/h-source/Application/Views/Desktop/Users/change.php +++ /dev/null @@ -1,30 +0,0 @@ - - -. -?> - -
              - -
              -

              The link has expired

              -

              go to the ">homepage

              -
              - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Users/confirmation.php b/h-source/Application/Views/Desktop/Users/confirmation.php deleted file mode 100644 index 796fb1b..0000000 --- a/h-source/Application/Views/Desktop/Users/confirmation.php +++ /dev/null @@ -1,44 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » confirmation -
              - - - -
              -

              The account has been confirmed successfully!

              -

              go to the ">homepage

              -
              - - - -
              -

              The confirmation link has expired

              -

              go to the ">homepage

              -
              - - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Users/forgot.php b/h-source/Application/Views/Desktop/Users/forgot.php deleted file mode 100644 index ad9e046..0000000 --- a/h-source/Application/Views/Desktop/Users/forgot.php +++ /dev/null @@ -1,57 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » -
              - - - - - -
              - -
              - - -
              - -
              - -
              - -
              - - -
              - -
              - -
              - -
              - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Users/login.php b/h-source/Application/Views/Desktop/Users/login.php deleted file mode 100755 index c0c129d..0000000 --- a/h-source/Application/Views/Desktop/Users/login.php +++ /dev/null @@ -1,67 +0,0 @@ - - -. -?> - - - - - - - - - - - - - - - - diff --git a/h-source/Application/Views/Desktop/Users/logout.php b/h-source/Application/Views/Desktop/Users/logout.php deleted file mode 100755 index 8916a8b..0000000 --- a/h-source/Application/Views/Desktop/Users/logout.php +++ /dev/null @@ -1,27 +0,0 @@ - - -. -?> - -
              -
              - - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Users/notice.php b/h-source/Application/Views/Desktop/Users/notice.php deleted file mode 100644 index 9322adf..0000000 --- a/h-source/Application/Views/Desktop/Users/notice.php +++ /dev/null @@ -1,96 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » notice -
              - - - - -
              -

              An e-mail has been sent to your mailbox.

              -

              If you have received no mail, then check inside the spam too

              -

              Click on the confirmation link in the e-mail in order to confirm the registration of the new account.

              -

              The confirmation link will expire in a hour.

              -

              If you don't want to confirm the account registration then wait one hour and your username and e-mail will be deleted from the database.

              -

              go to the ">homepage

              -
              - - - -
              -

              Registration failed

              -

              go to the ">homepage

              -
              - - - -
              -

              An e-mail has been sent to your mailbox.

              -

              If you have received no mail, then check inside the spam too

              -

              Click on the confirmation link in the e-mail in order to change the password of your account.

              -

              The confirmation link will expire in a hour.

              -

              go to the ">homepage

              -
              - - - -
              -

              Registration failed

              -

              go to the ">homepage

              -
              - - - -
              -

              The new password has been sent to you by mail!

              -

              If you have received no mail, then check inside the spam too

              -

              go to the ">homepage

              -
              - - - -
              -

              Operation failed

              -

              go to the ">homepage

              -
              - - - -
              -

              Your account has been successfully deleted

              -

              go to the ">homepage

              -
              - - - - - -
              -

              go to the ">homepage

              -
              - - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Wiki/climb.php b/h-source/Application/Views/Desktop/Wiki/climb.php deleted file mode 100644 index c648e7f..0000000 --- a/h-source/Application/Views/Desktop/Wiki/climb.php +++ /dev/null @@ -1,52 +0,0 @@ - - -. -?> -
              - - - -
              - ">Home » -
              - -
              - -
              - - - -
              - - - -
              - -
              " method="POST"> - : -
              - -
              - -
              - - \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/Wiki/differences.php b/h-source/Application/Views/Desktop/Wiki/differences.php deleted file mode 100644 index 9c06714..0000000 --- a/h-source/Application/Views/Desktop/Wiki/differences.php +++ /dev/null @@ -1,64 +0,0 @@ - - -. -?> - -
              - - - -
              - ">Home » -
              - - -
              - , getUser($created_by));?>, -
              - - - - -
              - -
              - Notice: the text in red has been deleted from the previous revision, the text in green has been added in this revision and the text in gray has not been changed.");?> -
              - - $text) { ?> - -
              - -
              - : -
              - -
              - -
              - -
              - - - -
              - diff --git a/h-source/Application/Views/Desktop/Wiki/form.php b/h-source/Application/Views/Desktop/Wiki/form.php deleted file mode 100644 index 38a88c4..0000000 --- a/h-source/Application/Views/Desktop/Wiki/form.php +++ /dev/null @@ -1,105 +0,0 @@ - - -. -?> - - - -
              - - action,'insert') === 0 ) { ?> - -
              - ">Home » ">Wiki » -
              - -
              - -
              - - - - action,'update') === 0 ) { ?> - -
              - ">Home » ">Wiki » "> » -
              - -
              - -
              - - - - - -
              -
              :
              - -
              - - - -
              - -
              controller."/".$this->action."/$lang";?>" method="POST"> - -
              - -
              - - -
              - -
              - - - -
              :
              -
              - -
              - - - -
              - - - - "> - "> - -
              - -
              -
              - diff --git a/h-source/Application/Views/Desktop/Wiki/history.php b/h-source/Application/Views/Desktop/Wiki/history.php deleted file mode 100644 index 08fa4ac..0000000 --- a/h-source/Application/Views/Desktop/Wiki/history.php +++ /dev/null @@ -1,74 +0,0 @@ - - -. -?> - -
              - - - -
              - ">Home » ">Wiki » » -
              - -
              - -
              - - - -
              - - - -
              - -
              - : -
              - - - diff --git a/h-source/Application/Views/Desktop/Wiki/modifications.php b/h-source/Application/Views/Desktop/Wiki/modifications.php deleted file mode 100644 index 71e50c9..0000000 --- a/h-source/Application/Views/Desktop/Wiki/modifications.php +++ /dev/null @@ -1,45 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » ">Wiki » -
              - -
              - -
              - -
              - -
              - -
              - : -
              - -
              diff --git a/h-source/Application/Views/Desktop/Wiki/not_found.php b/h-source/Application/Views/Desktop/Wiki/not_found.php deleted file mode 100644 index cd435de..0000000 --- a/h-source/Application/Views/Desktop/Wiki/not_found.php +++ /dev/null @@ -1,34 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » ">Wiki » -
              - -
              -
              - . "> -
              -
              - diff --git a/h-source/Application/Views/Desktop/Wiki/page.php b/h-source/Application/Views/Desktop/Wiki/page.php deleted file mode 100644 index 1716edc..0000000 --- a/h-source/Application/Views/Desktop/Wiki/page.php +++ /dev/null @@ -1,154 +0,0 @@ - - -. -?> - -
              - - action,'page') === 0 ? 'wiki' : 'wiki_revisions'; - $displayClass = ($isDeleted) ? 'display_none' : null; - ?> - - action,'page') === 0 ) { ?> - -
              - ">Home » ">Wiki » -
              - - - -
              - - - - "> - - - - "> - - - - -
              - - "> - - - - "> - - - - -
              -
              page
              - - "> | - - ">view details -
              -
              - -
              - - - - - - - - - action,'revision') === 0 ) { ?> - -
              - ">Home » -
              - -
              - -
              - - - - - -
              - - - - - action,'revision') === 0) { ?> -
              - getLinkToUserFromId($created_by);?> . ">. -
              - - - -
              - - action,'page') === 0 ) { ?> - - - - -
              -
              - -
              - - - - -
              - - -
              - -
              - diff --git a/h-source/Application/Views/Desktop/Wiki/pages.php b/h-source/Application/Views/Desktop/Wiki/pages.php deleted file mode 100644 index 7a6918a..0000000 --- a/h-source/Application/Views/Desktop/Wiki/pages.php +++ /dev/null @@ -1,45 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » ">Wiki » -
              - -
              - -
              - -
              -
                - -
              • - -
              -
              - -
              - : -
              - -
              diff --git a/h-source/Application/Views/Desktop/Wiki/talk.php b/h-source/Application/Views/Desktop/Wiki/talk.php deleted file mode 100644 index 4e93798..0000000 --- a/h-source/Application/Views/Desktop/Wiki/talk.php +++ /dev/null @@ -1,173 +0,0 @@ - - -. -?> - - - -
              - -
              - ">Home » -
              - -
              - -
              - - - - - - -
              - - - - - - -
              - -
              - - ">hide - - -
              - -
              - -
              - getUser($message['wiki_talk']['created_by']));?>, -
              -
              - -
              - -
              - - - -
              -
              wiki_talk
              - ">view details -
              -
              - - -
              - - - - - -
              - this message has been deleted - - ">make visible - - -
              -
              wiki_talk
              - - ">view details - -
              -
              -
              - submitted by getUser($message['wiki_talk']['created_by']));?>, -
              -
              - -
              -
              -
              -
              -
              - - -
              - - - - - -
              - - - -
              - - - - -
              -
              controller."/talk/$lang/$id_wiki";?>#form" method="POST"> - -
              - -
              - - -
              - -
              - - -
              - - "> - -
              - -
              -
              -
              - - - - - - - - - -
              - -
              - - - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/bottom_left.php b/h-source/Application/Views/Desktop/bottom_left.php deleted file mode 100644 index 545a6ea..0000000 --- a/h-source/Application/Views/Desktop/bottom_left.php +++ /dev/null @@ -1,29 +0,0 @@ - - -. -?> - - action,'talk') !== 0) { ?> -
              - -
              - - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/catalogue.php b/h-source/Application/Views/Desktop/catalogue.php deleted file mode 100644 index b89eed6..0000000 --- a/h-source/Application/Views/Desktop/catalogue.php +++ /dev/null @@ -1,131 +0,0 @@ - - -. -?> - -
              -
              - -
              -
              - -
              -
              - - controller,'notebooks') === 0 ) { ?> -
              -
              - -
              -
              -
              viewArgs['bios'])?>
              -
              viewArgs['architecture']);?>
              -
              -
              - - -
              -
              " method="GET"> - - ">" /> - -
              -
              - - - -
              - ... -
              - - - - -
              - -
              - : -
              - - controller,'notebooks') !== 0 and strcmp($item['hardware']['other_names'],'') !== 0 ) { ?> -
              -
              :
              -
              -
              - - - controller,'notebooks') === 0 or strcmp($this->controller,'hostcontrollers') === 0) { ?> -
              - controller,'notebooks') === 0) { ?> -
              (, , , ):
              - -
              ():
              - -
              -
              - - -
              -
              :
              -
              -
              - -
              -
              :
              -
              -
              - - controller,'notebooks') !== 0 ) { ?> -
              -
              :
              -
              -
              - - -
              - controller,'printers') === 0 or strcmp($this->controller,'scanners') === 0 or strcmp($this->controller,'notebooks') === 0) { ?> -
              :
              - controller,'videocards') === 0 ) { ?> -
              - -
              - -
              -
              - - controller,'printers') === 0 ) { ?> -
              -
              -
              -
              - - - - -
              - - - -
              - : -
              - \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/cleared.php b/h-source/Application/Views/Desktop/cleared.php deleted file mode 100644 index ef1cfb3..0000000 --- a/h-source/Application/Views/Desktop/cleared.php +++ /dev/null @@ -1,28 +0,0 @@ - - -. -?> - - -
              -
              - -
              -
              diff --git a/h-source/Application/Views/Desktop/climb.php b/h-source/Application/Views/Desktop/climb.php deleted file mode 100644 index ffcae52..0000000 --- a/h-source/Application/Views/Desktop/climb.php +++ /dev/null @@ -1,37 +0,0 @@ - - -. -?> - -
              - - - -
              - - -
              viewStatus;?>" method="POST"> - I want to make this revision the current revision: -
              - - -
              - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/dialog.php b/h-source/Application/Views/Desktop/dialog.php deleted file mode 100644 index bbbe1ae..0000000 --- a/h-source/Application/Views/Desktop/dialog.php +++ /dev/null @@ -1,102 +0,0 @@ - - -. -?> - - - - -
              - -
              - - - - - - - - - - - - - - -
              -
              -
              - -
              -
              - -
              -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/differences.php b/h-source/Application/Views/Desktop/differences.php deleted file mode 100644 index c634d19..0000000 --- a/h-source/Application/Views/Desktop/differences.php +++ /dev/null @@ -1,49 +0,0 @@ - - -. -?> - -
              - - - -
              - Notice: the text in red has been deleted from the previous revision, the text in green has been added in this revision and the text in gray has not been changed.");?> -
              - - $text) { ?> - -
              - -
              - : -
              - -
              - -
              - -
              - - - - - -
              diff --git a/h-source/Application/Views/Desktop/footer.php b/h-source/Application/Views/Desktop/footer.php deleted file mode 100644 index 8970590..0000000 --- a/h-source/Application/Views/Desktop/footer.php +++ /dev/null @@ -1,45 +0,0 @@ - - -. -?> - - -
              h-node.org is a hardware database project. It runs the h-source PHP software, version SVN-387, available under the GNU General Public (GPLv3) License.
              - -
              - - - - - diff --git a/h-source/Application/Views/Desktop/form.php b/h-source/Application/Views/Desktop/form.php deleted file mode 100644 index a9e23af..0000000 --- a/h-source/Application/Views/Desktop/form.php +++ /dev/null @@ -1,160 +0,0 @@ - - -. -?> - - - - - -
              -
              controller."/".$this->action."/$lang/$token".$this->viewStatus;?>" method="POST"> - -
              - -
              - - -
              - -
              - - -
              - - controller,'printers') === 0 ) { ?> -
              - - -
              - controller,'hostcontrollers') === 0 ) { ?> - - - - -
              - - -
              - -
              - - -
              - -
              - - -
              - -
              - - - - -
              - -
              - - -
              - -
              - - - controller,'printers') === 0 or strcmp($this->controller,'scanners') === 0) { - switch ($this->controller) - { - case 'printers': - $fragment = 'Printers'; - break; - case 'scanners': - $fragment = 'Scanners'; - break; - } - ?> - - "> - -
              - - controller,'printers') === 0 ) { ?> -
              - - -
              - - -
              - - -
              - -
              - - controller,'threegcards') === 0 ) { ?> - -
              - - - -
              :
              -
              - -
              - - - -
              - - - - - - -
              - * are mandatory");?> -
              - -
              - -
              -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/header.php b/h-source/Application/Views/Desktop/header.php deleted file mode 100644 index d153840..0000000 --- a/h-source/Application/Views/Desktop/header.php +++ /dev/null @@ -1,120 +0,0 @@ - - - -. -?> -'inserted','update'=>'updated'); -$currPos = $querySanitized ? $this->controller."/".$this->action : 'home/index'; -?> - - - <?php echo $title;?> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
              - -
              - -
              -
              - -
              -
              - -
              diff --git a/h-source/Application/Views/Desktop/history.php b/h-source/Application/Views/Desktop/history.php deleted file mode 100644 index bacf28a..0000000 --- a/h-source/Application/Views/Desktop/history.php +++ /dev/null @@ -1,63 +0,0 @@ - - -. -?> - - - -
              - - - -
              - -
              - : -
              - - - -
              - - \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/if_page_deleted.php b/h-source/Application/Views/Desktop/if_page_deleted.php deleted file mode 100644 index 932d0dd..0000000 --- a/h-source/Application/Views/Desktop/if_page_deleted.php +++ /dev/null @@ -1,60 +0,0 @@ - - -. -?> - - - -
              -
              -
              - This page has been deleted as requested by: - - getLinkToUserFromId($user);?> - -
              -
              -
              - With the following motivations: -
              -
              - -
              -
              - motivation of getLinkToUserFromId($row['deletion']['created_by']);?>: controller);?> -
              -
              - message: -
              -
              - -
              -
              - - - -
              -
              -
              - -
              -
              - - \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/license_notice.php b/h-source/Application/Views/Desktop/license_notice.php deleted file mode 100644 index 6aec78c..0000000 --- a/h-source/Application/Views/Desktop/license_notice.php +++ /dev/null @@ -1,32 +0,0 @@ - - -. -?> - -
              -
              :
              - -
              - -
              - -
              - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/moderator_dialog.php b/h-source/Application/Views/Desktop/moderator_dialog.php deleted file mode 100644 index 3b76c4b..0000000 --- a/h-source/Application/Views/Desktop/moderator_dialog.php +++ /dev/null @@ -1,69 +0,0 @@ - - -. -?> - -
              -
              -

              Write below your motivation

              - -
              -
              - -
              -
              - -
              -
              - - \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/noscript_distributions.php b/h-source/Application/Views/Desktop/noscript_distributions.php deleted file mode 100644 index 11ae5a6..0000000 --- a/h-source/Application/Views/Desktop/noscript_distributions.php +++ /dev/null @@ -1,33 +0,0 @@ - - -. -?> - - \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/not_found.php b/h-source/Application/Views/Desktop/not_found.php deleted file mode 100644 index cd435de..0000000 --- a/h-source/Application/Views/Desktop/not_found.php +++ /dev/null @@ -1,34 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » ">Wiki » -
              - -
              -
              - . "> -
              -
              - diff --git a/h-source/Application/Views/Desktop/page.php b/h-source/Application/Views/Desktop/page.php deleted file mode 100644 index 8da5a35..0000000 --- a/h-source/Application/Views/Desktop/page.php +++ /dev/null @@ -1,141 +0,0 @@ - - -. -?> - - - - action,'view') === 0) ? 'hardware' : 'revisions'; - $displayClass = ($isDeleted) ? 'display_none' : null; - ?> - - -
              - - - action,'revision') === 0) { ?> -
              - getLinkToUserFromId($updated_by);?> . controller."/view/$lang/$id_hard/".$name.$this->viewStatus;?>">. -
              - - - - - - -
              - : (: ) - action,'view') === 0) { ?> - ask for removal - -
              - - -
              -
              :
              -
              -
              - - -
              -
              :
              -
              -
              - - controller,'printers') === 0 or strcmp($this->controller,'hostcontrollers') === 0) { ?> -
              -
              ():
              -
              -
              - - -
              -
              :
              -
              -
              - -
              -
              :
              -
              -
              - -
              -
              :
              -
              -
              - -
              -
              :
              -
              -
              - -
              -
              :
              -
              ",explode(',',$item[$tableName]['kernel']));?>
              -
              - -
              - - controller,'videocards') === 0 ) { ?> - -
              -
              - - controller,'printers') === 0 ) { ?> - -
              :
              - - - controller,'scanners') === 0 ) { ?> - -
              :
              - - - - -
              -
              - - - -
              - - controller,'printers') === 0 ) { ?> -
              -
              -
              -
              - - -
              -
              :
              -
              -
              - -
              -
              :
              -
              -
              - -
              - - - \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/right.php b/h-source/Application/Views/Desktop/right.php deleted file mode 100644 index 0e6c22a..0000000 --- a/h-source/Application/Views/Desktop/right.php +++ /dev/null @@ -1,165 +0,0 @@ - - -. -?> - - diff --git a/h-source/Application/Views/Desktop/suggest_dialog.php b/h-source/Application/Views/Desktop/suggest_dialog.php deleted file mode 100644 index 3e9ad14..0000000 --- a/h-source/Application/Views/Desktop/suggest_dialog.php +++ /dev/null @@ -1,43 +0,0 @@ - - -. -?> - - - -
              -

              -

              -
              \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/talk.php b/h-source/Application/Views/Desktop/talk.php deleted file mode 100644 index ac02490..0000000 --- a/h-source/Application/Views/Desktop/talk.php +++ /dev/null @@ -1,163 +0,0 @@ - - -. -?> - - - - - -
              - - - - - - -
              - -
              - - ">hide - - -
              - -
              - -
              - getUser($message['talk']['created_by']));?>, -
              -
              - -
              - -
              - - - -
              -
              talk
              - ">view details -
              -
              - - -
              - - - - - -
              - this message has been deleted - - ">make visible - - -
              -
              talk
              - - ">view details - -
              -
              -
              - submitted by getUser($message['talk']['created_by']));?>, -
              -
              - -
              -
              -
              -
              -
              - - -
              - - - - - -
              - - - -
              - - - - - - -
              - : -
              -
              -
              - -
              -
              - - -
              -
              controller."/talk/$lang/$id_hard/$token".$this->viewStatus;?>#form" method="POST"> - -
              - -
              - - -
              - -
              - - -
              - - "> - "> - -
              - -
              -
              -
              - - - - - - - - \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/top_left.php b/h-source/Application/Views/Desktop/top_left.php deleted file mode 100644 index 33ef4d2..0000000 --- a/h-source/Application/Views/Desktop/top_left.php +++ /dev/null @@ -1,190 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » ">Hardware » -
              - - action,'view') === 0) { ?> - - - -
              - - - - - - - "> - - - - - - "> - - - - - - "> - - - - "> - - -
              -
              device
              - - "> | - - ">view details -
              -
              -
              -
              - -
              - - -
              - controller);?> -
              - - - - - - - - action,'catalogue') === 0) { ?> - -
              - controller);?> -
              - - - - - - action,'history') === 0) { ?> - -
              - - controller).' '.$ne_name.'';?> -
              - - - - action,'differences') === 0) { ?> - - -
              - , getUser($updated_by));?>, -
              - - - - - action,'climb') === 0) { ?> - -
              - Make current this revision of the controller).' '.$ne_name.'';?> -
              - - - - action,'revision') === 0) { ?> - -
              - - controller).' '.$ne_name.'';?> -
              - - - - action,'insert') === 0) { ?> - -
              - - controller);?> -
              - - - - action,'update') === 0) { ?> - -
              - - controller).' '.$ne_name.'';?> -
              - - - - action,'talk') === 0) { ?> - -
              - - controller).' '.$ne_name.'';?> -
              - - - - \ No newline at end of file diff --git a/h-source/Application/Views/Desktop/wiki_page.php b/h-source/Application/Views/Desktop/wiki_page.php deleted file mode 100644 index 48f7b96..0000000 --- a/h-source/Application/Views/Desktop/wiki_page.php +++ /dev/null @@ -1,153 +0,0 @@ - -. -?> - -
              - - action,'page') === 0 ? 'wiki' : 'wiki_revisions'; - $displayClass = ($isDeleted) ? 'display_none' : null; - ?> - - action,'page') === 0 ) { ?> - -
              - ">Home » ">Wiki » -
              - - - -
              - - - - "> - - - - "> - - - - -
              - - "> - - - - "> - - - - -
              -
              page
              - - "> | - - ">view details -
              -
              - -
              - - - - - -
              - ">: -
              - - - action,'revision') === 0 ) { ?> - -
              - ">Home » -
              - -
              - -
              - - - - - -
              - - - - - action,'revision') === 0) { ?> -
              - getLinkToUserFromId($created_by);?> . . -
              - - - -
              - - action,'page') === 0 ) { ?> - - - - -
              -
              - -
              - - - - -
              - - -
              - -
              - diff --git a/h-source/Application/Views/Desktop/xml_response.php b/h-source/Application/Views/Desktop/xml_response.php deleted file mode 100644 index 2c51b88..0000000 --- a/h-source/Application/Views/Desktop/xml_response.php +++ /dev/null @@ -1,28 +0,0 @@ - -\n";?> - - - - ]]> - - - -. -?> diff --git a/h-source/Application/Views/Mobile/Contact/index.php b/h-source/Application/Views/Mobile/Contact/index.php deleted file mode 100644 index 20faef1..0000000 --- a/h-source/Application/Views/Mobile/Contact/index.php +++ /dev/null @@ -1,41 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » contact -
              - -
              - -
              - You can suggest to implement new features or add new types of hardware in the ">issues page -
              - -
              - Discussions about also take place on the h-source-users mailing list and #h-node libera.chat IRC channel. -
              - -
              - -
              diff --git a/h-source/Application/Views/Mobile/Contact/index_de.php b/h-source/Application/Views/Mobile/Contact/index_de.php deleted file mode 100644 index cb273af..0000000 --- a/h-source/Application/Views/Mobile/Contact/index_de.php +++ /dev/null @@ -1,41 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » contact -
              - -
              - -
              - Sie können neu zu implementierende Funktionen vorschlagen oder neue Hardware-Typen in der Seite ">Web-Log hinzufügen -
              - -
              - Wenn Sie das h-node-Team direkt kontaktieren möchten: info@h-node.com -
              - -
              - -
              diff --git a/h-source/Application/Views/Mobile/Contact/index_es.php b/h-source/Application/Views/Mobile/Contact/index_es.php deleted file mode 100644 index 8c79aa8..0000000 --- a/h-source/Application/Views/Mobile/Contact/index_es.php +++ /dev/null @@ -1,41 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » contact -
              - -
              - -
              - Puede sugerir el implementar nuevas caracteriticas o agregar nuevo hardware en la página de ">incidencias -
              - -
              - Si desea contactar directamente al equipo de use esta dirección de correo electronico: info@h-node.com -
              - -
              - -
              diff --git a/h-source/Application/Views/Mobile/Contact/index_fr.php b/h-source/Application/Views/Mobile/Contact/index_fr.php deleted file mode 100644 index 2b2b7dd..0000000 --- a/h-source/Application/Views/Mobile/Contact/index_fr.php +++ /dev/null @@ -1,41 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » contact -
              - -
              - -
              - Vous pouvez suggérez l’implémentation de nouvelles fonctionnalitée ou l’ajout d’un nouveau type de matériel dans la page ">problème. -
              - -
              - Si vous voulez contatez directement l’équipe , utilisez cette adresse mail : info@h-node.com -
              - -
              - -
              diff --git a/h-source/Application/Views/Mobile/Contact/index_gr.php b/h-source/Application/Views/Mobile/Contact/index_gr.php deleted file mode 100644 index 069d14d..0000000 --- a/h-source/Application/Views/Mobile/Contact/index_gr.php +++ /dev/null @@ -1,41 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » contact -
              - -
              - -
              - Μπορείτε να εισηγηθείτε την υλοποίηση νέων χαρακτηριστικών ή την προσθήκη νέων τύπων υλικού (hardware) στην ιστοσελίδα ">issues -
              - -
              - Αν θέλετε να έρθετε σε άμεση επαφή με την ομάδα του , χρησιμοποιείστε αυτή την ηλεκτρονική διεύθυνση: info@h-node.com -
              - -
              - -
              diff --git a/h-source/Application/Views/Mobile/Contact/index_it.php b/h-source/Application/Views/Mobile/Contact/index_it.php deleted file mode 100644 index d96d767..0000000 --- a/h-source/Application/Views/Mobile/Contact/index_it.php +++ /dev/null @@ -1,41 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » contact -
              - -
              - -
              - Potete suggerire nuove caratteristiche da implementare o aggiungere nuovi tipi di hardware nella pagina ">issues -
              - -
              - Se volete direttamente contattare il team di potete farlo a questo indirizzo e-mail: info@h-node.com -
              - -
              - -
              diff --git a/h-source/Application/Views/Mobile/Credits/index.php b/h-source/Application/Views/Mobile/Credits/index.php deleted file mode 100644 index c54f231..0000000 --- a/h-source/Application/Views/Mobile/Credits/index.php +++ /dev/null @@ -1,65 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » credits -
              - -
              - -
              - Icons: -
              - -
              - The icons used inside are taken from the ACUN Simgeleri 0.7 icon theme and from the H2O Icon Theme 0.0.5, both licensed under the GNU GPL license, from the Crystal Projects icons, licensed under the LGPL, from the glaze icons set (LGPL) and from the DarkGlass_Reworked icons theme (GPL). The flag icons are taken from the FAMFAMFAM flag icons set (Public Domain). -
              - -
              - jQuery: -
              - -
              - The jQuery, the jQuery UI and the jQuery Mobile javascript libraries (licensed under MIT/GPL) have been used through the website -
              - -
              - markitup: -
              - -
              - The markitup jQuery plugin (licensed under MIT/GPL) has been used in order to help the user to insert wiki tags -
              - -
              - php diff algorithm: -
              - -
              - This algorithm (licensed under the zlib free license) has been used in order to highlight the differences between two different revisions of the same hardware model. -
              - -
              - -
              diff --git a/h-source/Application/Views/Mobile/Credits/index_es.php b/h-source/Application/Views/Mobile/Credits/index_es.php deleted file mode 100644 index 3be6fbf..0000000 --- a/h-source/Application/Views/Mobile/Credits/index_es.php +++ /dev/null @@ -1,65 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » credits -
              - -
              - -
              - Iconos: -
              - -
              - Los iconos usados dentro de son tomados de el tema de iconos ACUN Simgeleri 0.7 y de H2O Icon Theme 0.0.5, ambos licenciados bajo la licencia GNU GPL, de Crystal Projects, licenciado bajo la LGPL, de glaze icons set (LGPL) y de DarkGlass_Reworked icons theme (GPL). Los iconos de las banderas son tomados la colección de iconos de banderas FAMFAMFAM (Dominio Público) -
              - -
              - jQuery: -
              - -
              - Las bibliotecas javascript jQuery, jQuery UI y jQuery Mobile (licenciadas bajo MIT/GPL) han sido usadas en el sitio -
              - -
              - markitup: -
              - -
              - El complemento markitup jQuery (licenciado bajo MIT/GPL) ha sido usado en orden de ayudar al usuario a insertar etiquetas wiki -
              - -
              - php diff algorithm: -
              - -
              - Este algoritmo (licenciado bajo la licencia libre de zlib) ha sido usado en orden de remarcar las diferencias entre dos diferentes revisiones del mismo modelo de hardware. -
              - -
              - -
              diff --git a/h-source/Application/Views/Mobile/Credits/index_fr.php b/h-source/Application/Views/Mobile/Credits/index_fr.php deleted file mode 100644 index 022aa70..0000000 --- a/h-source/Application/Views/Mobile/Credits/index_fr.php +++ /dev/null @@ -1,63 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » credits -
              - -
              - -
              - Icons: -
              - -
              - Les icones utilisées sur sont tirées du thème ACUN Simgeleri 0.7 et du thème H2O Icon Theme 0.0.5, les deux sont licensée sous license GPL, d’autres sont aussi tirée des thèmes Crystal Projects (LGPL), glaze icons set (LGPL), DarkGlass_Reworked icons theme (GPL). Les icones de drapeau sont tirés du thème FAMFAMFAM flag icons set distribué dans le domaine publique. -
              - -
              - jQuery: -
              - -
              - jQuery , jQuery UI et la librairie javascript jQuery Mobile (licensé sous MIT/GPL) sont utilisés sur le site. -
              - -
              - markitup: -
              - -
              - Le plugin jQuery markitup (licensé sous MIT/GPL) a été utilisé afin d’aider les utilisateurs à insérer des tags wiki. -
              - -
              - Algorithme diff php: -
              - -
              - Cet algorithme (Licensé sous license libre zlib) a été utiliser afin de souligner les différences entre deux révisions d’un même modèle matériel. -
              - -
              - -
              diff --git a/h-source/Application/Views/Mobile/Credits/index_gr.php b/h-source/Application/Views/Mobile/Credits/index_gr.php deleted file mode 100644 index 424ded1..0000000 --- a/h-source/Application/Views/Mobile/Credits/index_gr.php +++ /dev/null @@ -1,65 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » credits -
              - -
              - -
              - Εικόνες: -
              - -
              - Οι εικόνες που χρησιμοποιούνται μέσα στο πάρθηκαν από το θέμα εικόνας ACUN Simgeleri 0.7 και από το H2O Icon Theme 0.0.5, που είναι αδειοδοτημένα και τα δύο υπό την Άδεια GNU GPL, από τις εικόνες Crystal Projects, που είναι αδειοδοτημένες υπό την LGPL, από το glaze icons set (LGPL) και από το DarkGlass_Reworked icons theme (GPL). Οι εικόνες flag πάρθηκαν από το FAMFAMFAM flag icons set (Public Domain). -
              - -
              - jQuery: -
              - -
              - Σε όλο τον ιστότοπο χρησιμοποιήθηκαν οι βιβλιοθήκες javascript jQuery και η jQuery UI (που αδειοδοτούνται υπό την MIT/GPL). -
              - -
              - markitup: -
              - -
              - Χρησιμοποιήθηκε το markitup jQuery plugin (που αδειοδοτείται υπό την MIT/GPL), για να βοηθηθεί ο χρήστης να εισαγάγει wiki tags -
              - -
              - php diff algorithm: -
              - -
              - Χρησιμοποιήθηκε ο αλγόριθμος This algorithm (που αδειοδοτείται υπό την ελεύθερη άδεια zlib), για να αναδειχθούν οι διαφορές ανάμεσα στις δύο διαφορετικές αναθεωρήσεις του ίδιου μοντέλου υλικού (hadrware). -
              - -
              - -
              diff --git a/h-source/Application/Views/Mobile/Credits/index_it.php b/h-source/Application/Views/Mobile/Credits/index_it.php deleted file mode 100644 index 6b1a512..0000000 --- a/h-source/Application/Views/Mobile/Credits/index_it.php +++ /dev/null @@ -1,66 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » credits -
              - -
              - -
              - Icone: -
              - -
              - Le icone utilizzate nel sito h-node.com appartengono ai temi di icone ACUN Simgeleri 0.7 e H2O Icon Theme 0.0.5, entrambi sotto licenza GNU GPL, e al tema Crystal Projects, sotto licenza LGPL, al set di icone glaze (LGPL) e al tema DarkGlass_Reworked (GPL). Le icone bandiere derivano dal set di icone FAMFAMFAM (Public Domain). -
              - - -
              - jQuery: -
              - -
              - Le librerie javascript jQuery , jQuery UI e jQuery Mobile (sotto licenza MIT/GPL) sono state usate nel sito -
              - -
              - markitup: -
              - -
              - Il plugin jQuery markitup (sotto licenza MIT/GPL) è stato usato per aiutare gli utenti a inserire i tag della wiki
              - -
              - Algoritmo php diff: -
              - -
              - Questo algoritmo (sotto licenza libera zlib) è stato usato per sottolineare la differenza tra due diverse revisioni dello stesso modello di hardware. -
              - - -
              - -
              diff --git a/h-source/Application/Views/Mobile/Hardware/left.php b/h-source/Application/Views/Mobile/Hardware/left.php deleted file mode 100644 index d0c17b9..0000000 --- a/h-source/Application/Views/Mobile/Hardware/left.php +++ /dev/null @@ -1,127 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » Hardware -
              - - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Mobile/Home/left.php b/h-source/Application/Views/Mobile/Home/left.php deleted file mode 100644 index b4ec21e..0000000 --- a/h-source/Application/Views/Mobile/Home/left.php +++ /dev/null @@ -1,87 +0,0 @@ - - -. -?> - -
              - -
              - Home -
              - - - -
              -
              - Objectives: -
              -
              - The project aims at the construction of a hardware database in order to identify what devices work with a fully free operating system. The website is structured like a wiki in which all the users can modify or insert new contents. The h-node project is developed in collaboration and as an activity of the FSF. -
              - -
              - Contribute: -
              -
              - You can contribute by creating an account at and editing its user-generated contents. All your modification will be saved in the history of the product you are editing/adding. Each revision (the current one or the old ones) will be marked by the name of the user who created it.
              You can also contribute by suggesting new hardware that should be added to the database or features that should be implemented. -
              - -
              - Free software: -
              -
              - - - In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: - -

              1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

              - -

              2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

              - -

              h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

              -
              - -
              - License: -
              -
              - Any text submitted by you will be put in the Public Domain (see the CC0 page for detailed information). Anyone is free to copy, modify, publish, use, sell, or distribute the text you have submitted to h-node.org, for any purpose, commercial or non-commercial, and by any means. -
              - -
              - Other resources on the net: -
              -
              -

              Here is a list of other archives collecting information about hardware working with free software:

              - -
              - -
              - About the website: -
              -
              - The has to be considered in beta version. It is constantly growing and many features have not been implemented yet (for example new hardware devices have to be inserted in the database). Some problems may occur: if you find out a bug please add an issue ">here with the topic maybe a bug. -
              -
              -
              diff --git a/h-source/Application/Views/Mobile/Home/left_de.php b/h-source/Application/Views/Mobile/Home/left_de.php deleted file mode 100644 index 75467ea..0000000 --- a/h-source/Application/Views/Mobile/Home/left_de.php +++ /dev/null @@ -1,86 +0,0 @@ - - -. -?> - -
              - -
              - Home -
              - - - -
              -
              - Ziele: -
              -
              - Mit dem Projekt soll eine Hardwaredatenbank mit Peripheriegeräten aufgebaut werdem, die mit einem vollständig freien Betriebssystem arbeiten. Die Webseite von h-node.org ist wie ein Wiki aufgebaut, dessen Inhalte von allen Benutzer geändert und ergänzt werden können. Das Projekt h-node wird in Zusammenarbeit und als eine Aktivität der FSF entwickelt. -
              - -
              - Mithelfen: -
              -
              - Sie können nach Ihrer Anmeldung bei h-node.org dazu beitragen und die benutzergenerierten Inhalte bearbeiten. Alle Änderungen die Sie bearbeiten oder hinzufügen, werden im Produktverlauf protokolliert. Jede Version (die aktuelle oder die alte) wird der/dem BenutzerIn zugeordnet, die/der sie erstellte.
              - Neue Hardware, die in die Datenbank aufgenommen, oder neue Funktionen, die hinzugefügt werden sollten, können Sie ebenfalls vorschlagen. -
              - -
              - Freie Software: -
              -
              - In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: - -

              1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

              - -

              2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

              - -

              h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

              -
              - -
              - Lizenz: -
              -
              - Jeder von Ihnen übermittelte Text wird in die Gemeinfreiheit („Public Domain“) entlassen (siehe CC0 1.0 Universell (CC0 1.0) für detaillierte Informationen). Jede Person darf das Werk/den Inhalt, den Sie an h-node.org übermittelt haben, kopieren, verändern, verbreiten und aufführen, sogar zu kommerziellen Zwecken, ohne um weitere Erlaubnis bitten zu müssen und auf jedem Medium. -
              - -
              - Weitere Ressourcen im Internet: -
              -
              -

              Weitere Archive mit gesammelten Informationen über Hardware, die mit Freie Software arbeitet:

              - -
              - -
              - Über h-node.org: -
              -
              - h-node muss als im Beta-Stadium betrachtet werden. Es wird ständig ergänzt haben und viele Funktionen wurden noch nicht implementiert (z. B. müssen neue Hardware-Geräte in die Datenbank eingepflegt werden). Es können Probleme auftreten: Wenn Sie einen Fehler finden, melden Sie diesen bitte im ">Web-Log mit dem Thema evtl. ein Fehler. -
              -
              -
              diff --git a/h-source/Application/Views/Mobile/Home/left_es.php b/h-source/Application/Views/Mobile/Home/left_es.php deleted file mode 100644 index 4b310c7..0000000 --- a/h-source/Application/Views/Mobile/Home/left_es.php +++ /dev/null @@ -1,86 +0,0 @@ - - -. -?> - -
              - -
              - Home -
              - - - -
              -
              - Objetivos: -
              -
              - El proyecto tiene como meta la construcción de una base de datos de todo el hardware de manera que se pueda identificar que dispositivos funcionan con un sistema operativo completamente libre. El sitio esta estructurado como un wiki, en el cual todos los usuarios pueden modificar o integrar nuevos contenidos. El proyecto h-node es desarrollado en colaboración y como una actividad de la FSF. -
              - -
              - Contribuir: -
              -
              - Puede contribuir creando una cuenta en y editar los contenidos generados. Todas sus modificaciones serás guardadas en el historial del producto que edite/agregue. Cada revisión (actual o previa) será marcada con el nombre del usuario que la creo.
              También puede contribuir al sugerir nuevo hardware que deba ser agregado a la base de datos o características que deberían ser implementadas. -
              - -
              - Software Libre: -
              -
              - In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: - -

              1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

              - -

              2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

              - -

              h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

              -
              - -
              - Licencias: -
              -
              - Cualquier texto agregado por usted sera colocado en Dominio Publico (vea la página CC0 para información detallada). Cualquiera es libre de copiar, modificar, publicar, usar, vender o distribuir el texto que ha integrado a h-node.org, para cualquier propósito, comercial o no comercial, y por cualquier método. -
              - -
              - Otros recursos en la red: -
              -
              -

              Aquí una lista de otras actividades recolectando información acerca de hardware funcionando con software libre:

              - -
              - -
              - Acerca del sitio : -
              -
              - El sitio debe ser considerado una versión beta. Esta en constantemente crecimiento y varias características no han sido implementadas aun (por ejemplo, nuevos dispositivos de hardware tienen que ser incluidos en la base de datos). Algunos problemas pueden ocurrir: Si encuentra un error por favor agregue una incidencia ">aquí bajo el tema maybe a bug. -
              -
              - -
              diff --git a/h-source/Application/Views/Mobile/Home/left_fr.php b/h-source/Application/Views/Mobile/Home/left_fr.php deleted file mode 100644 index f68a53f..0000000 --- a/h-source/Application/Views/Mobile/Home/left_fr.php +++ /dev/null @@ -1,88 +0,0 @@ - - -. -?> - -
              - -
              - Home -
              - - - -
              -
              - Objectifs: -
              - -
              - Le but du projet h-node est de créer une base de données de matériel afin d'identifier les dispositifs qui fonctionne avec un système d’exploitation entièrement libre. Le site h-node est structuré comme un wiki, dont tout les utilisateurs peuvent modifier ou insérer des contenus. Le projet h-node est dévellopé en collaboration et en tant qu'activitée de la FSF. -
              - -
              - Contribution: -
              -
              - Vous pouvez contribuer en créant un compte sur h-node et modifier le contenus créé par les utilisateurs. Toutes vos modifications seront enregistrées dans l’historique de l’élément que vous modifiez ou ajouter. Toutes versions (l’actuelle ou les précédentes) seront marquées au nom de l’utilisateur qui les a crées.
              Vous pouvez aussi contribuer en suggérant un autre type de matériel qui devrais être ajouté à la base de données ou une nouvelle fonctionnalitée qui devrais être implémentée -
              - -
              - Logiciel libre: -
              -
              - In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: - -

              1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

              - -

              2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

              - -

              h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

              -
              - -
              - License: -
              - -
              - Tout les textes que vous publierez sur le site seront dans le Domain public (Consultez la page CC0 pour plus d'informations). Tout un chacun est autorisé à copier, modifier, publier, utiliser, vendre ou distribuer le texte que vous avez envoyé sur h-node.org, pour quelque utilisation que ce soit et par tout les moyens. -
              - -
              - Ressource supplémentaire sur Internet: -
              -
              -

              Voici une liste d'autres archives qui collecte des informations à propos du matériel fonctionnant avec du logiciel libre:

              - -
              - -
              - A propos du site : -
              -
              - Le site doit être considéré comme en version beta, il s’aggrandit constamment et beaucoup de fonctionnalitée n’ont pas encore été implémentée ( par exemple, de nouveau type d’appareil doivent être ajouter dans la base de données) . Des problèmes peuvent arriver, si vous trouver un bug, merci de remplir un ">ticket bug (maybe a bug). -
              -
              - -
              diff --git a/h-source/Application/Views/Mobile/Home/left_gr.php b/h-source/Application/Views/Mobile/Home/left_gr.php deleted file mode 100644 index 5e15b4c..0000000 --- a/h-source/Application/Views/Mobile/Home/left_gr.php +++ /dev/null @@ -1,87 +0,0 @@ - - -. -?> - -
              - -
              - Home -
              - - - -
              -
              - Σκοποί: -
              -
              - - Το project έχει ως σκοπό την κατασκευή μίας βάσης δεδομένων υλικού, έτσι ώστε να μπορεί να εντοπισθεί ποιες συσκευές δουλεύουν με ένα πλήρως ελεύθερο Λειτουργικό Σύστημα. Ο ιστότοπος είναι δομημένος σαν ένα wiki, εντός του οποίου όλοι οι χρήστες μπορούν να τροποποιούν ή να εισαγάγουν νέα περιεχόμενα. Το h-node project αναπτύχθηκε σε συνεργασία με και σαν δραστηριότητα του FSF. -
              - -
              - Συνεισφέρετε: -
              -
              - Μπορείτε να συνεισφέρετε φτιάχνοντας έναν λογαριασμό στο και τροποποιώντας τα περιεχόμενα που δημιούργησαν οι ίδιοι οι χρήστες. Όλες σας οι τροποποιήσεις θα αποθηκεύονται στο ιστορικό του προϊόντος το οποίο επεξεργάζεσθε/εμπλουτίζετε. Κάθε αναθεώρηση (τόσο η τρέχουσα όσο και οι παλιές) θα επισημαίνεται με το όνομα του χρήστη που την δημιούργησε. Μπορείτε, επίσης, να συνεισφέρετε προτείνοντας νέο υλικό που θα έπρεπε να προστεθεί στη βάση δεδομένων, ή εισηγούμενοι χαρακτηριστικά που θα έπρεπε να υλοποιηθούν. -
              - -
              - Ελεύθερο Λογισμικό -
              -
              - - In order to add a device to the h-node database, you must verify that it works using only free software. For this purpose, you must be running either: - -

              1) A GNU/Linux distribution that is on the FSF's list of endorsed distributions

              - -

              2) Debian GNU/Linux, with only the main archive area enabled. The "contrib" and "non-free" areas must not be enabled when testing hardware. Double-check this by running apt-cache policy. The only package archive area mentioned in the output should be main.

              - -

              h-node lists only hardware that works with free drivers and without non-free firmware. Other GNU/Linux distributions (or Debian with contrib, non-free, or some 3rd-party archives enabled) include non-free firmware files, so they cannot be used for testing.

              -
              - -
              - Άδεια: -
              -
              - Οποιοδήποτε κείμενο που υποβάλετε, θα μπαίνει σε Δημόσια Διάθεση/Public Domain (δείτε τη σελίδα CC0 page για πιο λεπτομερείς πληροφορίες). Οποιοσδήποτε είναι ελεύθερος να αντιγράφει, να τροποποιεί, να δημοσιεύει, να χρησιμοποιεί, να πωλεί, ή και να ανδιανέμει το κείμενο που εσείς υποβάλλατε στο h-node.com, για οποιοδήποτε λόγο, εμπορικό ή μη-εμπορικό, και με οποιονδήποτε τρόπο. -
              - -
              - Άλλοι πόροι στο Διαδίκτυο: -
              -
              -

              Ακολουθεί, εδώ, ένας κατάλογος άλλων αρχείων που συγκεντρώνουν πληροφορίες σχετικά με υλικό που δουλεύει με ελεύθερο λογισμικό:

              - -
              - -
              - Σχετικά με τον ιστότοπο : -
              -
              - Το πρέπει να θεωρείται πως βρίκεται σε έκδοση beta. Αναπτύσσεται συνεχώς και πολλά χαρακτηριστικά δεν έχουν ακόμη υλοποιηθεί (π.χ. πρέπει ακόμη να προστεθούν νέες συσκευές υλικού στη βάση δεδομένων). Μπορεί να παρατηρηθούν ορισμένα προβλήματα: αν εντοπίσετε ένα σφάλμα (bug), παρακαλώ προσθέστε μία αναφορά προβλήματος ">εδώ με θέμα ίσως να πρόκειται για ένα bug. -
              -
              -
              diff --git a/h-source/Application/Views/Mobile/Home/left_it.php b/h-source/Application/Views/Mobile/Home/left_it.php deleted file mode 100644 index dc9a6bb..0000000 --- a/h-source/Application/Views/Mobile/Home/left_it.php +++ /dev/null @@ -1,88 +0,0 @@ - - -. -?> - -
              - -
              - Home -
              - - - -
              -
              - Obiettivi: -
              - -
              - Il progetto h-node mira alla costruzione di un database di hardware allo scopo di identificare quali dispositivi funzionino con un sistema operativo completamente libero. Il sito h-node.org è strutturato come una wiki in cui tutti gli utenti possono inserire nuovi contenuti o modificare i contenuti già presenti. Il progetto h-node è sviluppato in collaborazione e come attività della FSF. -
              - -
              - Contribuire: -
              -
              - Puoi contribuire creandoti un account su h-node.org e modificando i suoi contenuti generati dagli utenti. Tutte le tue modifiche saranno salvate nella storia del prodotto che stai modificando/aggiungendo. Ogni revisione (quella attuale o le precedenti) sarà contrassegnata col nome dell'utente che l'ha creata.
              Puoi inoltre contribuire suggerendo del nuovo hardware da aggiungere al database o delle caratteristiche da implementare. -
              - -
              - Software libero: -
              -
              - Per poter aggiungere un dispositivo nel database di h-node, devi verificare che funzioni usando solo software libero. Per questo scopo, puoi unicamente utilizzare: - -

              1) Una delle distribuzioni GNU/Linux elencate nella lista delle distribuzioni approvate dalla FSF

              - -

              2) Debian GNU/Linux, con solo la zona archivio main attivata. Le aree "contrib" e "non-free" non devono essere abilitate durante il test dell'hardware. Controlla che sia così lanciando apt-cache policy. La sola zona archivio dei pacchetti deve essere main.

              - -

              h-node elenca solo hardware che funziona con driver liberi e senza firmware non libero. Le altre distribuzioni GNU/Linux (oppure Debian con contrib, non-free, o archivi di terze parti abilitati) includono file di firmware non liberi, quindi non possono essere utilizzate per i test.

              -
              - -
              - Licenza: -
              - -
              - Qualsiasi testo da te inserito diventerà di Pubblico Dominio (visita la pagina CC0 per informazioni dettagliate). Chiunque è libero di copiare, modificare, pubblicare, usare, vendere o distribuire il testo che hai inserito su h-node.org, per qualsiasi fine, commerciale o non commerciale, e con ogni mezzo. -
              - -
              - Altre risorse in rete: -
              -
              -

              Di seguito una lista di altri archivi contenenti informazioni sull' hardware funzionante con software libero:

              - -
              - -
              - A proposito del sito : -
              -
              - deve essere considerato una versione beta. E' in costante sviluppo e molte caratteristiche non sono ancora state implementate (per esempio nuovi dispositivi hardware devono essere aggiunti al database). Potrebbero esserci dei problemi: se scopri un bug per favore invia una segnalazione ">qui con l'argomento maybe a bug. -
              -
              - -
              diff --git a/h-source/Application/Views/Mobile/Notebooks/page.php b/h-source/Application/Views/Mobile/Notebooks/page.php deleted file mode 100644 index c7cafef..0000000 --- a/h-source/Application/Views/Mobile/Notebooks/page.php +++ /dev/null @@ -1,119 +0,0 @@ - - -. -?> - - - - action,'view') === 0) ? 'hardware' : 'revisions'; - $displayClass = ($isDeleted and $isadmin) ? 'display_none' : null; - ?> - - -
              - - - action,'revision') === 0) { ?> -
              - getLinkToUserFromId($updated_by);?> . controller."/view/$lang/$id_hard/".$name.$this->viewStatus;?>">. -
              - - -

              - -

              - -
              (: )
              - -
              -
              (, , , ):
              -
              -
              - -
              -
              :
              -
              -
              - -
              -
              :
              -
              -
              - -
              -
              -
              -
              - -
              -
              -
              (".gtext("see the details inside the description entry").")";?>
              -
              - -
              -
              -
              (".gtext("see the details inside the description entry").")";?>
              -
              - -
              -
              :
              -
              -
              - -
              -
              :
              -
              -
              - -
              -
              :
              -
              -
              - -
              -
              :
              -
              ",explode(',',$item[$tableName]['kernel']));?>
              -
              - -
              -
              :
              -
              ()
              -
              - -
              -
              :
              -
              ()
              -
              - -
              -
              :
              -
              ()
              -
              - - -

              -
              - - -
              - - - \ No newline at end of file diff --git a/h-source/Application/Views/Mobile/Project/index.php b/h-source/Application/Views/Mobile/Project/index.php deleted file mode 100644 index c194a3b..0000000 --- a/h-source/Application/Views/Mobile/Project/index.php +++ /dev/null @@ -1,50 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » h-project -
              - -
              - -
              - Why: -
              - -
              - The h-node project has been created to help the free software movement by creating an archive of all the hardware that can work with a fully free operating system. -
              - -
              - Who: -
              - -
              - Antonio Gallo (tonicucoz">tonicucoz), h-node.com source code developer, Giulia Fanin (Julia">Julia), designer of the website layout and icons (thanks for your advice and support), Luis Alberto Guzman Garcia (Ark74">Ark74), member of the Spanish translation team (thanks for all of your useful ideas and suggestions), Henri (Hardisk">Hardisk), member of the French translation team, Joerg Kohne (joeko">joeko), member of the German translation team, Benjamin Rochefort (oysterboy">oysterboy), member of the French translation team, Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. -
              Also thanks to all of you who have believed in the project since it was born and to all of you who gave, give and will give their contribution. -
              - -
              - -
              diff --git a/h-source/Application/Views/Mobile/Project/index_de.php b/h-source/Application/Views/Mobile/Project/index_de.php deleted file mode 100644 index ea32f1f..0000000 --- a/h-source/Application/Views/Mobile/Project/index_de.php +++ /dev/null @@ -1,51 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » h-project -
              - -
              - -
              - Warum: -
              - -
              - Das Projekt „h-node“ wurde ins Leben gerufen, um für die Freie-Software-Bewegung ein umfassendes Hardware-Archiv für vollkommen Freie Betriebssysteme aufzubauen. -
              - -
              - Wer: -
              - -
              - Antonio Gallo (tonicucoz">tonicucoz), h-node.com source code developer, Giulia Fanin (Julia">Julia), Designer des Website-Layout und Symbole (Danke für die Ratschläge und Unterstützung), Luis Alberto Guzman Garcia (Ark74">Ark74), Mitglied des spanischen Übersetzungsteams (Danke für all die Ideen und nützlichen Anregungen), Henri (Hardisk">Hardisk), Mitglied des französischen Übersetzungsteams, Joerg Kohne (joeko">joeko), Mitglied des deutschen Übersetzungsteams, Benjamin Rochefort (oysterboy">oysterboy), Mitglied des französischen Übersetzungsteams, , Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. -
              - Vielen Dank auch an alle, die an das Projekt, seit es ins Leben gerufen wurde, geglaubt haben und an alle, die ihren Beitrag geleistet haben, leisten und leisten werden. -
              - -
              - -
              diff --git a/h-source/Application/Views/Mobile/Project/index_es.php b/h-source/Application/Views/Mobile/Project/index_es.php deleted file mode 100644 index 1520ae5..0000000 --- a/h-source/Application/Views/Mobile/Project/index_es.php +++ /dev/null @@ -1,51 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » h-project -
              - -
              - -
              - Por que: -
              - -
              - El proyecto h-node ha sido creado para ayudar al movimiento de software libre al crear un archivo de todo el hardware que puede funcionar con un sistema operativo completamente libre. -
              - -
              - Quien: -
              - -
              - Antonio Gallo (tonicucoz">tonicucoz), h-node.com source code developer, Giulia Fanin (Julia">Julia), diseñadora del tema e iconos del sitio, (gracias por su consejo y apoyo), Luis Alberto Guzman Garcia (Ark74">Ark74), miembro del equipo de traducción al Español (gracias por sus útiles ideas y sugerencias), Henri (Hardisk">Hardisk), miembro del equipo de traducción al Francés, Joerg Kohne (joeko">joeko), miembro del equipo de traducción al Alemán, Benjamin Rochefort (oysterboy">oysterboy), miembro del equipo de traducción al Francés, , Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. -
              - También gracias a todos aquellos que han creído en el proyecto desde que nació y a todos aquellos que dieron, dan y darán su contribución. -
              - -
              - -
              diff --git a/h-source/Application/Views/Mobile/Project/index_fr.php b/h-source/Application/Views/Mobile/Project/index_fr.php deleted file mode 100644 index 90e3706..0000000 --- a/h-source/Application/Views/Mobile/Project/index_fr.php +++ /dev/null @@ -1,50 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » h-project -
              - -
              - -
              - Pourquoi: -
              - -
              - Le projet h-node a été créer pour aider le mouvement du logiciel libre en créant une archive de matériel fonctionnel avec des systèmes entièrement libres. -
              - -
              - Qui: -
              - -
              - Antonio Gallo (tonicucoz">tonicucoz), h-node.com source code developer, Giulia Fanin (Julia">Julia), graphiste du site et des icones (merci pour tes conseils et ton support), Luis Alberto Guzman Garcia (Ark74">Ark74), membre de l’équipe de traduction espagnole (merci pour toutes vos bonnes idée et suggestion), Henri (Hardisk">Hardisk), membre de l’équipe de traduction française, Joerg Kohne (joeko">joeko), membre de l’équipe de traduction allemande, Benjamin Rochefort (oysterboy">oysterboy), membre de l’équipe de traduction française, Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. -
              Remerciement également à tout ceux qui ont crus à ce projet depuis sa naissance et à tout ceux qui ont donné, donne ou donnerons leurs contributions. -
              - -
              - -
              diff --git a/h-source/Application/Views/Mobile/Project/index_gr.php b/h-source/Application/Views/Mobile/Project/index_gr.php deleted file mode 100644 index ddcee3f..0000000 --- a/h-source/Application/Views/Mobile/Project/index_gr.php +++ /dev/null @@ -1,50 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » h-project -
              - -
              - -
              - Γιατί: -
              - -
              - Το h-node project στήθηκε για να βοηθήσει το Κίνημα Ελεύθερου Λογισμικού, με τη δημιουργία ενός αρχείου για όλο το υλικό (hardware) που μπορεί να δουλέψει με ένα πλήρως ελεύθερο Λειτουργικό Σύστημα. -
              - -
              - Ποιος: -
              - -
              - Ο Antonio Gallo (tonicucoz">tonicucoz), h-node.com developer πηγαίου κώδικα, η Giulia Fanin (Julia">Julia, designer του layout και των εικόνων αυτού του ιστοτόπου (ευχαριστούμε για τις συμβουλές σου και την υποστήριξή σου), ο Luis Alberto Guzman Garcia (Ark74">Ark74), μέλος της Ισπανικής μεταφραστικής ομάδας (ευχαριστούμε για όλες τις χρήσιμες ιδέες σου και τις προτάσεις σου), ο Henri (Hardisk">Hardisk), μέλος της Γαλλικής μεταφραστικής ομάδας, ο Joerg Kohne (joeko">joeko), μέλος της Γερμανικής μεταφραστικής ομάδας, ο Benjamin Rochefort (oysterboy">oysterboy), μέλος της Γαλλικής μεταφραστικής ομάδας, Kostas Mousafiris (kosmous">kosmous), member of the Greek translation team. -
              Ευχαριστούμε, επίσης, όλους εσάς που πιστέψατε σε αυτό το project από τη γέννησή του, καθώς και όλους εσάς που δώσατε, δίνετε και θα δίνετε την συνεισφορά σας. -
              - -
              - -
              diff --git a/h-source/Application/Views/Mobile/Project/index_it.php b/h-source/Application/Views/Mobile/Project/index_it.php deleted file mode 100644 index 44fb50d..0000000 --- a/h-source/Application/Views/Mobile/Project/index_it.php +++ /dev/null @@ -1,50 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » h-project -
              - -
              - -
              - Why: -
              - -
              - Il progetto h-node è stato creato per aiutare il movimento del software libero creando un archivio di tutto l' hardware che funzioni con un sistema operativo completamente libero. -
              - -
              - Who: -
              - -
              - Antonio Gallo (tonicucoz">tonicucoz), sviluppatore del codice di h-node.com, Giulia Fanin (Julia">Julia), designer del layout del sito e delle icone (grazie per i consigli e il supporto), Luis Alberto Guzman Garcia (Ark74">Ark74), membro del team di traduzione spagnolo (grazie per tutte le idee e gli utili suggerimenti), Henri (Hardisk">Hardisk), membro del team di traduzione francese, Joerg Kohne (joeko">joeko), membro del team di traduzione tedesco, Benjamin Rochefort (oysterboy">oysterboy), membro del team di traduzione francese, , Kostas Mousafiris (kosmous">kosmous), membro del team di traduzione greco. -
              Grazie anche a tutti Voi che avete creduto nel progetto sin dalla sua nascita e a tutti quelli che hanno dato, danno e daranno il loro contributo. -
              - -
              - -
              diff --git a/h-source/Application/Views/Mobile/bottom_left.php b/h-source/Application/Views/Mobile/bottom_left.php deleted file mode 100644 index 545a6ea..0000000 --- a/h-source/Application/Views/Mobile/bottom_left.php +++ /dev/null @@ -1,29 +0,0 @@ - - -. -?> - - action,'talk') !== 0) { ?> -
              - -
              - - -
              \ No newline at end of file diff --git a/h-source/Application/Views/Mobile/catalogue.php b/h-source/Application/Views/Mobile/catalogue.php deleted file mode 100644 index 199d661..0000000 --- a/h-source/Application/Views/Mobile/catalogue.php +++ /dev/null @@ -1,105 +0,0 @@ - - -. -?> - - - -
              -
              " method="GET"> - - - - -
              -
              - - - -
              - ... -
              - - - - - - \ No newline at end of file diff --git a/h-source/Application/Views/Mobile/dialog.php b/h-source/Application/Views/Mobile/dialog.php deleted file mode 100644 index 55225a6..0000000 --- a/h-source/Application/Views/Mobile/dialog.php +++ /dev/null @@ -1,22 +0,0 @@ - - -. -?> - diff --git a/h-source/Application/Views/Mobile/footer.php b/h-source/Application/Views/Mobile/footer.php deleted file mode 100644 index 8a414f2..0000000 --- a/h-source/Application/Views/Mobile/footer.php +++ /dev/null @@ -1,64 +0,0 @@ - - -. -?> - - - -
              - - -
              - -
              -

              -
              - -
              - -
              - -
              -

              -
              -
              - - - diff --git a/h-source/Application/Views/Mobile/header.php b/h-source/Application/Views/Mobile/header.php deleted file mode 100644 index 446f820..0000000 --- a/h-source/Application/Views/Mobile/header.php +++ /dev/null @@ -1,104 +0,0 @@ - - - -. -?> -'inserted','update'=>'updated'); -$currPos = $querySanitized ? $this->controller."/".$this->action : 'home/index'; -?> - - - <?php echo $title;?> - - - - - - - - - - - - - - - - - - - - - - - - -
              - diff --git a/h-source/Application/Views/Mobile/if_page_deleted.php b/h-source/Application/Views/Mobile/if_page_deleted.php deleted file mode 100644 index 932d0dd..0000000 --- a/h-source/Application/Views/Mobile/if_page_deleted.php +++ /dev/null @@ -1,60 +0,0 @@ - - -. -?> - - - -
              -
              -
              - This page has been deleted as requested by: - - getLinkToUserFromId($user);?> - -
              -
              -
              - With the following motivations: -
              -
              - -
              -
              - motivation of getLinkToUserFromId($row['deletion']['created_by']);?>: controller);?> -
              -
              - message: -
              -
              - -
              -
              - - - -
              -
              -
              - -
              -
              - - \ No newline at end of file diff --git a/h-source/Application/Views/Mobile/moderator_dialog.php b/h-source/Application/Views/Mobile/moderator_dialog.php deleted file mode 100644 index 47e9af9..0000000 --- a/h-source/Application/Views/Mobile/moderator_dialog.php +++ /dev/null @@ -1,21 +0,0 @@ - - -. -?> \ No newline at end of file diff --git a/h-source/Application/Views/Mobile/page.php b/h-source/Application/Views/Mobile/page.php deleted file mode 100644 index 9d994b4..0000000 --- a/h-source/Application/Views/Mobile/page.php +++ /dev/null @@ -1,134 +0,0 @@ - - -. -?> - - - - action,'view') === 0) ? 'hardware' : 'revisions'; - $displayClass = ($isDeleted) ? 'display_none' : null; - ?> - - -
              - - - action,'revision') === 0) { ?> -
              - getLinkToUserFromId($updated_by);?> . controller."/view/$lang/$id_hard/".$name.$this->viewStatus;?>">. -
              - - - - - - -

              - -

              - -
              (: )
              - - -
              -
              :
              -
              -
              - - -
              -
              :
              -
              controller);?>
              -
              - - controller,'printers') === 0 or strcmp($this->controller,'hostcontrollers') === 0) { ?> -
              -
              ():
              -
              -
              - - -
              -
              :
              -
              -
              - -
              -
              :
              -
              -
              - -
              -
              :
              -
              -
              - -
              -
              :
              -
              -
              - -
              -
              :
              -
              -
              - -
              -
              :
              -
              ",explode(',',$item[$tableName]['kernel']));?>
              -
              - -
              - controller,'videocards') === 0 ) { ?> -
              :
              - controller,'printers') === 0 ) { ?> -
              :
              - controller,'scanners') === 0 ) { ?> -
              :
              - -
              - -
              -
              - - controller,'printers') === 0 ) { ?> -
              -
              -
              -
              - - -
              -
              :
              -
              -
              - - -

              -
              - - - - -
              - - - \ No newline at end of file diff --git a/h-source/Application/Views/Mobile/right.php b/h-source/Application/Views/Mobile/right.php deleted file mode 100644 index 55225a6..0000000 --- a/h-source/Application/Views/Mobile/right.php +++ /dev/null @@ -1,22 +0,0 @@ - - -. -?> - diff --git a/h-source/Application/Views/Mobile/top_left.php b/h-source/Application/Views/Mobile/top_left.php deleted file mode 100644 index 7bfcf27..0000000 --- a/h-source/Application/Views/Mobile/top_left.php +++ /dev/null @@ -1,43 +0,0 @@ - - -. -?> - -
              - -
              - ">Home » ">Hardware » -
              - - action,'view') === 0) { ?> - - - - - - action,'catalogue') === 0) { ?> - - - - \ No newline at end of file diff --git a/h-source/Application/index.html b/h-source/Application/index.html deleted file mode 100755 index 8d1c8b6..0000000 --- a/h-source/Application/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/COPYRIGHT.txt b/h-source/COPYRIGHT.txt deleted file mode 100755 index 63dbdc9..0000000 --- a/h-source/COPYRIGHT.txt +++ /dev/null @@ -1,24 +0,0 @@ -EasyGiant is a PHP framework for creating and managing dynamic content -Copyright (C) 2009 - 2010 Antonio Gallo - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - - -EasyGiant includes works distributed under the licenses listed below. - -FreeFont -------- -License: GNU GPL version 3 or later -Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -link: http://savannah.gnu.org/projects/freefont/ diff --git a/h-source/Config/Autoload.php b/h-source/Config/Autoload.php deleted file mode 100644 index ee43c13..0000000 --- a/h-source/Config/Autoload.php +++ /dev/null @@ -1,44 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - - -//class containing all the PHP files that have to be loaded at the beginning of the EasyGiant execution -//the files have to be saved in Application/Include -//all the files have to be PHP files!! -class Autoload -{ - - public static $files = array( - 'params.php', - 'distributions.php', - 'myFunctions.php', - 'hardware.php', - 'languages.php', - 'license.php', - 'vendorTranslations.php', - 'wikiFormatting.php', - 'version.php', - ); - -} \ No newline at end of file diff --git a/h-source/Config/Config.php b/h-source/Config/Config.php deleted file mode 100755 index 1290751..0000000 --- a/h-source/Config/Config.php +++ /dev/null @@ -1,58 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - - -define('DB', 'hnode'); -define('USER', 'root'); -define('PWD', ''); -define('HOST', 'localhost'); - -/*default controller name*/ -define('DEFAULT_CONTROLLER','home'); - -/*default action*/ -define('DEFAULT_ACTION','index'); - -/*website parameters*/ -define('DOMAIN_NAME','localhost'); - -/*type of database.*/ -//it can be: Mysql, Mysqli or None (first letter in uppercase) -define('DATABASE_TYPE','Mysqli'); - -/*error controller*/ -/*if you set ERROR_CONTROLLER to false, than EasyGiant will set ERROR_CONTROLLER equal to DEFAULT_CONTROLLER*/ -define('ERROR_CONTROLLER','home'); - -/*error action*/ -/*if you set ERROR_ACTION to false, than EasyGiant will set ERROR_ACTION equal to DEFAULT_ACTION*/ -define('ERROR_ACTION','index'); - -/*charset*/ -// set the charset used by all the functions that manage multi byte strings (mb_string functions, htmlentitites, etc) -define('DEFAULT_CHARSET','UTF-8'); - -/*rewrite settings*/ -//set MOD_REWRITE_MODULE to true if you have installed the mod_rewrite module of the server, otherwise MOD_REWRITE_MODULE to false -define('MOD_REWRITE_MODULE',true); diff --git a/h-source/Config/Reporting.php b/h-source/Config/Reporting.php deleted file mode 100755 index 5a2405f..0000000 --- a/h-source/Config/Reporting.php +++ /dev/null @@ -1,41 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Route -{ - - //controller,action couples that can be reached by the browser - //set 'all' if you want that all the controller,action couples can be reached by the browser - public static $allowed = array( - 'contact,index', - 'credits,index', - 'hardware,catalogue', - 'help,page', - 'faq,page', - 'home,index', - 'image,captcha', - 'issues,viewall', - 'issues,view', - 'my,home', - 'my,password', - 'my,email', - 'my,profile', - 'my,goodbye', - 'notebooks,catalogue', - 'notebooks,view', - 'notebooks,history', - 'notebooks,revision', - 'notebooks,insert', - 'notebooks,update', - 'notebooks,differences', - 'notebooks,climb', - 'notebooks,talk', - 'project,index', - 'users,login', - 'users,logout', - 'users,add', - 'users,confirm', - 'users,change', - 'users,forgot', - 'users,notice', - 'meet,user', - 'meet,contributions', - 'meet,hardware', - 'meet,issues', - 'meet,messages', - 'meet,talk', - 'meet,wiki', - 'meet,wikitalk', - 'wifi,catalogue', - 'wifi,view', - 'wifi,history', - 'wifi,revision', - 'wifi,insert', - 'wifi,update', - 'wifi,differences', - 'wifi,climb', - 'wifi,talk', - 'videocards,catalogue', - 'videocards,view', - 'videocards,history', - 'videocards,revision', - 'videocards,insert', - 'videocards,update', - 'videocards,differences', - 'videocards,climb', - 'videocards,talk', - 'printers,catalogue', - 'printers,view', - 'printers,history', - 'printers,revision', - 'printers,insert', - 'printers,update', - 'printers,differences', - 'printers,climb', - 'printers,talk', - 'scanners,catalogue', - 'scanners,view', - 'scanners,history', - 'scanners,revision', - 'scanners,insert', - 'scanners,update', - 'scanners,differences', - 'scanners,climb', - 'scanners,talk', - 'search,form', - 'search,results', - 'search,pciid', - 'search,lspci', - 'generic,del', - 'generic,cleared', - 'news,index', - 'download,index', - 'download,all', - 'download,notebooks', - 'download,wifi', - 'download,videocards', - 'download,printers', - 'download,scanners', - 'download,threegcards', - 'download,soundcards', - 'download,webcams', - 'download,bluetooth', - 'download,acquisitioncards', - 'download,fingerprintreaders', - 'download,ethernetcards', - 'download,sdcardreaders', - 'download,modems', - 'download,raidadapters', - 'download,hostcontrollers', - 'history,hide', - 'history,show', - 'history,block', - 'history,unblock', - 'history,open', - 'history,close', - 'history,pageblock', - 'history,pageunblock', - 'history,viewall', - 'history,pagehide', - 'history,pageshow', - 'history,devicehide', - 'history,deviceshow', - 'history,deviceapprove', - 'history,deviceclear', - 'history,issuehide', - 'history,issueshow', - 'threegcards,catalogue', - 'threegcards,view', - 'threegcards,history', - 'threegcards,revision', - 'threegcards,insert', - 'threegcards,update', - 'threegcards,differences', - 'threegcards,climb', - 'threegcards,talk', - 'soundcards,catalogue', - 'soundcards,view', - 'soundcards,history', - 'soundcards,revision', - 'soundcards,insert', - 'soundcards,update', - 'soundcards,differences', - 'soundcards,climb', - 'soundcards,talk', - 'webcams,catalogue', - 'webcams,view', - 'webcams,history', - 'webcams,revision', - 'webcams,insert', - 'webcams,update', - 'webcams,differences', - 'webcams,climb', - 'webcams,talk', - 'rss,modifications', - 'rss,statusnet', - 'rss,notapproved', - 'special,modifications', - 'special,modactions', - 'special,adminactions', - 'special,usersactions', - 'special,deleted', - 'special,notapproved', - 'wiki,insert', - 'wiki,update', - 'wiki,page', - 'wiki,history', - 'wiki,revision', - 'wiki,differences', - 'wiki,climb', - 'wiki,talk', - 'wiki,modifications', - 'wiki,pages', - 'wiki,deleted', - 'wiki,blocked', - 'bluetooth,catalogue', - 'bluetooth,view', - 'bluetooth,history', - 'bluetooth,revision', - 'bluetooth,insert', - 'bluetooth,update', - 'bluetooth,differences', - 'bluetooth,climb', - 'bluetooth,talk', - 'client,licenseinfo', - 'client,userinfo', - 'acquisitioncards,catalogue', - 'acquisitioncards,view', - 'acquisitioncards,history', - 'acquisitioncards,revision', - 'acquisitioncards,insert', - 'acquisitioncards,update', - 'acquisitioncards,differences', - 'acquisitioncards,climb', - 'acquisitioncards,talk', - 'fingerprintreaders,catalogue', - 'fingerprintreaders,view', - 'fingerprintreaders,history', - 'fingerprintreaders,revision', - 'fingerprintreaders,insert', - 'fingerprintreaders,update', - 'fingerprintreaders,differences', - 'fingerprintreaders,climb', - 'fingerprintreaders,talk', - 'ethernetcards,catalogue', - 'ethernetcards,view', - 'ethernetcards,history', - 'ethernetcards,revision', - 'ethernetcards,insert', - 'ethernetcards,update', - 'ethernetcards,differences', - 'ethernetcards,climb', - 'ethernetcards,talk', - 'sdcardreaders,catalogue', - 'sdcardreaders,view', - 'sdcardreaders,history', - 'sdcardreaders,revision', - 'sdcardreaders,insert', - 'sdcardreaders,update', - 'sdcardreaders,differences', - 'sdcardreaders,climb', - 'sdcardreaders,talk', - 'modems,catalogue', - 'modems,view', - 'modems,history', - 'modems,revision', - 'modems,insert', - 'modems,update', - 'modems,differences', - 'modems,climb', - 'modems,talk', - 'raidadapters,catalogue', - 'raidadapters,view', - 'raidadapters,history', - 'raidadapters,revision', - 'raidadapters,insert', - 'raidadapters,update', - 'raidadapters,differences', - 'raidadapters,climb', - 'raidadapters,talk', - 'hostcontrollers,catalogue', - 'hostcontrollers,view', - 'hostcontrollers,history', - 'hostcontrollers,revision', - 'hostcontrollers,insert', - 'hostcontrollers,update', - 'hostcontrollers,differences', - 'hostcontrollers,climb', - 'hostcontrollers,talk', - ); - - //it can be 'yes' or 'no' - //set $rewrite to 'yes' if you want that EasyGiant rewrites the URLs according to what specified in $map - public static $rewrite = 'no'; - - //define the urls of your website - //you have to set $rewrite to 'yes' - public static $map = array(); - -} \ No newline at end of file diff --git a/h-source/Credits.txt b/h-source/Credits.txt deleted file mode 100755 index 0e2adb1..0000000 --- a/h-source/Credits.txt +++ /dev/null @@ -1,34 +0,0 @@ -jQuery: -The jQuery JavaScript Library v1.4.2 have been used through the website (see Public/Js/jquery) -http://jquery.com/ -Copyright 2010, John Resig -Dual licensed under the MIT or GPL Version 2 licenses (http://jquery.org/license) -Includes Sizzle.js (http://sizzlejs.com/) -Copyright 2010, The Dojo Foundation -Released under the MIT, BSD, and GPL Licenses. - -jQuery UI 1.8.4 -Copyright 2010 (http://jqueryui.com/about) -Dual licensed under the MIT or GPL Version 2 licenses (http://jquery.org/license) -http://docs.jquery.com/UI - -markitup: -The markitup jQuery plugin (licensed under MIT/GPL) has been used in order to help the user to insert wiki tags (see Public/Js/jquery/markitup) -Copyright (C) 2007-2010 Jay Salvat -Dual licensed under the MIT and GPL licenses. -http://markitup.jaysalvat.com/ - -php diff algoritm: -Paul's Simple Diff Algorithm v 0.1 algorithm (licensed under the zlib free license) has been used in order to highlight the differences between two different revisions of the same hadrware model () -(C) Paul Butler 2007 -May be used and distributed under the zlib/libpng license. - -swiftmailer: -the swiftmailer program has been used to send mail from h-node.com (see the folder external) -© 2009 Chris Corbyn -see http://swiftmailer.org/ -license: GNU LESSER GENERAL PUBLIC LICENSE Version 3, 29 June 2007 - -Icons: -The icons used inside h-node.com are taken from the ACUN Simgeleri 0.7 incon theme (http://kde-look.org/content/show.php/ACUN+Simgeleri?content=83018) and from the H2O Icon Theme 0.0.5 (http://kde-look.org/content/show.php/ACUN+Simgeleri?content=83018), both licensed under the GNU GPL license, from the Crystal Projects icons (http://www.everaldo.com/crystal/?action=downloads), licensed under the LGPL, from the glaze icons set (http://www.notmart.org/index.php/Graphics) (LGPL) and from the DarkGlass_Reworked icons theme (http://kde-look.org/content/show.php/Dark-Glass+reviewed?content=67902) (GPL). The flag icons are taken from the FAMFAMFAM (http://www.famfamfam.com/lab/icons/flags/) icons set (Public Domain) - diff --git a/h-source/Css/comune.css b/h-source/Css/comune.css deleted file mode 100644 index b6ecdd3..0000000 --- a/h-source/Css/comune.css +++ /dev/null @@ -1,130 +0,0 @@ -/*parte di login.css*/ - -/*controller:users*/ -/*action:login*/ -.login_box { - margin:10px 10px 20px 10px; -} -.login_box input { - border:1px solid orange; -} - -/*action:logout*/ -.logout_box { - margin:10px 10px 20px 10px; -} - -.logout_button a{ - margin:20px; - padding:10px; - background:orange; - border:1px solid black; -/* width:30px; */ -} - - -/*parte di scaffold.css*/ - -td { - font-size: 12px; -} - -td.editForm, td.delForm, td.associateForm, td.moveupForm, td.movedownForm { - width:3%; -} - -td.editForm input, td.delForm input, td.associateForm input, td.moveupForm input, td.movedownForm input -{ - height:30px; -} - -/*alert string*/ -.alert { - font:bold 12px/1.5 Verdana,arial; - padding:5px; - margin:5px 5px 15px 5px; - background:TOMATO; - border-top:2px solid MAROON; - border-bottom:2px solid MAROON; - color:MAROON; -} - -/*executed operation string*/ -.executed { - font:bold 12px/1.5 Verdana,arial; - padding:5px; - margin:5px 5px 15px 5px; - background:#E0FFFF; - border-top:2px solid #ADD8E6; - border-bottom:2px solid #ADD8E6; - color:#4169E1; -} - -/*action:main*/ -tr.listRow { - background:#E6E6FA; -} - -tr.listHead { - font-weight: bold; - background:#d1deed; - border:1px solid #4169E1; - border-bottom:1px solid #4169E1; -} - -tr.listHead td { -/* font-weight: bold; */ -/* background:#d1deed; */ - border-top:1px solid #4169E1; - border-bottom:1px solid #4169E1; -} - -.recordsBox { - margin:10px 0px; -} - -.recordsBox table { - width:100%; -} - -.listItemForm { - margin:0px; -} - -a.linkItem { -/* background:red; */ - font:bold 12px/1 Verdana,arial; -} - -/*controller:panel -/*action:main*/ -.main_box { - padding:50px 20px; - width:700px; - height:250px; -} -.top_color { - text-align:center; - width:160px; - height:35px; - margin:0; - padding:0; -} -.bottom_color { - background:lavender; - text-align:center; - width:160px; - margin:0; - padding:5px 0; -} - - - -/*box che dice dove ti trovi, in che controller*/ -.controller_info_header -{ - background:#E6E6FA; - padding:5px; - font: bold 16px/1.75em sans-serif; - border-bottom:1px solid #4169E1; -} \ No newline at end of file diff --git a/h-source/Css/explorer6.css b/h-source/Css/explorer6.css deleted file mode 100755 index 29b6456..0000000 --- a/h-source/Css/explorer6.css +++ /dev/null @@ -1,112 +0,0 @@ -ul#menuBlock li { - height:24px; -} - -ul#menuBlock li ul { - top:25px; - margin-left:3px; -} - -ul#menuBlock li ul li { - margin-top:-1px; -} - -.view_page_top_box -{ - height:32px; -} - -.update_submit_class -{ - padding:7px; -} - -.view_page_update_button -{ - width:35px; -} - -/*div that contains the update form*/ -.view_page_update_button -{ - margin-top:2px; - margin-right:5px; -} -.update_submit_class -{ - padding:2px; - width:45px; -} -.notebooks_insert_form -{ - margin-right:-30px; -} - -.notebook_insert_link -{ - margin:0px 0px 0px 5px; - padding-right:0px; - width:245px; -} -.view_page_history_button -{ - margin-left:10px; -} -.top_left_images_help -{ - height:22px; - margin-bottom:-3px; -} -ul#menuBlock li { - height:26px; -} -ul#menuBlock li ul { - left:-6px; -} -.user_logged -{ - margin-left:62px; -} -.viewall_popup_menu_status_item -{ - padding-left:2px; -/* background:red; */ -} -.copyright_notice_box -{ - width:140px; -} -.language_links_box ul -{ - width:100%; - margin:-1px 5px 30px 5px; -} -.language_links_box ul li -{ - margin-bottom:5px; -} -.language_links_box ul li a -{ - height:30px; -} -.talk_numb_ext -{ - margin-top:-30px; -} -.talk_numb_ext a, .talk_numb_ext_wiki a -{ - margin-bottom:0px; -} -.talk_numb_ext_wiki -{ - width:130px; -} -.language_links_box a.current_lang -{ - background:#6495ED; -} - -.last_modifications ul -{ - margin-left:0px; -} \ No newline at end of file diff --git a/h-source/Css/explorer7.css b/h-source/Css/explorer7.css deleted file mode 100644 index f63bf5b..0000000 --- a/h-source/Css/explorer7.css +++ /dev/null @@ -1,25 +0,0 @@ -.viewall_popup_menu_status_item -{ - width:129px; -} -.talk_numb_ext -{ - margin-top:-30px; -} -.language_links_box a.current_lang -{ - background:#6495ED; -} - -.last_modifications ul -{ - margin-left:0px; -} -.talk_numb_ext a, .talk_numb_ext_wiki a -{ - margin-bottom:0px; -} -.talk_numb_ext_wiki -{ - width:130px; -} \ No newline at end of file diff --git a/h-source/Css/files.css b/h-source/Css/files.css deleted file mode 100644 index e98e681..0000000 --- a/h-source/Css/files.css +++ /dev/null @@ -1,113 +0,0 @@ -form -{ - padding:0px; - margin:0px; -} - -/*external box*/ -.EGexternalBox -{ - height:500px; - overflow:scroll; -} - -/*top box containing the forms: upload,create folder,got to folder*/ -.EGformBox -{ - padding-left:10px; - padding-right:10px; - height:35px; - margin:5px; - border-top:1px solid #DC143C; - border-bottom:1px solid #DC143C; - background:#FF7F50; -} - -/*item box: folder*/ -.EGfolderBox -{ - padding-left:10px; - padding-right:10px; - height:55px; - margin:5px; -/* border-top:1px solid black; */ - background:#E6E6FA; -} - -/*item box: file*/ -.EGfileBox -{ - padding-left:10px; - padding-right:10px; - height:55px; - margin:5px; -/* border-top:1px solid black; */ - background:#E0FFFF; -} - -/*back box*/ -.EGbackBox -{ - padding-left:10px; - padding-right:10px; - height:50px; - margin:5px; - border-top:1px solid #6495ED; - border-bottom:1px solid #6495ED; - background:#ADD8E6; -} - -/*folder image and back image*/ -.EGfolderImage, .EGbackImage, .EGfileImage -{ - margin:3px; -/* padding:2px; */ - width:55px; -/* background:red; */ - float:left; -} - -/*box containing the form to create a new folder*/ -.EGcreateFolderBox -{ - margin:5px; - width:300px; - float:left; -} - -/*box containing the form to upload a file*/ -.EGuploadFileBox -{ - margin:5px; - margin-left:50px; - width:400px; - float:left; -} - -.EGcreateFolderBox input:text -{ - width:150px; -} - -/*name of the folder*/ -.EGfolderName, .EGfileName, .EGcurrentDirectory -{ - width:500px; - float:left; - font:normal 12px/1 Verdana,arial; - margin:10px; -} - -/*del image*/ -.EGfolderDelImage, .EGfileDelImage -{ - float:right; - margin:2px; -} - -/*preview of the image in upload file*/ -#imagePreview -{ - margin:10px; - height:120px; -} diff --git a/h-source/Css/form.css b/h-source/Css/form.css deleted file mode 100755 index 911af19..0000000 --- a/h-source/Css/form.css +++ /dev/null @@ -1,31 +0,0 @@ -.entryLabel { - display:block; - font:bold 12px/1em Verdana,arial; - padding:3px 0px; - margin-top:10px; - background:#E6E6FA; - width:500px; -} - -.formEntry textarea{ - width:500px; - height:300px; -} - -.formEntry input,.formEntry textarea { - width:500px; - padding:3px; - border: 1px solid #4169E1; -} - -.formClass { - margin:10px; -} - -.inputEntry { - margin:10px 0px; -} - -.formEntry #abstract { - height:100px; -} \ No newline at end of file diff --git a/h-source/Css/index.html b/h-source/Css/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Css/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Css/login.css b/h-source/Css/login.css deleted file mode 100644 index 7c42964..0000000 --- a/h-source/Css/login.css +++ /dev/null @@ -1,21 +0,0 @@ -/*controller:users*/ -/*action:login*/ -.login_box { - margin:10px 10px 20px 10px; -} -.login_box input { - border:1px solid orange; -} - -/*action:logout*/ -.logout_box { - margin:10px 10px 20px 10px; -} - -.logout_button a{ - margin:20px; - padding:10px; - background:orange; - border:1px solid black; -/* width:30px; */ -} \ No newline at end of file diff --git a/h-source/Css/main.css b/h-source/Css/main.css deleted file mode 100644 index 080e613..0000000 --- a/h-source/Css/main.css +++ /dev/null @@ -1,2249 +0,0 @@ -/*stili per il layout fisso*/ -html, body -{ - margin: 0; - padding:0; -} - -body -{ - font:normal 15px/1.3 sans-serif,arial; - text-align: center; - background:#ffffff; -} - -img -{ - border:0px; -} - -.message_view_description li, .issues_view_description li, .talk_message_item_content li, .message_view_description_hidden li -{ - margin-left:1em; -} - - -div#container -{ - width: 950px; - margin: 0px auto; - text-align: left; - background:white; -} - - -/*stile header grande*/ -div#external_header { - background:#b7f18c; - text-align:center; - height:80px; -} -div#header { - background:#b7f18c; - width: 950px; - margin: 0px auto; - text-align:left; - height:80px; -} - -div#top_menu_external -{ - text-align:center; - background:#015512; - margin-bottom:50px; -/* border-top:1px solid #4169E1; */ -/* border-bottom:1px solid #4169E1; */ -} - -div#top_menu -{ - font:bold 15px sans-serif,arial; - text-align:left; - padding:0.4em 0px; - background:#015512; - width: 950px; - margin: 0px auto; -} -#top_menu .currentitem a -{ - background:#DC143C; - color:#FFF; -} - -div#top_menu a -{ - font:bold 16px sans-serif,arial; - padding:0.4em 10px; - text-decoration:none; - font-weight:bold; - color:#FFF; -/* border-left:1px solid #4169E1; */ -} -#top_menu a:hover, -#top_menu a:focus, -#top_menu a:active -{ - background:#61c418; -} - -div#top_menu ul -{ - list-style-type: none; - display:inline; - margin:0px; - padding:0px; -} - -div#top_menu li -{ - display:inline; -/* padding:10px; */ -} - - -div#left -{ - width:730px; - float:left; -} - -div#right -{ - width:198px; - float:right; -} - -.login_username_input,.login_password_input -{ - width:150px; -} - -.login_table_box -{ - clear:left; - margin:5px; - margin-bottom:35px; -/* border:1px solid #B7F18C; */ -/* padding:5px; */ -} -.statistics_ext_box -{ - margin:5px; - margin-bottom:30px; -} -.statistics_int_title -{ - margin:5px 0px 15px 0px; - padding:3px 0px; -/* background-color:#B7F18C; */ - border-bottom:2px solid #DC143C; - font-weight:bold; -} -.statistics_hard_title -{ - margin:5px 0px; - color:#808080; -} -.user_logged -{ - margin-left:55px; - color:black; - font-weight:bold; -} -.login_right_label -{ - font-weight:bold; -} -.login_right_form input -{ - border:1px solid #6495ED; - width:180px; - padding:2px; - margin:3px 0px; -} - -.login_input -{ - width:100px; -} - -.login_form_title -{ - color:black; - -/* padding:10px; */ -/* background:#5c98dc; */ -} - -.login_box -{ - margin-bottom:400px; -} - -.hardware_element -{ - width:335px; - float:left; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - margin:2px; - margin-left:5px; - margin-bottom:5px; - padding:10px; - background:#c7daef; -/* border-bottom:1px solid #6495ED; */ -} -.hardware_element_link -{ - display:block; - width:250px; - float:left; - margin:0px 10px; - margin-top:10px; -} -.notebook_view_title -{ - width:400px; - height:50px; - float:left; - overflow:hidden; -/* background:red; */ - margin:10px 0px 10px 10px; - font:normal 14px/1 sans-serif,arial; -} - -.notebook_insert_link -{ -/* border:1px solid black; */ -/* background-color:#c1e3ef; */ - width:200px; -/* background:orange; */ - float:right; - padding:3px 6px 1px 3px; - margin:0px 5px 30px 5px; - text-align:right; - overflow:hidden; - height:48px; -} - -.select_entry -{ -/* width:400px; */ - padding:2px; -/* border:1px solid #6495ED; */ -} -.input_entry, .talk_input_entry -{ - width:400px; - padding:2px; - border:1px solid #6495ED; -} -.textarea_entry, .talk_textarea_entry, .device_textarea_entry -{ - width:630px; - height:300px; - padding:2px; - border:1px solid #6495ED; -} -.device_textarea_entry -{ - width:400px; - height:50px; -} -/*.talk_input_entry -{ - border:1px solid #CECECE; -}*/ -.form_entry .talk_textarea_entry -{ - width:400px; - height:200px; - border:1px solid #6495ED; -} -.notebooks_insert_form -{ - width:710px; - margin-left:10px; -} -.notebooks_insert_form .entry_label -{ - display:block; - padding:3px 0px; -/* background:#E6E6FA; */ - width:600px; - font-weight:bold; -} -.form_entry -{ - margin:20px 0px; -} - - -div#footer{ - margin:0px; - color: #000; - height:40px; - background:#b7f18c; - clear:both; -} - -/*div#navigation li{background: url(immagini/tabella1.png) no-repeat left center;}*/ -a.link_menu -{ - font: bold 16px/1.75em sans-serif,arial; - text-decoration: none; - color:#4169E1; - margin-left:10px; -} - - -/*box contenente i link per tornare nel pannello utente e per sloggarsi*/ -.your_status_box -{ - background:#E6E6FA; - padding:5px; -} - -.login_note -{ - color:#8080a6; - margin:10px; - padding:5px 0px; - border-top:2px solid #8080a6; - border-bottom:2px solid #8080a6; - - font: normal 16px/1.3 sans-serif,arial; -} - -/*singolo box contentente un portatile in view all*/ -.notebooks_viewall -{ - clear:both; - clear:right; - margin:40px 0px; - padding:3px; -/* border:2px solid #7dafe7; */ - font: normal 14px/1.5 sans-serif,arial; - -} -.model_viewall -{ - margin:40px 10px; - margin-left:0px; -/* background-color:#F7F7F7; */ -/* border:1px solid #CECECE; */ -/* padding:10px; */ -} -.notebook_model -{ -/* background:orange; */ - padding:5px 0px; - margin:0px 5px; - overflow:hidden; - width:100%; -/* margin-bottom:10px; */ - font:normal 14px/1 sans-serif,arial; - border-bottom:1px solid #7e0000; -} -.notebook_vendor, .notebook_compatibility, .notebook_kernel, .model_tested_on -{ - margin:5px 0px; -/* background:#eaebec; */ - padding:5px; - width:654px; - overflow:hidden; -/* border-top:2px solid #a4c8f1; */ -} -.inner_label -{ - float:left; - width:320px; -} -.inner_value -{ - float:left; - width:280px; - color:#1f538e; - font-weight:bold; -} -.notebook_description_label -{ -/* background:#B7F18C; */ - padding:5px 0px; - margin:0px 5px; - margin-top:1.5em; -/* margin-bottom:10px; */ - font:bold 14px/1 sans-serif,arial; - border-bottom:1px solid #7e0000; -/* border-bottom:1px solid #228B22; */ -} -.notebook_description_value -{ -/* border-top:2px solid #a4c8f1; */ - margin:5px 0px; -/* background:#eaebec; */ - padding:5px 5px; - width:704px; - overflow:hidden; -} -.notebook_view_link -{ - margin-top:10px; - margin-left:5px; -} - - -/*alert string*/ -.alert { - clear:left; - clear:right; - font:bold 12px/1.5 sans-serif,arial; - padding:10px; - margin:5px 0px 15px 0px; -/* background:TOMATO; */ - border-top:2px solid MAROON; - border-bottom:2px solid MAROON; - color:MAROON; -} - -/*executed operation string*/ -.executed { - font:bold 12px/1.5 sans-serif,arial; - padding:5px; - margin:5px 5px 15px 5px; - background:#E0FFFF; - border-top:2px solid #ADD8E6; - border-bottom:2px solid #ADD8E6; - color:#4169E1; -} - -.view_page_top_box -{ - overflow:hidden; - width:664px; -} -/*div that contains the update form*/ -.view_page_update_button -{ - float:right; -} -/*.view_page_update_button input -{ - height:35px; -}*/ -.view_page_update_button form -{ - width:38px; - padding:0px; -} -.view_page_back_button -{ - float:left; - width:50px; -} -/*the update submit button*/ -.update_submit_class -{ - padding:2px; - width:45px; - font:normal 14px/1 sans-serif,arial; - cursor:pointer; -} -/*div that contains the link to the history page*/ -.view_page_history_button -{ - float:right; - width:30px; - padding:3px; - margin-left:17px; -/* border:1px solid #a4c8f1; */ -/* height:30px; */ -} -.view_page_history_button a -{ - text-decoration:none; - color:#000; -} - -.page_history -{ - margin:0px; - padding:0px; -} -.page_history_item -{ - list-style-type: none; - padding:5px; - margin:2px; - border-top:1px dashed #a4c8f1; -} -.page_history_current_item -{ - list-style-type: none; - padding:5px; - margin:5px 0px; -/* background:#ADD8E6; */ -} -.history_title -{ - font:normal 14px/1 sans-serif; - margin:10px; - padding:3px; -} - -.revision_alert -{ - background:#f1d8d8; - padding:8px; - margin:5px; - margin-bottom:20px; - border-bottom:1px solid #d26262; - border-top:1px solid #d26262; - clear:both; -} - -/*page list in history*/ -.history_page_list, .history_page_list_news { - text-align:left; - font:normal 14px/1 sans-serif,arial; - padding:10px; - margin-bottom:15px; -} -.history_page_list_news -{ - background:#C7DAEF; - margin:5px; -} -div.history_page_list a, div.history_page_list_news a { - padding:5px 10px; - border-left:1px outset #000; -/* border:1px outset #708090; */ -/* color:#B0E0E6; */ -/* background:#4169E1; */ -} - -div.history_page_list a.currentPage, div.history_page_list_news a.currentPage -{ - font-weight:bold; - background:#DCDCDC; -} -div.history_page_list_news a -{ - border-left:none; - color:#4169E1; - font-weight:bold; -} - -.viewall_no_items_found -{ - font:normal 14px/1 sans-serif,arial; - margin:20px 5px; - padding:5px; -/* color: #FF4500; */ - border-top:1px solid #FF4500; - border-bottom:1px solid #FF4500; -} - - - -.viewall_popup_menu_box { - width:725px; - height:30px; - margin-bottom:0px; - margin-top:10px; - margin-left:0px; - position:relative; - z-index:4; -} -.more_filters -{ - position:relative; - z-index:3; -} - -.viewall_popup_menu_status -{ - clear:left; - width:725px; -/* overflow:hidden; */ - margin-left:0px; - text-align:center; -} -.viewall_popup_menu_status_item -{ - width:139px; - float:left; - margin-left:3px; - color:#FF4500; - font-weight:bold; - font: bold 13px/1 sans-serif,arial; -} - -ul#menuBlock { -/* float:right; */ - float:left; - margin:0px; - padding:0px; - list-style:none; - height:25px; -} -ul#menuBlock li.innerItem -{ - height:22px; - padding-top:5px; - font-size:12px; -} -ul#menuBlock li { - position:relative; - display:block; - float:left; - margin-left:3px; - width:139px; -/* height:22px; */ - text-align:center; - background: url('../Img/popup_back.png') no-repeat top left; -/* background:#FFA500; */ -} - -ul#menuBlock li a { - color:#000000; - font: normal 12px/1 sans-serif,arial; -} - -ul#menuBlock li ul { - margin:0px; - padding:0px; - list-style:none; - position:absolute; - top:24px; - left:-3px; - display:none; -} -ul#menuBlock:hover li ul -{ - display:block; -} -ul#menuBlock li ul li { - background:#ffef84; - border-top:1px solid #ec8459; - padding:3px 0; -} - - -/*view files with differences*/ -.diff_ext_box -{ - margin:0px 5px 30px 5px; -} -.diff_item_label -{ -/* background:#ADD8E6; */ -/* padding:3px; */ - border-bottom:1px solid black; -} -.diff_item_text -{ - color:#7c7a7a; - background:#F0FFF0; - padding:3px; -} -del -{ - color:red; -} -ins -{ - color:green; -} - - - -/*tree navigation*/ -.position_tree_box -{ - margin:5px 5px 25px 5px; - padding:5px; - font:normal 14px/1 sans-serif,arial; - border-top:1px solid #DC143C; - border-bottom:1px solid #DC143C; -} -.position_tree_box a -{ - text-decoration:none; - color:#DC143C; -} -.last_tree_element -{ - font-weight:bold; -} - - - -.td_with_distribution_checkboxes -{ - position:relative; - display:block; -} -.dist_checkboxes_hidden_box -{ - display:none; - position:absolute; - background:#C1E3EF; - top:20px; - left:0px; - width:400px; - padding:3px; -} -.dist_checkboxes_hidden_box_inner -{ - height:150px; - overflow:auto; - z-index:400; -} -.hidden_box_item -{ - margin-bottom:10px; -} -.tables_of_contents -{ - margin:20px 0; - padding:5px; - background-color:#EAF2F4; - border:1px solid #C7DAEF; - -moz-border-radius: 15px; - -webkit-border-radius: 15px; - border-radius: 15px; -} -.tables_of_contents a -{ - font-size:14px; -} -.tables_of_contents_title -{ - margin:10px 25px; - font-weight:bold; -} -/*wiki code*/ -.code_pre -{ -/* width:650px; */ - max-height:300px; - overflow:auto; - background:#f9f4a7; - padding:5px 0 5px 5px; - font-size:12px; -/* color:#4169E1; */ - border:1px dashed #d4cb3b; -} - -.div_h1 -{ - font:bold 18px/1 sans-serif,arial; - border-bottom:1px solid gray; - padding:3px 0px; - margin:20px 0px 10px 0px; - color:gray; -} -.div_h2 -{ - font:bold 17px/1 sans-serif,arial; - color:gray; - padding:2px 0; -} -.div_h3 -{ - font:bold 16px/1 sans-serif,arial; - color:gray; - padding:2px 0; -} -.div_lang -{ - margin-top:4em; - padding:8px; - background:#cfe2ff; - /*border-top:1px solid #FFA500; - border-bottom:1px solid #FFA500;*/ -} -.div_lang a -{ - padding:0px 3px; -} -.talk_login_notice -{ - margin:5px 5px; - padding:5px; - font:bold 14px/1 sans-serif,arial; -/* border:1px solid #4169E1; */ -/* color:#4169E1; */ -/* background:#9acee3; */ -} -.talk_message_item -{ - margin:5px 0px 35px 5px; -} -.talk_message_item_title_date -{ - border-bottom:1px solid gray; - padding-bottom:5px; -/* width:300px; */ -} -.talk_message_item_title -{ - font:bold 14px/1 sans-serif,arial; - margin-bottom:5px; -} -.talk_message_item_date -{ - font:normal 12px/1 sans-serif,arial; - color:gray; -} -.talk_message_item_content -{ - padding:5px 0px; -} -.talk_form_external_box -{ - margin-bottom:20px; -} - -.model_id -{ - font:normal 12px/1 sans-serif,arial; -/* color:gray; */ - margin:5px 3px; - padding:3px; -} - -.top_left_images -{ - height:45px; - margin-top:2px; -} -.top_left_note_image -{ - height:45px; -} -.top_left_images_help -{ - height:30px; - margin-bottom:-10px; -} - -.who_you_are_and_logout, .your_panel_link -{ - margin:0px 0px 10px 0px; - padding:5px 10px; - background-color:#B7F18C; -/* font-weight:bold; */ -/* border-top:1px solid #015512; */ -/* border-bottom:1px solid #015512; */ -} -.your_panel_link -{ - background:#DC143C; - margin-bottom:0px; -/* color:#FFF; */ -} -.your_panel_link a -{ - font-weight:bold; - color:#FFF; -} - -/*form*/ -.entryLabel { - display:block; - font:bold 12px/1em sans-serif,arial; - padding:3px 0px; - margin-top:10px; -/* background:#E6E6FA; */ - width:450px; -} - -.formEntry { - margin:20px 0px; -} - -.formEntry input, .formEntry textarea { - width:450px; - padding:3px; - border: 1px solid #CECECE; -} - -.form_input_text input,.form_textarea textarea { - width:450px; - padding:3px; - border: 1px solid #CECECE; -} -.form_textarea textarea -{ - height:100px; -} -.formClass { - margin:10px; - margin-right:-40px; - width:450px; -} - -.inputEntry { - margin:10px 0px; - float:left; - width:80px; - height:30px; -} - -.panel_top_box -{ - background-color:#C1E3EF; - margin:5px 5px 35px 5px; - padding:10px; - font:bold 14px/1 sans-serif,arial; - border-bottom:1px solid #097fbc; -} -.panel_top_box a -{ - color:#097fbc; -} - -/*list of application in the panel main action*/ -.panelApplicationList -{ - padding:0px; - margin:0px; -} -.panelApplicationList li -{ - display:block; - width:450px; - height:30px; - margin:5px; - padding-top:9px; -} - -.panelApplicationList li a -{ - margin:5px; - font: bold 14px/1 sans-serif,arial; - color:#097fbc; -} - -.confirm_notice -{ - margin:10px; -/* padding:10px; */ - font:normal 14px/1.5 sans-serif,arial; -} - -.meet_item -{ - margin:20px 0px; -} -.meet_item_inner -{ - border-bottom:1px dashed #ed9f4a; - font-weight:bold; -/* color:#8f0754; */ -} -.meet_contrib_link, .contrib_explain_box -{ - margin:10px; -} -.users_contrib_item -{ - margin:10px; - padding:2px 0px; - border-bottom:1px dashed #ed9f4a; -/* color:#8f0754; */ -} -.external_users_contrib -{ - margin-bottom:40px; -} -.contrib_explain_box -{ - font-weight:bold; - margin-bottom:30px; -} -.users_meet_box -{ - margin:25px 30px; - padding:5px 20px; - background:#f6ea99; - border-bottom:1px solid #ed9f4a; - border-top:1px solid #ed9f4a; -} -.delete_account_notice_box -{ - margin:25px 10px; -} -.climb_form_ext_box -{ - margin:25px 10px; -} - -.new_account_title -{ - margin:10px; -} - -.viewall_popup_menu_box_external, .edit_form -{ - clear:left; - clear:right; - margin-bottom:30px; -/* background:#E0FFFF; */ - padding:0px 10px 10px 0px; -} - -.manage_account_link_box -{ - margin-top:5px; -} -.manage_account_link_box a -{ - color:#000; -} -.login_right_box -{ - margin-bottom:15px; -} - -.mandatory_fields_notice -{ - margin:10px 0px; -} - -.help_tables_of_contents -{ - margin:10px; - padding:10px; -} - -.bottom_licence_notice -{ - clear:left; - clear:right; - font:normal 12px/1.2 sans-serif,arial; - padding:10px; - background:#E0FFFF; - margin:25px 0px 5px 0px; -} -.top_licence_notice -{ - clear:left; - clear:right; - font:normal 12px/1.2 sans-serif,arial; - padding:10px; - background:#E0FFFF; - margin:25px 0px 5px 0px; - text-align:left; -} - -/*.copyright_notice_box -{ - text-align:right; - font: normal 12px/1 sans-serif,arial; - padding:14px; -}*/ - -.copyright_notice_box, .footer_credits_box -{ - text-align:center; - width:120px; - float:right; - font: normal 12px/1 sans-serif,arial; - padding:14px; - border-left:3px solid #FFF; -} -.footer_credits_box -{ - width:60px; - border-left:3px solid #FFF; -} -.home_objectives_description -{ - margin:5px; - overflow:hidden; - width:100%; -} -.home_objectives_description img -{ - float:left; - margin-right:5px; -} -.home_objectives_title -{ - margin:15px 5px 5px 5px; -/* background:#90EE90; */ - font-weight:bold; - padding:5px 0px; - border-bottom:1px solid #228B22; -} - -.credits_item_title -{ - margin:15px 5px 5px 5px; -/* background:#90EE90; */ - padding:5px; - border-bottom:1px solid #228B22; - font-weight:bold; -} -.credits_item_description -{ - padding:5px; - margin:5px; - overflow:hidden; - width:100%; -} - -.home_container -{ - margin:20px 0px; -} - -.issues_external_box -{ - margin:40px 5px; -} -.issues_viewall_title -{ - margin:10px 2px; - font-weight:bold; -} -.issues_viewall_table -{ - font:normal 13px/1 sans-serif,arial; -} - -.issues_viewall_table td -{ -/* background:#F0FFFF; */ - padding:5px; -/* border-bottom:1px solid #E6E6FA; */ -} -.issues_viewall_table td a -{ - color:#3E3E3E; -} -.issue_deleted_yes td -{ - background-color:#E6E6FA; -} - -.issue_deleted_yes span -{ - color:red; - padding-left:5px; - font-size:10px; -} - -.issue_deleted_no span -{ - display:none; -} - -.issue_deleted_yes, -.issue_deleted_yes td a -{ - color:#808080; -} - -.issues_viewall_table th -{ - background:#ADD8E6; -/* font-weight:normal; */ -/* border-top:1px solid #4169E1; */ -/* border-left:4px solid #4169E1; */ -/* border-bottom:1px solid #4169E1; */ - padding:5px; -} - -.issues_view_title, .issues_view_description_title -{ - font:bold 14px/1 sans-serif,arial; - padding:5px 0px; - border-bottom:1px solid black; -} -.issues_view_status_and_priority -{ - margin:20px 0px; - font:normal 12px/1 sans-serif,arial; -} -.issues_view_description -{ - margin:20px 0px; -} - -.add_issue_form_title -{ - margin:30px 5px; - font-weight:bold; -} -.add_issue_form -{ - margin:30px 5px; -} - -.contact_div -{ - margin:10px; -} - -.help_external_box -{ - margin:5px; -} -.help_wiki_table thead -{ - text-align:left; -} - -.hardware_element_image -{ - height:50px; - float:left; -} -.markItUpContainer -{ - z-index:0; -} - -.search_form -{ - clear:both; - margin:5px 5px 50px 5px; -} -.search_form_pciid -{ - clear:both; - margin:5px 5px 50px 5px; -} -.search_form_label -{ - overflow:hidden; - height:22px; - margin:15px 5px 20px 5px; -/* background:#90EE90; */ - padding:5px 0px; - border-bottom:1px solid #228B22; - font-weight:bold; -} -.input_entry_search -{ - width:250px; - border: 1px solid #CECECE; - padding:2px; -} - -.search_result_item -{ - margin:5px 5px 15px 5px; - border-top:1px solid #CECECE; - padding:5px 0px; -} -.search_result_item .first_level -{ - overflow:hidden; -} - -.search_result_item_left -{ - width:300px; - float:left; -} -.search_result_item_right -{ - width:400px; - float:left; -} -.diff_color_notice -{ - background:#f1d8d8; - padding:8px; - margin:5px; - margin-bottom:20px; - border-bottom:1px solid #d26262; - border-top:1px solid #d26262; -} - -.gray_text_notice -{ - color:#7c7a7a; -} -.credits_external_box -{ - margin-bottom:40px; -} -.notebook_model img -{ - float:left; -} -.span_model_name -{ - float:left; - margin-left:10px; - padding-top:5px; -} - -/*dialog*/ -#dialog-form, #delete_dialog -{ - display:none; -} -#suggest_dialog -{ - display:none; -} -#dialog-form table -{ - text-align:left; -} -#dialog-form input -{ - width:300px; - border:1px solid #CECECE; -} -#dialog-form textarea, #delete_dialog textarea -{ - width:300px; - height:100px; - border:1px solid #CECECE; -} -.ask_for_removal_class -{ - float:right; - padding-top:5px; -} -.deletion_motivations_title -{ - margin:15px 5px; - border-bottom:1px solid #D26262; -} - -.deletion_motivations_iternal -{ - margin:15px 5px; - padding:5px; - border:1px dashed #D26262; -} -.deletion_motivations_iternal_message -{ - -} - -.news_external_box -{ - margin:5px; - margin-bottom:40px; -} -.news_item -{ -/* background:#f8f1b2; */ -/* padding:5px; */ - margin:30px 0px; -/* border:1px solid #f99f4f; */ -} -.news_item_title -{ - font-weight:bold; - margin:0px 0px 4px 0px; - padding-bottom:5px; - border-bottom:1px solid #9d1d04; - color:#9d1d04; -} -.news_item_date -{ - font: normal 13px/1 sans-serif,arial; -/* color:#e86a17; */ - color:gray; - margin:0px 0px 10px 0px; -} - -.discover_hardware, .download_database -{ - text-align:center; - margin-bottom:5px; -} -.download_database -{ - margin-bottom:30px; -} - -.download_table -{ - margin:10px 0px; - padding:5px; -} -.download_table td -{ - padding:5px 5px; - background:#E0FFFF; -} - -.help_external_box h1 -{ - background:#FFD700; - padding:5px 10px; - color:#800000; - border-top:1px solid #800000; - border-bottom:1px solid #800000; - font:normal 20px/1 sans-serif,arial; -} - -.right_box_ext_box -{ - margin:5px; - margin-bottom:300px; -} - -.add_message_form_title -{ - margin:15px 0px; - font-weight:bold; - padding:5px 0px; - color:#4169E1; -} - -.issues_message_item, .issues_message_item_preview, .issues_message_item_hidden, .talk_message_item_hidden -{ - -moz-border-radius: 12px; - -webkit-border-radius: 12px; - border-radius: 12px; - padding:10px; - margin:20px 0px; - background:#eaf2f4; -/* border-top:1px solid #4169E1; */ -/* border-bottom:1px solid #4169E1; */ -} -.issues_message_item_hidden, .talk_message_item_hidden -{ - background:#FFF; -/* background:#b5d6e0; */ - border-top:1px dashed #bcbcbc; - border-bottom:1px dashed #bcbcbc; -} -.issues_message_item_preview -{ - margin:5px 0px 20px 0px; - background:#FFF; - border:1px dashed #f9a92b; -} -.description_preview -{ - padding:10px; - margin:0px 0px; - border:2px dashed #f9a92b; -} -.description_preview_title -{ - padding:5px 0px; - margin:0px 0px; - font-style:italic; - color:#f9a92b; - font-weight:bold; -} -.talk_message_item_hidden -{ - margin-bottom:40px; -/* background:#f1f1f1; */ -} -.message_view_description -{ - clear:both; - margin-bottom:5px; -} -.message_view_description_hidden -{ - margin-top:5px; -} -.message_preview_notice -{ - color:#f9a92b; - margin:3px 3px; - font:italic 14px/1 sans-serif,arial; -} -.useful_links_ext div -{ - margin:3px 0px; - padding:1px; - padding-left:20px; - background: url(../Img/link.png) no-repeat left center; -} -.useful_links_ext div a -{ - color:#000; - text-decoration:none; - font:normal 14px/1 sans-serif,arial; -} -.issues_message_item_user -{ - overflow:hidden; - font-weight:bold; - margin-bottom:1em; -} -.issues_message_item_user_inner -{ - float:left; - width:500px; -} - -.hide_general, .block_general -{ - clear:right; - float:right; - margin-left:10px; - font-weight:bold; - text-decoration:none; - color:#000; - font-size:13px; - padding-bottom:4px; -} -.hide_general img -{ - margin-right:5px; - margin-bottom:-2px; -} -.block_general img -{ - margin-right:5px; - margin-bottom:-5px; -} -.language_links_box ul -{ - overflow:hidden; - margin:4px 5px 20px 5px; - padding:0px; - list-style-type:none; -} -.language_links_box ul li -{ - float:left; - width:92px; -/* background:red; */ - margin-bottom:10px; -/* margin-right:10px; */ - margin-top:5px; -} -.language_links_box ul li a -{ - padding:5px; - text-decoration:none; - color:black; -} -.language_links_box ul li a span -{ - margin-left:3px; -} -.language_links_box a.current_lang -{ - border-top:1px dashed #6495ED; - border-bottom:1px dashed #6495ED; -} - -.talk_numb_ext -{ - clear:both; - text-align:left; - margin-left:10px; -} -.talk_numb_ext a, .talk_numb_ext_wiki a -{ - display:block; - width:150px; - text-align:center; - padding:10px 0px; - text-decoration:none; - color:black; - background: url(../Img/talk_messages.png) no-repeat left center; - margin-bottom:10px; - float:right; - overflow:hidden; -} - -.details_of_hidden_message -{ - display:none; -} -.details_of_hidden_message_inner, .details_of_actions_inner, .details_of_actions_inner_user -{ - margin:10px 0px; - background:#fbfbfb; - padding:5px; - border:1px solid #BCBCBC; -} -.details_of_actions_inner -{ - background:#ecfffe; - border:1px solid #7ed0cb; -} -.details_of_actions_inner_user -{ -/* background:#F6EA99; */ -/* border:1px solid #F65637; */ -} -.md_type -{ - display:none; -} -.hidden_message_view_details, .hidden_message_view_page -{ - font:normal 12px/1 sans-serif,arial; -} -.deleted_message_show -{ - margin:8px 0px 0px 0px; - font:normal 13px/1 sans-serif,arial; -} - -.noscript_dist_alert -{ - margin-bottom:5px; -} -.noscript_dist_alert span -{ - color:#6495ED; -} - -.isp_notice -{ - background:#dff1f8; - border:1px solid #6495ED; - padding:5px; - font:normal 14px/1.5 sans-serif,arial; -} - -.user_hardware_pages -{ - margin:10px 5px; - padding:10px; - background:#F1D8D8; - /*border-bottom:1px solid #DC143C; - border-top:1px solid #DC143C;*/ -} - -.moderator_box, .moderator_box_deleted -{ - -moz-border-radius: 10px; - -webkit-border-radius: 10px; - border-radius: 10px; - overflow:hidden; - padding:10px; - margin:5px 5px 25px 5px; - background:#fbd59a; -/* border:1px solid #f65637; */ -} -.moderator_box_deleted -{ - background:#C7DAEF; -/* border:1px solid #ADD8E6; */ -} - -.listTable -{ - margin:20px 5px; - width:100%; -} - -/*MODERATORS' PAGE*/ -tr.listRow td -{ - font: normal 13px/1 sans-serif,arial; - padding:5px 5px; -} -tr.listRow td.type_column -{ - width:15%; -} -tr.listHead { - font: bold 13px/1 sans-serif,arial; -} - -tr.listHead td { - padding:8px 4px; - background:#ADD8E6; -/* border-top:1px solid #4169E1; */ -/* border-bottom:1px solid #4169E1; */ -} - -.recordsBox { - margin:10px 5px; -} - -.recordsBox table { - width:100%; -} - -a.linkItem { -/* background:red; */ - font:bold 12px/1 sans-serif,arial; -} - -td.text_item_date -{ - width:25%; -} -.moderator_panel_link, .admin_panel_link -{ - margin:5px; - padding:10px; -/* border:1px solid #ED9F4A; */ -/* background:#F6EA99; */ -} -.admin_panel_link -{ -/* border:1px solid #DA70D6; */ -/* background:#F6EA99; */ -} -.noscript_notice -{ - margin:10px 5px; - padding:5px 10px; - background:#B0E0E6; - border:1px solid #4169E1; - color:#4169E1; -} -.search_img -{ - float:left; -} -.span_search_desc -{ - float:left; - margin-left:10px; - padding-top:0px; -} -.textarea_entry_search -{ - width:430px; - height:200px; - padding:3px; - border: 1px solid #CECECE; -} -.lspci_notice -{ - margin:10px 0px; - padding:5px 10px; - background:#B7F18C; - font-weight:bold; -/* border: 1px solid #CECECE; */ -} - -.lspci_item_found, .lspci_item_not_found -{ - margin:20px 5px; - background: url('../Img/search_back.png') no-repeat top left; -/* background: #C7DAEF; */ - padding:12px 15px; - border-bottom:3px solid #8eb5df; - border-right:1px solid #8eb5df; -} -.lspci_item_found_compat -{ - padding-left:37px; -} - -.search_result_model_name -{ - padding-left:10px; -} - -.search_item_found -{ - margin:5px; -} - -.lspci_item_not_found -{ - background: #ffe170; - border-bottom:3px solid #e8c224; - border-right:1px solid #e8c224; -} -.lspci_item_found_compat ul li -{ - list-style-type:none; -} -.lspci_item_found_compat ul -{ - margin:10px 20px; - padding:0px; -} -.found_ext -{ - margin-bottom:2em; -} - -.lspci_item_found_compat a -{ - text-decoration:none; - font:normal 16px/1 sans-serif; -} - -.last_modifications, .wiki_control_box -{ - margin:5px; - width:190px; - margin-bottom:2em; - background: url(../Img/back_last.png) no-repeat top left; -} -.wiki_control_box -{ - background: url(../Img/back_wiki.png) no-repeat top left; -} -.last_modifications ul, .wiki_control_box ul -{ - padding:8px; - padding-top:0px; -} -.wiki_control_box ul -{ - background: url(../Img/back_wiki.png) no-repeat bottom left; -} -.last_modifications li, .wiki_control_box li -{ - list-style-type:none; - margin:10px 5px; -} -.last_modifications_title -{ - padding-top:10px; - padding-left:14px; - font:bold 15px/1 sans-serif; -} -.last_modifications a -{ - -} -.last_modifications_model -{ - color:#3e3e3e; - text-decoration:none; -} -.last_modifications_all -{ - background: url(../Img/back_last.png) no-repeat bottom left; - padding-bottom:10px; -} -.last_modifications_all span -{ - margin-left:10px; - font:normal 14px/1 sans-serif; -} - -.wiki_external_box -{ - margin:4em 5px; - clear:both; - clear:right; -} -.wiki_page_title -{ - font:bold 18px/1 sans-serif,arial; - color:gray; - margin:20px 0px; - padding-bottom:4px; - border-bottom:1px solid #000; -} -.wiki_page_content -{ - margin:2em 0px; -} - -.talk_numb_ext_wiki -{ - float:left; - text-align:left; - margin-left:10px; -} -.blocked_notice -{ - float:right; - font:normal 12px/1 sans-serif; - color:#000; -} -.entry_label_small -{ - font-weight:normal; - font-size:12px; - color:#808080; -} - -.clear_right -{ - clear:right; -} -#admin_box, #moderator_box -{ - margin:20px 10px; -/* border-bottom:1px solid #DC143C; */ -/* border-top:1px solid #DC143C; */ - border-left:10px solid #DC143C; -/* background-color:#F0FFFF; */ - padding:10px; -} -#moderator_box -{ -/* background-color:#fffc8e; */ -/* border-bottom:1px solid #FFA500; */ - border-left:10px solid #FFA500; -} -.admin_box_title, .moderator_box_title -{ - margin-bottom:10px; - font-size:12px; - font-weight:bold; -/* color:#FFF; */ -} -#admin_box ul, #moderator_box ul -{ - margin:0px; - padding:0px; - margin-left:15px; -} -#admin_box ul li, #moderator_box ul li -{ - list-style-type:none; - padding:5px 0px; -} -#admin_box ul li a, #moderator_box ul li a -{ - color:#DC143C; - font-weight:bold; -} -#admin_box ul li a.not_bold -{ - color:#000; - font-weight:normal; -} -#moderator_box ul li a -{ - color:#FF4500; -} -.display_none -{ - display:none; -} - -.moderation_details_box -{ - clear:right; - margin-top:5px; -} - -.not_logged_license -{ - padding:10px; - background-color:#F1D8D8; - font-size:12px; -} -.rss_right_box -{ - text-align:center; - padding:5px; - margin-bottom:15px; -/* margin-bottom:25px; - padding:5px; - overflow:hidden; - height:32px; - background-color:#C7DAEF; - color:#FFF;*/ -} - -/*.rss_right_box img -{ - float:left; -} -.rss_right_box_text -{ - float:left; - margin:5px 10px; - font-weight:bold; -} -.rss_right_box_text a -{ - color:#000; -/* text-decoration:none; */ - font-weight:normal; -}*/ - -/*tabs*/ -.description_tabs -{ - margin-top:10px; -} -div#description_tabs_content -{ - clear:left; -/* width:707px; */ -/* padding-left:5px; */ - border:1px solid #DCDCDC; - position:relative; - z-index:1; -} -.description_tabs_page -{ - margin:10px; -} -.description_tabs ul.desc_menu -{ - width:700px; -/* border-bottom:1px solid #DCDCDC; */ -/* overflow:hidden; */ - margin:0px; -/* height:34px; */ - padding:0px; - position:relative; - z-index:4; -/* background-color:red; */ - top:1px; -/* padding-left:10px; */ -} -.description_tabs li.desc_tabs -{ - display:block; - float:left; - width:70px; - text-align:center; - padding:6px 8px; - border:1px solid #DCDCDC; - background-color:#E6E6FA; - position:relative; - margin-right:8px; - margin-left:0px; - z-index:5; -} -.description_tabs li.current_tab -{ - background-color:#FFF; - border-bottom:1px solid #FFF; -} -.description_tabs li.desc_tabs a -{ -/* text-decoration:none; */ - color:#000; -/* font-weight:bold; */ -} -.separation_line -{ - background-color:#DCDCDC; - padding:6px 8px; - margin:20px 0; -} -.lspci_item_not_found_inner -{ - margin:10px 0 5px 0; - font-weight:bold; -} -.insert_suggestion_list -{ - list-style-type:none; -} -.insert_suggestion_list li -{ - margin:10px 0; -} - -.issue_hidden_notice, .wiki_hidden_notice -{ - width:450px; - float:left; - margin-bottom:10px; - color:red; -} -.wiki_hidden_notice -{ - color:#000; -} -.show_hidden_box_ext -{ - clear:left; -} -.box_module_how_to_compile -{ -/* height:30px; */ - background-color:#F0E68C; -/* clear:left; */ - margin-top:5px; - padding:10px; - font-size:12px; -} -.box_module_label a -{ - color:#FF4500; - font-size:12px; -} - -.track_alert -{ - border:10px solid red; - padding:5px; -} - -.catalogue_top_notice -{ - clear:right; - margin:0 5px; -} - -.version_div -{ - margin-bottom:30px; - text-align:center; -} - -.model_string_search_form -{ - margin:5px; - padding:8px; - background-color:#C7DAEF; - border: 1px solid #6495ED; - width:685px; -} - -.model_string_search_form img -{ - vertical-align:-3px; -} - -.user_action_filter -{ - width:190px; -} -.user_action_filter img, .user_action_filter_submit -{ - vertical-align:middle; -} -.user_action_filter_text -{ - width:130px; -} - -.no_bold -{ - font-weight:normal; -} - -/*.version_div a -{ - display:block; - background-color: #C7DAEF; - margin: 5px 5px; - margin-bottom:20px; - padding: 5px 10px; - padding-left:5px; - color:#000; - text-decoration:none; - font-weight:bold; -} -.version_div a img -{ - vertical-align:middle; -}*/ -/*.version_div a div -{ - padding-top:14px; -}*/ -/* -Start - temporarily added due to transformation of help pages -2011-05-29 joeko -*/ -.help_external_box ul { - line-height: 1.5em; - list-style-type: square; - margin: .3em 0 0 1.5em; - padding: 0; -} -.help_external_box ol { - line-height: 1.5em; - margin: .3em 0 0 3.2em; - padding: 0; - list-style-image: none; -} -.help_external_box li { - margin-bottom: .1em; -} -.help_external_box dt { - font-weight: bold; - margin-top: .5em; - margin-bottom: .3em; - color: #3D6300; -} -.help_external_box dl { - margin-top: .4em; - margin-bottom: .2em; -} -.help_external_box dd { - line-height: 1.5em; - margin-top: .5em; - margin-left: 2em; - margin-top: .5em; - margin-bottom: .5em; -} -.help_external_box p, .help_external_box dd { - margin-top: .5em; - margin-bottom: .5em; -} -.help_external_box p.attention { - /* taken from home page */ - padding: 0.5em; - background: none repeat scroll 0% 0% rgb(255, 160, 122); - margin: 0.5em; - border-top: 1px solid rgb(220, 20, 60); - border-bottom: 1px solid rgb(220, 20, 60); - font-size: 16px; -} -.help_external_box p.example, dd.example { - border-bottom: 0; - color: #3d6300; -} -.help_external_box p.note dd.note { - margin-left: 2em; - margin-right: 0; - font-weight: bolder; - color: #3d6300; /* background: #CFC bottom right no-repeat;*/; - font-style: normal; - font-style: italic; -} -.help_external_box p.opt, dd.opt { - color: #3d6300; - font-weight: bold; - font-style: italic; -} - -.help_external_box h2,.help_external_box h3,.help_external_box h4 -{ - margin: 0 4px 0 0; - padding: 0.2em 0 0.3em 1.25em; - font-size: 1.4em; - color: #353535; - background: #D8FF9E; -} -.help_external_box h2 -{ - font-size: 1.3em; - color: #3D6300; -} -.help_external_box h3 -{ - font-size: 1.2em; - color: #3D6300; - background-color: White; -} -.help_external_box h4 -{ - font-size: 1.1em; - color: #3D6300; - background-color: White; -} -.help_external_box p.terminal,.help_external_box pre.terminal -{ - font-family: monospace; - padding: .5em 1em; - background-color: rgb(50,50,50); - border-left: 2px solid rgb(97,97,97); - color: white; -} - -/* -End -*/ diff --git a/h-source/Css/mainmenu.css b/h-source/Css/mainmenu.css deleted file mode 100755 index 615c8bf..0000000 --- a/h-source/Css/mainmenu.css +++ /dev/null @@ -1,78 +0,0 @@ -/*stile header di ogni view*/ -.mainMenu { - height:50px; -/* border-top:1px solid #ADD8E6; */ - border-bottom:1px solid #4169E1; - padding-top:6px; - margin-bottom:10px; - background:#d1deed; -} -.mainMenuItem { - float:left; - width:60px; - height:40px; - margin-left:5px; - border:1px outset #708090; - background:#4169E1; - text-align:center; -} - -.mainMenuItem a { -/* margin:8px 5px 1px 10px; */ - display:block; - margin-top:12px; - color:#B0E0E6; - font:bold 14px/1 Verdana,arial; -} - -.verticalMenu { - margin-bottom:30px; - margin-left:10px; -/* text-align:right;*/ -} - -ul#menuBlock { -/* float:right; */ - float:left; - margin:0px; - padding:0px; - list-style:none; - height:24px; -} - -ul#menuBlock li { - position:relative; - display:block; - float:left; - width:100px; - border:1px outset #D3D3D3; - height:21px; -# height:24px; - text-align:center; - background:#E6E6FA; - padding-top:3px; -} - -ul#menuBlock li a { - color:#696969; - font: bold 12px/1 Verdana,arial; -} - -ul#menuBlock li ul { - margin:0px; - padding:0px; - list-style:none; - position:absolute; - top:24px; -# top:25px; - left:-1px; - display:none; -} - -ul#menuBlock li ul li { -# margin-top:-3px; -} - -/*ul#menuBlock li:hover ul{ - display:block; -}*/ \ No newline at end of file diff --git a/h-source/Css/mobile.css b/h-source/Css/mobile.css deleted file mode 100644 index 4fa4c83..0000000 --- a/h-source/Css/mobile.css +++ /dev/null @@ -1,271 +0,0 @@ -/*stili per il layout fisso*/ -html, body -{ - margin: 0; - padding:0; -} - -body -{ - font:normal 15px/1.3 sans-serif,arial; - text-align: left; - background:#ffffff; -} - -img -{ - border:0px; -} - -#footer -{ - /*padding-bottom:5px; - padding-top:5px;*/ -} -#footer div -{ - text-align:center; -} -#footer a -{ -/* color: #DC143C; */ -} - -.navigation-bar -{ - background-color: #015512; - height:35px; - padding-top:5px; - padding-right:5px; -} - -/*tree navigation*/ -.position_tree_box -{ - margin:5px 0px 25px 0px; - padding:5px; - font:normal 14px/1 sans-serif,arial; - border-top:1px solid #DC143C; - border-bottom:1px solid #DC143C; -} -.position_tree_box a, .position_tree_box a.ui-link:visited, .position_tree_box .ui-link -{ - text-decoration:none; - color:#DC143C; -} -/*.ui-body-d .ui-link { - color:#DC143C; - font-weight: bold; -}*/ -.last_tree_element -{ - font-weight:bold; -} - -.credits_item_title -{ - margin:15px 5px 5px 5px; - padding:5px; - padding-left:0px; - border-bottom:1px solid #228B22; - font-weight:bold; -} -.credits_item_description -{ - padding:5px; - padding-left:0px; - margin:5px; - overflow:hidden; - width:100%; -} - -#hardware_list -{ -/* padding:0 15px; */ - margin-top:20px; - margin-bottom:20px; -} -.bottom_licence_notice -{ - clear:left; - clear:right; - font:normal 12px/1.2 sans-serif,arial; - padding:10px; - background:#E0FFFF; - margin:25px 0px 5px 0px; -} -.page_list -{ - margin-top:28px; -} - -.notebook_view_title -{ - margin-bottom:28px; -} -/*jquery mobile*/ -.ui-header { - background: #B7F18C; -} - -.ui-li-thumb { - left: 5px; - max-height: 70px; - max-width: 70px; - position: absolute; - top: 5px; -} - -.ui-content .ui-listview { - margin: 15px -15px; -} - -#language-dialog .ui-header .ui-title -{ - display: block; - font-size: 16px; - margin: 0.7em 0; - margin-left:30px; - margin-top:0.8em; - text-align: left; -} -.main_content_element -{ - padding:5px 0; - border-top:1px dashed #000; -} - -.track_alert -{ - border:10px solid red; - padding:5px; -} - -.device_description -{ - background-color:#E6E6FA; - padding:5px; -} - -.viewall_no_items_found -{ - font:normal 14px/1 sans-serif,arial; - margin:20px 5px; - padding:5px; -/* color: #FF4500; */ - border-top:1px solid #FF4500; - border-bottom:1px solid #FF4500; -} - -.home_objectives_description -{ - margin:5px; - overflow:hidden; - width:100%; -} -.home_objectives_description img -{ - float:left; - margin-right:5px; -} -.home_objectives_title -{ - margin:15px 5px 5px 5px; -/* background:#90EE90; */ - font-weight:bold; - padding:5px 0px; - border-bottom:1px solid #228B22; -} - -.home_container -{ - margin:20px 0px; -} - -.tables_of_contents -{ - margin:20px 0; - padding:5px; - background-color:#EAF2F4; - border:1px solid #C7DAEF; - -moz-border-radius: 15px; - -webkit-border-radius: 15px; -} -.tables_of_contents a -{ - font-size:14px; -} -.tables_of_contents_title -{ - margin:10px 25px; - font-weight:bold; -} -/*wiki code*/ -.code_pre -{ -/* width:650px; */ - max-height:300px; - overflow:scroll; - background:#f9f4a7; - padding:5px 0 5px 5px; - font-size:12px; -/* color:#4169E1; */ - border:1px dashed #d4cb3b; -} - -.div_h1 -{ - font:bold 18px/1 sans-serif,arial; - border-bottom:1px solid gray; - padding:3px 0px; - margin:20px 0px 10px 0px; - color:gray; -} -.div_h2 -{ - font:bold 17px/1 sans-serif,arial; - color:gray; - padding:2px 0; -} -.div_h3 -{ - font:bold 16px/1 sans-serif,arial; - color:gray; - padding:2px 0; -} -.div_lang -{ - margin-top:4em; - padding:8px; - background:#cfe2ff; - /*border-top:1px solid #FFA500; - border-bottom:1px solid #FFA500;*/ -} -.div_lang a -{ - padding:0px 3px; -} - -.ui-body { - padding-top: 0.8em; - margin-top:10px; -} - -.ui-li-desc { white-space: normal; } -.ui-li-heading { white-space: normal; } -.ui-li .ui-btn-text a.ui-link-inherit { white-space: normal; } - -.devices_list .ui-li-desc -{ -/* border-bottom:1px dashed #A9A9A9; */ -} - -.ui-listview .ui-li-icon { - top: 1.3em; -} - -/*.ui-icon, .ui-icon-searchfield:after { - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - background: url("images/icons-18-white.png") no-repeat scroll 0 0 rgba(0, 0, 0, 0.4); -}*/ diff --git a/h-source/Css/pagelist.css b/h-source/Css/pagelist.css deleted file mode 100644 index 93c8454..0000000 --- a/h-source/Css/pagelist.css +++ /dev/null @@ -1,29 +0,0 @@ -/*page division*/ -.pageList { - text-align:left; - font:normal 14px/1 Verdana,arial; - padding:10px; -} - -div.pageList a { - padding:5px 10px; - border:1px outset #708090; - color:#B0E0E6; - background:#4169E1; - margin-right:5px; -} - -/*view footer*/ -.viewFooter { - height:50px; - border-top:1px solid #4169E1; - padding-top:6px; - margin-bottom:10px; - background:#d1deed; -} - -div.pageList a.currentPage -{ - font-weight:bold; - background:#0000CD; -} \ No newline at end of file diff --git a/h-source/Css/panel.css b/h-source/Css/panel.css deleted file mode 100644 index 8b9f9a9..0000000 --- a/h-source/Css/panel.css +++ /dev/null @@ -1,74 +0,0 @@ -ul { - list-style-type: none; -} - -div.mainPanel { - -} - -/*logout button*/ -.logoutButton -{ - float:left; - width:70px; - height:40px; - margin-left:5px; - border:1px outset #708090; - background:#4169E1; - text-align:center; -} -.logoutButton a -{ - display:block; - margin-top:13px; - color:#B0E0E6; - font:bold 12px/1 Verdana,arial; -} - -/*list of application in the panel main action*/ -.panelApplicationList -{ - padding:0px; -} -.panelApplicationList li -{ - display:block; - width:200px; - height:30px; - border:1px outset #708090; - margin:5px; - background:#4169E1; - padding-top:9px; -} - -.panelApplicationList li a -{ - margin:5px; - font: bold 14px/1 Verdana,arial; - color:#B0E0E6; -} - -/*list of groups an user is inserted within*/ -.groupsList -{ - margin:20px 5px 5px 5px; - font:normal 14px/1 Verdana,arial; -} -.groupsList li -{ - margin:5px 0px; - padding:0px; - font:bold 14px/1 Verdana,arial; -} -.groupsList ul -{ - padding:10px; -} - -/*list of logged users in panel*/ -.usersLoggedList -{ - margin:5px; - text-align:right; - font:normal 14px/1 Verdana,arial; -} \ No newline at end of file diff --git a/h-source/Css/popupmenu.css b/h-source/Css/popupmenu.css deleted file mode 100755 index 66a202e..0000000 --- a/h-source/Css/popupmenu.css +++ /dev/null @@ -1,49 +0,0 @@ -.verticalMenu { - margin-bottom:50px; - margin-left:10px; -/* text-align:right;*/ -} - -ul#menuBlock { -/* float:right; */ - float:left; - margin:0px; - padding:0px; - list-style:none; - height:24px; -} - -ul#menuBlock li { - position:relative; - display:block; - float:left; - width:150px; - border:1px outset #D3D3D3; - height:21px; - text-align:center; - background:#E6E6FA; - padding-top:5px; - padding-bottom:-2px; -} - -ul#menuBlock li a { - color:#696969; - font: bold 12px/1 Verdana,arial; -} - -ul#menuBlock li ul { - margin:0px; - padding:0px; - list-style:none; - position:absolute; - top:24px; - left:-1px; - display:none; -} - -ul#menuBlock li ul li { -} - -/*ul#menuBlock li:hover ul{ - display:block; -}*/ \ No newline at end of file diff --git a/h-source/Css/scaffold.css b/h-source/Css/scaffold.css deleted file mode 100755 index 8cc7529..0000000 --- a/h-source/Css/scaffold.css +++ /dev/null @@ -1,105 +0,0 @@ -html, body{margin: 0;padding:0} - -body{ - font-family: Verdana,arial,sans-serif; - font-size: 11px; - text-align: center; -/* background: #93045a; */ -} - -td { - font-size: 12px; -} - -img { - border:none; -} - -td.editForm, td.delForm, td.associateForm, td.moveupForm, td.movedownForm { - width:3%; -} - -td.editForm input, td.delForm input, td.associateForm input, td.moveupForm input, td.movedownForm input -{ - height:30px; -} - -/*alert string*/ -.alert { - font:bold 12px/1.5 Verdana,arial; - padding:5px; - margin:5px 5px 15px 5px; - background:TOMATO; - border-top:2px solid MAROON; - border-bottom:2px solid MAROON; - color:MAROON; -} - -/*executed operation string*/ -.executed { - font:bold 12px/1.5 Verdana,arial; - padding:5px; - margin:5px 5px 15px 5px; - background:#E0FFFF; - border-top:2px solid #ADD8E6; - border-bottom:2px solid #ADD8E6; - color:#4169E1; -} - -/*action:main*/ -tr.listRow { - background:#E6E6FA; -} - -tr.listHead { - font-weight: bold; - background:#d1deed; - border:1px solid #4169E1; - border-bottom:1px solid #4169E1; -} - -tr.listHead td { -/* font-weight: bold; */ -/* background:#d1deed; */ - border-top:1px solid #4169E1; - border-bottom:1px solid #4169E1; -} - -.recordsBox { - margin:10px 0px; -} - -.recordsBox table { - width:100%; -} - -.listItemForm { - margin:0px; -} - -a.linkItem { -/* background:red; */ - font:bold 12px/1 Verdana,arial; -} - -/*controller:panel -/*action:main*/ -.main_box { - padding:50px 20px; - width:700px; - height:250px; -} -.top_color { - text-align:center; - width:160px; - height:35px; - margin:0; - padding:0; -} -.bottom_color { - background:lavender; - text-align:center; - width:160px; - margin:0; - padding:5px 0; -} \ No newline at end of file diff --git a/h-source/External/Fonts/FreeFont/AUTHORS b/h-source/External/Fonts/FreeFont/AUTHORS deleted file mode 100755 index 4148c93..0000000 --- a/h-source/External/Fonts/FreeFont/AUTHORS +++ /dev/null @@ -1,208 +0,0 @@ --*- mode:text; coding:utf-8; -*- - GNU FreeFont Authors - ==================== - -The FreeFont collection is being maintained by - Steve White -The folowing list cites the other contributors that contributed to -particular ISO 10646 blocks. - -* URW++ Design & Development GmbH - - Basic Latin (U+0041-U+007A) - Latin-1 Supplement (U+00C0-U+00FF) (most) - Latin Extended-A (U+0100-U+017F) - Spacing Modifier Letters (U+02B0-U+02FF) - Mathematical Operators (U+2200-U+22FF) (parts) - Block Elements (U+2580-U+259F) - Dingbats (U+2700-U+27BF) - -* Yannis Haralambous and John - Plaice - - Latin Extended-B (U+0180-U+024F) - IPA Extensions (U+0250-U+02AF) - Greek (U+0370-U+03FF) - Armenian (U+0530-U+058F) - Hebrew (U+0590-U+05FF) - Arabic (U+0600-U+06FF) - Currency Symbols (U+20A0-U+20CF) - Arabic Presentation Forms-A (U+FB50-U+FDFF) - Arabic Presentation Forms-B (U+FE70-U+FEFF) - -* Young U. Ryu - - Arrows (U+2190-U+21FF) - Mathematical Symbols (U+2200-U+22FF) - Mathematical Alphanumeric Symbols (U+1D400-U+1D7FF) - -* Valek Filippov - - Cyrillic (U+0400-U+04FF) - -* Wadalab Kanji Comittee - - Hiragana (U+3040-U+309F) - Katakana (U+30A0-U+30FF) - -* Angelo Haritsis - - Greek (U+0370-U+03FF) - -* Yannis Haralambous and Virach Sornlertlamvanich - - Thai (U+0E00-U+0E7F) - -* Shaheed R. Haque - - Bengali (U+0980-U+09FF) - -* Sam Stepanyan - - Armenian (U+0530-U+058F) - -* Mohamed Ishan - - Thaana (U+0780-U+07BF) - -* Sushant Kumar Dash - - Oriya (U+0B00-U+0B7F) - -* Harsh Kumar - - Devanagari (U+0900-U+097F) - Bengali (U+0980-U+09FF) - Gurmukhi (U+0A00-U+0A7F) - Gujarati (U+0A80-U+0AFF) - -* Prasad A. Chodavarapu - - Telugu (U+0C00-U+0C7F) - -* Frans Velthuis and Anshuman Pandey - - - Devanagari (U+0900-U+097F) - -* Hardip Singh Pannu - - Gurmukhi (U+0A00-U+0A7F) - -* Jeroen Hellingman - - Oriya (U+0B00-U+0B7F) - Malayalam (U+0D00-U+0D7F) - -* Thomas Ridgeway - - Tamil (U+0B80-U+0BFF) - -* Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>, - Prof. Dr. Manfred Kudlek , Olaf - Kummer , and Jochen Metzinger - - Ethiopic (U+1200-U+137F) - -* Maxim Iorsh - - Hebrew (U+0590-U+05FF) - -* Vyacheslav Dikonov - - Syriac (U+0700-U+074A) - Braille (U+2800-U+28FF) - -* Panayotis Katsaloulis - - Greek Extended (U+1F00-U+1FFF) - -* M.S. Sridhar - - Devanagari (U+0900-U+097F) - Bengali (U+0980-U+09FF) - Gurmukhi (U+0A00-U+0A7F) - Gujarati (U+0A80-U+0AFF) - Oriya (U+0B00-U+0B7F) - Tamil (U+0B80-U+0BFF) - Telugu (U+0C00-U+0C7F) - Kannada (U+0C80-U+0CFF) - Malayalam (U+0D00-U+0D7F) - -* DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt - - - Sinhala (U+0D80-U+0DFF) - -* Dan Shurovich Chirkov - - Cyrillic (U+0400-U+04FF) - -* Abbas Izad - - Arabic (U+0600-U+06FF) - Arabic Presentation Forms-A (U+FB50-U+FDFF) - Arabic Presentation Forms-B (U+FE70-U+FEFF) - -* Denis Jacquerye - - Latin Extended-B (U+0180-U+024F) - IPA Extensions (U+0250-U+02AF) - -* K.H. Hussain and R. Chitrajan - - Malayalam (U+0D00-U+0D7F) - -* Solaiman Karim and Omi Azad - - Bengali (U+0980-U+09FF) - -* Sonali Sonania and Monika Shah - - - Devanagari (U+0900-U+097F) - Gujarati (U+0A80-U+0AFF) - -* Pravin Satpute , Bageshri Salvi - , Rahul Bhalerao and Sandeep Shedmake - - Devanagari (U+0900-U+097F) - Gujarati (U+0A80-U+0AFF) - Oriya (U+0B00-U+0B7F) - Malayalam (U+0D00-U+0D7F) - Tamil (U+0B80-U+0BFF) - -* Kulbir Singh Thind - - Gurmukhi (U+0A00-U+0A7F) - -* Gia Shervashidze - - Georgian (U+10A0-U+10FF) - -* Daniel Johnson - - Cherokee (U+13A0-U+13FF) - -* George Douros - - Gothic (U+10330-U+1034F) - Phoenecian (U+10900-U+1091F) - Byzantine Musical Symbols (U+1D000-U+1D0FF) - Western Musical Symbols (U+1D100-U+1D1DF) - Mathematical Alphanumeric Symbols (U+1D400-U+1D7FF) - Mah Jong Tiles (U+1F000-U+1F02B) - Dominoes (U+1F030-U+1F093) - -* Steve White - Coptic (U+2C80-U+2CFF) - -* Primož Peterlin - maintained FreeFont for several years, and is thanked for all his work. - -Please see the CREDITS file for details on who contributed particular -subsets of the glyphs in font files. - --------------------------------------------------------------------------- -$Id: AUTHORS,v 1.18 2009/01/04 15:57:54 Stevan_White Exp $ diff --git a/h-source/External/Fonts/FreeFont/COPYING b/h-source/External/Fonts/FreeFont/COPYING deleted file mode 100755 index 94a9ed0..0000000 --- a/h-source/External/Fonts/FreeFont/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/h-source/External/Fonts/FreeFont/CREDITS b/h-source/External/Fonts/FreeFont/CREDITS deleted file mode 100755 index 0f47440..0000000 --- a/h-source/External/Fonts/FreeFont/CREDITS +++ /dev/null @@ -1,528 +0,0 @@ --*- mode:text; coding:utf-8; -*- - GNU FreeFont Credits - ==================== - -This file lists contributors and contributions to the GNU FreeFont project. - - -* URW++ Design & Development GmbH - -URW++ donated a set of 35 core PostScript Type 1 fonts to the -Ghostscript project , to be available -under the terms of GNU General Public License (GPL). - - Basic Latin (U+0041-U+007A) - Latin-1 Supplement (U+00C0-U+00FF) - Latin Extended-A (U+0100-U+017F) - Spacing Modifier Letters (U+02B0-U+02FF) - Mathematical Operators (U+2200-U+22FF) - Block Elements (U+2580-U+259F) - Dingbats (U+2700-U+27BF) - - -* Yannis Haralambous and John - Plaice - -Yannis Haralambous and John Plaice are the authors of Omega typesetting -system, . Omega is an extension of TeX. -Its first release, aims primarily at improving TeX's multilingual abilities. -In Omega all characters and pointers into data-structures are 16-bit wide, -instead of 8-bit, thereby eliminating many of the trivial limitations of TeX. -Omega also allows multiple input and output character sets, and uses -programmable filters to translate from one encoding to another, to perform -contextual analysis, etc. Internally, Omega uses the universal 16-bit Unicode -standard character set, based on ISO-10646. These improvements not only make -it a lot easier for TeX users to cope with multiple or complex languages, -like Arabic, Indic, Khmer, Chinese, Japanese or Korean, in one document, but -will also form the basis for future developments in other areas, such as -native color support and hypertext features. ... Fonts for UT1 (omlgc family) -and UT2 (omah family) are under development: these fonts are in PostScript -format and visually close to Times and Helvetica font families. -Omega fonts are available subject to GPL - - Latin Extended-B (U+0180-U+024F) - IPA Extensions (U+0250-U+02AF) - Greek (U+0370-U+03FF) - Armenian (U+0530-U+058F) - Hebrew (U+0590-U+05FF) - Arabic (U+0600-U+06FF) - Currency Symbols (U+20A0-U+20CF) - Arabic Presentation Forms-A (U+FB50-U+FDFF) - Arabic Presentation Forms-B (U+FE70-U+FEFF) - -Current info: - -* Valek Filippov - -Valek Filippov added Cyrillic glyphs and composite Latin Extended A to -the whole set of the abovementioned URW set of 35 PostScript core fonts, -. The fonts are available under GPL. - - Latin Extended-A (U+0100-U+017F) - Cyrillic (U+0400-U+04FF) - - -* Wadalab Kanji Comittee - -Between April 1990 and March 1992, Wadalab Kanji Comittee put together -a series of scalable font files with Japanese scripts, in four forms: -Sai Micho, Chu Mincho, Cho Kaku and Saimaru. The font files are -written in custom file format, while tools for conversion into -Metafont and PostScript Type 1 are also supplied. The Wadalab Kanji -Comittee has later been dismissed, and the resulting files can be now -found on the FTP server of the Depertment of Mathematical Engineering -and Information Physics, Faculty of Engineering, University of Tokyo -. - - Hiragana (U+3040-U+309F) - Katakana (U+30A0-U+30FF) - - -* Young U. Ryu - -Young Ryu is the author of Txfonts, a set of mathematical symbols -designed to accompany text typeset in Times or its variants. In the -documentation, Young adresses the design of mathematical symbols: "The -Adobe Times fonts are thicker than the CM fonts. Designing math fonts -for Times based on the rule thickness of Times = , , + , / , < , -etc. would result in too thick math symbols, in my opinion. In the TX -fonts, these glyphs are thinner than those of original Times -fonts. That is, the rule thickness of these glyphs is around 85% of -that of the Times fonts, but still thicker than that of the CM fonts." -TX fonts are are distributed under the GNU public license (GPL). -. - - Arrows (U+2190-U+21FF) - Mathematical Symbols (U+2200-U+22FF) - - -* Angelo Haritsis - -Angelo Haritsis has compiled a set of Greek Type 1 fonts, available on -. -The glyphs from this source has been used to compose Greek glyphs in -FreeSans and FreeMono. - -Angelo's licence says: "You can enjoy free use of these fonts for -educational or commercial purposes. All derived works should include -this paragraph. If you want to change something please let me have -your changes (via email) so that they can go into the next -version. You can also send comments etc to the above address." - - Greek (U+0370-U+03FF) - - -* Yannis Haralambous and Virach Sornlertlamvanich - -In 1999, Yannis Haralambous and Virach Sornlertlamvanich made a set of -glyphs covering the Thai national standard Nf3, in both upright and -slanted shape. The collection of glyphs have been made part of GNU -intlfonts 1.2 package and is available under the GPL at -. - - Thai (U+0E00-U+0E7F) - - -* Shaheed R. Haque - -Shaheed Haque has developed a basic set of basic Bengali glyphs -(without ligatures), using ISO10646 encoding. They are available under -the XFree86 license at . - -Copyright (C) 2001 S.R.Haque . All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL S.R.HAQUE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of S.R.Haque shall not be -used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from -S.R.Haque. - - Bengali (U+0980-U+09FF) - - -* Sam Stepanyan - -Sam Stepanyan created a set of Armenian sans serif glyphs visually -compatible with Helvetica or Arial. Available on -. On -2002-01-24, Sam writes: "Arial Armenian font is free for -non-commercial use, so it is OK to use under GPL license." - - Armenian (U+0530-U+058F) - - -* Mohamed Ishan - -Mohamed Ishan has started a Thaana Unicode Project - and among other things created a -couple of Thaana fonts, available under FDL or BDF license. - - Thaana (U+0780-U+07BF) - - -* Sushant Kumar Dash (*) - -Sushant Dash has created a font in his mother tongue, Oriya. As he -states on his web page : -"Please feel free to foreword this mail to your Oriya friends. No -copyright law is applied for this font. It is totally free!!! Feel -free to modify this using any font editing tools. This is designed for -people like me, who are away from Orissa and want to write letters -home using Computers, but suffer due to unavailability of Oriya -fonts.(Or the cost of the available packages are too much)." - - Oriya (U+0B00-U+0B7F) - - -* Harsh Kumar - -Harsh Kumar has started BharatBhasha - -an effort to provide "FREE software, Tutorial, Source Codes -etc. available for working in Hindi, Marathi, Gujarati, Gurmukhi and -Bangla. You can type text, write Web pages or develop Indian Languages -Applications on Windows and on Linux. We also offer FREE help to -users, enthusiasts and software developers for their work in Indian -languages." - - Devanagari (U+0900-U+097F) - Bengali (U+0980-U+09FF) - Gurmukhi (U+0A00-U+0A7F) - Gujarati (U+0A80-U+0AFF) - - -* Prasad A. Chodavarapu - -Prasad A. Chodavarapu created Tikkana, a Telugu font available in Type -1 and TrueType format on . -Tikkana exceeds the Unicode Telugu range with some composite glyphs. -Available under the GNU General Public License. - - Telugu (U+0C00-U+0C7F) - - -* Frans Velthuis and Anshuman Pandey - - -In 1991, Frans Velthuis from the Groningen University, The -Netherlands, released a Devanagari font as Metafont source, available -under the terms of GNU GPL. Later, Anshuman Pandey from the Washington -University, Seattle, USA, took over the maintenance of font. Fonts can -be found on CTAN, . I -converted the font to Type 1 format using Péter Szabó's TeXtrace -program and removed some -redundant control points with PfaEdit. - - Devanagari (U+0900-U+097F) - - -* Hardip Singh Pannu - -In 1991, Hardip Singh Pannu has created a free Gurmukhi TrueType font, -available as regular, bold, oblique and bold oblique form. Its license -says "Please remember that these fonts are copyrighted (by me) and are -for non-profit use only." - - Gurmukhi (U+0A00-U+0A7F) - - -* Jeroen Hellingman - -Jeroen Hellingman created a set of Malayalam metafonts in 1994, and a -set of Oriya metafonts in 1996. Malayalam fonts were created as -uniform stroke only, while Oriya metafonts exist in both uniform and -modulated stroke. From private communication: "It is my intention to -release the fonts under GPL, but not all copies around have this -notice on them." Metafonts can be found on CTAN, - and -. - - Oriya (U+0B00-U+0B7F) - Malayalam (U+0D00-U+0D7F) - - -* Thomas Ridgeway <> (*) - -Thomas Ridgeway, then at the Humanities And Arts Computing Center, -Washington University, Seattle, USA, (now defunct), created a Tamil -metafont in 1990. Anshuman Pandey from the same university took over -the maintenance of font. Fonts can be found at CTAN, -. - - Tamil (U+0B80-U+0BFF) - - -* Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>, - Prof. Dr. Manfred Kudlek , Olaf - Kummer , and Jochen Metzinger - -Beyene, Kudlek, Kummer and Metzinger from the Theoretical Foundations -of Computer Science, University of Hamburg, prepared a set of Ethiopic -metafonts, found on -. They also -maintain home page on the Ethiopic font project, -, -and can be reached at . The current -version of fonts is 0.7 (1998), and they are released under GNU GPL. I -converted the fonts to Type 1 format using Péter Szabó's TeXtrace-A -program and removed some -redundant control points with PfaEdit. - - Ethiopic (U+1200-U+137F) - - -* Maxim Iorsh - -In 2002, Maxim Iorsh started the Culmus project, aiming at providing -Hebrew-speaking Linux and Unix community with a basic collection of -Hebrew fonts for X Windows. The fonts are visually compatible with -URW++ Century Schoolbook L, URW++ Nimbus Sans L and URW++ Nimbus Mono -L families, respectively, and are released under GNU GPL license. See -also . - - Hebrew (U+0590-U+05FF) - - -* Panayotis Katsaloulis - -Panayotis Katsaloulis helped fixing Greek accents in the Greek -Extended area. - - Greek Extended (U+1F00-U+1FFF) - - -* Vyacheslav Dikonov - -Vyacheslav Dikonov made a Braille unicode font that could be merged -with the UCS fonts to fill the 2800-28FF range completely. (uniform -scaling is possible to adapt it to any cell size). He also contributed -a free syriac font, whose glyphs (about half of them) are borrowed -from the "Carlo Ator" font freely downloadable from -. Vyacheslav also filled in a few missing -spots in the U+2000-U+27FF area, e.g. the box drawing section, sets of -subscript and superscript digits and capital Roman numbers. - - Syriac (U+0700-U+074A) - Box Drawing (U+2500-U+257F) - Braille (U+2800-U+28FF) - - -* M.S. Sridhar - -M/S Cyberscape Multimedia Limited, Mumbai, developers of Akruti -Software for Indian Languages (http://www.akruti.com/), have released -a set of TTF fonts for nine Indian scripts (Devanagari, Gujarati, -Telugu, Tamil, Malayalam, Kannada, Bengali, Oriya, and Gurumukhi) -under the GNU General Public License (GPL). You can download the fonts -from the Free Software Foundation of India WWW site -(http://www.gnu.org.in/akruti-fonts/) or from the Akruti website. - -For any further information or assistance regarding these fonts, -please contact mssridhar AT vsnl.com. - - Devanagari (U+0900-U+097F) - Bengali (U+0980-U+09FF) - Gurmukhi (U+0A00-U+0A7F) - Gujarati (U+0A80-U+0AFF) - Oriya (U+0B00-U+0B7F) - Tamil (U+0B80-U+0BFF) - Telugu (U+0C00-U+0C7F) - Kannada (U+0C80-U+0CFF) - Malayalam (U+0D00-U+0D7F) - - -* DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt - - -Noah Levitt found out that the Sinhalese fonts available on the site - are released under GNU GPL, or, -precisely, "Public Domain under GNU Licence Produced by DMS -Electronics for The Sri Lanka Tipitaka Project" (taken from the font -comment), and took the effort of recoding the font to Unicode. - - Sinhala (U+0D80-U+0DFF) - - -* Daniel Shurovich Chirkov - -Dan Chirkov updated the FreeSerif font with the missing Cyrillic -glyphs needed for conformance to Unicode 3.2. The effort is part of -the Slavjanskij package for Mac OS X, -. - - Cyrillic (U+0400-U+04FF) - - -* Denis Jacquerye - -Denis Jacquerye added new glyphs and corrected existing ones in the -Latin Extended-B and IPA Extensions ranges. - - Latin Extended-B (U+0180-U+024F) - IPA Extensions (U+0250-U+02AF) - - -* K.H. Hussain and R. Chitrajan - -`Rachana' in Malayalam means `to write', `to create'. Rachana Akshara Vedi, -a team of socially committed information technology professionals and -philologists, has applied developments in computer technology and desktop -publishing to resurrect the Malayalam language from the disorder, -fragmentation and degeneration it had suffered since the attempt to adapt -the Malayalam script for using with a regular mechanical typewriter, which -took place in 1967-69. K.H. Hussein at the Kerala Forest Research Institute -has released "Rachana Normal" fonts with approximately 900 glyphs required -to typeset traditional Malayalam. R. Chitrajan apparently encoded the -glyphs in the OpenType table. - -In 2008, the Malayalam ranges in FreeSerif were updated under the advise -and supervision of Hiran Venugopalan of Swathanthra Malayalam Computing, -to reflect the revised edition Rachana_04. - - Malayalam (U+0D00-U+0D7F) - - -* Solaiman Karim - - Bengali (U+0980-U+09FF) - -Solaiman Karim has developed several OpenType Bangla fonts and -released them under GNU GPL on . - - -* Sonali Sonania and Monika Shah - - - Devanagari (U+0900-U+097F) - Gujarati (U+0A80-U+0AFF) - -Glyphs were drawn by Cyberscape Multimedia Ltd., #101,Mahalakshmi -Mansion 21st Main 22nd "A" Cross Banashankari 2nd stage Banglore -560070, India. Converted to OTF by IndicTrans Team, Powai, Mumbai, -lead by Prof. Jitendra Shah. Maintained by Monika Shah and Sonali -Sonania of janabhaaratii Team, C-DAC, Mumbai. This font is released -under GPL by Dr. Alka Irani and Prof Jitendra Shah, janabhaaratii -Team, C-DAC, Mumabi. janabhaaratii is localisation project at C-DAC -Mumbai (formerly National Centre for Software Technology); funded by -TDIL, Govt. of India. Contact:monika_shah AT lycos.com, -sonalisonania AT yahoo.com, jitendras AT vsnl.com, alka AT ncst.ernet.in. -website: www.janabhaaratii.org.in. - - -* Pravin Satpute , Bageshri Salvi - , Rahul Bhalerao and Sandeep Shedmake - - Devanagari (U+0900-U+097F) - Gujarati (U+0A80-U+0AFF) - Oriya (U+0B00-U+0B7F) - Malayalam (U+0D00-U+0D7F) - Tamil (U+0B80-U+0BFF) - -In December 2005 the team at www.gnowledge.org released a set of two -Unicode pan-Indic fonts: "Samyak" and "Samyak Sans". "Samyak" font -belongs to serif style and is an original work of the team; "Samyak -Sans" font belongs to sans serif style and is actually a compilation -of already released Indic fonts (Gargi, Padma, Mukti, Utkal, Akruti -and ThendralUni). Both fonts are based on Unicode standard. You can -download the font files (released under GNU/GPL License) from -http://www.gnowledge.org/Gnoware/localization/font.htm - - -* Kulbir Singh Thind - - Gurmukhi (U+0A00-U+0A7F) - -Dr. Kulbir Singh Thind designed a set of Gurmukhi Unicode fonts, -AnmolUni and AnmolUni-Bold, which are available under the terms of GNU -Generel Public Licens from the Punjabu Computing Resource Center, -http://guca.sourceforge.net/typography/fonts/anmoluni/. - - -* Gia Shervashidze - - Georgian (U+10A0-U+10FF) - -Starting in mid-1990s, Gia Shervashidze designed many -Unicode-compliant Georgian fonts: Times New Roman Georgian, Arial -Georgian, Courier New Georgian. His work on Georgian localization can -be reached at http://www.gia.ge/. - - -* Primož Peterlin - -Primož Peterlin filled in missing glyphs here and there (e.g. Latin -Extended-B and IPA Extensions ranges in the FreeMono familiy), and -created the following UCS blocks: - - Latin Extended-B (U+0180-U+024F) - IPA Extensions (U+0250-U+02AF) - Arrows (U+2190-U+21FF) - Box Drawing (U+2500-U+257F) - Block Elements (U+2580-U+259F) - Geometrical Shapes (U+25A0-U+25FF) - -* Mark Williamson - -Made the MPH 2 Damase font, from which - Hanunóo (U+1720-U+173F) - Buginese (U+1A00-U+1A1F) - Tai Le (U+1950-U+197F) - Ugaritic (U+10380-U+1039F) - Old Persian (U+103A0-U+103DF) - -* Jacob Poon - -Submitted a very thorough survey of glyph problems and other suggestions. - -* Alexey Kryukov - -Made the TemporaLCGUni fonts, based on the URW++ fonts, from which at one -point FreeSerif Cyrillic, and some of the Greek, was drawn. He also provided -valuable direction about Cyrillic and Greek typesetting. - -* George Douros - -The creator of several fonts focusing on ancient scripts and symbols. -Many of the glyphs are created by making outlines from scanned images -of ancient sources. - - Aegean: Phoenecian - Analecta: Gothic (U+10330-U+1034F) - Musical: Byzantine & Western - Unicode: many Miscellaneous Symbols, Miscellaneous Technical, - supplemental Symbols, and Mathematical Alphanumeric symbols, - Mah Jong, and the outline of the Domino. - -* Daniel Johnson - -Created by hand a Cherokee range specially for FreeFont to be "in line with -the classic Cherokee typefaces used in 19th century printing", but also to -fit well with ranges previously in FreeFont. - Cherokee (U+13A0-U+13FF) - -Notes: - -*: The glyph collection looks license-compatible, but its author has - not yet replied and agreed on their work being used in part of - this glyph collection. - --------------------------------------------------------------------------- -$Id: CREDITS,v 1.23 2009/01/04 15:57:54 Stevan_White Exp $ diff --git a/h-source/External/Fonts/FreeFont/ChangeLog b/h-source/External/Fonts/FreeFont/ChangeLog deleted file mode 100755 index d5345d0..0000000 --- a/h-source/External/Fonts/FreeFont/ChangeLog +++ /dev/null @@ -1,4525 +0,0 @@ -$Id: ChangeLog,v 1.254 2009/01/04 16:12:59 Stevan_White Exp $ -2009-01-04 Stevan_White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Added 2009 to copyright dates - - * AUTHORS, CREDITS: - - Removed Glagolitic range author - - * FreeSans.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Added some TrueType names - -2009-01-01 Stevan_White - * FreeSerif.sfd: - - Removde Glagolitic range, since have not (yet) received OK from author. - - Added some TrueType Names - -2008-12-31 Stevan_White - * COPYING: - - Updated license to GPL v3 - -2008-12-30 Stevan_White - * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Oblique versions of Daniel Johnson's Cherokee. - - * FreeSerifBold.sfd: - - Cherokee Bold range from Daniel Johnson. - -2008-12-27 Stevan_White - * isMonoMono.py: - - 900 EM -> 800 - - * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd: - - Made glyphs to lie between -200 and 800 EM - - * isMonoMono.py: - - check that glyphs lie in vertical bounding boxes - - * FreeMono.sfd, FreeSerif.sfd: - - Extensible bracket characters didn't exactly line up. Fixed. - Mono: a couple of glyphs had gotten out of their bounding boxes again. - -2008-12-26 Stevan_White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Final pre-release cleanup - - * FreeSerif.sfd: - - Buginese vowel u was misnamed - - * FreeMono.sfd: - - Yatcyrillic somehow was a mark character ... fixed - - * FreeSans.sfd, FreeSansOblique.sfd: - - Had to un-link references in - Sans: uni02B2, uni02B5 - SansOblique: uni0363 - because validation of the TTF file said the glyph - "is drawn in wrong direction" - I would have preferred to have understand this... - - * Makefile: - - Added quick test for FontForge version. - - * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd: - - Removed kerning tables (?? what were they doing here anyway??) - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Kerning tables for Thai. - Handles one common case: short letter followed by a tall one with - an overhang to the left. - -2008-12-25 Stevan_White - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: - - More putzing with kerning tables - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Copied kerning classes - Serif -> SerifBold - SerifItalic -> SerifBoldItalic - Sans -> SansOblique SansBold SansBoldOblique - Some associated naming of characters, etc - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Additions and correction in Spacing Modifier letters and IPA Extensions - -2008-12-23 Stevan_White - * FreeSerif.sfd: - - Applied patch to Cherokee range - -2008-12-20 Stevan_White - * FreeSerif.sfd, FreeSerifItalic.sfd: - - Fixed kern classes that end in space (crashes FontForge) - - * FreeSerifItalic.sfd, FreeSerif.sfd: - - kerning - -2008-12-19 Stevan_White - * FreeSerifItalic.sfd: - - kerning - - * FreeSerif.sfd: - - kerning - Some adjustments to Glagolitc spacing, mark positioning - -2008-12-18 Stevan_White - * FreeSerif.sfd, FreeSerifItalic.sfd: - - kerning - -2008-12-17 Stevan_White - * FreeSerif.sfd, FreeSerifItalic.sfd: - - kerning - -2008-12-11 Stevan_White - * FreeSans.sfd, FreeSerif.sfd: - - kerning - -2008-12-10 Stevan_White - * FreeSans.sfd, FreeSansBold.sfd: - - kerning - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd: - - kerning - -2008-12-09 Stevan_White - * FreeSerif.sfd, FreeSerifItalic.sfd: - - kerning - -2008-12-08 Stevan_White - * FreeSansOblique.sfd: - - Slanted small final sigma. Remedies - bug #24993: U+03C2 "Greek small letter final sigma" not slanted in - Free Sans Oblique - https://savannah.gnu.org/bugs/index.php?24993 - -2008-12-07 Stevan_White - * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - kerning, etc - -2008-12-06 Stevan_White - * FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: - - kerning - Tweek in Sans having to do with addition of Latin Extended - -2008-12-05 Stevan_White - * FreeSansBold.sfd, FreeSansBoldOblique.sfd: - - Tweeks to Latin Extended Additional - - * FreeSansBoldOblique.sfd: - - Added Latin Extended Additional range - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Extra space at end of kern class names has bad effect on FornForge - script that try to run through kern classes. Some FontForge call - corrupts memory. - Got rid of extra space. - -2008-12-02 Stevan_White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Replaced U+0387 GREEK ANO TELEIA with top dot of colon. - See bug #24987: U+0387 GREEK ANO TELEIA too low - https://savannah.gnu.org/bugs/index.php?24987 - - * FreeSerif.sfd: - - more kerning in Cyrillic (broke into two tables of classes) - -2008-12-01 Stevan_White - * FreeSerif.sfd: - - tweeks to kernin - - * FreeSerifBoldItalic.sfd: - - kerning - -2008-11-30 Stevan_White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Kerning for Latin and Cyrillic fairly complete in Serif faces. - Complete in sense that it looks pretty good under Pango for - English French German Spanish Polish Czech Latvian - But have not done Vietnamese (will require many more entries). - I adjust roman and italic, then copy tables by hand to bold and - bolditalic. - Misgiving: bolditalic is much too crammed - Overall, I may have over-kerned. (A difficult temptation to master.) - - * FreeSerif.sfd, FreeSerifItalic.sfd: - - kerning - - * FreeSans.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: - - kerning - In Serif, modified widths of some extended latin glyphs - -2008-11-29 Stevan_White - * FreeSerif.sfd: - - Broke Latin kerning subtable into four, hoping it will be easier to - understand and maintain. - - * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, - FreeSerifItalic.sfd, FreeSerifBold.sfd, FreeSansOblique.sfd, - FreeSans.sfd: - - kerninig - -2008-11-28 Stevan_White - * FreeSans.sfd, FreeSerif.sfd: - - more kerning; - made guillemot narrower - - * FreeSansOblique.sfd, FreeSerif.sfd: - - previous commit was incomplete - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Adjusted width of single quotes (and apostrophe) to be "punctuation width" - More fiddling with kerning. - -2008-11-27 Stevan_White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: - - much fiddling with kerning - -2008-11-26 Stevan_White - * FreeSerifBold.sfd: - - Basic kerning, named main Cyrillic letters - - * FreeSerifItalic.sfd: - - Basic Cyrillic kerning - - * FreeSerif.sfd: - - Tweeks to Cyrillic kerning - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd, Makefile: - - Much fiddling with kerning, tables, and generating fonts whose kerning - tables work with OpenOffice. - -2008-11-24 Stevan_White - * FreeSerif.sfd: - - regularized padding in Miscellaneous symbols. - At least within related ranges tried to make similar. - Made to validate - -2008-11-23 Stevan_White - * FreeSerif.sfd: - - Filled out Miscellaneous Symbols. Used George Douros' Unicode font. - Completed Miscellaneous Symbols, with some drawings from George Douros' - Unicode Symbols, and some of mine. - - * FreeMono.sfd, FreeMonoOblique.sfd: - - Replaced Greek Exteded psili and dasia with scaled versions of the - "bent quote" mark. I think it's distinctive enough, but not so silly. - - Remedies bug #22997: Mono: Greek Extended psili is ugly - https://savannah.gnu.org/bugs/?22997 - - * FreeSerif.sfd: - - Made some recycling symbols - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Finished with Hebrew Pointed letters in all faces. - -2008-11-22 Stevan_White - * FreeSans.sfd: - - Fiddled with Hebrew Pointed letters - - * FreeSerifItalic.sfd: - - Marks for Vietnamese - - * FreeSerif.sfd, FreeSerifItalic.sfd: - - Letter pe had strange thick middle ear that looked awful. lamed had ben - bumped at some point. Fixed. Adjusted some of the points. - -2008-11-21 Stevan_White - * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - repairs to Pointed Hebrew - - * FreeSerif.sfd: - - Numeral line positioning marks for Gothic - - * FreeSerifItalic.sfd: - - Added Combining Marks for Symbols (some question about obliqueness of - some symbols) - Cleaned up some empty glyphs in Pointed Hebrew. - -2008-11-20 Stevan_White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Provided Hebrew pointed letters, with lookups, for all Serif faces. - -2008-11-19 Stevan_White - * FreeSerifBoldItalic.sfd: - - renamed Hebrew lookups - - * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Completed Hebrew in Bold faces. - - * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: - - More tweeks to Hebrew points - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: - - Adjustments corrections and additions to Hebrew points - -2008-11-18 Stevan_White - * FreeSansBold.sfd: - - Cleaned out a lot of ridiculous kernings - -2008-11-17 Stevan_White - * FreeSansBoldOblique.sfd: - - fiddled with Armenian ligatures - - * FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Added Armenian (with ligatures) to BoldOblique - Fiddled with character spacing - -2008-11-16 Stevan_White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Added U+01f9 and paragraph end marker to Georgian - Fiddled with Armenian ligatures - -2008-11-15 Stevan_White - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Another pass at letter spacing in Cyrillic. - Also went through ancient letters. - - Added Georgian paragraph separator 10FB - Added Georgian turned gan 10F9 (because it was easy) - - Re-worked letter spacing through modern Cyrillic range. - - * FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd: - - Letter spacing - -2008-11-14 Stevan_White - * FreeSerif.sfd: - - Added several characters to Cyrillic Extended-B - - * FreeSansBold.sfd, FreeSansBoldOblique.sfd: - - Made Cyrillic hooked e U+04BC-F to look less goofy. - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Based on assertion on Pechatnyj Dvor's web site, Cyrillic Fita - U+0472-3 and "Barred O" U+04E8-9 are different styles the same letter, - and the fact that the tilde in the O never looked good in Sans, I - made them all barred O's. - - * FreeSerif.sfd: - - Added Cyrillic Yn, yn (U+a65e-f) - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Synced up Cyrillic and Combining Diacritics ranges, - Couple of tweeks in Gujarati to make TT validate - - * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Changes to older Cyrillic letters, in response to further information. - Made omegas, omegas with titlo, and OT to all be of the same size and - shape in Serif. - Un-linked Cyrillic Psi and psi from Greek, made squarer versions. - - Some more Cyrillic diacritical marks in Sans. Re-worked U+04bc-f . - Experimenting with mark positioning for Cyrillic - -2008-11-12 Stevan_White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Strove to make Euro look more like the EC logo design, while making - glyph fit better with the design of its face. Bug #3576: Euro design - https://savannah.gnu.org/bugs/?23576 - - * FreeSans.sfd, FreeSerif.sfd: - - Adjustments mostly to GPOS tables having to do with Vietnamese marks. - The WAZU Vietnamese test page looks pretty good in Sans now. - Still not thrilled with below-dot when it appears with a mark over - e.g. U+0102. Pango positions one or the other but not both. - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Extensive modification of GPOS lookup tables for mark positioning. - I think they're now all functional (except styled Mono faces have none). - Also added lots of marks to faces that didn't have them, and also - fiddled with Combining Diacritical Marks. - -2008-11-10 Stevan_White - * FreeSerif.sfd: - - Made one combining mark really combining - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Made a few combining characters to be zero-width in Mono, - Added them to other styles. - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Figured out why below marks in Thai weren't working in the lowest - letters. I think Pango and other font renderers ignore 'blwm'. - However, 'mark' works. - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Tweeks to Thai marks - -2008-11-09 Stevan_White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Several bugfixes in Thai, mostly having to do with mark placement and - ligatures. Implemented ru-saraaa and lu-saraaa with ligatures. - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - added and named dottedcircle (used by Pango to render - combining mark base) - - * FreeSerif.sfd: - - Tweeks to Coptic, after viewing more papyrus samples and web pages. - - * FreeSerif.sfd: - - Weight of Coptic small letters made to match that of Latin and Greek ones. - -2008-11-08 Stevan_White - * FreeSerif.sfd: - - Made Coptic to comply better with - http://www.wazu.jp/gallery/Test_Coptic.html - Made a flourish at foot of letters with long diagonal. - - More tweeks to Coptic; put in a mark lookup table. - - Note: for small letters I made scaled references to captials. - Results in those letters looking quite light next to the capitals and - next to small Latin letters. Also, there are a few variant forms for - capitals (Unicode samples don't show this). It would be good to - re-work - - Added Coptic alphabet in u+2C80-2CB1 and u+03E2-u+03EF, drawn/built by - me, based on Unicode samples, TeX font copte, and scans at WikiPedia. - -2008-11-07 Stevan_White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Further tweeks to dieresis in Greek and Cyrillic - - * FreeSerif.sfd: - - replaced Greek I dieresis with references, tweeked height of dieresis. - -2008-11-04 Stevan_White - * FreeSerif.sfd: - - Added a few Cyrillic Extended-B letters seen in web pages while looking - for Glagolitic text. - - * FreeMono.sfd, FreeMonoOblique.sfd: - - Added a few old Cyrillic characters. - - * FreeSerif.sfd: - - Several corrections and tweeks to Glagolitic. - Still missing six slots from Unicode, but don't see them in the TeX - fonts. - On the other hand, several on-line Glagolitic pages (bibles etc) don't - seem to use these. Maybe it's OK as-is. - -2008-11-03 Stevan_White - * FreeSerif.sfd: - - Added lowercase range to Glagolitic, as a facile scaling of the - uppercase. - - Added letter to Glagolitic, scaled range. - -2008-11-02 Stevan_White - * FreeSerif.sfd: - - Replaced fraktur bold from Mathematical Alphanumeric Symbols with that - from TX Fonts by Young Ryu. - One concern: letter k is damaged (in both medium and bold). I just - hacked something up. - - Added Glagolitic "round type" font (Croation capitols only) from the - collection of Croatian fonts for LaTeX by Darko Zubrinić - ftp://ftp.dante.de/tex-archive/languages/croatian/ - http://www.tug.org/TUGboat/Articles/tb17-1/tb50zubr.pdf - - Several letters are missing besides the small letters. - - * FreeSerifBoldItalic.sfd: - - A couple of Thai references got obliqued twice. - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - By popular demand, removed 'ears' from Greek Upsilon and Psi. - Copied resulting glyphs to Serif Mathematical Alphanumeric Symbols. - - * FreeSerif.sfd: - - Some pointwise cleanup of main Tamil range - - Tried some things with lookups. Didn't make much headway. - -2008-11-01 Stevan_White - * FreeMono.sfd: - - somehow made a letter with wrong width - - * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Added similar lookups and ligatures to Thai ranges. - - * FreeSerif.sfd: - - Lookups now work no worse than those for other Thai fonts, at least - in Pango. Still perplexed by behaviour of "Required" lookups. - - For Thai, made ligatures and lookups for yoying and thothan combined - with a lower vowel. These work well. - Attempted looksups for saraaa with ru and lu, and for saraam. - Not working. - - Cleaned up a few of the Bengali ligatures - - * FreeSerifBold.sfd: - - Tweek Thai - -2008-10-31 Stevan_White - * FreeSerif.sfd: - - Fixed ligatures and mark positioning for Hanunóo. - Problem with ligatures: Gnome pango doesn't do 'rlig', only 'liga' - - * FreeSerifItalic.sfd: - - Changed lookup table scripts for Devanagari and Bengali. - Find Problems -> ATT found several problems showing lookups acting on - glyphs that weren't listed in the script ranges, including dev2, bng2 - (why not deva and beng, I don't know). - - danda and doubledanda of Devanagari I understand are to be shared among - Indic scripts. So included bng2 and dev2 in the 'aalt' table for those. - - The 'init' and 'half' tables for Bengali made active for bng2. - - The 'locl' table for Bengali didn't do anything I could see: It mapped - the Devanagari danda to itself, and the doubledanda to itself. Deleted. - - Cleaned up some kern tables. - adjustments of under 5 EM are invisible. Some others I just didn't like. - Some were putting a letter beneath another, with is wrong. - - * FreeSerifBoldItalic.sfd: - - Added Thai - - * FreeSerifBold.sfd, FreeSerifItalic.sfd: - - Changes to mark positioning lookups, esp. in Italic. - Widened numerals in Bold - -2008-10-27 Stevan_White - * FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Tweeks regarding Armenian and lookups - - * FreeSansBold.sfd: - - Added Armenian ligatures FB13-FB17 with lookups - Also made a historical ligature ('hlig') table for u+0587. - - Toward bug #15183: missing characters from Armenian range - https://savannah.gnu.org/bugs/index.php?15183 - - * FreeSansOblique.sfd: - - Added Armenian ligatures, lookups. Cleaned up contours. - - * FreeSans.sfd: - - Added 5 Armenian ligatures to U+FB13 – FB17, and made corresponding - 'liga' lookup. Found there one ligature u+0587 that according to - http://en.wikipedia.org/wiki/Armenian_alphabet - - "in new orthography the և character is not a typographical ligature anymore, and must never be treated as such. It is a distinct letter and has its place in the new alphabetic sequence." - So moved this out of the 'liga' lookup and into a new 'hlig' lookup. - -2008-10-26 Stevan_White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: - - Lots of improvements to Thai. - Completely revised letter spacing in Italic, and fiddled with combining - marks in all. - Still aren't working quite right, especially in Italic. - Still need to work over digits (in Bold they aren't even bold yet) - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: - - Bold Thai : added (painstakingly) constructed glyphs, lookups - roman Thai: tweeks - Italic Thai: tweeks (Note this still has multiple problems) - -2008-10-25 Stevan_White - * FreeSerif.sfd: - - WAZU says - http://www.wazu.jp/gallery/Fonts_Hanunoo.html - - MPH 2B Damase doesn't support the consonant-vowel ligatures necessary - to render Buhid writing. - - OK, so I made 'mark' lookups for combining marks and a bunch of - ligatures in an 'rlig' lookup. The latter still not working: - don't know why. - - Made page to match the example of the combining forms at - http://www.omniglot.com/writing/hanunoo.htm - -2008-10-24 Stevan_White - * FreeSerif.sfd: - - Removed some marks from Mathematical Alphanumeric Symbols - - * FreeSerif.sfd: - - Tweeked combining marks for Vietnamese. Made to satisfy - WAZU JAPAN Comprehensive Unicode Test Page for Vietnamese - http://www.wazu.jp/gallery/Test_Vietnamese.html - Could still use some tweeking... - - * FreeSerif.sfd: - - Added marks for composition of Vietnamese - - * FreeMono.sfd, FreeSerif.sfd: - - Put "below" combining mark on lots of vowels and derivatives, - for Vietnamese. - Named a bunch of composit Latin, expecting to make substitutions. - -2008-10-23 Stevan_White - * FreeSerif.sfd: - - Thai spacing alterations based on advice of a native speaker. - -2008-10-22 Stevan_White - * FreeSerif.sfd: - - re-named Thai lookups according to order - -2008-10-21 Stevan_White - * FreeSans.sfd: - - Cleanup of glyphs in Gujarati, Devanagari. - - Note: Serious problem with Sans GPOS abvm in Devanagari - "'abvm' Above Base Mark in Devanagari subtable" "gujr-0" - But all the characters that list gujr-0 are in Gujarati. - Not sure how this got broken or how to fix it. - - * FreeSerif.sfd: - - Fiddled with Thai mark positioning: passes my tests now OK. - Made a few more references in Math Symbols; more regularization of - stroke. - - * FreeSerif.sfd: - - Added mark class for Vietnamese "horn" - Several references made in General Punctuation, Arrows - - * FreeMono.sfd: - - added some Combining Diacritical Marks - -2008-10-20 Stevan_White - * FreeSerif.sfd: - - Made some references from serifed Latin capitals to Greek counterparts. - - * FreeSerif.sfd: - - Made a few repeated glyphs into references in Musical Symbols - -2008-10-19 Stevan_White - * FreeSerif.sfd: - - Moved several glypns from Mathematical Alphanumeric Symbols to - Letterlike Symbols. - Couple tweeks in Mathematical Symbols. - - * FreeMono.sfd, FreeSerif.sfd: - - Fiddling with Mathematical Symbols. - In Serif, trying to make stroke width more consistent. - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd: - - Added some Greek symbols in Mono and Sans to make a little more regular - and correspond better with TeX. - Tweek of serif. - - * FreeSansBold.sfd: - - a few more improvements. - - One problem with the Mathematical Alphanumeric area is, one must - remember to change it any time another face is altered... - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerifBold.sfd: - - Several improvements and additions to Sans faces (mostly in Greek) from - experience of pasting into FreeSerif Mathematical Alphanumeric Symbols. - - * FreeSerif.sfd: - - Replaced most of Mathematical Alphanumeric Symbols - roman italic bold (latin and greek) - gothic italic bold (latin and greek) - typewriter - and numerals - with glyphs from FreeFont. These were scaled to uniform height. - - Remains: Blackboard Bold, Fraktur, Calligraphic, Script - - * FreeSerif.sfd: - - Tidied lookup table names for Malayalam - - * FreeSerif.sfd: - - Applied Malayalam patch from Hiran Venugopalan - - * FreeMono.sfd: - - Added/corrected many Mathematical Symbols - - * FreeSansOblique.sfd: - - more IPA - -2008-10-18 Stevan_White - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Made lots more IPA and Phonetic Extensions - Note: fontforge is reporting an error in a few glyphs made by scaling - another, that the glyphs are drawn in the wrong direction--only in - TrueType though. Suspect a FontForge bug. - - Added several Combining Diacritical Marks - -2008-10-17 Stevan_White - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Made several Spacing Modifier Letters, Combining Diacritical Marks, - and IPA and Phonetic Extensions - -2008-10-16 Stevan_White - * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Added some Superscripts and Subscripts - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Finished off Superscripts and subscripts - - Completed General Punctuation for Mono faces - - Added some General Punctuation - -2008-10-15 Stevan_White - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - more Letterlike Symbols, Currency Symbols - - * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Made some Combining Diacritical Marks for Symbols, Letterlike Symbols - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Added some General Punctuation - -2008-10-14 Stevan_White - * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Added double slanted hyphen, made General Punctuaton Supplement like - Serif's - - * FreeSansBoldOblique.sfd: - - Filled out Greek Extended - - * FreeMono.sfd, FreeSerifItalic.sfd: - - fixes to last 2 commits - - * FreeSerifItalic.sfd: - - Last character to General Punctuation - - * FreeMono.sfd: - - Built some Enclosed Alphanumerics (1-10) - - * FreeSerif.sfd: - - Copied in Daniel Johnson's changes to Cherokee. - -2008-10-12 Stevan_White - * FreeSerif.sfd: - - Included Daniel Johnson's Cherokee glyphs. - -2008-10-05 Stevan_White - * FreeMono.sfd: - - Further corrections to diaresis in Cyrillic -- legibility in small sizes - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSerif.sfd: - - Regularized placement of diaresis in Cyrillic - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Added same set of glyphs to Cyrillic Supplement - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Added some of the easier letters from Cyrillic Supplement - -2008-10-04 Stevan_White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSerifItalic.sfd: - - Finished high Cyrillic range for MonoBold and MonoBoldOblique. - (Remaining: historic ranges, Cyrillic extensions) - Tweeked others. - - * FreeMonoBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Serif*Italic: Added last Abkhazian letters to Cyrillic - MonoBold: tweek - -2008-10-03 Stevan_White - * FreeMono.sfd, FreeMonoOblique.sfd, FreeSerif.sfd, FreeSerifBoldItalic.sfd: - - Mono: Some additions to historic letters - - * FreeSerif.sfd: - - Added some punctuation and combining numeric marks from - Cyrillic Extended B - - * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Various technical tweeks, mostly concerning recent additions. - Also did a bit more "Points too close" and "irrelevant control points". - Cyrillic millions redesign meant could not maintain use of refrences - for it. - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - More high Cyrillic - Included old Cyrillic millions combining mark in Sans, changed design - in Serif - -2008-10-02 Stevan_White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - More high Cyrillic - - * FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd: - - More high Cyrillic glyphs - - * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - More glyphs in high Cyrillic. Remains only some whose form I'm unsure - of in italic. - - * FreeSerifBoldItalic.sfd: - - More glyphs in higher Cyrillic range - - * FreeSerifItalic.sfd: - - Same process of tightening el, em, ge (but a P.S. to previous commit: - also did ya, ze for SerifBold.) - - * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - BoldItalic: Tightened up spacing on left of el, em, ge (could go - farther, but it is partly a problem with glyph design... - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - More additions to Cyrillic. Finished SerifBold except for Nivkh - additions. - Used references on number combining forms. - -2008-09-30 Stevan_White - * FreeSerif.sfd: - - Added four (obsolete) Chuvash letters to Cyrillic Supplement - - completing it. - -2008-09-29 Stevan_White - * FreeSerif.sfd: - - Greek adjustments - Adjusted spacing of kappa slightly - Got rid of ears on Psi, following similar request for Upsilon. - -2008-09-28 Stevan_White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Adding and fiddling with Spacing Modifiers and Combining Diacriticals - - * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Revisions of several Combining Diacritical marks - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - A few Combining Diacriticals and Spacing Modifiers - - MonoBoldOblique: Primarily filling out Spacing Modifier Letters - others: little fixes found along the way - -2008-09-27 Stevan_White - * FreeSerif.sfd: - - Replaced Malayalam range with that from Rachana_04 found on - Swathanthra Malayalam Computing project page - http://savannah.nongnu.org/projects/smc/ - Besides scaling and converting to cubic, performed much clean-up of - glyphs, added an r2 character, and re-named a bunch of characters. - -2008-09-22 Stevan_White - * FreeSerif.sfd: - - Filled in as much of Phonetic Extensions as I could without artistic - abilities. - Note 1D48-9 are not references due to apparent FontForge bug, that says - scaled references go in wrong direction. - - * FreeSerif.sfd: - - Cleaup of some Bengali glyphs. - Note many of the ligatures remain very very messy. - - * Makefile: - - added more validations - made to work with GenerateOpenType - - * FreeSerif.sfd: - - Built two more easy Phonetic Extensions - - * FreeSerif.sfd: - - Built some Phonetic Extensions letters, those with middle tilde - -2008-09-21 Stevan_White - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Added lots of Spacing Modifier Letters and Combining Diacritical Marks. - - * FreeMono.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSerif.sfd: - - Wrote script to check if glyph encodings were in stated ranges, fixed - most discrepancies. - - There were a bunch of incompletely deleted characters in several faces. - - Sans: found several other problems in the process - # Tamil - Four slots labelled 0BDA-D have glyphs, not in Unicode. also 0BE1 - I think they are misplaced; added 0010 to each of them - - # Devanagari - Slot labelled U+093B is not in Unicode--can't find glyph: deleted - likewise 094F (may have been meant to be 0954) - 0955, 0973-0976 - - 0954 should be a combining mark, but it appears on the wrong side of 0. - 0971 was just wrong--made into simple dot. - 0972 is also wrong--made my own Candra A. - - # Gujarati - Slots labelled 0AE4-5 are not in Unicode; seem not to belong at all. - Deleted. 2800 is a dup of 2790. Deleted - - Serif: phillipine_double u1736 was misplaced - - A bunch of the Math Alphanumeric symbols are empty in the standard, - because they're represented elsewhere. These should be deleted - First need to make style consistent with existing symbols. - - * FreeSerif.sfd: - - Applied patch from Daniel J - Remedies bug - FreeSerif: Missing glyphs with palatal hook - https://savannah.gnu.org/bugs/index.php?24298 - Adding several letters to Phoenetic Extensions range U+1D80-BF - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Made four characters U+200C-F to be zero-width - Remedy to bug #23593: Mono 0-width chars: zero-width or space? - https://savannah.gnu.org/bugs/index.php?23593 - - * FreeSerif.sfd: - - Made Mahjong tiles to take up less space using references - Cleaned up several validation problems - -2008-09-19 Stevan_White - * FreeSerif.sfd: - - Added several Hebrew Alphabetic Presentation Forms (some easy ones), to - make its coverage the same as Serif Bold. - - * FreeSerifBold.sfd: - - Re-encoded. - Deleted several glyphs in Hebrew Alphabetic Presentation Forms that - didn't correspond valid Unicode - - * FreeMonoBold.sfd, FreeSans.sfd, FreeSerifItalic.sfd: - - Ran script to find mis-numbered glyphs. Several were simply typos, - some offset by one. - - * FreeSansOblique.sfd: - - Numerous cases of glyphs in Private Use area incorrectly assigned - Unicode numbers and names. Gave all -1 for Unicode and named like - "slot.XXXX". - - * FreeSerif.sfd: - - Adapted Mahjong Tiles from George Douros' Unicode Symbols font. - - * FreeSerif.sfd: - - Added Domino Tiles. Domino outline is copied from George Douros' - Unicode Symbols, but the rest I preferred to do with references. - -2008-09-18 Stevan_White - * FreeSerif.sfd: - - Adapted Mathematical Alphanumeric Symbols from George Douros' Unicode - Symbols font. - - * FreeMonoBoldOblique.sfd: - - This one got away from me--I don't know what I did. - Looks like some small contour edits. - - * FreeSansBoldOblique.sfd: - - Fixed one mis-numberd character in Latin Extended-B - - * FreeSerifBold.sfd, FreeSerifItalic.sfd: - - Fixed several mis-numbered characters. - - * FreeSansBold.sfd: - - SansBold: one Georgian letter with no name, one Zapf Dingbat was - unnumbered - ATT test shows a bunch of problems with Gurmukhi and 'blwf' table - indeed shows those letters at 0x10000+ - Sans names them like uni0A30_uni0A4D.blwf: they are in range - ECC6 to ED06 - - I meant to move this range into Private Use in last release, and - missed it. So now it is moved, into same range as Sans. - - Both Sans and SansBold in nukt table for Gurmukhi have duplicate - entries for uni0A15 uni0A3C. Deleted dups. - - * FreeMonoOblique.sfd: - - fixed a number of Unassigned Code Points in Greek Extended - - * FreeSansOblique.sfd: - - mis-numbered Combining Diacritics - - * FreeSansOblique.sfd: - - Several chars in Latin Extended hadn't been named. - One spurious letter in Letterlike Symbols - -2008-09-16 Stevan_White - * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd: - - Lots of additions: unless otherwise noted, they are from George Duros' - fonts Analecta, Music, and Unicode (haven't got final confirmation of - the eligibility of these glyphs, so this is just for testing.) - - Added some combining marks, fiddled a bit. In both Serif & Mono, tried - to get a key symbol characters to fit inside the key combining mark - - Serif - Got rid of ears on Upsilon - Added: - # Gothic - # Western & Byzantine Musical Symbols - - # Misc Symbols, Misc Technical Symbols (drew many myself) - # Supplemental Symbols and Arrows - - Mono - Added: - # lotsa Misc Technical Symbols - # OCR Symbols - # drew many Supplemental Symbols and Arrows, Misc Technical - - Sans - Added # Phoenecian - Made a few Letterlike Symbols; Made Re and Im to be sans-serif. - -2008-09-11 Stevan_White - * FreeSerif.sfd: - - Removed pointless entries from Latin kern table - - Tidied points in Sinhala - -2008-09-07 Stevan_White - * FreeSerif.sfd: - - Tidied up Tamil ligatures EEA8-EEAB to fix TT build warning - "MonotonicFindAlong: Never found our spline." - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, Makefile: - - - Added APL characters to FreeMono (why?...) - - Fixed several last-minute problems, including - - Serif: Tweeked GPOS mark table for Cyrillic - Sans: Added a GPOS table for Cyrillic (but several diacritics missing) - - Serif, Mono: tweeked some bugs in extensible brackets & integrals - - Serif: Vietnamese o circumflex: accent was a bit high. fixed. - - MonoBoldOblique OTF build - uni213b intersects self - - Generation of TT fonts complains about several things to stderr, - including: - - SerifBold: "There exists a 'fpgm' code that seems incompatible with FontForge's. Instructions generated will be of lower quality. If legacy hinting is to be scrapped, it is suggested to clear the `fpgm` and repeat autoinstructing. It will be then possible to append user's code to FontForge's 'fpgm', but due to possible future updates, it is extremely advised to use high numbers for user's functions." - Probably has been there since I first copied the TT instructions in. - Just repeated the copying process carefully, and the warning went away. - - Serif: "FindMatchingHVEdge fell into an impossible position" - fixed a bunch of point too close - - REMAINING PROBLEM in Serif TT build - "MonotonicFindAlong: Never found our spline." - fixed several bad TT matrices-- there are several more - fixed many "control points too close" no luck - -2008-09-03 Stevan_White - * FreeSans.sfd, FreeSansOblique.sfd: - - Added/corrected some Misc. Symbols by copying from Serif. - Note this is only a stopgap solution. Want real sans-serif symbols. - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Added minimal Miscellaneous Symbols: card suites and some musical notes. - Note not happy with shapes...some I just drew. Sans isn't really sans. - - Fixed one APL symbol in Mono so it verified in OTF version - -2008-08-31 Stevan_White - * FreeMono.sfd: - - Built set of APL symbols. - -2008-08-30 Stevan_White - * FreeSans.sfd: - - Un-linked references in uni02B2 and uni02B5, because when validating the - TrueType version, FontForge gave an error "is drawn in wrong direction". - I suspect a bug in FontForge. Other similar glyphs make no errors. - - Fixed missing extrema in TrueType. - These were the last cases being reported by validate in all the faces. - - * FreeSerifItalic.sfd: - - fixed last missing extrema in TrueType - - * Makefile: - - restructured validation to look in a directory - - * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd: - - Fixed missing extrema in TrueType versions - -2008-08-15 Stevan_White - * FreeSans.sfd: - - Same problem with uni0A83 as with bn_llikaar. Just made zero-width. - -2008-08-14 Stevan_White - * FreeSans.sfd, FreeSansOblique.sfd: - - Glyph bn_llikaar, U+09E3 BENGALI VOWEL SIGN VOCALIC LL, - has right bound positioned far into the negative. Causes a warning in - FontForge when opening OTF version. - Comparing with other fonts supporting Bengali, found no others that - do this. - Serif makes glyph width 0 (which sounds right according to Unicode) - and puts glyph wholly to left of 0. But, I haven't found this letter - in text anywhere. I wonder if it is really used in writing. - - * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: - - Further TrueType validation fixes. - Sans still has two glyps in wrong direction. - - * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Fixed more TrueType problems...all missing extrema in TTF validation - -2008-08-13 Stevan_White - * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - fixed all the TrueType validation problems of type "intersects itself" - and all but two of the "wrong directions", as well as a lot of - "missing extrema". But there remain hundreds of missing extrema in the - TrueType version. - Also, bn_llikaar in Sans and Oblique still has a problem in OTF version. - - * FreeMono.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd: - - Made .ttf files to validate. Other faces have many more problems still. - -2008-08-12 Stevan_White - * FreeMonoOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: - - Continuing to make OTF versions validate. - - * FreeMonoOblique.sfd: - lots of missing points at extrema - * FreeSerif.sfd: - 12 wrong directions, 1 missing extrema - * FreeSerifItalic.sfd: - many missing points at extrema, 1 self-intersecting - - What was wrong: in several oblique cases, an already-italic glyph was - made more italic, thereby fouling up extrema (although why it passed - validation in the SFD I don't know). Some glyphs were - overly-complicated with many near points. Cleaned up, rounded to int. - - Remaining problem: OTF FreeSansOblique FreeSans. one Bengali glyph in - each whose advance width and htmx don't match. - - Moral of story: validate the OTF and TTF versions too before a release. - - * FreeSansOblique.sfd: - - Reverse a mistake from last commit: somehow this file was converted to - quadratic, or something. - -2008-08-11 Stevan_White - * FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Found that SFD files that validated produced OpenType files that don't. - These represent the easy fixes. Some were result of conversion to - quadratic; some shouldn't have validated in the SFD... - - * MonoBoldOblique: uni0250 missing pts at extrema [reference glyph rotated...] - * Sans: uni0AC4 wrong direction [simplified, rounded to int] - * SansOblique: uni01EA wrong direction [rounded to int] - * SerifBold: uni023f wrong direction [round to int] - * SerifBoldItalic: uni0245 missing pts at extrema [ungrouped ref, added extrema] - -2008-08-06 Stevan_White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd: - - Re-set font metrics, which were somehow making uneven vertical spacing. - -2008-06-22 Steve White - * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Made to validate - - * ranges.py: - - Brought more into line with OpenType - Added some ranges - Fixed bug with ranges outside of font - - * CREDITS: - - 3 new ranges - - * FreeSerif.sfd, FreeSerifItalic.sfd: - - Cyrillic: tweeked accents for consistency, and for readability in small - sizes. - - * FreeSerif.sfd: - - Thanna range: tweeking - - Thaana range: Scaled up by about 15%, raised by 100EM, tightened - some of the diacritics to get inside 900 to -300 EM limits. - - * FreeSans.sfd: - - Added Old Persian and Ugaritic from MPH2BDamase font. - -2008-06-21 Steve White - * FreeSerif.sfd: - - Added Tai Le range adapted from MPH2BDamase font. - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Added some ancient Greek numerals from Tempora to high Unicode area, - (partly just to show it can now be done.) - - * FreeSerifItalic.sfd: - - Couple of tweeks putting glyphs above -300EM. - - * FreeSerif.sfd, FreeSerifItalic.sfd: - - Surgery to Thai letter 'tho than', u+0e10, to push it above -300 EM. - This makes Thai range completely between 900 and -300 EM. - - * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: - - Many auxilary characters (esp. for Malayalam, Bengla, and Tamil) - representing ligatures and alternative forms without their own Unicode, - were moved from - ranges above 0xFFFF (which ought to have been slots for other defined - Unicode ranges) into the Private Use area. - - In Serif, I segregated the scripts, in Sans it was hard to see where one - began and another ended, so I moved them en masse. - - Note several problems with wrongly-named characters: - I already re-named glyph570 and glyph582. - But there are others with names starting with A... - - * FreeSansBold.sfd, FreeSansOblique.sfd: - - Fixed (I hope the last) problem with scripts in lookups - Find Problems -> ATT (all selected) finds multiple issues, - - * FreeSansBold.sfd: - In addition to script 'guru', added 'gur2' to the scripts for these - lookups - 'nukt' Nukta forms in Gurmukhi - 'blwf' Below Base Forms in Gurmukhi - 'pstf' Post Base Forms in Gurmukhi - 'blws' Below Base Substitutions in Gurmukhi - 'abvs' Above Base Substitutions in Gurmukhi - 'psts' Post Base Substitutions in Gurmukhi - - * FreeSansOblique.sfd: - In addition to script 'beng', added 'bng2' to the scripts for the lookup - 'half' Half Forms in Bengali - - Moreover, the lookup - 'aalt' Access All Alternates in Latin - contains only Bengali letters. - Re-named as Bengali, made to work on beng, bng2 scripts - -2008-06-20 Steve White - * FreeSerif.sfd: - - Scaled Sinhala range. - Remedies bug #23656: Sinhala letters over-sized - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Mostly messing with Greek Extended accents again. - re-positioned ypogegrammani on advice of Alexey Kryukov - Put prosgegrammani beneath main letters in Mono, to make narrower glyphs - Implemented more distinction between tonos and acute. - -2008-06-19 Steve White - * FreeMonoBoldOblique.sfd: - - Completed fit of Mono to 800 to -200 EM. - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd: - - Set Metrics to recommended values - - * FreeMonoOblique.sfd: - - Now Mono Oblique, as well as roman and Bold, are within 800 to -200 EM. - Just BoldOblique to go. - - * FreeMono.sfd, FreeMonoBold.sfd: - - More toward fitting to 800 to -200 EM. - Basically, reduced Georgian by 92%. - Also made an over-all offset, so Georgian is somehow centered (Bold...I - guess I already did this in roman). - Want to also do an emboldening to make stroke like rest of font, but - current FontForge has a nasty crash that loses data on this function. - - * FreeMono.sfd: - - In effort to make fit in 800 to -200 EM, - Scaled Georgian by 92%, centered on 600 wide box. - Next: Embolden a bit. - -2008-06-18 Steve White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Toward making all glyphs lie between -200 and 800 EM. - Numerous small changes, especially raising descenders of some Hebrew - letters. - Georgian remains a problem - -2008-06-13 Steve White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Moved prosgegrammeni up to baseline, - (and then moved all references down to baseline) - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Added Control Picture "blank" to all faces. - Switched U+0222-3 from TemporaLGCUni - -2008-06-11 Steve White - * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - More fiddling with Greek Extended accents - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Tweeks to accents etc in Greek Extended and Cyrillic - -2008-06-10 Steve White - * FreeSerifBold.sfd, FreeSerifItalic.sfd: - - Fixed a few big horizontal spacing problems - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Implemented TemporaLCGUni glyphs in Cyrillic ranges. - Added a breve_cyrillic for the moustache breve mark. - -2008-06-08 Steve White - * FreeSerif.sfd: - - Replaced most of Cyrillic range with TemporaLGCUni. - Remodelled many of the derived Cyrillic characters after these. - Fiddled globally with spacing of small letters. - Unclear on diacritics 485-6, unhappy with breve. - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Started implementing TemporaLCGUni in Greek ranges. - - Replaced 3DC-3E1 from Tempora, because I thought they looked nicer and - more like the other existing FreeFont glyphs. - Replaced 3DA-B from Tempora, because they look more like Unicode - samples, and nicer. - Added 03f3-4, 03F7-F. - Prefer my own lunate epsilon. - Replaced Phi and Omega from Tempora. - These plainly fit the other FreeFont glyphs better than the origninals. - (How did this happen?) - - In bold, replaced U+03D7 - - Copied lbbar u+2114 - - Small italic greek--replaced most except phi, psi, omega - - Based on new information, broke the identification of oxia with Latin - acute. - -2008-06-07 Steve White - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Efforts to control heights of characters - -2008-06-06 Steve White - * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Made to validate - -2008-06-05 Steve White - * FreeSans.sfd: - - Fixed undefined character in kerning classes - -2008-06-04 Steve White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - tweeks and additions to General Punctuation - -2008-06-03 Steve White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansOblique.sfd: - - Completed/tweeked Number Forms - - * FreeMono.sfd, FreeSerif.sfd: - - Added some Miscellaneous Technical symbols - -2008-06-02 Steve White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Tweeks...mostly Letterlike - -2008-06-01 Steve White - * FreeMono.sfd, FreeSerif.sfd: - - Added Box Drawing characters to Serif. - Tweeked a glyph in Mono - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Added several glyphs to Letterlike Characters - -2008-05-31 Steve White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Validation pass - - SansOblique and SansBoldOblique had validation problem with BlueValues - Private Dictionary - Elements in BlueValues/OtherBlues array are disordered - Elements in BlueValues/OtherBlues array are too close - (Change BlueFuzz) - StemSnapV does not contain StdVW value. - So I ordered the array, and based on other slanted fonts, - removed StemSnapV. - - Note however, I still think the two top Blues lines are too close - But I don't even know what the second-to-top line is meant to do. - - * FreeSerif.sfd: - - Added to Block Elements, Geometric Shapes - Made to validate - -2008-05-29 Steve White - * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Looking at special symbols. - Drew several Miscellaneous Symbols in Mono and Serif - > Completed/corrected planetary symbols, added Dice, - some other easy ones - > Completed Dingbats in Serif (using URW Dingbats) - Added some Block Elements to Serif - -2008-05-26 Steve White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - More changes stemming from J. Poon's report. - -2008-05-25 Steve White - * FreeSerif.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Height surgery on SerifBoldItalic. - More fiddling with accents in others. - - * FreeSerifItalic.sfd: - - More height surgery. Only a few left in Benglai and Thai - - * FreeSerifBold.sfd: - - Re-applied surgery to make glyphs between 900 and -300EM - - *** Regression - Inadvertently un-linked all references in SerifBold in r1.83. - This reverses that error (but also un-does the surgery mentioned there) - - * FreeSerifBold.sfd, FreeSerifItalic.sfd: - - Applied surgery to make Latin letters go under 900EM. - One exception yet... - -2008-05-24 Steve White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Serif: much fiddling with accents in Latin ranges. - Re-thought some glyphs (there are still a few messy ones, especially - in bold) - Checked horizontal spacing...fixed a number of problems. - -2008-05-23 Steve White - * FreeSansBold.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Made Latin Extended-B coverage consistent across Serif; cleaned up some - glyphs - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Filled more of General Punctuation in Sans and Serif - Made all agree on coverage of Latin Extended Additional - -2008-05-22 Steve White - * FreeSans.sfd, FreeSansBold.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Added Latin Extended Additional to SansOblique. - Made Latin Extended Additional coverage consistent across Sans, B, I - Made Latin Extended-B coverage same in SerifBold. - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSansBold.sfd: - - Mono* made Latin-B coverage consistent across faces - - * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Made set of Latin Extended-B consistent across Sans faces - - * FreeSans.sfd, FreeSansBold.sfd: - - More filling in General Punctuation - - * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Another bunch of J. Poon's reports - also, filling in some Combining Diacriticals, Spacing Modifiers, and - General Punctuation in bold faces - -2008-05-21 Steve White - * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Mucking about with mark tables in Thai (Serif) - Other faces: Making changes from J. Poon's report - -2008-05-20 Steve White - * CREDITS: - - Mark Williamson - Jacob Poon - - * Makefile: - - added tests target - -2008-05-18 Steve White - * ranges.py: - - Put table explanation back in - - Improved behaviour for high Unicode - - * FreeSans.sfd: - - Revision of kerning - - * FreeSerif.sfd: - - Made Latin kerning a little more reasonable: - reduced many excessive kerns (some had letters apparently - overlapping, which shouldn't happen) - made kerns increment by 5EM for ease of reading - got rid of kerns too small to be seen - - * FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerifBold.sfd: - - Made to verify - -2008-05-13 Steve White - * FreeSerif.sfd: - - Made to validate - - * FreeSerif.sfd: - - Gurmukhi: filled range in Serif, taking glyphs from the original - Punjabi font by Hardip Singh Pannu - http://members.aol.com/hspannu/punjabi.html (file pb_win95.exe) - -2008-05-12 Steve White - * FreeSans.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Hebrew, basic. Some faces missing punctuation marks, added. - - * FreeMono.sfd, FreeSans.sfd: - - Armenian: Sans tried to make verticals and horizontals of more uniform - width both, finddled with punctuation - - * FreeMonoOblique.sfd: - - made to validate - - * FreeMonoBold.sfd: - - made to validate - - * FreeSans.sfd, FreeSansBold.sfd: - - Armenian in Sans: regularized letter spacing - - * FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd: - - Armenian: fill out ranges and clean up - SansBold especially had a lot of incorrect references. - Now all the ranges with Armenian at least share the same set of - characters. - - * FreeMono.sfd: - - Fixed glyph with wrong width. - -2008-05-11 Steve White - * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifItalic.sfd: - - 1) made to validate - 2) Mono: copied in Spacing Modifier Letters (glyphs not yet named) - 3) SerifItalic: Filled in General Punctuation - - * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Made to validate, and pass all other FontForge tests. - Expedient: rounded everything to int - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Made to have the same Greek Symbols, - Made to validate - - * FreeSans.sfd, FreeSansBold.sfd: - - Made Greek Symbols as full as rest of Sans. Changed a name in Sans. - - * FreeMonoOblique.sfd: - - Made Greek as full as other faces - Made to validate - - * FreeSansBold.sfd: - - Deleted seven orphaned Arabic characters; looks like somebody started, - didn't get very far, putting Arabic in bold. - - Deleted orphaned Arabic glyph from Arabic Presentation forms-B - - * FreeSerifBold.sfd: - - Deleted the single Arabic character: it was clearly there by mistake. - - * FreeSansOblique.sfd: - - Made Greek Symbols as full as rest of Sans - - Tweeks to Armenian - - Comment from previous commit of FreeSans was meant for FreeSansOblique. - In FreeSans, only tweeked a few letters during putting more characters - in this face. - - Filled in Spacing Modifier Letters, increased General Punctuation. - - * FreeSans.sfd: - - Filled in Spacing Modifier Letters, increased General Punctuation - - * FreeMono.sfd: - - Made Armenian as full as other roman faces. - - Completed Spacing Modifier Letters - Added a couple of Greek Punctuation - - added more Spacing Modifier Letters - -2008-05-10 Steve White - * FreeSerif.sfd, FreeSerifItalic.sfd: - - Did same process of scaling and sizing for Thai in Sans as in Serif. - Added mark tables to Sans. Improvement, but there are questions... - - * FreeSans.sfd: - - Tidied some Gurmukhi glyphs, validated. - - Deleted ranges for Oriya, Kannada, on account of - 1) they only contained a subset of the consonant glyphs of the scripts, - few if any vowels, and had no ligature lookups as required - 2) Kannada was based on the Akurti fonts, which have copyright issues. - - See - bug #23225: Oriya range only partial - bug #23224: Kannada range only partial - - * FreeMonoBoldOblique.sfd: - - Made metrics like rest of Mono - -2008-05-09 Steve White - * ranges.py: - - More info on range intervals - - * FreeSerif.sfd: - - Deleted Telugu range. - It didn't represent a complete writing system for the language. - - See notes at https://savannah.gnu.org/bugs/index.php?23202 - Serif: Telugu range missing many characters; many wrong - - Got a copy of the original Tikkana font, - Copied in remaining consonants and vowels that I could find there. - I think one vowel 0C55 is missing according to unicode). - Strangely, the Telugu digits are alo missing. - In Tikkana, the default "checkmark" structural mark is missing from many - consonants, according to Unicode, but is a separate glyph. I put - the checkmark on. - This, and scaled up by 150% and cleaned up intersecting glyphs and - many unnecessary points. - -2008-05-08 Steve White - * FreeSerif.sfd: - - Filled out Telugu consonants. - Vowels still need to be done - -2008-05-07 Steve White - * FreeSerif.sfd: - - Operated on Latin glyphs with stacked accents to make them fit under - 900EM. - Scaled Telugu bu 150%. - -2008-05-06 Steve White - * FreeMono.sfd, FreeMonoBold.sfd, FreeSansBold.sfd, FreeSerif.sfd: - - Corrected further fontforge "find problems" - Added some math characters to FreeSerif - -2008-05-05 Steve White - * FreeSansBold.sfd: - - Made to validate, and fixed bad TT transformations - -2008-05-04 Steve White - * FreeMono.sfd, FreeSerif.sfd: - - Mainly TeX additions trying to satisfy Markus Kuhn's TeX-as-Unicode page - - * FreeMono.sfd: - - Adjusted heights of extensible brackets - - Fixed problems with extensible brackets, thanks to Markus Kuhn's page - http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt - - * ranges.py: - - fiddled with ranges, doc - - made some ranges more correct? - - fixed some bugs in ranges - better error reporting - - Got rid of Unicode 1.1 references - - made to use OpenType table - - * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd: - - made to validate - -2008-05-03 Steve White - * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Removed digits from Private Use Area. - See bug 23050. - - * FreeMono.sfd, FreeSans.sfd: - - Completed General Punctuation - - * FreeSans.sfd: - - Completed IPA Extensions - - * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd: - - More work on Superscripts and Subscripts, Spacing Modifiers. - Sans is now complete in both. - Added Pfennig to Sans and Mono. - - * ranges.py: - - Restructure text output - Rearrangement and cosmetic ...except I had broken it. now fixed - Seems to be in a useful form at this point. - More docs, date - - * FreeSerif.sfd: - - Added a hand-drawn old German Pfennig to Currency Symbols - - * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: - - Further additions to General Punctuation, Super and Sub Scripts, - Spacing Modifiers, etc. - -2008-05-02 Steve White - * FreeSans.sfd: - - additions to Spacing Modifiers, IPA - - * FreeSerifItalic.sfd: - - Shortening stacked accents to maintain readability when clipped - -2008-05-01 Steve White - * FreeSans.sfd: - - Additions to Spacing Modifiers and changes to Combining Diacritics - - * FreeSerif.sfd: - - Made sure all the half rings in Combining Diacriticals and Spacing - Modifiers were really half rings (J. Poon had complained about this) - - Filled out General Punctuation - Some work on Spacing Modifiers - - Filled out Mathematical Operators - still needs lots of work - Made to validate - - Filled out Latin Extended B - Added some letters with curls to Latin Extended B - More fiddling with Latin Extended B accents - -2008-04-30 Steve White - * FreeSerif.sfd: - - Added Hanunóo script, with characters based on those in - font MPH2BDamase, on request from the maintainer of that font, - http://packages.debian.org/sid/ttf-mph-2b-damase - - Glyphs are simple vector strokes. Could be a little more uniform. - - Added Buginese script "Lontara", with characters based on those in - font MPH2BDamase, on request from the maintainer of that font, - http://packages.debian.org/sid/ttf-mph-2b-damase - - Note the glyphs are pretty rough, clearly a digitization of handwriting. - I just cleaned them up, and corrected discrepancies with Unicode, - and compared with some pictorial samples of the script I could find. - -2008-04-29 Steve White - * ranges.py: - - Improved look a lot--still unhappy with some ranges - OS/2 seems sometimes bang-on, sometimes unrelated to anything (including - fontforge's OS/2 listing) - - * FreeSerif.sfd: - - Much fiddling with Tamil range. - First scaled to 78% (avoiding the references) - This gets it in the ballpark height-wise. [A bit taller than the Latin - letters, but the stroke is narrower, but then the glyphs are busier.] - Then had to re-align combined references, the trickiest being the - halants. - Checked with other fonts with Tamil text. - -2008-04-28 Steve White - * FreeSans.sfd, FreeSerif.sfd: - - Cleanup of control points in Arabic and Thaana - - * FreeSerif.sfd: - - Cleanup of missing extrema in Arabic and Thaana - - Many changes to Thai, trying to make the script fit between some lines, - so accents won't get clipped, etc. - Also, stroke weight was heavier than that of Latin. - - Scaled whole thing by 93%. - Shrank the tallest letters 0E42-4 to get them under 900EM. - Shaved off top of maiek. - Fiddled with positioning of all accents. - Made positioning tables for accents. - Note: unclear these are working correctly - - Fixed a bug having to do with character replacements for characters - named 'ng' and 'nj'; these names had been taken on by other characters. - - Made to validate - - Unicode positions of two Cyrillic Extended characters were switched. - Fiddled with a couple of Cyrillic combining diacritics - -2008-04-27 Steve White - * FreeSans.sfd: - - bugfix: a left harpoon mysteriously appeared to the left of letter p! - -2008-04-26 Steve White - * FreeMono.sfd: - - Made to validate - - * FreeSans.sfd: - - Made to validate - - Toward J. Poons report - Made 032B more like proper double-arches (and distinct fro 033C seagull) - Made 032b more like a seagull - - * FreeSans.sfd, FreeSansBold.sfd: - - Sans: fiddling with widths and terminators of math symbols, - toward J. Poon's report - R & B: removed u+2741 because it didn't match the Unicode description - - * FreeMono.sfd: - - Extensible parenthesis symbols weight/terminators - Toward bug # 23064: https://savannah.gnu.org/bugs/index.php?23064 - Rounded a bunch of terminators - -2008-04-22 Steve White - * FreeSerif.sfd: - - Small alignment problem in Greek Extended - - One more tweek to spacing in Cyrillic Extended - - Corrected spacing in Cyrillic Supplement - - Added Cyrillic Supplement letters for - Enets, Khanty, Chukchi, Itelmen, Mordvin, Kurdish, Aleut - - Added Cyrillic letters for Nivkh (completing Cyrillic range) - More tightening of accents in Latin Extended. - - * FreeSans.sfd: - - Fiddled with math--consequences of changing the "similar" operator - - More tightening of accents - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Adjustments to h and k with caron and cedilla in Latin A and B - - * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd: - - FreeSerifBold: deleted 3 dotted Hebrew letters in Private/Corporate use - (E801-3). They weren't ligatures or in any other lookup, and they - weren't present in FreeSerif. - - * FreeSansBold: - Unlinked and deleted F6C3, which called itself commaaccent. - Made some new spacing and non-spacing accents to make up for it. - - * FreeSansBoldOblique: - Made references of many Latin Extended. - Also corrected several wrong ones. - - * Freeserif: - Re-named commaaccent - -2008-04-21 Steve White - * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd, FreeSerifBold.sfd: - - Deleted Hiragana and Katakana ranges, as discussed on bugs list. - Cleaned up some encoding issues, unnamed glyphs - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Roman: added 'sine' -- not beautiful, but I liked drawing it - All: Made special lookup for Dutch ligatures 'IJ' and 'ij' - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Roman: ffi etc Latin ligatures from 'liga' to 'dlig' (these weren't - really ligatures anyway, and only looked very bad when used. - Retain for condensed type. - Others: deleted Latin 'liga' table altogether - BoldOblique : added j to ij ligature - - Toward J. Poon's Report: - Except for issues of terminators not always vertical or horizontal, - and a few things that were too hard or I was unsure of. - -2008-04-20 Steve White - * FreeSerif.sfd: - - Futzing with accents in Latin Extended Additional and Latin Extended-B - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Added primemod character, referenced by Greek number sign - - * FreeMono.sfd, FreeMonoOblique.sfd: - - Following J. Poon's report, disconnected NJ (01CA) - -2008-04-19 Steve White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - First pass throught J. Poon's bug list. - See bug reports for details. - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Made underscore slanted in Oblique faces, made all to be width of - space character. - Towards J. Poon's report. - Disturbed that xterm and some other apps put small space between - characters when none was called for. - - * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSansOblique.sfd: - - Corrections on Currency Symbols - - * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - More corrections, additions to Currency Symbols - - * FreeSans.sfd, FreeSerif.sfd: - - Filled out and corrected Currency Symbols - -2008-04-18 Steve White - * FreeSans.sfd, FreeSerif.sfd: - - Adjustments to Combining Marks for Symbols - Additions to range in Sans, and re-structured its marks table so that - "middle" can apply to any range - - * FreeSerif.sfd, FreeSerifItalic.sfd: - - Made reference between combining koronis and lenis of Greek Extended. - In Serif, re-worked combining marks lookup tables, added anchors in - Latin, moved so without marks they work in kedit (but now I'm doubting - kedit does a reasonable thing...what is a better application for - testing this?) - -2008-04-16 Steve White - * FreeSerifItalic.sfd: - - Adjusting of spacing and accents in Greek - - * FreeMono.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd: - - Much futzing with Greek letter spacing and accents. - Added lenis to FreeMono. - - * FreeMono.sfd, FreeSerif.sfd: - - Adjusted spacing of dots of Greek dieresistonons in Serif - Whipped up something for Greek kappascript in Mono (could use revision) - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Raised dots on double-dotted Cyrillic i, to match that of i and j. - -2008-04-14 Steve White - * FreeMono.sfd: - - Corrected 27e6-7 "white bracket" - Note it is probably a FontForge bug these symbols aren't showing up. - FontForge thinks they are in Supplemental Arrows, but they should be - in Supplemental Math-A - - Named some Greek characters - - * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Spacing of some Cyrillic characters - -2008-04-13 Steve White - * FreeSerif.sfd: - - Some fiddling with accents - 'yogh' was too wide - - * FreeSansBold.sfd, FreeSansOblique.sfd: - - Character spacing was chaos--tried to improve. BoldOblique also needs - it. - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Completed the fix of bug #12798, Greek glyphs with accents to side - Much mucking with accents here, and fixed a few things that were just - wrong. - -2008-04-12 Steve White - * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Made Mono curly quotes "bent" - - * FreeMono.sfd: - - More fiddling with Greek accents - Made quotes "bent" - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Adjustments on Greek diaresistonos etc. - Adjustments in Serif on combining marks for symbols - - * FreeSerif.sfd: - - More additions to Combining marks for Symbols - - Additions to Combining marks for Symbols -- now mostly full. - Lots of adjustments to middle anchor point in Latin to make big circle - (nearly) encircle preceding latter - -2008-04-11 Steve White - * FreeMono.sfd: - - Bugfix: - Had indroduce a glyph of width other than 600, making kterminal not - recognize it as a monospace font. - -2008-04-10 Steve White - * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - More messing with accents. - Further to bug #12798, Greek glyphs with accents to side - Much messing with glyphs in Greek Extended range - -2008-04-09 Steve White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerif.sfd: - - Revisited Latin-1 and Latin-A accents. - Glyph B7 was called "periodcentered", but Unicode callse it Mid Dot, - and the description doesn't refer to the period. I made it like the - dot accent. throughout, and referred L-dot to it. - - Also double-checked "commaaccent" characters (some in Unicode called - cedilla, but the Unicode example shows a comma...mystery) - - Also the funny IPA upside-down f often had two bars, incorrectly. - - To do: go through rest of Serif, and Sans - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Completed re-structuring of stacked Latin accents in Mono. - Also: lots of associated adjustments of Greek Extended accents. - (Trying to at least center extremely wide characters on their box) - Repaired some victems of "find overlaps" sweeps - Worked on glyphs with apostrope/comma parts - Corrected a few wrong glyphs. - - Trying out a "bent quotes" solution to making primes distinct from - quotes. - -2008-04-08 Steve White - * FreeMonoOblique.sfd: - - Toward reducing overall height - Did similar process as for Mono, fixing a few errors along the way. - Also the Greek Extended range was very messed up vertical and - horizontally. - Horizonal spacing of the heavily accented Greek is a real problem in - Mono... - To do: - revisit "commaaccent" characters in all faces: do some have - edillas? - some Hebrew glyphs are a little low - Georgian generally is way out of bounds - -2008-04-07 Steve White - * INSTALL: - - Various updates and corrections, tweeked formatting - - * FreeMonoBold.sfd: - - Tweeking of accents - -2008-04-06 Steve White - * FreeMono.sfd, FreeMonoBold.sfd: - - Re-worked accents in FreeMonoBold.sfd to make Latin ranges lie between - 800 and -200 EM, as with FreeMono. - - * FreeMono.sfd: - - Latin Extended ranges: Implemented new policy of shortening the letters - of the characters with the highest-stacked accents. - - At this point all the Latin glyphs lie betweeen 800 and -200 EM. - - Also checked for readability of all the Latin extended letters in xterm. - (Issue: it chops letters outside their bounding boxes; many accents had - been a bit outside. Made sure that if they were chopped, they were at - least still recognizable.) - -2008-04-05 Steve White - * FreeMono.sfd: - - Following exchange about Mono on freefont-bugs with Joe Wells, who - > doesn't like the curly quote marks - > wants combining diacritics to work - > wants tight line spacing - - Trying to reduce font height: - > exclamdown was below -200 - > Throughout Extended Greek, ypogegrammeni were too low. Shortened - glyph, and raised all references. - > Lots of messing with Latin Extended ranges to make glyphs mostly - fit into 800 height. Mostly succeeded. A couple will get chopped. - > Messed with "commaaccent" glyphs, which were very low - > Cyrillic 04B1 had a tail that was incorrectly low - > Much mucking with Georgian range. Moved up by 95 (read that Georgian - is written as though centered between two horizontal lines, rather than - as sitting on a baseline) There are still a few very high glyphs. - - FontForge U+0122 called Gcommaaccent, glyph looks like that, but - Unicode says it's Gcedilla. Made the ones called cedilla by Unicode - to be cedillas - - Note bug in Unicode: standard for 0122, 0123, 0136, 0137, 013B, 013C, - 0145, 0146, 0156, 0157 all talk about cedilla, say to make it with - cedilla, but example shows comma. - - By the way: - > Got rid of commaaccent and dotlessj in Corporate Use - > Replaced shadedark, with little squares now not overlapping. - > Corrected IPA symbol 'ts' 02A6, added 02a8, 02a9, 02aa, 02ab, 02ac, - 02ad, 02ae, 02af - - (so many changes...the CVS server was down...) - - * FreeSerif.sfd: - - Re-named arabic and hebrew characters - Big adjustment to comma-accents. Mostly effects Greek Extended. - Made such accents to be like comma, rather than like Russian apostrophe - (and de-referenced that symbol) - -2008-04-04 Steve White - * FreeMono.sfd, FreeSerif.sfd: - - Raised dot on superscript i (2071) -- more distinct at small sizes - - * FreeMono.sfd: - - added two IPA symbols - -2008-04-02 Steve White - * FreeSerif.sfd: - - fixed a few more control points too close - - Fixed names of languages in ligature table for latn "w/i". - This fixes a crash when FontForge opened the ttf table - - Motivated by bug crashing FontForge when opening ttf file, - started cleanup of useless control points. Not finished. - Got partway through Sinhala - -2008-03-31 Steve White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Fixed various "Find Problems", including glyphs with mixed-up names, - and bad TT matrices. (lots more bad TT matrices remain) - - * FreeSerif.sfd: - - Re-named a bunch of Cyrillic letters - - * FreeSerif.sfd: - - Put above mark on Cyrillic i and double-dot i for Slavonic number forms - -2008-03-30 Steve White - * FreeSans.sfd: - - Tightened spacing on glyphs of last commit - - * FreeSans.sfd, FreeSerif.sfd: - - Concerning bug #16120, Include upper case Wynn and upper case Yogh - Adapted Herman Miller's Thyromanes letters 01F7 021C 021D for Serif - Drew my own versions for Sans. - - * FreeSerif.sfd: - - Added 04F6,7 - - * FreeSerif.sfd, FreeSerifItalic.sfd: - - Made more Cyrillic diacritics really combine. - Made a mark lookup just for Cyrillic diacritics, - Marked most of the unadorned Cyrillic alphabet. - - Still not clear on correct shapes for some of the marks. - - * FreeMono.sfd, FreeMonoOblique.sfd: - - Tweeks to accents - -2008-03-29 Steve White - * FreeSans.sfd, FreeSerifItalic.sfd: - - Small adjustments in Cyrillic - - * FreeSerif.sfd: - - Corrected small palochka - Made Cyrillic combining hundred-thousands and millions really combine - Named some combining diacriticals - - * FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Mostly adjusted horizontal spacing of mono oblique faces - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - More cleanup of Cyrillic ranges - - Completely re-did horizontal spacing of SerifItalic and SerifBoldItalic. - See bug #17912, poor kerning in Cyrillic oblique... - https://savannah.gnu.org/bugs/index.php?17912 - It looked like chaos to me. - Only so much can be done: the font is flawed. - But I think the changes make text readable in these faces. - - There were dozens of incorrect glyphs in higher-numbered characters. - I deleted all those I found. No glyph is better than a wrong glyph. - - Futzt with accents, shooting for consistency and readability. - - A maintenance thing: making correct references (acyrillic vs a, - although they may be the same glyph) I made a lot of headway, but - it isn't finished. - - Likewise, a large fraction of these are compound characters, which can - be made with references, resulting in easier maintenance, reduced - likelihood of errors, and smaller files. I replaced many. - - * FreeSerif.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Cyrillic italic - Added italic, bolditalic - 0493, 04a7, 04AD - because their form clearly varies in italic. But was just guessing... - - * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Cyrillic italic - - Added italic, bolditalic - 0493, 04AD - because their form clearly varies in italic. - But was just guessing as to exact form. - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Overhaul of Cyrillic - - Italic, BoldItalic - added small yat for bug #22588 (note Times New Roman doesn't use - alternate form in Italic) - - All forms of Serif have big problems in Cyrillic. - - The ugliest is in roman. The letters, even of the Russian alphabet, are - of inconsistent height (awfully, small 0438 (ii) 0446 (tse)) - and they vary from the height of Latin - and they vary from the height of italic and bold. - They are a mish-mash of letters from several fonts, of similar (but not - quite identical) weight, and similar, (but not quite identical) size. - - I think the best solution would be to identify the face that best - matches Latin, and fill the range with that. I think this is possible - because the rarer letters seem to be better: the common letters are the - ones that are wrong. - - For now, I just increased the sized of 0438 and 0446, and 048a, 048b, - also 0459 (lje) 045A (nje) 0464 (dje) - - Other issues - -2008-03-27 Steve White - * FreeSerifBoldItalic.sfd: - - Moving all Greek capitals with accent so they don't cover previous - letter. Remedies bug #12798 - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Various tweeks to accented Latin letters. - Connected O-ogonek correctly - - * FreeSerifItalic.sfd: - - Accents of numerous accented Latin letters got shifted in a previous - commit. This fixes it. - - * FreeSerif.sfd: - - Adjusted combining tack left and right (0318-0319) to be above -300 EM. - - * FreeSans.sfd, FreeSerif.sfd: - - Added some "middle" marks for positioning of diacritics - - * FreeSans.sfd: - - Copied 4 enclosing combining diacriticals from Serif 20DD - 20E0 - - * FreeSerif.sfd: - - Adjusted and added some enclosing diacritics 20DD - 20E0 - In response to Debian bug #472566 - ttf-freefont: U+20DD COMBINING ENCOLSING CIRCLE doesn't combine - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=472566 - -2008-03-26 Steve White - * FreeSerif.sfd: - - Lowered a few over-high Latin accents - - * FreeSansBold: - - Devangari--only digits 1 and 2, and nothing else. Deleted - - * FreeMonoBold, FreeMonoOblique, - FreeSerifBold, FreeSeriftalic, FreeSerifBoldItalic, - FreeSansOblique, FreeSansBold, FreeSansBoldOblique: - - Got rid of dotlessj, comma in Corporate Use - Single Substitution lookup, ccmp table - Made proper dotlessj, re-linked j-circumflex - - Note: - FreeSansBold has a commaaccent in Corporate Use, used by several other - characers. Haven't done anything about this. - -2008-03-25 Steve White - * FreeSerif.sfd: - - Added/corrected glyphs for yeh hamza in Arabic, - Added init and medi lookups for yeh hamza. - -2008-03-24 Steve White - * FreeSerif.sfd: - - Added isolated and final forms for - 0629 teh marbuta - 0624 waw hamza - 0626 yeh hamza - 0649 alef maksura - A previous commit had added lookups that referred to these, - - More fiddling with super/subscripts - - * Makefile, Makefile, GenerateTrueType: - - Scripts and Make targets to generate OpenType fonts and zip file - - * maintenance.txt: - - Added gnupload and info about tagging - -2008-03-23 Steve White - * FreeSerif.sfd: - - Last of Find Problems -> ATT - 'mark' Latin lookup: afii10026 is in 'cyrl', also afii10074 - Upper and lower Cyrillic i. Just removed mark from both letters. - - 'half' Bengali lookup Khanda_Ta is in 'bng2'. Added bng2 to lookup - Added TtTable etc - - Clean-up of Points too Close through to end of font. - This episode completes the paths/points clean-up of Serif. - But note: many ranges, esp. Ethiopic, Japanese, and Indic, have way - too many points, resulting in lumpiness. - - At this point, FontForge can convert splines to quadratic, auto-hint, - and auto-instrument without segfault. - - * Makefile, sfd/Makefile, tools/GenerateTrueType: - - Alterations to build process: added a Makefile, and made to work - on my system. Now auto-hints before generating TrueType. - -2008-03-22 Steve White - * sfd/FreeSans.sfd: - Lots of additions of math characters. Should complete for - LaTeX 2e, except for extensible brackets. - -2008-03-21 Steve White - * *.sfd: - - Regularized stacking of accents in Latin Extended Additional - Changed name of 00B5 from 'mu' to 'micro', - 2206 from 'Delta' to 'Delta.math', - 0308 from 'diaerisis' to 'diaerisiscomb' - - * FreeMono.sfd: - - additions to IPA - - * FreeMonoBoldOblique.sfd: - - Moved dotlessj from Corporate Use, - Deleted commaaccent there - Fixed mis-named glyphs tcommaaccent, Tcommaaccent - Changed name of 030A from 'dieresis' to 'ringcomb' - - * FreeSans.sfd: - - Added some arrows, and a couple of blackboard bold characters - - Several characters in U+F600 Corporate Use range - dotlessj, onefitted, commaaccent - - dotlessj referred to by: jcircumflex, uni01F0: - renamed it to uFFFF, re-linked others by hand - - commaaccent - http://diacritics.typo.cz/index.php?id=9 - should be u+0326 but wasn't linked to anything - - * FreeSansBold.sfd: - - U+0617 etc: read glyphs "4GWglm". It should be Arabic. Deleted - - * FreeSansBold.sfd, FreeSansOblique.sfd, FreeSansBoldOblique.sfd: - - Removed bogus glyphs for 200C 200D, ZWJ and ZWNJ - - * FreeSerif.sfd: - - Split lookup for ligatures in latin into two classes; - ff, ffl, fl which are appropriate for all languages, - and fi, ffi, which are not appropriate in Turkish (due to distinction - between short and long i) - Needs to be done for other faces. - - Filled set of extensible brackets in Miscellaneous Technical - - Think IPA is now complete. - -2008-03-18 Steve White - * FreeSans.sfd: - - clean-up of all path issues and points too close - -2008-03-18 Steve White - * FreeSans.sfd: - - Something was causing crashing effects in Windows. Cleanup of - problems eventually made it go away. Now works well. - - Cleaned up many "points too close" - - Cleaned up all ATT problems, of which there were many and various. - - # Incorrectly labelled zero-width joiner used in a ligature - - # Incorrect substitution of dotlessi and dotlessj with i and j was - somehow connected with FontForge crash. Attemts to remove the - substitution would damage a 'ccmp' table; subsequent changes would - result in FontForge crashing on save, and truncating the sfd file. - Surgically removed with vi. - - # A couple of Indic lookups had incorrect script DFLT; one had 'latn'. - - # Don't understand why there are scripts named - dev2 bng2 grj2 gur2 when there are already deva beng gurj guru - But anyway, lots of 'vatu' 'pres' 'haln' and 'liga' lookups contained - characters in the '2' scripts but were lablled only for the 'non-2' - ones. Added the '2' scripts to all these lookups. Suspect a mistake. - - Note: several of these problems are repeated in other Sans faces. - -2008-03-16 Steve White - * FreeMono.sfd: - - Cleanup of many path problems "points too close" - - Strove to make accents Latin Extended range legible at small sizes - - Named some unnamed characters; removed a duplicate - - At this point, all fonts are passing FontForge Validate. - -2008-03-15 Steve White - * FreeSerif.sfd: - - CJK punctuation: made some of the very high glyphs smaller (under 900EM) - The brackets in Sans were very ugly, and not even Sans-serif. - Serif: added extensible square brackets, diddled with integral - corrected direction of some added glyphs - - Several bugs having to do with missing glyphs in Tamil range. - Also a buggy ligature in Devangari. - - Shortened names of many lookup tables - - Futzt with some combining diacriticals - - Added extensible square brackets. - - * FreeSans.sfd: - - Changed names of a bunch of glyphs with invalid - TrueType names, in range 0x1025f+ (not real Unicode). - Took pains to retain information contained in the names. - Wonder if these glyphs have ever been of any use. - - CJK Punctuation: brackets were hand-drawn and very ugly. Improved. - - * *.sfd: - - Set OS/2 Metrics back to absolute 900/300. Offsets are not - interpreted uniformly. - - Cleanup of many path problems up to extrema and self-intersecting - - Ordered PS Blue values. - -2008-03-14 Steve White - * FreeSerif.sfd: - - Got rid of mixed references and contours - Cleanup of many path problems "points too close" - - Started clean-up to satisfy FontForge Validate - - Changed names of three glyphs in the - Tamil ligatures range...all clearly bugs. - - * FreeSans.sfd: - - Added slanted-hyphen - - * *.sfd: - - Unified OS/2 Metrics - Added Grid Fit - -2008-03-13 Steve White - * FreeSans.sfd: - - Rearranged PS BluesValues so they were in increasing order, - Made all 20 in width. - -2008-03-12 Steve White - * FreeSans.sfd, FreeMono.sfd: - - Added TrueType hinting tables. - Fixed glyphs that didn't convert well to quadratics - Got rid of mixed contours and refs - - * FreeSerifBold.sfd: - - Cleanup of path problems - -2008-03-11 Steve White - * FreeMonoOblique.sfd: - - Cleanup of path problems - -2008-03-09 Steve White - * FreeSerif.sfd: - - Corrected L-dot - Further cleanup of path/ref problems - - Found several ligatures that referred to a missing glyph "ZWJ". - Took this to mean the "zero width joiner" u+200D - - * *.sfd: - - Changed OS/2 metrics to be absolute 900/300 - - * FreeSerifItalic.sfd: - - Added Greek lunate epsilon - - * FreeMono.sfd: - - Many additions in math range - Reduced size of binary union, intersection, vee, wedge - Corrected empty set - Corrected logical 'assert' relations, etc. 22a2-22af - Efforts to make Math glyphs legible at small point sizes - - * FreeSans.sfd: - - Added Greek lunate epsilon and rho symbol - Unstacked more stacked diacriticals - - Further cleanup of path/reference problems - -2008-03-08 Steve White - * FreeSans.sfd, FreeSerif.sfd: - - Added some "n-ary" Math operators - - * FreeSerif.sfd: - - Further clean-up of path problems...up to Ethiopic - > Started adding and correcting Math operators for LaTeX 2e - > Corrected n-ary union, intersection, and spikes to be larger - than the binary operators - > Made (many of) the operators based on + - = to use those - symbols directly (by reference or copying). - > Added lunate epsilon - > Corrected empty set - > Tightened up spacing of some other technical characters - > Worked on some more math operators involving = - > triangle - > Several arrows - > Supplemental Arrows-A - - * FreeSans.sfd: - - Clean-up of font paths - Open self-intersecting outermost-clockwise missing-extrema - also flipped references (unlinked) - - Added Greek lunate epsilon and rho symbol - -2008-03-06 Steve White - * sfd/FreeSerif.sfd: Shortened and thickened the combining hook mark, - U+0309, to make more like Unicode samples. - Also see (bug #22499) un-stacked incorrectly stacked accents - -2008-03-05 Steve White - * sfd/FreeSerif.sfd: vertical lines: combining diacritical marks - corrected 0300 030D 0329 0348 (were rendered as straight apostrophes) - Spacing Modifier letters added 02C8 02CC - 02B9 02Ba prime and double-prime - Fixed positioning U+1EC8, 9, I with hook above - -2008-03-03 Steve White - * sfd/FreeSerif.sfd: TT strings updates. - updated Copyright to 2008 - Added Vendor URL as the Savannah freefont site - * sfd/FreeMono.sfd: A standard pangram as the Sample Text for Russian - It reads: In the thickets of the South once there was a citrus - ...--yes, but a fake specimen! - * sfd/*.sfd: Set the OS/2 Sup/Sub settings, which by default looked - like random trash. - -2008-03-02 Steve White - * sfd/FreeSerif.sfd: began cleanup of problems given by FontForge - "Find Problems" feature. (bug #22454) - -2008-03-01 Steve White - * sfd/FreeSerif.sfd: made Arabic work for text display (bug #22329) - Added required contextual replacement tables, - Made a few missing characters, - * sfd/*.sfd: Removde all back layers from glyphs that had them. - -2008-02-27 Steve White - * sfd/FreeSans.sfd: filled in Combining Diacriticals - * sfd/FreeSerif.sfd: shifted whole Arabic range down by 200EM. - -2008-02-26 Steve White - * sfd/FreeSerif.sfd: enabled DPOS table. - -2008-02-24 Steve White - * sfd/*.sfd: Much fiddling with the "combining diacriticals" - range 0300-036F. Made to align with medium-size lowercase - preceding character if not using DPOS table. - -2008-02-23 Steve White - * sfd/FreeSerif.sfd, FreeSans.sfd, FreeMono.sfd: (bug #21784) Filled - in set of HTML 4 Character Entities. - - * sfd/FreeSerif.sfd, FreeSans.sfd, FreeMono.sfd: (bug #18413) - undertie too low -- went on to tidy other similar characters in - Combining Diacriticals range. - -2008-02-21 Steve White - * sfd/*.sfd: Moved capital Greek letters with tonos so tonos doesn't - cover preceding letter (bug #12798) - - * sfd/FreeSerif.sfd, FreeSans.sfd: (bug #13370) made extended - integrals to line up. - -2008-02-20 Steve White - * sfd/*.sfd: started removing glyphs with back layers (printing bug) - * sfd/*.sfd: adjusted vulgar fractions (bug #17756) - * sfd/*.sfd: adjusted numerical superscripts (bug #20278) - -2008-02-18 Steve White - * sfd/FreeSerif.sfd: Offset Hiragana and Katakana ranges (bug #22326) - * sfd/FreeSerif.sfd: U+30FB, KATAKANA MIDDLE DOT to be full width - (bug #18326) - - * sfd/FreeSerif.sfd: Re-promoted - ff ffi ffl fi fl - as standard ligatures in Latin. - -2008-02-17 Steve White - * sfd/*.sfd: committed to FontForge Spline Font Database (SFD) 2 - format. - -2008-02-10 Steve White - * sfd/*.sfd: brought into line with Debian ttf-freefont - Deleted a couple of patches, and applied those applied to Debian. - -2006-09-20 Primoz Peterlin - - * INSTALL: added installation procedure for MacOS X, courtesy - Philipp Kempgen. - -2006-05-04 Primoz Peterlin - - * sfd/FreeMono.sfd: deleted Russian sample text, which did not - conform to UTF-7. - -2006-04-15 Primoz Peterlin - - * sfd/FreeSerif.sfd: corrected U+10D3. - - * sfd/FreeSans.sfd: ligature U+FB06 (LATIN SMALL LIGATURE S T) - changed from mandatory ("liga") to discretionary ("dlig") (bug - #16253). - - * sfd/FreeMono.sfd: deleted incomplete glyph U+FB06 (LATIN SMALL - LIGATURE S T); deleted U+FB00, U+FB01, U+FB02, U+FB05 as - ligatures (bug #16253). - - * sfd/FreeMonoOblique.sfd, sfd/FreeMonoBoldOblique.sfd: added - U+FB00; deleted U+FB01, U+FB02 as ligatures (bug #16253). - - * sfd/FreeMonoBold.sfd: deleted U+FB00, U+FB01, U+FB02 as - ligatures (bug #16253). - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd: added Georgian letters, donated by - Gia Shervashidze - -2006-02-22 Primoz Peterlin - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd: ligature U+FB4F - changed from mandatory ("liga") to discretionary ("dlig"). This is - respons to Bug#349657: [bug #15792] Freefont Alef and Lamed - combine - -2006-02-21 Primoz Peterlin - - * sfd/FreeSerifBold.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd, - sfd/FreeSansBold.sfd: ligature U+FB4F changed from mandatory - ("liga") to discretionary ("dlig"). This is respons to Bug#349657: - [bug #15792] Freefont Alef and Lamed combine - - * sfd/FreeSerif.sfd: corrected bug#275759: [bug #15790] FreeSerif - glyphs for U+2198/U+2199 were reversed. - -2006-02-15 Denis Jacquerye - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeMonoBold.sfd: removed ij - and IJ ligatures. - -2006-02-10 Primoz Peterlin - - * sfd/FreeSerif.sfd: added small Georgian letters (mkhedruli), - donated by Gia Shervashidze - - * AUTHORS: Added Gia Shervashidze - - * CREDITS: Added Gia Shervashidze - -2006-01-26 Primoz Peterlin - - * notes/maintenance.txt: Added information on the Makefile now - used; username for FTP login is anonymous. - - * sfd/FreeSansBold.sfd: added U+0569, U+0571, U+0579, U+057B, - U+0586. Armenian small letters completed. - - * sfd/FreeSerif.sfd: added U+0297, U+02AD-02AF. IPA Extensions - section is now complete. Copied a dozen of glyphs from Omega IPA - to Phonetic Extension section. - -2006-01-25 Primoz Peterlin - - * sfd/FreeSans.sfd: added U+01A, U+01A3, U+01A6, U+01B2, U+01BA, - U+01BB, U+01BE, U+01BF. - - * sfd/FreeSans.sfd: aligned small Armenian letters to x-height in - response to bug #15480. Armenian in Free Sans needs a major - cleanup. - -2006-01-24 Primoz Peterlin - - * sfd/FreeSerif.sfd: changed U+0452, U+045B. Cleanup: U+0460, - U+0461, U+04Bc, U+04BD, U+0508. - - * sfd/FreeSansOblique.sfd: replaced accented chars in Latin-1 and - Latin Extended-B sections with references, where possible. - - * sfd/FreeSerif.sfd: changed U+0285. - -2006-01-23 Primoz Peterlin - - * sfd/FreeSans.sfd: added U+0195, U+01AA, U+0297, U+03D7, - U+03F0. Several flipped references replaced by outlines. - - * sfd/FreeSansOblique.sfd: Latin Extended-B section more or less - brought in sync with FreeSans. - - * sfd/FreeMonoBoldOblique.sfd: added glyphs from FreeMonoBold in - the Latin Extended-B and IPA Extensions sections. - - * sfd/FreeSerifBold.sfd: Added U+0224, U+0225. Changed U+01B7, - U+01B8, U+04E0, U+0452, U+045B. Replaced accented characters in - the Cyrillic region with references. - -2006-01-21 Primoz Peterlin - - * sfd/FreeSans.sfd: added U+0255, U+0264, U+0277, U+0286, - U+029D. Changed U+0261. Deleted spurious glyphs in the control - code area. - -2006-01-19 Primoz Peterlin - - * sfd/FreeSans.sfd: replaced Hardip Pannu Singh's Gurmukhi with - AnmolUni by Kulbir Singh Thind. - -2006-01-17 Primoz Peterlin - - * sfd/FreeSansBold.sfd: Added U+018D, U+0194, U+01B5, U+01B6, - U+01BE, U+0262, U+02A2. - - * sfd/FreeSansBold.sfd: Changed U+0261 in order to distinguish it - from U+0067. Changed U+0251, U+0252. - - * sfd/FreeSerifBold.sfd: Small changes in the Cyrillic - section. Added U+0183, U+018C. - - * sfd/FreeSans.sfd: Added U+2045, U+2046. - - * sfd/FreeSansBold.sfd: Filled in the Gurkmukhi part with the - AnmolUni-Bold by Kulbir Singh Thind. Also some minor corrections - in the Cyrillic part. - - * CREDITS: Added Kulbir Singh Thind. - - * AUTHORS: Added Kulbir Singh Thind. - -2006-01-14 Primoz Peterlin - - * sfd/FreeSerif.sfd: Thomas Ridgeway's Tamil characters replaced - by the ones released by the Samyak font project. - - * CREDITS: Added Pravin Satpute, Bageshri Salvi, Rahul Bhalerao - and Sandeep Shedmake - - * AUTHORS: Added Pravin Satpute, Bageshri Salvi, Rahul Bhalerao - and Sandeep Shedmake - -2006-01-08 Primoz Peterlin - - * sfd/FreeSansBold.sfd, sfd/FreeMonoBoldOblique.sfd: minor changes. - -2006-01-05 Denis Jacquerye - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd: added cedi sign U+20B5, Ghanaian - currency - -2005-12-29 Primoz Peterlin - - * sfd/FreeSans.sfd: minor cleanup in the Gujarati part. - -2005-12-22 Primoz Peterlin - - * sfd/FreeSans.sfd: Devanagari and Gujarati parts cleared; once - again merged with Gargi 1.9 and Padmaa 0.6, this time correctly so - that the anchor points survived the merger. - -2005-12-16 Primoz Peterlin - - * sfd/FreeSans.sfd: added U+0577. - -2005-12-15 Primoz Peterlin - - * sfd/FreeSans.sfd: added U+0559, U+055F, U+2024. - - * sfd/FreeSansBold.sfd: added U+056E, U+0573. - -2005-12-14 Primoz Peterlin - - * sfd/FreeSans.sfd: Merged with Gargi 1.9 and Padmaa 0.6, - courtesy Monika Shah and Sonali Sonania from C-DAC, Mumbai. - - * CREDITS: Added Monika Shah and Sonali Sonania. - - * AUTHORS: Added Monika Shah and Sonali Sonania. - -2005-12-13 Primoz Peterlin - - * sfd/FreeSans.sfd - Removed Sinhala glyphs. - - * sfd/FreeSerif.sfd - Added Sinhala glyphs, formerly in FreeSans. - -2005-12-09 Primoz Peterlin - - * sfd/FreeSerif.sfd: added U+20AF, U+211E. Changed U+20AC (EURO - SIGN). - - * tools/freefont-ttf.spec: Added specification file for building - RPM package, courtesy Rok Papez. - - * sfd/FreeSerifBold.sfd: added more glyphs from Txfonts to the - Arrows and Mathematical Symbols ranges. - - * sfd/FreeSerifBoldItalic.sfd: added U+03F5 from Txfonts. - -2005-12-08 Primoz Peterlin - - * sfd/FreeSans.sfd: added U+0567, U+056A, U+056C, U+0582. - - * sfd/FreeSerifBold.sfd: copied Box Drawing range from FreeSans. - - * sfd/FreeSerifBold.sfd: added glyphs from Txfonts to the Arrows - and Mathematical Symbols ranges. - - * sfd/FreeSerif.sfd: added U+2259-225A, U+22BA, U+2308-230B, - U+2322-2323. Cyrillic composite characters replaced with - references. - -2005-12-07 Primoz Peterlin - - * sfd/FreeSerifBold.sfd: added U+025A, U+025D, U+026B, U+029B, - U+02AE, U+02AF, U+02DE. - - * sfd/FreeSerifBold.sfd: updated Hebrew part with Drugulin font - from the Culmus project. - - * sfd/FreeSerif.sfd: added U+207A-207C, U+208A-208C, U+2215-2216. - - * sfd/FreeSans.sfd: added U+2320 TOP HALF INTEGRAL, U+23AE - INTEGRAL EXTENSION, U+2321 BOTTOM HALF INTEGRAL (bug #13370). - -2005-12-07 Primoz Peterlin - - * sfd/FreeSerifBold.sfd: added U+0294-0296, U+02A1-02A2. Started - adding "below" anchors. Performed hinting on characters that were - not hinted "en masse". - -2005-12-06 Primoz Peterlin - - * sfd/FreeSans.sfd: fixed some more metrics problems in the - Extended Greek area; performed hinting on characters that were not - hinted "en masse". - - * Makefile: clean also signature files. - - * sfd/FreeMonoBoldOblique.sfd, sfd/FreeMonoBold.sfd: cosmetic - changes; cleaning background of referenced composed characters. - -2005-12-05 Panayotis Katsaloulis - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd: Some changes to the greek glyphs, - mostly having to do with "tonos" (accent) - -2005-12-05 Primoz Peterlin - - * sfd/FreeSans.sfd: minor cosmetic changes. - - * sfd/FreeSans.sfd: adjusted widths of characters in the Extended - Greek range; accents are not any more considerably overhanging on - the left side. Added U+1EDA-1EE3, U+1EE8-1EF1. - - * sfd/FreeSans.sfd: continued working on Extended Greek range; - metrics still not finished. - -2005-12-03 Primoz Peterlin - - * sfd/FreeSans.sfd: fixed combined Greek accents (bug - #12800). Width of characters still need to be adjusted as in - FreeSerif. - - * sfd/FreeSerif.sfd: fixed positions of Greek accents (bug #12798). - - * CREDITS: Added Panayotis Katsaloulis. - - * AUTHORS: Added Panayotis Katsaloulis. - - * Makefile: minor changes; now creating also a tarfile with sfds. - -2005-12-01 Primoz Peterlin - - * sfd/FreeSerifItalic.sfd: added U+0183, U+018C, U+01C0, U+01C1, - U+01C3, U+01E0, U+01E1, U+01F8, U+01F9. - - * Makefile: created a Makefile to assist building. - - * README: an update. - - * COPYING: added GNU General Public License, version 2. - - * tools/GenerateTrueType: wrote a FontForge script for conversion - to TrueType. - - * sfd/FreeSerif.sfd: merged with SolaimanLipi Bangla OpenType font - from www.ekushey.org, courtesy Solaiman Karim. - - * sfd/FreeSerifItalic.sfd: merged with SolaimanLipi Bangla - OpenType font from www.ekushey.org, slanted by 15.5 degrees. - - * sfd/FreeSans.sfd: merged with Rupali Bangla OpenType font from - www.ekushey.org - - * sfd/FreeSansOblique.sfd: merged with Rupali Bangla OpenType font from - www.ekushey.org, slanted by 12 degrees. - - * CREDITS: added Solaiman Karim - - * AUTHORS: added Solaiman Karim - -2005-11-30 Primoz Peterlin - - * sfd/FreeSerif.sfd: merged with the Rachana Normal. - - * AUTHORS: added K.H. Hussain and R. Chitrajan - - * CREDITS: added K.H. Hussain and R. Chitrajan - -2005-11-23 Primoz Peterlin - - * sfd/FreeSans.sfd - cleaned some background images. - - * sfd/FreeSans.sfd - added U+01A0-01A1, U+01AF-01B0, U+026E, - U+028F, U+0291, U+02A3-02A5, U+031B. Modified U+0198. - -2005-11-22 Primoz Peterlin - - * sfd/FreeSans.sfd - added U+2504-250B. - - * sfd/FreeSans.sfd - added U+2591-25A1, U+25A3-25A5, U+25AA, U+25AC. - - * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd - added U+0263. - -2005-11-21 Primoz Peterlin - - * sfd/FreeMono.sfd - corrected positions of some Greek diacritics - on page 0x1F. - - * sfd/FreeMonoOblique.sfd - working on bringing it in sync with - FreeMono.sfd. - - * sfd/FreeSerifBoldItalic.sfd - applied the sequence suggested by - Werner Lemberg for reducing redundant points. Added a couple of - glyphs in the IPA Extensions region. - - * sfd/FreeSansBold.sfd - added U+0574, U+0576. Removed overlaps. - -2005-11-20 Primoz Peterlin - - * sfd/FreeSerif.sfd - added U+02AA-02AC, U+02B0-02B2. - -2005-11-19 Primoz Peterlin - - * sfd/FreeSans.sfd - added U+01B7-01B9, U+0196, U+019A, U+01C3, - U+0224-0225, U+025E, U+029A, U+2422. Changed U+0184-0185, U+0192, - U+01B4, U+0282, U+0284. - -2005-11-18 Primoz Peterlin - - * sfd/FreeSerif.sfd - added U+02EE, U+207F. - - * sfd/FreeSans.sfd - started Box Drawing area. - -2005-11-17 Primoz Peterlin - - * sfd/FreeSerifBold.sfd - added glyphs from the Omega project to - Latin Extended-B, IPA Extensions and Greek ranges. - - * sfd/FreeSerifBoldItalic.sfd - added glyphs from the Omega - project to Latin Extended-B, IPA Extensions and Greek ranges. - - * sfd/FreeSerifItalic.sfd - added glyphs from the Omega - project to Latin Extended-B, IPA Extensions and Greek ranges. - - * sfd/FreeSerifItalic.sfd - added U+018B, U+025C, U+0265, U+026F, - U+0279, U+0287, U+028C-028E, U+029E. - - * sfd/FreeSerifBoldItalic.sfd - added U+1EDA-1EE3, U+1EE8-1EF1, - U+2190-219B, U+219E-21A8, U+21B9-21BA, U+21C4-21CA, U+21E4-21E5, - U+2669-266F. MES-1 compliant. - - * sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSansOblique.sfd, - sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd - added U+FFFD. - - * sfd/FreeSerif.sfd - removed overlaps in Latin Extended-B and IPA - Extensions ranges. - -2005-11-16 Primoz Peterlin - - * sfd/FreeSerifItalic.sfd - applied the sequence suggested by - Werner Lemberg for reducing redundant points. - - * sfd/papers/eurotex2003/freefont.tex, - sfd/papers/eurotex2003/freefont.bib - Revised version, sent back - by Karl Berry on 20050110, that should match the one published in - TUGboat. - - * sfd/FreeSerifItalic.sfd - started added accent anchors. Added a - handful of Greek letters from Omega font collection. - - * sfd/FreeSerif.sfd - added a handful of letters in the Latin - Extended-B and IPA Extension ranges from the Omega font collection. - -2005-11-16 Denis Jacquerye - - * sfd/FreeSerif.sfd - moved U+0263 to U+0264; added U+0263 - - * sfd/FreeSerifItalic.sfd - fixe U+01EE; added U+01B7-U+01B9 - -2005-11-16 Primoz Peterlin - - * sfd/FreeSans.sfd - Made small Greek letters the same height as - Latin and Cyrillic ones and replaced them with references, where - applicable. - - * sfd/FreeSerif.sfd - replaced Greek letters with references, - where applicable. Added U+03D7, U+03F0-03F2. - - * sfd/FreeSerif.sfd - added U+0255, U+025A, U+025D, U+025F, - U+0262-0263, U+026B-026C, U+0274, U+0276-0277, U+028F, U+0291, - U+029D. - - * sfd/FreeMonoOblique.sfd - applied the sequence suggested by - Werner Lemberg for reducing redundant points. Added U+F6BE. - - * sfd/FreeSansOblique.sfd - applied the sequence suggested by - Werner Lemberg for reducing redundant points. - - * sfd/FreeSans.sfd - changed U+01A5. - -2005-11-16 Primoz Peterlin - - * sfd/FreeSans.sfd - applied the sequence suggested by Werner - Lemberg for reducing redundant points. Replaced accented glyphs in - the Latin-1 and Latin Extended-A areas with references. Made - capital Greek letters the same height as Latin and Cyrillic ones - and replaced them with references, where applicable. - -2005-11-15 Denis Jacquerye - - * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSansOblique.sfd - fixed - U+026A, it was a dotlessi and therefore like U+0069 when - accented. - -2005-11-15 Primoz Peterlin - - * sfd/FreeMonoBold.sfd - corrected Greek tonos (slanted instead of - a vertical line). - - * sfd/FreeMonoBoldOblique.sfd - applied the sequence suggested by - Werner Lemberg for reducing redundant points. Replaced accented - glyphs in the Latin-1 and Latin Extended-A areas with references. - -2005-11-14 Primoz Peterlin - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd - Added 2005 in copyright info. - - * sfd/FreeSansBoldOblique.sfd - applied the sequence suggested by - Werner Lemberg for reducing redundant points. Replaced accented - glyphs in the Latin-1 area with references. - - * sfd/FreeSansBoldOblique.sfd - added U+0180, U+0184, U+0185, - U+0195, U+01A0-01A2, U+01AF-01B0, U+025E, U+026E, U+0292, - U+0294-0296, U+029A, U+02A1, U+2126-2127, U+2190-219B, - U+219E-21A8, U+21C4-21CA, U+2669-266F. MES-1 compliant. - - * sfd/FreeMono.sfd - Replaced accented glyphs in the Greek and - Cyrillic areas with references. - - * sfd/FreeMonoBold.sfd - applied the sequence suggested by Werner - Lemberg for reducing redundant points. Replaced accented glyphs in - the Latin-1 and Latin Extended-A areas with references. - -2005-11-14 Primoz Peterlin - - * sfd/FreeSerif.sfd - applied the sequence suggested by Werner - Lemberg for reducing redundant points. - - * sfd/FreeSansBold.sfd - added U+219A, U+219B, U+2669-266F. - - * sfd/FreeSerifBold.sfd - added U+2669-266F. - -2005-11-12 Primoz Peterlin - - * sfd/FreeSansBold.sfd - added U+0180, U+0181, U+0183, U+0187, - U+0188, U+018A, U+018C, U+018D, U+0193, U+019C, U+01A0, U+01A1, - U+01AC, U+01AF, U+01B0, U+025C, U+0260, U+026E, U+0277, U+0281, - U+0284. - -2005-11-11 Primoz Peterlin - - * sfd/FreeSansBold.sfd - added U+195, U+1A6, U+025E, U+026E, - U+029A, U+0313, U+0314, U+0342, U+0344, U+0345. Started adding - accent anchors. - - * sfd/FreeMono.sfd - applied the sequence for reducing redundant - points, suggested by Werner Lemberg. - - * sfd/FreeMono.sfd - corrected Greek letters (using tonos instead - of a vertical line). Added U+026E, U+F6BE. Accented characters in - Latin 1, Latin Extended A and partly Latin Extended B replaced by - references. - - * sfd/FreeSerifBold.sfd - applied the sequence for reducing - redundant points, suggested by Werner Lemberg. Added U+01A5, - U+02A0, U+2190-219B, U+219E-21A8, U+21B8, U+21B9, U+21C4-21CA, - U+21E4, U+21E5. - -2005-11-10 Primoz Peterlin - - * sfd/FreeSansOblique - changed U+0192, U+01A5; added U+01C0-01C3. - - * sfd/FreeSansBold.sfd - replaced glyphs with references in the - Cyrillic area. Removed U+04A8, U+04A9. Added U+04C5, U+04C6, - U+04C9, U+04CA, U+04CD, U+04CE, U+0535, U+053F, U+0546, U+0565, - U+0584, U+0587, U+0589. - -2005-11-10 Denis Jacquerye - - * sfd/FreeSans.sfd - added U+028A-U+028B - - * sfd/FreeSansOblique - added U+028A-U+028B, U+0276, - U+0292, U+0294-U+0296, U+0298-U+0299 and U+029B; fixed some - other glyphs - -2005-11-10 Primoz Peterlin - - * sfd/FreeSerif.sfd - added U+01A6. Simplified outlines in the - ASCII range. - - * sfd/FreeSansBold.sfd - added U+00A0, U+00AD, U+0531, U+2126, - U+2190-2199, U+219E-21A8, U+21C4-21CA. - - * sfd/FreeSansBold.sfd - applied the sequence for reducing - redundant points, suggested by Werner Lemberg. Added automatically - constructed accented characters in page 0x1E. - -2005-11-09 Primoz Peterlin - - * sfd/FreeSerif.sfd - added U+0183, U+018C. - - * sfd/FreeSans.sfd - added U+1EA2, U+1EA3, U+1EA8, U+1EA9, U+1EB2, - U+1EB3, U+1EBA, U+1EBB, U+1EC2, U+1EC3, U+1EC8, U+1EC9, U+1ECE, - U+1ECF, U+1ED4, U+1ED5, U+1EE6, U+1EE7, U+1EF6, U+1EF7, U+220A, - U+220B, U+220D, U+2272, U+2273, U+2282, U+2283. - - * sfd/FreeSerifItalic.sfd - changed U+03D5. - - * sfd/FreeSerifBoldItalic.sfd - changed U+03C6; added U+2070, - U+2075-2079, U+207F, U+2080, U+2085-2089, U+2155-217F. - - * sfd/FreeSerif.sfd - added U+0184, U+0185, U+018D, U+0195, - U+0197, U+019A, U+019B, U+01A0, U+01A1, U+01AC, U+01B5, U+01B6, - U+01C0, U+01C1, U+01C3, U+01F6, U+0294-0296, U+1E9A, U+1EDA-1EE3, - U+1EE8-1EF1. - -2005-11-07 Primoz Peterlin - - * sfd/FreeSansBold.sfd - added U+0562, U+056D. U+0575. - - * sfd/FreeMono.sfd - added U+0589. - -2005-11-06 Primoz Peterlin - - * sfd/FreeSans.sfd - added U+0278, U+03D5, U+2248. Corrected - U+2071, U+222E, U+2242, U+2243 in response to bug reports - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276118 - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276120 - - * sfd/FreeMono.sfd - added U+2227, U+2228, U+2262. Corrected - U+2299-229D in response to bug report - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276121 - - * sfd/FreeMonoBold.sfd - added U+2010, U+2012 in response to bug - report http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=289032 - Swapped U+03C6 (Greek small letter phi) and U+03D5 (Greek phi - symbol) in order to conform to Unicode standard. Simplified glyph - shapes in ASCII range. Started adding "above" and "below" anchors. - -2005-11-05 Primoz Peterlin - - * sfd/FreeSerif.sfd - accented letters in Latin Extended-A - replaced by references wherever possible. - - * sfd/FreeSerif.sfd - added U+0180, U+0181, U+0187, U+0188, - U+018A, U+0193, U+019C, U+01A4, U+01A5, U+01A7, U+01A8, U+01AF, - U+01B0, U+026E, U+0270, U+0278, U+0280, U+0281, U+028B, U+0299, - U+029C, U+029F. - -2005-11-03 Primoz Peterlin - - * sfd/FreeSansBold.sfd - added U+0180, U+0184, U+0185, U+0192, - U+019B, U+01A0-01A2, U+01AF, U+01B0, U+01EE, U+01EF, U+0292, - U+0294-0296, U+02A1, U+0532, U+054C, U+057C, U+222B. Changed - U+014B, U+01A5, U+01B4, U+03BB. - - * sfd/FreeSans.sfd - added U+04C5, U+04C6, U+04C9, U+04CA, U+04D, - U+04CE. - - * sfd/FreeSansBold.sfd - cleaner Arabic outlines. Added U+01E4, - U+01E5. - -2005-11-02 Primoz Peterlin - - * sfd/FreeSansBold.sfd - started Armenian; added U+0538, U+0542, - U+0544, U+0548, U+054D, U+054F, U+0550, U+0553, U+0555, U+0561, - U+0563, U+0564, U+0566, U+0568 U+056B, U+056F, U+0570, U+0572, - U+0578, U+057A, U+057D-057F, U+0580, U+0581, U+0583, U+0585. - - * sfd/FreeMono.sfd - swapped U+03C6 (Greek small letter phi) and - U+03D5 (Greek phi symbol) in order to conform to Unicode standard. - Added U+04C5, U+04C6, U+04C9, U+04CA, U+04D, U+04CE. - -2005-11-01 Primoz Peterlin - - * sfd/FreeSansBold.sfd - modified U+019C. - - * sfd/FreeSansBoldOblique.sfd - added U+00A0, U+00AD, U+019C, - U+01B7, U+01B8, U+0275, U+0278, U+0298, U+2012, U+2015, - U+2070-207F, U+2080-208E, U+2153-217F, U+2213, U+2215. - -2005-10-31 Primoz Peterlin - - * sfd/FreeSerif.sfd - added U+0199, U+01AB, U+0265, U+0282, - U+0288, U+028C-028E, U+0290, U+029E, U+02A0. - -2005-10-28 Primoz Peterlin - - * sfd/FreeSerifBold.sfd - added U+019E, U+01AB, U+01AD, U+01B1, - U+0256, U+025F, U+0265, U+0269, U+026F, U+0270, U+0279-027F, - U+0282, U+0287, U+0288, U+028C-028E, U+0290. - - * sfd/FreeSerifBold.sfd - added U+2070, U+2075-2079, U+2080, - U+2085-2089, U+2153-215E, U+2113-2115, U+2119. - - * sfd/FreeSerifBold.sfd - added U+0199, U+019B, U+01B8, U+01B9, - U+01BE, U+01C0, U+0262, U+0274, U+0278, U+0280, U+028F, U+0298, - U+0299, U+029C, U+029E, U+029F, U+2012, U+2015, U+2016, U+2129, - U+2217. - -2005-10-27 Primoz Peterlin - - * sfd/FreeSans.sfd - added U+018D, U+0194, U+019B, U+019C, U+01B5, - U+01B6, U+0295, U+0296, U+029B, U+02A2, U+0472, U+0473, U+2114, - U+2119. - - * sfd/FreeSerifItalic.sfd - minor cleanup in the superscript range - (U+2070-2079). - - * sfd/FreeSansBold.sfd - added subscripts and superscripts - (U+2070-208F), completed fractions (U+2152-215F) and Roman - numerals (U+2160-217F). - - * sfd/FreeSerifBold.sfd - added U+018B, U+018E, U+018F, U+0191, - U+019D, U+01A7, U+01A8, U+01AE, U+0253, U+0266, U+0267, U+026A, - U+0271-0273, U+0283, U+0285. - -2005-10-26 Primoz Peterlin - - * sfd/FreeSans.sfd - added "above" anchors to selected Cyrillic - characters. Added U+0294, U+02A1. - - * sfd/FreeMono.sfd - added U+2011, U+2012, U+203B, U+204A, U+2071, - U+2129, U+2232, U+2233. Changed and/or corrected U+2106, U+211E, - U+2126, U+2127, U+2153-215F, U+2202. - - * sfd/FreeMono.sfd - a try to imitate Denis' work on adding - anchors by adding "above" anchor to a couple of basic Latin - characters. - - * sfd/FreeSansBold.sfd - added U+0278, U+0298. Cleaned up outlines - of most Greek letters. - - * sfd/FreeSansBold.sfd - Added U+2010-2012, U+2015, U+2032, - U+203C, U+2047-2049. - - * sfd/FreeSans.sfd - Added U+01C0-01C2, U+0276, U+0292, - U+0298. Changed U+0251, U+0294, U+02A1. - -2005-10-25 Primoz Peterlin - - * sfd/FreeSerifItalic.sfd - added U+00A0, U+00AD, U+2010-2012, - U+2015, U+2126, U+2127, U+2153-215E, U+2160-217F, U+2190-2193, - U+2669-266F. FreeSerifItalic is now MES-1 compliant. - - * sfd/FreeSerif.sfd - added U+0191, U+019D, U+01AE, U+027E, - U+027F, U+0283, U+0285. - - * sfd/FreeSerif.sfd - added U+019E, U+01AD, U+01B8, U+01B9, - U+0253, U+0256, U+0257, U+025C, U+0260, U+0266, U+0267, U+0269, - U+026D, U+0271-0273, U+0279-027D. - - * sfd/FreeSerifBoldItalic.sfd - added U+00A0, U+00AD, U+2010-2012, - U+2015, U+2032-2034, U+203C, U+2047-204A, U+2074, U+2081-2084, - U+2126, U+2153, U+2154, U+215F, U+2215. Corrected positions of - diacritics on U+0200-0217. - - * sfd/FreeSansOblique.sfd, sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeMonoBoldOblique.sfd, - sfd/FreeMonoBold.sfd, sfd/FreeSerifItalic.sfd, - sfd/FreeSerifBold.sfd sfd/FreeSerifBoldItalic.sfd - brought in - sync with Valek Filipov's urw-fonts-1.0.7pre41. - - * sfd/FreeSansOblique.sfd - added U+00A0, U+2011-2012, U+2015, - U+2070, U+2071, U+2074-2079, U+2080-2089, U+2126, U+2153-215F, - U+2190-2195, U+2215, U+266A. FreeSansOblique is now MES-1 - compliant. - -2005-10-24 Denis Jacquerye - - * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd - added - ccmp for i and j to be substituted with dotless i or j when - followed by above diacritic - -2005-10-24 Primoz Peterlin - - * sfd/FreeSans.sfd - added U+2011, U+2012, U+2015. FreeSans is now - MES-1 conformant. - -2005-10-23 Denis Jacquerye - - * sfd/FreeSans.sfd - added above, below, abovemk and belowmk - anchors for diacritics placement to many Basic Latin characters, - some Latin Extented A and B, and some IPA characters; fixed a - couple of precomposed characters to have diacritics at the same - height as similar characters. - -2005-10-21 Primoz Peterlin - - * sfd/FreeSerif.sfd - added U+02B9, U+02BA, U+02CD, U+2017, - U+2036, U+2037, U+203C, U+203E, U+2047-204A. - -2005-10-20 Primoz Peterlin - - * sfd/FreeSerifBold.sfd - added U+0182, U+0189, U+0192, U+019F, - U+01A9, U+01B7, U+01C4-01CC, U+01E0-1E2, U+01F0-01F3, U+F6BE. - Corrected position of diacritics on U+0200-0217. - - * sfd/FreeSerif.sfd - added U+00A0, U+00AD, U+0182, U+0189, - U+018B, U+018E, U+018F, U+0192, U+019F, U+01A9, U+01B1, U+01B7, - U+01DD, U+2010-2013, U+2015. FreeSerif is now MES-1 conformant. - -2005-10-19 Denis Jacquerye - - * sfd/FreeSerif.sfd - added U+0268, U+026A, U+0289, U+0292; and - anchor "above" to more base glyphs. - - * sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd, - sfd/FreeSerifBoldItalic.sfd - added U+0250-0252, U+0258-0259, - U+0261, U+0268, U+026A, U+0279, U+0289 - - * sfd/FreeSerifBold.sfd - added anchor "above" to marks - U+0300-0314, and to base glyphs (vowels). - -2005-10-18 Denis Jacquerye - - * sfd/FreeSerif.sfd - added anchor "above" to marks U+0300-0314, - and bases vowel of the U+0041-007A range, U+00E6, U+0186, U+0190, - U+0254 and U+025B; fixed Latin-1 Supplement block accented glyphs - to use references. - -2005-10-17 Primoz Peterlin - - * sfd/FreeSansBold.sfd - added U+01B7, U+01B8, U+0275. - -2005-10-16 Denis Jacquerye - * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - added some Latin - Extended-B African letters: U+0181, U+018A, U+0197-0198, U+01A4, - U+01AC, U+01B1, U+01B3-01B4; - - * sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd - added Latin - Extended-B U+0187, 018E-018F, U+0191, U+0193, U+0197-0199, - U+019D-019F, U+01AB-01AE; correcting width of non-space - Combining Diacrtical Marks; added more glyphs to IPA Extensions - to match non Bold - - * sfd/FreeSansBoldOblique.sfd - added many accented glyphs to - Latin Extended-B - -2005-10-15 Denis Jacquerye - * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - added IPA Extensions - U+0262,U+0274,U+0280-0281, U+0299, U+029F, and Spacing Modifier - Letters U+02C9-02CB; fixed U+0287,029E height to baseline; added - stroke to U+0268 - - * sfd/FreeSansOblique.sfd - fixed skew on U+027F - - * sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd - added to Latin - Extended-B U+01A7-01A8, IPA Extensions U+0251-0253, U+0256-0257, - U+0261, U+0265-026A, U+026F-0273, U+0289, U+028C-028E - - * sfd/FreeSansBoldOblique.sfd - added to Latin extended-B U+0189, - U+01A8, U+01B1, U+0283, U+02C9 and Spacing Modifiers U+02C9-02CB - -2005-10-14 Primoz Peterlin - - * sfd/FreeSansBold.sfd - Added a couple of composite glyphs, - mostly in the IPA and Latin Extended B ranges. - -2005-10-13 Denis Jacquerye - - * FreeSans.sfd - removed overlap and simplified U+0187, 0191, - 0193, 01A5, 01AE, 0260, 0271, 0272, 0273, 027B; fixed diacritics - placement on U+0200-0217; fixed glyph for U+0283 to correct esh - without stroke; added U+025F and fixed U+025F from it; fixed - height of glyph at U+0285; arranged U+027E,027F to make more - distinguishable from U+0072. - - * FreeSansOblique.sfd - added the corrected or new glyphs from - FreeSans; diacritics on U+200-0217 will need height readjustements. - - * FreeSansBold.sfd, FreeSansBoldOblique.sfd - added U+0186, 0190, - 0250, 0254, 0258, 0259, 025B, 025C - -2005-10-13 Primoz Peterlin - - * sfd/FreeSerif.sfd - Minor changes: U+22A2, U+22A3, U+22A6, U+23AE. - Added U+0250, U+0251, U+0258, U+0259, U+0275. - - * sfd/FreeSerifItalic.sfd - Added glyphs U+222B-U+222F, U+2320, - U+2321. Fixed diacritics on U+0200-U+0217. - -2005-10-12 Denis Jacquerye - - * sfd/FreeSerif.sfd - Corrected diacritics position on - U+01D5-01D9,01DB,01EA-01ED,0200-0217 and U+022A. - - * sfd/FreeSerif.sfd, sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd, - sfd/FreeSerifBoldItalic.sfd - added U+0186,0190,0254 and U+025B. - -2005-10-11 Primoz Peterlin - - * sfd/FreeSerif.sfd - Fixed bug #13399 (glyphs for U+0360 and - U+0361 were swapped). - - * sfd/FreeSerif.sfd - Attempt to correct bug #13370: INTEGRAL - EXTENSION does not align with TOP/BOTTOM HALF INTEGRAL; added - glyph U+23AE. - -2005-05-16 Primoz Peterlin - - * sfd/FreeMono.sfd - Corrected shapes for Cross of Lorraine and - Cross of Jerusalem. - -2005-04-07 Primoz Peterlin - - * sfd/FreeSansBold.sfd - Added some combining accents, just to - test the a version of FontForge. - -2003-12-05 Primoz Peterlin - - * sfd/FreeMono.sfd - Some composite Latin characters rebuilt, as - they had accents 600 points to the left due to changes on October - 2. Some other minor changes in the mathematics area. - -2003-10-08 Primoz Peterlin - - * sfd/FreeMonoOblique.sfd, sfd/FreeSerifBoldItalic.sfd, - FreeSerifItalic.sfd - applied Josef Segur's corrections from - Oct. 5. - -2003-10-02 Primoz Peterlin - - * sfd/FreeSerif.sfd - Abbas Izad's contributed Arabic/Farsi - characters added. - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd - Combining characters (U+0300 - - U+036F) moved left, so that they have negative horizontal values - and zero advance width. - -2003-09-15 Primoz Peterlin - - * sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd - Started working - on super- and subscripts. - -2003-09-12 Primoz Peterlin - - * sfd/FreeSans.sfd, sfd/FreeSerif.sfd - Added some missing - Hiragana and Katakana characters. - - * sfd/FreeSansBold.sfd - Cleared background characters in Latin - Extended-A. Added some automatically constructed characters in - Latin Extended-B. Started with superscripts and subscripts. - - * sfd/FreeSans.sfd - Subscript numerals (U+2080-U+2089) completed. - -2003-05-19 Primoz Peterlin - - * sfd/FreeSerif.sfd - Thai characters po pla and bo baimai - swapped; Thai character fongman corrected; all courtesy Theppitak - Karoonboonyanan. - -2003-05-17 Panayotis Katsaloulis - - * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, - sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - Full support - of all ancient greek glyphs - -2003-05-15 Primoz Peterlin - - * tools/KerningNumerals.pl - A Perl script for moving kerning - information from ASCII numerals (U+0030...) to characters in the - Adobe corporate use area (U+F6xx). - - * sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd, - sfd/FreeSansBoldOblique.sfd - Created kerned numerals in the Adobe - corporate use area (U+F6xx) and moved kerning information from - ASCII numerals to the kerned numerals. - -2003-05-14 Primoz Peterlin - - * sfd/FreeSans.sfd - First approximation of super- and subscript - numerals and vulgar fractions. - - * sfd/FreeSerif.sfd - Super- and subscript numerals complete, - vulgar fractions completed and redone as references rather than - outlines. - -2003-05-12 Primoz Peterlin - - * sfd/FreeSerif.sfd - Clean-up of the Cyrillic letters added on - March 27; super- and subscripts, vulgar fractions. - -2003-05-09 Primoz Peterlin - - * sfd/FreeMonoBold.sfd - Added a couple of characters to - the Latin Extended-B area and the IPA extensions area. - -2003-05-08 Primoz Peterlin - - * sfd/FreeSerifBoldItalic.sfd - Added a couple of characters to - the Latin Extended-B area. - - * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, - sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - ASCII - numerals now monospaced; kerned numerals moved to Adobe corporate - use area - (U+F6xx). - -2003-05-07 Primoz Peterlin - - * sfd/FreeSerif.sfd - Roman numerals now more complete. - - * sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd - Accented - characters added in the Latin Extended-B area. - - * sfd/FreeSans.sfd - Greek accents added in the Greek Extended - area, characters added in the Latin Extended-B area, Roman - numerals added. - - * sfd/FreeMonoOblique.sfd - Kerning pairs removed (what were they - doing in a monospaced font, anyway?). - - * sfd/FreeMonoBoldOblique.sfd - Additions in Latin Extended-B and - Basic Greek. - - * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd, sfd/FreeMonoOblique.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd, - sfd/FreeSansBoldOblique.sfd - Major cleanup (fixed widths, open - paths, path directions (clockwise/counter-clockwise), points - rounded to integer values; outlines simplified etc.) - -2003-05-06 Primoz Peterlin - - * tools/OS2UnicodeRange - A simple script to display OS/2 Unicode - range table in TrueType fonts. - - * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd - ASCII numerals now - monospaced; kerned numerals moved to Adobe corporate use area - (U+F6xx). FreeSans is done, FreeSansBold half-way. - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd - Added 2003 in copyright info. - -2003-03-27 Primoz Peterlin - - * sfd/FreeSerif.sfd - Cyrillic and Cyrillic Supplement blocks - brought to conformance with Unicode 3.2, courtesy Daniel Shurovich - Chirkov. - -2003-03-19 Primoz Peterlin - - * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - somewhat wider - germandbls (U+00DF), due to complaints by Walter Schmidt. - -2003-03-18 Primoz Peterlin - - * sfd/FreeSans.sfd - Added Sinhala glyphs from the Tipitaka - project , recoded to Unicode by Noah Levitt. - -2003-02-19 Primoz Peterlin - - * sfd/FreeSans.sfd - Minor changes on mathematical operators. - -2003-02-18 Primoz Peterlin - - * sfd/FreeMono.sfd - minor cleanup of glyph backgrounds; changed - integral signs (U+222B - U+2230) - -2003-02-05 Primoz Peterlin - - * sfd/FreeSans.sfd - added a couple of glyphs in the IPA and - African Latin ranges. - -2003-01-30 Primoz Peterlin - - * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd - Corrected Maltese Hbar (U+0126) - and/or hbar (U+0127). - -2003-01-28 Primoz Peterlin - - * sfd/FreeSerifItalic.sfd - Corrected Maltese hbar (U+0127). - -2002-12-18 Primoz Peterlin - - * tools/ConvertFont - PfaEdit script for converting SFD files to - TrueType fonts. - - * sfd/FreeSans.sfd - Added Tamil and Kannada glyphs from the - Akruti Indic fonts. - -2002-12-17 Primoz Peterlin - - * sfd/FreeSans.sfd - Added Devanagari and Gujarati glyphs from the - Akruti Indic fonts. - - * www/index.html - Added information on Rogier van Dalen's tools. - - * AUTHORS - Added M.S. Sridhar. - - * CREDITS - Correct spelling of Culmus project. Added M.S. Sridhar. - -2002-12-06 Primoz Peterlin - - * sfd/FreeMono.sfd - Added Braille glyphs, courtesy Vyacheslav - Dikonov. - - * sfd/FreeSans.sfd - Added Unicode Syriac glyphs, courtesy - Vyacheslav Dikonov. - -2002-10-11 Primoz Peterlin - - * www/index.html - Added information on the availability of the - Debian GNU/Linux package. - - * sfd/FreeSerif.sfd, sfd/FreeSans.sfd - added some kern pairs - beyond Latin-1 area. - - * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, - sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - re-introduced - all the emtpy glyph slots (changes from Sep 23 made PfaEdit - crash). - -2002-09-23 Primoz Peterlin - - * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, - sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - imported - kerning information from the URW++ AFM files - -2002-09-11 Primoz Peterlin - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoOblique.sfd - updated Hebrew parts to comply with - Culmus v0.6. - - * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansOblique.sfd - Added Danilo Segan's Serbian Cyrillic - glyphs; updated Hebrew parts to comply with Culmus v0.6. - -2002-09-09 Primoz Peterlin - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansOblique.sfd - Updated Cyrillic part to match - Filippov's 1.0.7pre14 - - * sfd/FreeSansOblique.sfd - added Sam Stepanyan's Armenian glyphs - from FreeSans (skewed for 12 degrees). - -2002-09-06 Primoz Peterlin - - * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, - sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd - Added Maxim - Iorsh's Hebrew characters. - -2002-08-29 Primoz Peterlin - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, - sfd/FreeMonoBold.sfd, sfd/FreeMonoOblique.sfd - Added Maxim - Iorsh's Hebrew characters. - - * AUTHORS, CREDITS - Added Maxim Iorsh as author. - -2002-08-28 Primoz Peterlin - - * www/index.html - Added information of Microsoft's withdrawal of - freely available Unicode TrueType fonts - - * www/resources.html - Added link to Maxim Iorsh's Culmus project. - -2002-07-26 Primoz Peterlin - - * sfd/FreeMono.sfd - Added a couple of characters (Arrows area). - -2002-06-11 Primoz Peterlin - - * sfd/FreeMono.sfd - Applied Michalis Kabrianis's patch concerning - perispomeni in Greek politoniko. - -2002-05-23 Primoz Peterlin - - * sfd/FreeMono.sfd - Applied Michalis Kabrianis's patch concerning - psili in Greek politoniko. Also added two working variants of - chars in the IPA range. - -2002-05-15 Primoz Peterlin - - * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifBold.sfd - Deleted explicit ".notdef" character with - no contours. - -2002-05-14 Primoz Peterlin - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd - The new version of PfaEdit saves - correctly formed Panose and LineGap lines. - - * sfd/FreeSansBoldOblique.sfd - Filled-in the missing TTFWidth and - TTFWeight values. - -2002-05-09 Primoz Peterlin - - * sfd/FreeSans.sfd - Added diacritics to the Spacing Modifier - Letters and Combining Diacritical Marks areas. Added composed - glyphs to the Latin Extended-B area. - -2002-05-07 Primoz Peterlin - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd - Updated Panose information with data - provided by Josef W. Segur. Updated TTF headers with English and - Slovenian text. - -2002-04-30 Primoz Peterlin - - * sfd/FreeMonoBold.sfd - Working on Greek small letters. Several - minor changes (lower carons etc.) - -2002-04-29 Primoz Peterlin - - * FreeMonoBoldOblique.sfd - Started adding Greek. - - * sfd/FreeMonoBold.sfd - Added glyphs in the Geometrical Shapes - and Miscellaneous Symbols area. Harmonizing Greek with Latin. Done - with capitals. - - * sfd/FreeMono.sfd - Deleted the explicit .notdef character. Added - one glyph to the Geometrical Shapes area, which is now completed; - added three glyphs to the Miscellaneous Symbols area. Harmonizing - Greek with Latin. Done with the capitals. - -2002-04-26 Primoz Peterlin - - * sfd/FreeSans.sfd - Adjusted accent positions on several glyphs - in the Latin Extended-A area. - -2002-04-25 Primoz Peterlin - - * sfd/FreeMonoBold.sfd - Box Drawing area completed. Added a - couple of glyphs in the Geometrical Shapes area. - - * sfd/FreeMono.sfd - Small corrections in the Box Drawing area. - -2002-04-24 Primoz Peterlin - - * sfd/FreeMono.sfd - Box Drawing area completed. - -2002-04-23 Primoz Peterlin - - * tools/WGL4.lst - corrected. - - * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd - Working on Box Drawing - area. - -2002-04-22 Primoz Peterlin - - * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd - Working on Latin - Extended-B and Greek. - -2002-04-19 Primoz Peterlin - - * sfd/FreeSerif.sfd - Somewhat cleaner chess figures. - - * tools/MES-2.txt, tools/MES-2.lst - Corrected list (it is not - 203C-203E, it is 203C and 203E). - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd - Changed "Family Name" from Free to - FreeSerif, FreeSans and FreeMono, as appropriate. Changed Font - Modifiers from MonoBold etc. to Bold, Italic, Oblique, BoldOblique - and BoldItalic. - -2002-04-18 Primoz Peterlin - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd - Corrected metrics; now all character - widths are set to 600. - -2002-04-17 Primoz Peterlin - - * sfd/FreeSerif.sfd - Corrected glyphs in the Box Drawing area and - Block Elements area, which should extend through the ascender *and - descender* height. - - * sfd/FreeMonoBold.sfd - Continued working on harmonizing Greek - letters with Latin and Cyrillic. - - * sfd/FreeMonoBold.sfd - Added some box drawing characters. - -2002-04-16 Primoz Peterlin - - * www/design-notes.html - Updated notes on stroke width for - symbols in Free Mono Bold. - - * sfd/FreeMono.sfd - Added a handful of characters in the - Miscellaneous Symbols area. - - * sfd/FreeMonoBoldOblique.sfd - Added subscripts, superscripts and - vulgar fractions. - - * sfd/FreeMonoBold.sfd - Started harmonizing Greek letters with - Latin and Cyrillic. - - * sfd/FreeMonoBold.sfd - Added subscripts, superscripts and vulgar - fractions. - -2002-04-15 Primoz Peterlin - - * www/design-notes.html - Updated notes on super-/subscripts in - Free Mono Bold. Separate subsections for Free Mono regular and - Free Mono Bold. - -2002-04-12 Primoz Peterlin - - * sfd/FreeSerif.sfd - Added Ethiopian glyphs, converted from the - Metafont sources from TGI, Universität Hamburg (authors Berhanu - Beyene, Prof. Dr. Manfred Kudlek, Olaf Kummer, and Jochen - Metzinger) using Szabo's TeXtrace and retouched using - PfaEdit. Ethiopian metafonts are released under GNU GPL, - . - - * sfd/FreeMonoBold.sfd - Added 40 characters, mostly in the Latin - Extended-B and IPA Extensions areas. - -2002-04-11 Primoz Peterlin - - * sfd/FreeMono.sfd - Added a handful of characters in the Latin - Extended-B, IPA Extensions, Currency Symbols and Miscellaneous - Symbols areas. - -2002-04-09 Primoz Peterlin - - * sfd/FreeMono.sfd - Correcting accent positioning in the Extended - Greek area; adding a couple of characters here and there. Still 20 - characters short of MES-2 conformance. - -2002-04-08 Primoz Peterlin - - * sfd/FreeMono.sfd - Added some characters in the Arrows area; - more or less completed Extended Greek area (accents still need to - be fine-tuned). - -2002-04-05 Primoz Peterlin - - * sfd/FreeMono.sfd - Modern non-Russian Cyrilic mostly completed. - - * sfd/FreeMonoOblique.sfd - Synchronized with FreeMono. - - * sfd/FreeSerif.sfd - Added Thomas Ridgeway's Tamil characters - (converted from Metafont and edited somehwat). - -2002-04-04 Primoz Peterlin - - * sfd/FreeMonoOblique.sfd - Armenian letters added. - - * sfd/FreeMonoBold.sfd - Serbian Cyrillic letters dje, tshe, lje - and nje corrected. - - * sfd/FreeMono.sfd - Serbian Cyrillic letters dje and tshe - corrected. Some other non-Russian Cyrillic letters modified and - "welded together". - -2002-04-03 Primoz Peterlin - - * sfd/FreeMono.sfd - Added more or less complete Armenian - area. The glyphs are a tidied-up version based on the Armenian - Courier on the . Now we have - 1673 characters. - -2002-03-28 Primoz Peterlin - - * sfd/FreeMono.sfd - Added some mathematical symbols. - -2002-03-26 Primoz Peterlin - - * sfd/FreeSans.sfd - took H.S. Pannu's Gurmukhi from FreeSerif. It - actually fits to FreeSans much better. It seems I'll have to look - for another Gurmukhi font with modulated stroke for FreeSerif. - - * sfd/FreeSerifItalic.sfd - replaced existing Hebrew glyphs by - those from FreeSerif (slanted for 15.5 degrees). - - * sfd/FreeSerif.sfd - Added dotted Hebrew letters. Changed barred H. - - * sfd/FreeMono.sfd - Completed vulgar fractions; minor changes in - Greek; added some mathematical operators. - - * sfd/FreeMonoBold.sfd - added 12 characters to Latin Extended-B - and IPA Extensions areas (total 984). - -2002-03-25 Primoz Peterlin - - * sfd/FreeMonoBold.sfd - started adding Latin Extended-B and IPA - Extensions. - - * sfd/FreeMono.sfd - Minor cosmetic changes; cleaning up Greek - (removing redundant control points), added some non-European - Cyrillic glyphs as a test. - -2002-03-22 Primoz Peterlin - - * sfd/FreeMono.sfd - Some minor modifications; letters in Latin - Extended-B area "welded" together. - -2002-03-20 Primoz Peterlin - - * www/index.html - finally linked the resources and design notes - pages. - - * www/design-notes.html - added scaling information for super- and - subscript numerals in FreeMono. - -2002-03-19 Primoz Peterlin - - * sfd/FreeMono.sfd - the Latin Extended-B and IPA Extension area - characters moved from FreeMono and skewed for 12 degrees. - -2002-03-18 Primoz Peterlin - - * sfd/FreeMono.sfd - added a dozen or two of new characters, in - particular in the Latin Extended-B and IPA Extension area. - -2002-03-15 Primoz Peterlin - - * sfd/FreeMono.sfd - added a dozen of two of new characters, in - particular in the IPA Extension area. - - * www/design-notes.html - Corrected data for x-height in FreeMono; - information on constructing small caps. - -2002-03-14 Primoz Peterlin - - * sfd/FreeMono.sfd - added three smiley characters to the - Miscallaneous Symbols area. - -2002-03-10 Primoz Peterlin - - * sfd/FreeSerif.sfd - Anshuman Pandey has only converted Gurmukhi - from TrueType to Metafont; the original author of Gurkmukhi font - is Hardip Singh Pannu . - Got the permission from him to include the Gurmukhi glyph set. - -2002-03-08 Primoz Peterlin - - * sfd/FreeSerif.sfd - Added some more glyphs in the Mathematical - Symbols area to a total number of 3374. - -2002-03-06 Primoz Peterlin - - * sfd/FreeSerif.sfd - Added a basic Gurmukhi set. - - * www/design-notes.html - started a page on design notes - - * sfd/FreeMono.sfd - realized that glyphs in the Box Drawing area - and Block Elements area should extend through the ascender *and - descender* height, and corrected it. - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd - added some musical - glyphs, linking "no-break space" to space, "soft hyphen" to - hyphen-minus etc. - -2002-03-05 Primoz Peterlin - - * tools/WGL4.lst - Added Windows Glyph List 4.0 - - * tools/LigatureList.pl - Wrote a Perl script, which lists the - GSUB list (ligature list) of a OpenType font. - - * sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd, - sfd/FreeSerifItalic.sfd - auxilliary Hebrew glyphs added. They are - too light compared with Latin and will be substituted with better - ones. - -2002-03-04 Primoz Peterlin - - * sfd/FreeSerif.sfd - Added some more glyphs to the Mathematical - Operators area (page 0x22). - - * sfd/FreeSerif.sfd - Incomplete and fragmentary support for - Devanagari, originating from Harsh Kumar's Shusha fonts was - replaced by Frans Velthuis' Devanagari metafont, now maintained by - Anshuman Pandey and available under - GPL. Until I figure out how to provide glyph substitution table in - OpenType, only the Unicode part is there. - -2002-02-28 Primoz Peterlin - - * ChangeLog file created - - * sfd/FreeSerif.sfd - Added some Telugu glyphs to page 0x0C, - courtesy Prasad A. Chodavarapu - - * sfd/FreeSerif.sfd - Added some glyphs to the Miscellaneous - Symbols page (0x26). - -2002-02-26 Primoz Peterlin - - * mailing lists freefont-announce and freefont-bugs created - -2002-02-25 Primoz Peterlin - - * sfd/FreeSerif.sfd - Added a couple of glyphs in Mathematics - Operators area. - - * sfd/FreeMono.sfd - - Added some more glyphs, in particular in the Mathematical - Operators section. - - Changed FamilyName to Free, FontName to FreeMono, and Full name - to "Free Monospaced". - -2002-02-20 Primoz Peterlin - - * sfd/ directory added containing FreeSerif, FreeSans and FreeMono - families. - - * tools/ directory added containing lists with characters required - for MES (Multilinguag European Subset) compliance. - - * tools/mes-list-expand.pl created - a Perl script for expanding MES - ranges into simple one-char-per-line format - - * tools/CheckConformance.pl created - a Perl script for checking - conformance of a font file with a given coded character set - - * homepage created - -2002-02-19 Primoz Peterlin - - * freefont (Free UCS Scalable Fonts) project approved on - savannah.gnu.org: diff --git a/h-source/External/Fonts/FreeFont/FreeMono.ttf b/h-source/External/Fonts/FreeFont/FreeMono.ttf deleted file mode 100755 index ba90adb..0000000 Binary files a/h-source/External/Fonts/FreeFont/FreeMono.ttf and /dev/null differ diff --git a/h-source/External/Fonts/FreeFont/INSTALL b/h-source/External/Fonts/FreeFont/INSTALL deleted file mode 100755 index fbbbe80..0000000 --- a/h-source/External/Fonts/FreeFont/INSTALL +++ /dev/null @@ -1,86 +0,0 @@ - Installing GNU FreeFont - ======================= - -GNU FreeFont can be used in any modern operating system. - -This document explains how to install FreeFont on some common systems. - -UNIX/GNU/Linux/BSD Systems --------------------------- - -FreeFont works with any system using the free font rasterizer FreeType -. - -* Debian GNU/Linux - -Users of Debian GNU/Linux system will probably want to use the Debian package, -available from the Debian site, - - , - -or any of its mirrors. - -Install them by issuing the command - apt-get install ttf-freefont - - -* KDE local installation - -Users of KDE can install .ttf files on a per-user basis using the KDE -Control Center module "kcmfontinst", which may appear in the menu as - - Settings -> System Administration -> Font Installer - -This is especially helpful for developers and testers. - - -* Generic X-windows - - 1) Fetch the freefont-ttf.tar.gz package with Free UCS outline fonts - in the TrueType format. - - 2) Unpack TrueType fonts into a suitable directory, - e.g. /usr/local/share/fonts/default/TrueType/ - - 3) If you have chosen any other directory, make sure the directory you - used to install the fonts is listed in the path searched by the X - Font Server by editing the config file in /etc/X11/. - - In some systems, you list the directory in the item "catalogue=" - in the file /etc/X11/fs/config. - - 4) Run ttmkfdir in the directory where you unpacked the fonts. - - -Windows 95/98/NT/2000/XP; Vista -------------------------------- - -Note that in at least Vista, XP and 2000, the OpenType versions perform much -better than, and are recommended over, the TrueType ones. - -* Vista: - 1) From the Start menu, open Control Panels - 2) Drag-n-drop font files onto Fonts control panel - You may get a dialog saying - "Windows needs your permission to continue" - a) Click Continue - -* 95/98/NT: - The font installation is similar to Vista. - - In order to use OpenType, users of Windows 95, 98 and NT 4.0 can - install Adobe's 'Type Manager Light'. It is available for download - without cost from Adobe's web site. - - Otherwise, use the TrueType versions. - -Mac OS X --------- - -Installing on Mac OS X consists of moving the .ttf files to either - /Library/Fonts/ or ~/Library/Fonts/ -depending on whether they should be available to all users on your system -or just to yourself. - --------------------------------------------------------------------------- -$Id: INSTALL,v 1.7 2008/12/26 12:33:31 Stevan_White Exp $ diff --git a/h-source/External/Fonts/FreeFont/README b/h-source/External/Fonts/FreeFont/README deleted file mode 100755 index 60e67f2..0000000 --- a/h-source/External/Fonts/FreeFont/README +++ /dev/null @@ -1,108 +0,0 @@ --*-text-*- - GNU FreeFont - -The GNU FreeFont project aims to provide a useful set of free scalable -(i.e., OpenType) fonts covering as much as possible of the ISO 10646/Unicode -UCS (Universal Character Set). - -Statement of Purpose --------------------- - -The practical reason for putting glyphs together in a single font face is -to conveniently mix symbols and characters from different writing systems, -without having to switch fonts. - -Coverage --------- - -FreeFont covers the following character sets - -* ISO 8859 parts 1-15 -* CEN MES-3 European Unicode Subset - http://www.evertype.com/standards/iso10646/pdf/cwa13873.pdf -* IBM/Microsoft code pages 437, 850, 852, 1250, 1252 and more -* Microsoft/Adobe Windows Glyph List 4 (WGL4) - http://www.microsoft.com/typography/otspec/WGL4.htm -* KOI8-R and KOI8-RU -* DEC VT100 graphics symbols -* International Phonetic Alphabet -* Arabic, Hebrew, Armenian, Georgian, Ethiopian and Thai alphabets, - including Arabic presentation forms A/B -* mathematical symbols, including the whole TeX repertoire of symbols -* APL symbols - etc. - -Editing -------- - -The free outline font editor, George Williams's FontForge - is used for editing the fonts. - -Design Issues -------------- - -Which font shapes should be made? Historical style terms like Renaissance -or Baroque letterforms cannot be applied beyond Latin/Cyrillic/Greek -scripts to any greater extent than Kufi or Nashki can be applied beyond -Arabic script; "italic" is really only meaningful for Latin letters. - -However, most modern writing systems have typographic formulations for -contrasting uniform and modulated character stroke widths, and have some -history with "oblique", faces. Since the advent of the typewriter, most -have developed a typographic style with uniform-width characters. - -Accordingly, the FreeFont family has one monospaced - FreeMono - and two -proportional faces (one with uniform stroke - FreeSans - and one with -modulated stroke - FreeSerif). - -To make text from different writing systems look good side-by-side, each -FreeFont face is meant to contain characters of similar style and weight. - -Licensing ---------- - -Free UCS scalable fonts is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -The fonts are distributed in the hope that they will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -As a special exception, if you create a document which uses this font, and -embed this font or unaltered portions of this font into the document, this -font does not by itself cause the resulting document to be covered by the -GNU General Public License. This exception does not however invalidate any -other reasons why the document might be covered by the GNU General Public -License. If you modify this font, you may extend this exception to your -version of the font, but you are not obligated to do so. If you do not -wish to do so, delete this exception statement from your version. - - -Files and their suffixes ------------------------- - -The files with .sfd (Spline Font Database) are in FontForge's native format. -Please use these if you plan to modify the font files. - -TrueType fonts for immediate consumption are the files with the .ttf -(TrueType Font) suffix. These are ready to use in Xwindows based -systems using FreeType, on Mac OS, and on older Windows systems. - -OpenType fonts (with suffix .otf) are for use in Windows Vista. -Note that although they can be installed on Linux, but many applications -in Linux still don't support them. - - --------------------------------------------------------------------------- -Primoz Peterlin, -Steve White - -Free UCS scalable fonts: http://savannah.gnu.org/projects/freefont/ -$Id: README,v 1.6 2008/12/25 12:51:41 Stevan_White Exp $ diff --git a/h-source/External/swiftmailer/lib/classes/Swift.php b/h-source/External/swiftmailer/lib/classes/Swift.php deleted file mode 100755 index 77abbbf..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift.php +++ /dev/null @@ -1,57 +0,0 @@ -createDependenciesFor('mime.attachment') - ); - - $this->setBody($data); - $this->setFilename($filename); - if ($contentType) - { - $this->setContentType($contentType); - } - } - - /** - * Create a new Attachment. - * @param string|Swift_OutputByteStream $data - * @param string $filename - * @param string $contentType - * @return Swift_Mime_Attachment - */ - public static function newInstance($data = null, $filename = null, - $contentType = null) - { - return new self($data, $filename, $contentType); - } - - /** - * Create a new Attachment from a filesystem path. - * @param string $path - * @param string $contentType optional - * @return Swift_Mime_Attachment - */ - public static function fromPath($path, $contentType = null) - { - return self::newInstance()->setFile( - new Swift_ByteStream_FileByteStream($path), - $contentType - ); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php b/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php deleted file mode 100755 index 71bc3f1..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/AbstractFilterableInputStream.php +++ /dev/null @@ -1,178 +0,0 @@ -_filters[$key] = $filter; - } - - /** - * Remove an already present StreamFilter based on its $key. - * @param string $key - */ - public function removeFilter($key) - { - unset($this->_filters[$key]); - } - - /** - * Writes $bytes to the end of the stream. - * @param string $bytes - * @throws Swift_IoException - */ - public function write($bytes) - { - $this->_writeBuffer .= $bytes; - foreach ($this->_filters as $filter) - { - if ($filter->shouldBuffer($this->_writeBuffer)) - { - return; - } - } - $this->_doWrite($this->_writeBuffer); - return ++$this->_sequence; - } - - /** - * For any bytes that are currently buffered inside the stream, force them - * off the buffer. - * - * @throws Swift_IoException - */ - public function commit() - { - $this->_doWrite($this->_writeBuffer); - } - - /** - * Attach $is to this stream. - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - * - * @param Swift_InputByteStream $is - */ - public function bind(Swift_InputByteStream $is) - { - $this->_mirrors[] = $is; - } - - /** - * Remove an already bound stream. - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - * - * @param Swift_InputByteStream $is - */ - public function unbind(Swift_InputByteStream $is) - { - foreach ($this->_mirrors as $k => $stream) - { - if ($is === $stream) - { - if ($this->_writeBuffer !== '') - { - $stream->write($this->_filter($this->_writeBuffer)); - } - unset($this->_mirrors[$k]); - } - } - } - - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - * @throws Swift_IoException - */ - public function flushBuffers() - { - if ($this->_writeBuffer !== '') - { - $this->_doWrite($this->_writeBuffer); - } - $this->_flush(); - - foreach ($this->_mirrors as $stream) - { - $stream->flushBuffers(); - } - } - - // -- Private methods - - /** Run $bytes through all filters */ - private function _filter($bytes) - { - foreach ($this->_filters as $filter) - { - $bytes = $filter->filter($bytes); - } - return $bytes; - } - - /** Just write the bytes to the stream */ - private function _doWrite($bytes) - { - $this->_commit($this->_filter($bytes)); - - foreach ($this->_mirrors as $stream) - { - $stream->write($bytes); - } - - $this->_writeBuffer = ''; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php b/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php deleted file mode 100755 index f918889..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/ArrayByteStream.php +++ /dev/null @@ -1,190 +0,0 @@ -_array = $stack; - $this->_arraySize = count($stack); - } - elseif (is_string($stack)) - { - $this->write($stack); - } - else - { - $this->_array = array(); - } - } - - /** - * Reads $length bytes from the stream into a string and moves the pointer - * through the stream by $length. If less bytes exist than are requested the - * remaining bytes are given instead. If no bytes are remaining at all, boolean - * false is returned. - * @param int $length - * @return string - */ - public function read($length) - { - if ($this->_offset == $this->_arraySize) - { - return false; - } - - // Don't use array slice - $end = $length + $this->_offset; - $end = $this->_arraySize<$end - ?$this->_arraySize - :$end; - $ret = ''; - for (; $this->_offset < $end; ++$this->_offset) - { - $ret .= $this->_array[$this->_offset]; - } - return $ret; - } - - /** - * Writes $bytes to the end of the stream. - * @param string $bytes - */ - public function write($bytes) - { - $to_add = str_split($bytes); - foreach ($to_add as $value) - { - $this->_array[] = $value; - } - $this->_arraySize = count($this->_array); - - foreach ($this->_mirrors as $stream) - { - $stream->write($bytes); - } - } - - /** - * Not used. - */ - public function commit() - { - } - - /** - * Attach $is to this stream. - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - * - * @param Swift_InputByteStream $is - */ - public function bind(Swift_InputByteStream $is) - { - $this->_mirrors[] = $is; - } - - /** - * Remove an already bound stream. - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - * - * @param Swift_InputByteStream $is - */ - public function unbind(Swift_InputByteStream $is) - { - foreach ($this->_mirrors as $k => $stream) - { - if ($is === $stream) - { - unset($this->_mirrors[$k]); - } - } - } - - /** - * Move the internal read pointer to $byteOffset in the stream. - * @param int $byteOffset - * @return boolean - */ - public function setReadPointer($byteOffset) - { - if ($byteOffset > $this->_arraySize) - { - $byteOffset = $this->_arraySize; - } - elseif ($byteOffset < 0) - { - $byteOffset = 0; - } - - $this->_offset = $byteOffset; - } - - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - */ - public function flushBuffers() - { - $this->_offset = 0; - $this->_array = array(); - $this->_arraySize = 0; - - foreach ($this->_mirrors as $stream) - { - $stream->flushBuffers(); - } - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php b/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php deleted file mode 100755 index 14773c2..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/ByteStream/FileByteStream.php +++ /dev/null @@ -1,177 +0,0 @@ -_path = $path; - $this->_mode = $writable ? 'w+b' : 'rb'; - $this->_quotes = get_magic_quotes_runtime(); - } - - /** - * Get the complete path to the file. - * @return string - */ - public function getPath() - { - return $this->_path; - } - - /** - * Reads $length bytes from the stream into a string and moves the pointer - * through the stream by $length. If less bytes exist than are requested the - * remaining bytes are given instead. If no bytes are remaining at all, boolean - * false is returned. - * @param int $length - * @return string - * @throws Swift_IoException - */ - public function read($length) - { - $fp = $this->_getReadHandle(); - if (!feof($fp)) - { - if ($this->_quotes) - { - set_magic_quotes_runtime(0); - } - $bytes = fread($fp, $length); - if ($this->_quotes) - { - set_magic_quotes_runtime(1); - } - $this->_offset = ftell($fp); - return $bytes; - } - else - { - return false; - } - } - - /** - * Move the internal read pointer to $byteOffset in the stream. - * @param int $byteOffset - * @return boolean - */ - public function setReadPointer($byteOffset) - { - if (isset($this->_reader)) - { - fseek($this->_reader, $byteOffset, SEEK_SET); - } - $this->_offset = $byteOffset; - } - - // -- Private methods - - /** Just write the bytes to the file */ - protected function _commit($bytes) - { - fwrite($this->_getWriteHandle(), $bytes); - $this->_resetReadHandle(); - } - - /** Not used */ - protected function _flush() - { - } - - /** Get the resource for reading */ - private function _getReadHandle() - { - if (!isset($this->_reader)) - { - if (!$this->_reader = fopen($this->_path, 'rb')) - { - throw new Swift_IoException( - 'Unable to open file for reading [' . $this->_path . ']' - ); - } - fseek($this->_reader, $this->_offset, SEEK_SET); - } - return $this->_reader; - } - - /** Get the resource for writing */ - private function _getWriteHandle() - { - if (!isset($this->_writer)) - { - if (!$this->_writer = fopen($this->_path, $this->_mode)) - { - throw new Swift_IoException( - 'Unable to open file for writing [' . $this->_path . ']' - ); - } - } - return $this->_writer; - } - - /** Force a reload of the resource for writing */ - private function _resetWriteHandle() - { - if (isset($this->_writer)) - { - fclose($this->_writer); - $this->_writer = null; - } - } - - /** Force a reload of the resource for reading */ - private function _resetReadHandle() - { - if (isset($this->_reader)) - { - fclose($this->_reader); - $this->_reader = null; - } - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader.php b/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader.php deleted file mode 100755 index 53d39ec..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader.php +++ /dev/null @@ -1,60 +0,0 @@ - - */ -interface Swift_CharacterReader -{ - const MAP_TYPE_INVALID = 0x01; - const MAP_TYPE_FIXED_LEN = 0x02; - const MAP_TYPE_POSITIONS = 0x03; - - /** - * Returns the complete charactermap - * - * @param string $string - * @param int $startOffset - * @param array $currentMap - * @param mixed $ignoredChars - * @return int - */ - public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars); - - /** - * Returns mapType - * @int mapType - */ - public function getMapType(); - - /** - * Returns an integer which specifies how many more bytes to read. - * A positive integer indicates the number of more bytes to fetch before invoking - * this method again. - * A value of zero means this is already a valid character. - * A value of -1 means this cannot possibly be a valid character. - * @param int[] $bytes - * @return int - */ - public function validateByteSequence($bytes, $size); - - /** - * Returns the number of bytes which should be read to start each character. - * For fixed width character sets this should be the number of - * octets-per-character. For multibyte character sets this will probably be 1. - * @return int - */ - public function getInitialByteSize(); - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php b/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php deleted file mode 100755 index 26b13ff..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/GenericFixedWidthReader.php +++ /dev/null @@ -1,96 +0,0 @@ - - */ -class Swift_CharacterReader_GenericFixedWidthReader - implements Swift_CharacterReader -{ - - /** - * The number of bytes in a single character. - * @var int - * @access private - */ - private $_width; - - /** - * Creates a new GenericFixedWidthReader using $width bytes per character. - * @param int $width - */ - public function __construct($width) - { - $this->_width = $width; - } - - /** - * Returns the complete charactermap - * - * @param string $string - * @param int $startOffset - * @param array $currentMap - * @param mixed $ignoredChars - * @return $int - */ - public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) - { - $strlen = strlen($string); - // % and / are CPU intensive, so, maybe find a better way - $ignored = $strlen%$this->_width; - $ignoredChars = substr($string, - $ignored); - $currentMap = $this->_width; - return ($strlen - $ignored)/$this->_width; - - } - - /** - * Returns mapType - * @int mapType - */ - public function getMapType() - { - return self::MAP_TYPE_FIXED_LEN; - } - - /** - * Returns an integer which specifies how many more bytes to read. - * A positive integer indicates the number of more bytes to fetch before invoking - * this method again. - * A value of zero means this is already a valid character. - * A value of -1 means this cannot possibly be a valid character. - * @param string $bytes - * @return int - */ - public function validateByteSequence($bytes, $size) - { - $needed = $this->_width - $size; - return ($needed > -1) - ? $needed - : -1 - ; - } - - /** - * Returns the number of bytes which should be read to start each character. - * @return int - */ - public function getInitialByteSize() - { - return $this->_width; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php b/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php deleted file mode 100755 index 3e0228a..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/UsAsciiReader.php +++ /dev/null @@ -1,83 +0,0 @@ -"\x07F") - { // Invalid char - $currentMap[$i+$startOffset]=$string[$i]; - } - } - return $strlen; - } - - /** - * Returns mapType - * @int mapType - */ - public function getMapType() - { - return self::MAP_TYPE_INVALID; - } - - /** - * Returns an integer which specifies how many more bytes to read. - * A positive integer indicates the number of more bytes to fetch before invoking - * this method again. - * A value of zero means this is already a valid character. - * A value of -1 means this cannot possibly be a valid character. - * @param string $bytes - * @return int - */ - public function validateByteSequence($bytes, $size) - { - $byte = reset($bytes); - if (1 == count($bytes) && $byte >= 0x00 && $byte <= 0x7F) - { - return 0; - } - else - { - return -1; - } - } - - /** - * Returns the number of bytes which should be read to start each character. - * @return int - */ - public function getInitialByteSize() - { - return 1; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php b/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php deleted file mode 100755 index 54ea9a4..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReader/Utf8Reader.php +++ /dev/null @@ -1,183 +0,0 @@ - - */ -class Swift_CharacterReader_Utf8Reader - implements Swift_CharacterReader -{ - - /** Pre-computed for optimization */ - private static $length_map=array( -//N=0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, //0x0N - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, //0x1N - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, //0x2N - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, //0x3N - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, //0x4N - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, //0x5N - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, //0x6N - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, //0x7N - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x8N - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0x9N - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0xAN - 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, //0xBN - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, //0xCN - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, //0xDN - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, //0xEN - 4,4,4,4,4,4,4,4,5,5,5,5,6,6,0,0 //0xFN - ); - private static $s_length_map=array( - "\x00"=>1, "\x01"=>1, "\x02"=>1, "\x03"=>1, "\x04"=>1, "\x05"=>1, "\x06"=>1, "\x07"=>1, - "\x08"=>1, "\x09"=>1, "\x0a"=>1, "\x0b"=>1, "\x0c"=>1, "\x0d"=>1, "\x0e"=>1, "\x0f"=>1, - "\x10"=>1, "\x11"=>1, "\x12"=>1, "\x13"=>1, "\x14"=>1, "\x15"=>1, "\x16"=>1, "\x17"=>1, - "\x18"=>1, "\x19"=>1, "\x1a"=>1, "\x1b"=>1, "\x1c"=>1, "\x1d"=>1, "\x1e"=>1, "\x1f"=>1, - "\x20"=>1, "\x21"=>1, "\x22"=>1, "\x23"=>1, "\x24"=>1, "\x25"=>1, "\x26"=>1, "\x27"=>1, - "\x28"=>1, "\x29"=>1, "\x2a"=>1, "\x2b"=>1, "\x2c"=>1, "\x2d"=>1, "\x2e"=>1, "\x2f"=>1, - "\x30"=>1, "\x31"=>1, "\x32"=>1, "\x33"=>1, "\x34"=>1, "\x35"=>1, "\x36"=>1, "\x37"=>1, - "\x38"=>1, "\x39"=>1, "\x3a"=>1, "\x3b"=>1, "\x3c"=>1, "\x3d"=>1, "\x3e"=>1, "\x3f"=>1, - "\x40"=>1, "\x41"=>1, "\x42"=>1, "\x43"=>1, "\x44"=>1, "\x45"=>1, "\x46"=>1, "\x47"=>1, - "\x48"=>1, "\x49"=>1, "\x4a"=>1, "\x4b"=>1, "\x4c"=>1, "\x4d"=>1, "\x4e"=>1, "\x4f"=>1, - "\x50"=>1, "\x51"=>1, "\x52"=>1, "\x53"=>1, "\x54"=>1, "\x55"=>1, "\x56"=>1, "\x57"=>1, - "\x58"=>1, "\x59"=>1, "\x5a"=>1, "\x5b"=>1, "\x5c"=>1, "\x5d"=>1, "\x5e"=>1, "\x5f"=>1, - "\x60"=>1, "\x61"=>1, "\x62"=>1, "\x63"=>1, "\x64"=>1, "\x65"=>1, "\x66"=>1, "\x67"=>1, - "\x68"=>1, "\x69"=>1, "\x6a"=>1, "\x6b"=>1, "\x6c"=>1, "\x6d"=>1, "\x6e"=>1, "\x6f"=>1, - "\x70"=>1, "\x71"=>1, "\x72"=>1, "\x73"=>1, "\x74"=>1, "\x75"=>1, "\x76"=>1, "\x77"=>1, - "\x78"=>1, "\x79"=>1, "\x7a"=>1, "\x7b"=>1, "\x7c"=>1, "\x7d"=>1, "\x7e"=>1, "\x7f"=>1, - "\x80"=>0, "\x81"=>0, "\x82"=>0, "\x83"=>0, "\x84"=>0, "\x85"=>0, "\x86"=>0, "\x87"=>0, - "\x88"=>0, "\x89"=>0, "\x8a"=>0, "\x8b"=>0, "\x8c"=>0, "\x8d"=>0, "\x8e"=>0, "\x8f"=>0, - "\x90"=>0, "\x91"=>0, "\x92"=>0, "\x93"=>0, "\x94"=>0, "\x95"=>0, "\x96"=>0, "\x97"=>0, - "\x98"=>0, "\x99"=>0, "\x9a"=>0, "\x9b"=>0, "\x9c"=>0, "\x9d"=>0, "\x9e"=>0, "\x9f"=>0, - "\xa0"=>0, "\xa1"=>0, "\xa2"=>0, "\xa3"=>0, "\xa4"=>0, "\xa5"=>0, "\xa6"=>0, "\xa7"=>0, - "\xa8"=>0, "\xa9"=>0, "\xaa"=>0, "\xab"=>0, "\xac"=>0, "\xad"=>0, "\xae"=>0, "\xaf"=>0, - "\xb0"=>0, "\xb1"=>0, "\xb2"=>0, "\xb3"=>0, "\xb4"=>0, "\xb5"=>0, "\xb6"=>0, "\xb7"=>0, - "\xb8"=>0, "\xb9"=>0, "\xba"=>0, "\xbb"=>0, "\xbc"=>0, "\xbd"=>0, "\xbe"=>0, "\xbf"=>0, - "\xc0"=>2, "\xc1"=>2, "\xc2"=>2, "\xc3"=>2, "\xc4"=>2, "\xc5"=>2, "\xc6"=>2, "\xc7"=>2, - "\xc8"=>2, "\xc9"=>2, "\xca"=>2, "\xcb"=>2, "\xcc"=>2, "\xcd"=>2, "\xce"=>2, "\xcf"=>2, - "\xd0"=>2, "\xd1"=>2, "\xd2"=>2, "\xd3"=>2, "\xd4"=>2, "\xd5"=>2, "\xd6"=>2, "\xd7"=>2, - "\xd8"=>2, "\xd9"=>2, "\xda"=>2, "\xdb"=>2, "\xdc"=>2, "\xdd"=>2, "\xde"=>2, "\xdf"=>2, - "\xe0"=>3, "\xe1"=>3, "\xe2"=>3, "\xe3"=>3, "\xe4"=>3, "\xe5"=>3, "\xe6"=>3, "\xe7"=>3, - "\xe8"=>3, "\xe9"=>3, "\xea"=>3, "\xeb"=>3, "\xec"=>3, "\xed"=>3, "\xee"=>3, "\xef"=>3, - "\xf0"=>4, "\xf1"=>4, "\xf2"=>4, "\xf3"=>4, "\xf4"=>4, "\xf5"=>4, "\xf6"=>4, "\xf7"=>4, - "\xf8"=>5, "\xf9"=>5, "\xfa"=>5, "\xfb"=>5, "\xfc"=>6, "\xfd"=>6, "\xfe"=>0, "\xff"=>0, - ); - - /** - * Returns the complete charactermap - * - * @param string $string - * @param int $startOffset - * @param array $currentMap - * @param mixed $ignoredChars - */ - public function getCharPositions($string, $startOffset, &$currentMap, &$ignoredChars) - { - if (!isset($currentMap['i']) || !isset($currentMap['p'])) - { - $currentMap['p'] = $currentMap['i'] = array(); - } - $strlen=strlen($string); - $charPos=count($currentMap['p']); - $foundChars=0; - $invalid=false; - for ($i=0; $i<$strlen; ++$i) - { - $char=$string[$i]; - $size=self::$s_length_map[$char]; - if ($size==0) - { - /* char is invalid, we must wait for a resync */ - $invalid=true; - continue; - } - else - { - if ($invalid==true) - { - /* We mark the chars as invalid and start a new char */ - $currentMap['p'][$charPos+$foundChars]=$startOffset+$i; - $currentMap['i'][$charPos+$foundChars]=true; - ++$foundChars; - $invalid=false; - } - if (($i+$size) > $strlen){ - $ignoredChars=substr($string, $i); - break; - } - for ($j=1; $j<$size; ++$j) - { - $char=$string[$i+$j]; - if ($char>"\x7F" && $char<"\xC0") - { - // Valid - continue parsing - } - else - { - /* char is invalid, we must wait for a resync */ - $invalid=true; - continue 2; - } - } - /* Ok we got a complete char here */ - $lastChar=$currentMap['p'][$charPos+$foundChars]=$startOffset+$i+$size; - $i+=$j-1; - ++$foundChars; - } - } - return $foundChars; - } - - /** - * Returns mapType - * @int mapType - */ - public function getMapType() - { - return self::MAP_TYPE_POSITIONS; - } - - /** - * Returns an integer which specifies how many more bytes to read. - * A positive integer indicates the number of more bytes to fetch before invoking - * this method again. - * A value of zero means this is already a valid character. - * A value of -1 means this cannot possibly be a valid character. - * @param string $bytes - * @return int - */ - public function validateByteSequence($bytes, $size) - { - if ($size<1){ - return -1; - } - $needed = self::$length_map[$bytes[0]] - $size; - return ($needed > -1) - ? $needed - : -1 - ; - } - - /** - * Returns the number of bytes which should be read to start each character. - * @return int - */ - public function getInitialByteSize() - { - return 1; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php b/h-source/External/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php deleted file mode 100755 index 9e01de1..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/CharacterReaderFactory.php +++ /dev/null @@ -1,29 +0,0 @@ - $prefix . 'GenericFixedWidthReader', - 'constructor' => array(1) - ); - - $doubleByte = array( - 'class' => $prefix . 'GenericFixedWidthReader', - 'constructor' => array(2) - ); - - $fourBytes = array( - 'class' => $prefix . 'GenericFixedWidthReader', - 'constructor' => array(4) - ); - - //Utf-8 - $this->_map['utf-?8'] = array( - 'class' => $prefix . 'Utf8Reader', - 'constructor' => array() - ); - - //7-8 bit charsets - $this->_map['(us-)?ascii'] = $singleByte; - $this->_map['(iso|iec)-?8859-?[0-9]+'] = $singleByte; - $this->_map['windows-?125[0-9]'] = $singleByte; - $this->_map['cp-?[0-9]+'] = $singleByte; - $this->_map['ansi'] = $singleByte; - $this->_map['macintosh'] = $singleByte; - $this->_map['koi-?7'] = $singleByte; - $this->_map['koi-?8-?.+'] = $singleByte; - $this->_map['mik'] = $singleByte; - $this->_map['(cork|t1)'] = $singleByte; - $this->_map['v?iscii'] = $singleByte; - - //16 bits - $this->_map['(ucs-?2|utf-?16)'] = $doubleByte; - - //32 bits - $this->_map['(ucs-?4|utf-?32)'] = $fourBytes; - - //Fallback - $this->_map['.*'] = $singleByte; - } - - /** - * Returns a CharacterReader suitable for the charset applied. - * @param string $charset - * @return Swift_CharacterReader - */ - public function getReaderFor($charset) - { - $charset = trim(strtolower($charset)); - foreach ($this->_map as $pattern => $spec) - { - $re = '/^' . $pattern . '$/D'; - if (preg_match($re, $charset)) - { - if (!array_key_exists($pattern, $this->_loaded)) - { - $reflector = new ReflectionClass($spec['class']); - if ($reflector->getConstructor()) - { - $reader = $reflector->newInstanceArgs($spec['constructor']); - } - else - { - $reader = $reflector->newInstance(); - } - $this->_loaded[$pattern] = $reader; - } - return $this->_loaded[$pattern]; - } - } - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/CharacterStream.php b/h-source/External/swiftmailer/lib/classes/Swift/CharacterStream.php deleted file mode 100755 index bf91528..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/CharacterStream.php +++ /dev/null @@ -1,86 +0,0 @@ -setCharacterReaderFactory($factory); - $this->setCharacterSet($charset); - } - - /** - * Set the character set used in this CharacterStream. - * @param string $charset - */ - public function setCharacterSet($charset) - { - $this->_charset = $charset; - $this->_charReader = null; - } - - /** - * Set the CharacterReaderFactory for multi charset support. - * @param Swift_CharacterReaderFactory $factory - */ - public function setCharacterReaderFactory( - Swift_CharacterReaderFactory $factory) - { - $this->_charReaderFactory = $factory; - } - - /** - * Overwrite this character stream using the byte sequence in the byte stream. - * @param Swift_OutputByteStream $os output stream to read from - */ - public function importByteStream(Swift_OutputByteStream $os) - { - if (!isset($this->_charReader)) - { - $this->_charReader = $this->_charReaderFactory - ->getReaderFor($this->_charset); - } - - $startLength = $this->_charReader->getInitialByteSize(); - while (false !== $bytes = $os->read($startLength)) - { - $c = array(); - for ($i = 0, $len = strlen($bytes); $i < $len; ++$i) - { - $c[] = self::$_byteMap[$bytes[$i]]; - } - $size = count($c); - $need = $this->_charReader - ->validateByteSequence($c, $size); - if ($need > 0 && - false !== $bytes = $os->read($need)) - { - for ($i = 0, $len = strlen($bytes); $i < $len; ++$i) - { - $c[] = self::$_byteMap[$bytes[$i]]; - } - } - $this->_array[] = $c; - ++$this->_array_size; - } - } - - /** - * Import a string a bytes into this CharacterStream, overwriting any existing - * data in the stream. - * @param string $string - */ - public function importString($string) - { - $this->flushContents(); - $this->write($string); - } - - /** - * Read $length characters from the stream and move the internal pointer - * $length further into the stream. - * @param int $length - * @return string - */ - public function read($length) - { - if ($this->_offset == $this->_array_size) - { - return false; - } - - // Don't use array slice - $arrays = array(); - $end = $length + $this->_offset; - for ($i = $this->_offset; $i < $end; ++$i) - { - if (!isset($this->_array[$i])) - { - break; - } - $arrays[] = $this->_array[$i]; - } - $this->_offset += $i - $this->_offset; // Limit function calls - $chars = false; - foreach ($arrays as $array) - { - $chars .= implode('', array_map('chr', $array)); - } - return $chars; - } - - /** - * Read $length characters from the stream and return a 1-dimensional array - * containing there octet values. - * @param int $length - * @return int[] - */ - public function readBytes($length) - { - if ($this->_offset == $this->_array_size) - { - return false; - } - $arrays = array(); - $end = $length + $this->_offset; - for ($i = $this->_offset; $i < $end; ++$i) - { - if (!isset($this->_array[$i])) - { - break; - } - $arrays[] = $this->_array[$i]; - } - $this->_offset += ($i - $this->_offset); // Limit function calls - return call_user_func_array('array_merge', $arrays); - } - - /** - * Write $chars to the end of the stream. - * @param string $chars - */ - public function write($chars) - { - if (!isset($this->_charReader)) - { - $this->_charReader = $this->_charReaderFactory->getReaderFor( - $this->_charset); - } - - $startLength = $this->_charReader->getInitialByteSize(); - - $fp = fopen('php://memory', 'w+b'); - fwrite($fp, $chars); - unset($chars); - fseek($fp, 0, SEEK_SET); - - $buffer = array(0); - $buf_pos = 1; - $buf_len = 1; - $has_datas = true; - do - { - $bytes = array(); - // Buffer Filing - if ($buf_len - $buf_pos < $startLength) - { - $buf = array_splice($buffer, $buf_pos); - $new = $this->_reloadBuffer($fp, 100); - if ($new) - { - $buffer = array_merge($buf, $new); - $buf_len = count($buffer); - $buf_pos = 0; - } - else - { - $has_datas = false; - } - } - if ($buf_len - $buf_pos > 0) - { - $size = 0; - for ($i = 0; $i < $startLength && isset($buffer[$buf_pos]); ++$i) - { - ++$size; - $bytes[] = $buffer[$buf_pos++]; - } - $need = $this->_charReader->validateByteSequence( - $bytes, $size); - if ($need > 0) - { - if ($buf_len - $buf_pos < $need) - { - $new = $this->_reloadBuffer($fp, $need); - - if ($new) - { - $buffer = array_merge($buffer, $new); - $buf_len = count($buffer); - } - } - for ($i = 0; $i < $need && isset($buffer[$buf_pos]); ++$i) - { - $bytes[] = $buffer[$buf_pos++]; - } - } - $this->_array[] = $bytes; - ++$this->_array_size; - } - } - while ($has_datas); - - fclose($fp); - } - - /** - * Move the internal pointer to $charOffset in the stream. - * @param int $charOffset - */ - public function setPointer($charOffset) - { - if ($charOffset > $this->_array_size) - { - $charOffset = $this->_array_size; - } - elseif ($charOffset < 0) - { - $charOffset = 0; - } - $this->_offset = $charOffset; - } - - /** - * Empty the stream and reset the internal pointer. - */ - public function flushContents() - { - $this->_offset = 0; - $this->_array = array(); - $this->_array_size = 0; - } - - private function _reloadBuffer($fp, $len) - { - if (!feof($fp) && ($bytes = fread($fp, $len)) !== false) - { - $buf = array(); - for ($i = 0, $len = strlen($bytes); $i < $len; ++$i) - { - $buf[] = self::$_byteMap[$bytes[$i]]; - } - return $buf; - } - return false; - } - - private static function _initializeMaps() - { - if (!isset(self::$_charMap)) - { - self::$_charMap = array(); - for ($byte = 0; $byte < 256; ++$byte) - { - self::$_charMap[$byte] = chr($byte); - } - self::$_byteMap = array_flip(self::$_charMap); - } - } -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php b/h-source/External/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php deleted file mode 100755 index f090aa7..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/CharacterStream/NgCharacterStream.php +++ /dev/null @@ -1,300 +0,0 @@ -. - - */ - -//@require 'Swift/CharacterStream.php'; -//@require 'Swift/OutputByteStream.php'; - - -/** - * A CharacterStream implementation which stores characters in an internal array. - * @package Swift - * @subpackage CharacterStream - * @author Xavier De Cock - */ - -Class Swift_CharacterStream_NgCharacterStream - implements Swift_CharacterStream -{ - - /** - * The char reader (lazy-loaded) for the current charset. - * @var Swift_CharacterReader - * @access private - */ - private $_charReader; - - /** - * A factory for creatiing CharacterReader instances. - * @var Swift_CharacterReaderFactory - * @access private - */ - private $_charReaderFactory; - - /** - * The character set this stream is using. - * @var string - * @access private - */ - private $_charset; - - /** - * The datas stored as is - * - * @var string - */ - private $_datas = ""; - - /** - * Number of bytes in the stream - * - * @var int - */ - private $_datasSize = 0; - - /** - * Map - * - * @var mixed - */ - private $_map; - - /** - * Map Type - * - * @var int - */ - private $_mapType = 0; - - /** - * Number of characters in the stream - * - * @var int - */ - private $_charCount = 0; - - /** - * Position in the stream - * - * @var unknown_type - */ - private $_currentPos = 0; - - /** - * The constructor - * - * @param Swift_CharacterReaderFactory $factory - * @param unknown_type $charset - */ - public function __construct(Swift_CharacterReaderFactory $factory, - $charset) - { - $this->setCharacterReaderFactory($factory); - $this->setCharacterSet($charset); - } - - /* -- Changing parameters of the stream -- */ - - /** - * Set the character set used in this CharacterStream. - * @param string $charset - */ - public function setCharacterSet($charset) - { - $this->_charset = $charset; - $this->_charReader = null; - $this->_mapType = 0; - } - - /** - * Set the CharacterReaderFactory for multi charset support. - * @param Swift_CharacterReaderFactory $factory - */ - public function setCharacterReaderFactory( - Swift_CharacterReaderFactory $factory) - { - $this->_charReaderFactory = $factory; - } - - /** - * @see Swift_CharacterStream::flushContents() - * - */ - public function flushContents() - { - $this->_datas = null; - $this->_map = null; - $this->_charCount = 0; - $this->_currentPos = 0; - $this->_datasSize = 0; - } - - /** - * @see Swift_CharacterStream::importByteStream() - * - * @param Swift_OutputByteStream $os - */ - public function importByteStream(Swift_OutputByteStream $os) - { - $this->flushContents(); - $blocks=512; - $os->setReadPointer(0); - while(false!==($read = $os->read($blocks))) - $this->write($read); - } - - /** - * @see Swift_CharacterStream::importString() - * - * @param string $string - */ - public function importString($string) - { - $this->flushContents(); - $this->write($string); - } - - /** - * @see Swift_CharacterStream::read() - * - * @param int $length - * @return string - */ - public function read($length) - { - if ($this->_currentPos>=$this->_charCount) - { - return false; - } - $ret=false; - $length = ($this->_currentPos+$length > $this->_charCount) - ? $this->_charCount - $this->_currentPos - : $length; - switch ($this->_mapType) - { - case Swift_CharacterReader::MAP_TYPE_FIXED_LEN: - $len = $length*$this->_map; - $ret = substr($this->_datas, - $this->_currentPos * $this->_map, - $len); - $this->_currentPos += $length; - break; - - case Swift_CharacterReader::MAP_TYPE_INVALID: - $end = $this->_currentPos + $length; - $end = $end > $this->_charCount - ?$this->_charCount - :$end; - $ret = ''; - for (; $this->_currentPos < $length; ++$this->_currentPos) - { - if (isset ($this->_map[$this->_currentPos])) - { - $ret .= '?'; - } - else - { - $ret .= $this->_datas[$this->_currentPos]; - } - } - break; - - case Swift_CharacterReader::MAP_TYPE_POSITIONS: - $end = $this->_currentPos + $length; - $end = $end > $this->_charCount - ?$this->_charCount - :$end; - $ret = ''; - $start = 0; - if ($this->_currentPos>0) - { - $start = $this->_map['p'][$this->_currentPos-1]; - } - $to = $start; - for (; $this->_currentPos < $end; ++$this->_currentPos) - { - if (isset($this->_map['i'][$this->_currentPos])) { - $ret .= substr($this->_datas, $start, $to - $start).'?'; - $start = $this->_map['p'][$this->_currentPos]; - } else { - $to = $this->_map['p'][$this->_currentPos]; - } - } - $ret .= substr($this->_datas, $start, $to - $start); - break; - } - return $ret; - } - - /** - * @see Swift_CharacterStream::readBytes() - * - * @param int $length - * @return int[] - */ - public function readBytes($length) - { - $read=$this->read($length); - if ($read!==false) - { - $ret = array_map('ord', str_split($read, 1)); - return $ret; - } - return false; - } - - /** - * @see Swift_CharacterStream::setPointer() - * - * @param int $charOffset - */ - public function setPointer($charOffset) - { - if ($this->_charCount<$charOffset){ - $charOffset=$this->_charCount; - } - $this->_currentPos = $charOffset; - } - - /** - * @see Swift_CharacterStream::write() - * - * @param string $chars - */ - public function write($chars) - { - if (!isset($this->_charReader)) - { - $this->_charReader = $this->_charReaderFactory->getReaderFor( - $this->_charset); - $this->_map = array(); - $this->_mapType = $this->_charReader->getMapType(); - } - $ignored=''; - $this->_datas .= $chars; - $this->_charCount += $this->_charReader->getCharPositions(substr($this->_datas, $this->_datasSize), $this->_datasSize, $this->_map, $ignored); - if ($ignored!==false) { - $this->_datasSize=strlen($this->_datas)-strlen($ignored); - } - else - { - $this->_datasSize=strlen($this->_datas); - } - } -} \ No newline at end of file diff --git a/h-source/External/swiftmailer/lib/classes/Swift/DependencyContainer.php b/h-source/External/swiftmailer/lib/classes/Swift/DependencyContainer.php deleted file mode 100755 index b6ba554..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/DependencyContainer.php +++ /dev/null @@ -1,349 +0,0 @@ -_store); - } - - /** - * Test if an item is registered in this container with the given name. - * @param string $itemName - * @return boolean - * @see register() - */ - public function has($itemName) - { - return array_key_exists($itemName, $this->_store) - && isset($this->_store[$itemName]['lookupType']); - } - - /** - * Lookup the item with the given $itemName. - * @param string $itemName - * @return mixed - * @throws Swift_DependencyException If the dependency is not found - * @see register() - */ - public function lookup($itemName) - { - if (!$this->has($itemName)) - { - throw new Swift_DependencyException( - 'Cannot lookup dependency "' . $itemName . '" since it is not registered.' - ); - } - - switch ($this->_store[$itemName]['lookupType']) - { - case self::TYPE_ALIAS: - return $this->_createAlias($itemName); - case self::TYPE_VALUE: - return $this->_getValue($itemName); - case self::TYPE_INSTANCE: - return $this->_createNewInstance($itemName); - case self::TYPE_SHARED: - return $this->_createSharedInstance($itemName); - } - } - - /** - * Create an array of arguments passed to the constructor of $itemName. - * @param string $itemName - * @return array - */ - public function createDependenciesFor($itemName) - { - $args = array(); - if (isset($this->_store[$itemName]['args'])) - { - $args = $this->_resolveArgs($this->_store[$itemName]['args']); - } - return $args; - } - - /** - * Register a new dependency with $itemName. - * This method returns the current DependencyContainer instance because it - * requires the use of the fluid interface to set the specific details for the - * dependency. - * - * @param string $itemName - * @return Swift_DependencyContainer - * @see asNewInstanceOf(), asSharedInstanceOf(), asValue() - */ - public function register($itemName) - { - $this->_store[$itemName] = array(); - $this->_endPoint =& $this->_store[$itemName]; - return $this; - } - - /** - * Specify the previously registered item as a literal value. - * {@link register()} must be called before this will work. - * - * @param mixed $value - * @return Swift_DependencyContainer - */ - public function asValue($value) - { - $endPoint =& $this->_getEndPoint(); - $endPoint['lookupType'] = self::TYPE_VALUE; - $endPoint['value'] = $value; - return $this; - } - - /** - * Specify the previously registered item as an alias of another item. - * @param string $lookup - * @return Swift_DependencyContainer - */ - public function asAliasOf($lookup) - { - $endPoint =& $this->_getEndPoint(); - $endPoint['lookupType'] = self::TYPE_ALIAS; - $endPoint['ref'] = $lookup; - return $this; - } - - /** - * Specify the previously registered item as a new instance of $className. - * {@link register()} must be called before this will work. - * Any arguments can be set with {@link withDependencies()}, - * {@link addConstructorValue()} or {@link addConstructorLookup()}. - * - * @param string $className - * @return Swift_DependencyContainer - * @see withDependencies(), addConstructorValue(), addConstructorLookup() - */ - public function asNewInstanceOf($className) - { - $endPoint =& $this->_getEndPoint(); - $endPoint['lookupType'] = self::TYPE_INSTANCE; - $endPoint['className'] = $className; - return $this; - } - - /** - * Specify the previously registered item as a shared instance of $className. - * {@link register()} must be called before this will work. - * @param string $className - * @return Swift_DependencyContainer - */ - public function asSharedInstanceOf($className) - { - $endPoint =& $this->_getEndPoint(); - $endPoint['lookupType'] = self::TYPE_SHARED; - $endPoint['className'] = $className; - return $this; - } - - /** - * Specify a list of injected dependencies for the previously registered item. - * This method takes an array of lookup names. - * - * @param array $lookups - * @return Swift_DependencyContainer - * @see addConstructorValue(), addConstructorLookup() - */ - public function withDependencies(array $lookups) - { - $endPoint =& $this->_getEndPoint(); - $endPoint['args'] = array(); - foreach ($lookups as $lookup) - { - $this->addConstructorLookup($lookup); - } - return $this; - } - - /** - * Specify a literal (non looked up) value for the constructor of the - * previously registered item. - * - * @param mixed $value - * @return Swift_DependencyContainer - * @see withDependencies(), addConstructorLookup() - */ - public function addConstructorValue($value) - { - $endPoint =& $this->_getEndPoint(); - if (!isset($endPoint['args'])) - { - $endPoint['args'] = array(); - } - $endPoint['args'][] = array('type' => 'value', 'item' => $value); - return $this; - } - - /** - * Specify a dependency lookup for the constructor of the previously - * registered item. - * - * @param string $lookup - * @return Swift_DependencyContainer - * @see withDependencies(), addConstructorValue() - */ - public function addConstructorLookup($lookup) - { - $endPoint =& $this->_getEndPoint(); - if (!isset($this->_endPoint['args'])) - { - $endPoint['args'] = array(); - } - $endPoint['args'][] = array('type' => 'lookup', 'item' => $lookup); - return $this; - } - - // -- Private methods - - /** Get the literal value with $itemName */ - private function _getValue($itemName) - { - return $this->_store[$itemName]['value']; - } - - /** Resolve an alias to another item */ - private function _createAlias($itemName) - { - return $this->lookup($this->_store[$itemName]['ref']); - } - - /** Create a fresh instance of $itemName */ - private function _createNewInstance($itemName) - { - $reflector = new ReflectionClass($this->_store[$itemName]['className']); - if ($reflector->getConstructor()) - { - return $reflector->newInstanceArgs( - $this->createDependenciesFor($itemName) - ); - } - else - { - return $reflector->newInstance(); - } - } - - /** Create and register a shared instance of $itemName */ - private function _createSharedInstance($itemName) - { - if (!isset($this->_store[$itemName]['instance'])) - { - $this->_store[$itemName]['instance'] = $this->_createNewInstance($itemName); - } - return $this->_store[$itemName]['instance']; - } - - /** Get the current endpoint in the store */ - private function &_getEndPoint() - { - if (!isset($this->_endPoint)) - { - throw new BadMethodCallException( - 'Component must first be registered by calling register()' - ); - } - return $this->_endPoint; - } - - /** Get an argument list with dependencies resolved */ - private function _resolveArgs(array $args) - { - $resolved = array(); - foreach ($args as $argDefinition) - { - switch ($argDefinition['type']) - { - case 'lookup': - $resolved[] = $this->_lookupRecursive($argDefinition['item']); - break; - case 'value': - $resolved[] = $argDefinition['item']; - break; - } - } - return $resolved; - } - - /** Resolve a single dependency with an collections */ - private function _lookupRecursive($item) - { - if (is_array($item)) - { - $collection = array(); - foreach ($item as $k => $v) - { - $collection[$k] = $this->_lookupRecursive($v); - } - return $collection; - } - else - { - return $this->lookup($item); - } - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/DependencyException.php b/h-source/External/swiftmailer/lib/classes/Swift/DependencyException.php deleted file mode 100755 index bb1681c..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/DependencyException.php +++ /dev/null @@ -1,30 +0,0 @@ -createDependenciesFor('mime.embeddedfile') - ); - - $this->setBody($data); - $this->setFilename($filename); - if ($contentType) - { - $this->setContentType($contentType); - } - } - - /** - * Create a new EmbeddedFile. - * @param string|Swift_OutputByteStream $data - * @param string $filename - * @param string $contentType - * @return Swift_Mime_EmbeddedFile - */ - public static function newInstance($data = null, $filename = null, - $contentType = null) - { - return new self($data, $filename, $contentType); - } - - /** - * Create a new EmbeddedFile from a filesystem path. - * @param string $path - * @return Swift_Mime_EmbeddedFile - */ - public static function fromPath($path) - { - return self::newInstance()->setFile( - new Swift_ByteStream_FileByteStream($path) - ); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Encoder.php b/h-source/External/swiftmailer/lib/classes/Swift/Encoder.php deleted file mode 100755 index 32aa96a..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Encoder.php +++ /dev/null @@ -1,32 +0,0 @@ -= $maxLineLength || 76 < $maxLineLength) - { - $maxLineLength = 76; - } - - $encodedString = base64_encode($string); - $firstLine = ''; - - if (0 != $firstLineOffset) - { - $firstLine = substr( - $encodedString, 0, $maxLineLength - $firstLineOffset - ) . "\r\n"; - $encodedString = substr( - $encodedString, $maxLineLength - $firstLineOffset - ); - } - - return $firstLine . trim(chunk_split($encodedString, $maxLineLength, "\r\n")); - } - - /** - * Does nothing. - */ - public function charsetChanged($charset) - { - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php b/h-source/External/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php deleted file mode 100755 index 6914f6c..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Encoder/QpEncoder.php +++ /dev/null @@ -1,263 +0,0 @@ - '=00', 1 => '=01', 2 => '=02', 3 => '=03', 4 => '=04', - 5 => '=05', 6 => '=06', 7 => '=07', 8 => '=08', 9 => '=09', - 10 => '=0A', 11 => '=0B', 12 => '=0C', 13 => '=0D', 14 => '=0E', - 15 => '=0F', 16 => '=10', 17 => '=11', 18 => '=12', 19 => '=13', - 20 => '=14', 21 => '=15', 22 => '=16', 23 => '=17', 24 => '=18', - 25 => '=19', 26 => '=1A', 27 => '=1B', 28 => '=1C', 29 => '=1D', - 30 => '=1E', 31 => '=1F', 32 => '=20', 33 => '=21', 34 => '=22', - 35 => '=23', 36 => '=24', 37 => '=25', 38 => '=26', 39 => '=27', - 40 => '=28', 41 => '=29', 42 => '=2A', 43 => '=2B', 44 => '=2C', - 45 => '=2D', 46 => '=2E', 47 => '=2F', 48 => '=30', 49 => '=31', - 50 => '=32', 51 => '=33', 52 => '=34', 53 => '=35', 54 => '=36', - 55 => '=37', 56 => '=38', 57 => '=39', 58 => '=3A', 59 => '=3B', - 60 => '=3C', 61 => '=3D', 62 => '=3E', 63 => '=3F', 64 => '=40', - 65 => '=41', 66 => '=42', 67 => '=43', 68 => '=44', 69 => '=45', - 70 => '=46', 71 => '=47', 72 => '=48', 73 => '=49', 74 => '=4A', - 75 => '=4B', 76 => '=4C', 77 => '=4D', 78 => '=4E', 79 => '=4F', - 80 => '=50', 81 => '=51', 82 => '=52', 83 => '=53', 84 => '=54', - 85 => '=55', 86 => '=56', 87 => '=57', 88 => '=58', 89 => '=59', - 90 => '=5A', 91 => '=5B', 92 => '=5C', 93 => '=5D', 94 => '=5E', - 95 => '=5F', 96 => '=60', 97 => '=61', 98 => '=62', 99 => '=63', - 100 => '=64', 101 => '=65', 102 => '=66', 103 => '=67', 104 => '=68', - 105 => '=69', 106 => '=6A', 107 => '=6B', 108 => '=6C', 109 => '=6D', - 110 => '=6E', 111 => '=6F', 112 => '=70', 113 => '=71', 114 => '=72', - 115 => '=73', 116 => '=74', 117 => '=75', 118 => '=76', 119 => '=77', - 120 => '=78', 121 => '=79', 122 => '=7A', 123 => '=7B', 124 => '=7C', - 125 => '=7D', 126 => '=7E', 127 => '=7F', 128 => '=80', 129 => '=81', - 130 => '=82', 131 => '=83', 132 => '=84', 133 => '=85', 134 => '=86', - 135 => '=87', 136 => '=88', 137 => '=89', 138 => '=8A', 139 => '=8B', - 140 => '=8C', 141 => '=8D', 142 => '=8E', 143 => '=8F', 144 => '=90', - 145 => '=91', 146 => '=92', 147 => '=93', 148 => '=94', 149 => '=95', - 150 => '=96', 151 => '=97', 152 => '=98', 153 => '=99', 154 => '=9A', - 155 => '=9B', 156 => '=9C', 157 => '=9D', 158 => '=9E', 159 => '=9F', - 160 => '=A0', 161 => '=A1', 162 => '=A2', 163 => '=A3', 164 => '=A4', - 165 => '=A5', 166 => '=A6', 167 => '=A7', 168 => '=A8', 169 => '=A9', - 170 => '=AA', 171 => '=AB', 172 => '=AC', 173 => '=AD', 174 => '=AE', - 175 => '=AF', 176 => '=B0', 177 => '=B1', 178 => '=B2', 179 => '=B3', - 180 => '=B4', 181 => '=B5', 182 => '=B6', 183 => '=B7', 184 => '=B8', - 185 => '=B9', 186 => '=BA', 187 => '=BB', 188 => '=BC', 189 => '=BD', - 190 => '=BE', 191 => '=BF', 192 => '=C0', 193 => '=C1', 194 => '=C2', - 195 => '=C3', 196 => '=C4', 197 => '=C5', 198 => '=C6', 199 => '=C7', - 200 => '=C8', 201 => '=C9', 202 => '=CA', 203 => '=CB', 204 => '=CC', - 205 => '=CD', 206 => '=CE', 207 => '=CF', 208 => '=D0', 209 => '=D1', - 210 => '=D2', 211 => '=D3', 212 => '=D4', 213 => '=D5', 214 => '=D6', - 215 => '=D7', 216 => '=D8', 217 => '=D9', 218 => '=DA', 219 => '=DB', - 220 => '=DC', 221 => '=DD', 222 => '=DE', 223 => '=DF', 224 => '=E0', - 225 => '=E1', 226 => '=E2', 227 => '=E3', 228 => '=E4', 229 => '=E5', - 230 => '=E6', 231 => '=E7', 232 => '=E8', 233 => '=E9', 234 => '=EA', - 235 => '=EB', 236 => '=EC', 237 => '=ED', 238 => '=EE', 239 => '=EF', - 240 => '=F0', 241 => '=F1', 242 => '=F2', 243 => '=F3', 244 => '=F4', - 245 => '=F5', 246 => '=F6', 247 => '=F7', 248 => '=F8', 249 => '=F9', - 250 => '=FA', 251 => '=FB', 252 => '=FC', 253 => '=FD', 254 => '=FE', - 255 => '=FF' - ); - - /** - * A map of non-encoded ascii characters. - * @var string[] - * @access protected - */ - protected static $_safeMap = array(); - - /** - * Creates a new QpEncoder for the given CharacterStream. - * @param Swift_CharacterStream $charStream to use for reading characters - * @param Swift_StreamFilter $filter if input should be canonicalized - */ - public function __construct(Swift_CharacterStream $charStream, - Swift_StreamFilter $filter = null) - { - $this->_charStream = $charStream; - if (empty(self::$_safeMap)) - { - foreach (array_merge( - array(0x09, 0x20), range(0x21, 0x3C), range(0x3E, 0x7E)) as $byte) - { - self::$_safeMap[$byte] = chr($byte); - } - } - $this->_filter = $filter; - } - - /** - * Takes an unencoded string and produces a QP encoded string from it. - * QP encoded strings have a maximum line length of 76 characters. - * If the first line needs to be shorter, indicate the difference with - * $firstLineOffset. - * @param string $string to encode - * @param int $firstLineOffset, optional - * @param int $maxLineLength, optional, 0 indicates the default of 76 chars - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, - $maxLineLength = 0) - { - if ($maxLineLength > 76 || $maxLineLength <= 0) - { - $maxLineLength = 76; - } - - $thisLineLength = $maxLineLength - $firstLineOffset; - - $lines = array(); - $lNo = 0; - $lines[$lNo] = ''; - $currentLine =& $lines[$lNo++]; - $size=$lineLen=0; - - $this->_charStream->flushContents(); - $this->_charStream->importString($string); - - //Fetching more than 4 chars at one is slower, as is fetching fewer bytes - // Conveniently 4 chars is the UTF-8 safe number since UTF-8 has up to 6 - // bytes per char and (6 * 4 * 3 = 72 chars per line) * =NN is 3 bytes - while (false !== $bytes = $this->_nextSequence()) - { - //If we're filtering the input - if (isset($this->_filter)) - { - //If we can't filter because we need more bytes - while ($this->_filter->shouldBuffer($bytes)) - { - //Then collect bytes into the buffer - if (false === $moreBytes = $this->_nextSequence(1)) - { - break; - } - - foreach ($moreBytes as $b) - { - $bytes[] = $b; - } - } - //And filter them - $bytes = $this->_filter->filter($bytes); - } - - $enc = $this->_encodeByteSequence($bytes, $size); - if ($currentLine && $lineLen+$size >= $thisLineLength) - { - $lines[$lNo] = ''; - $currentLine =& $lines[$lNo++]; - $thisLineLength = $maxLineLength; - $lineLen=0; - } - $lineLen+=$size; - $currentLine .= $enc; - } - - return $this->_standardize(implode("=\r\n", $lines)); - } - - /** - * Updates the charset used. - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->_charStream->setCharacterSet($charset); - } - - // -- Protected methods - - /** - * Encode the given byte array into a verbatim QP form. - * @param int[] $bytes - * @return string - * @access protected - */ - protected function _encodeByteSequence(array $bytes, &$size) - { - $ret = ''; - $size=0; - foreach ($bytes as $b) - { - if (isset(self::$_safeMap[$b])) - { - $ret .= self::$_safeMap[$b]; - ++$size; - } - else - { - $ret .= self::$_qpMap[$b]; - $size+=3; - } - } - return $ret; - } - - /** - * Get the next sequence of bytes to read from the char stream. - * @param int $size number of bytes to read - * @return int[] - * @access protected - */ - protected function _nextSequence($size = 4) - { - return $this->_charStream->readBytes($size); - } - - /** - * Make sure CRLF is correct and HT/SPACE are in valid places. - * @param string $string - * @return string - * @access protected - */ - protected function _standardize($string) - { - $string = str_replace(array("\t=0D=0A", " =0D=0A", "=0D=0A"), - array("=09\r\n", "=20\r\n", "\r\n"), $string - ); - switch ($end = ord(substr($string, -1))) - { - case 0x09: - case 0x20: - $string = substr_replace($string, self::$_qpMap[$end], -1); - } - return $string; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php b/h-source/External/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php deleted file mode 100755 index febc6ba..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Encoder/Rfc2231Encoder.php +++ /dev/null @@ -1,89 +0,0 @@ -_charStream = $charStream; - } - - /** - * Takes an unencoded string and produces a string encoded according to - * RFC 2231 from it. - * @param string $string to encode - * @param int $firstLineOffset - * @param int $maxLineLength, optional, 0 indicates the default of 75 bytes - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, - $maxLineLength = 0) - { - $lines = array(); $lineCount = 0; - $lines[] = ''; - $currentLine =& $lines[$lineCount++]; - - if (0 >= $maxLineLength) - { - $maxLineLength = 75; - } - - $this->_charStream->flushContents(); - $this->_charStream->importString($string); - - $thisLineLength = $maxLineLength - $firstLineOffset; - - while (false !== $char = $this->_charStream->read(4)) - { - $encodedChar = rawurlencode($char); - if (0 != strlen($currentLine) - && strlen($currentLine . $encodedChar) > $thisLineLength) - { - $lines[] = ''; - $currentLine =& $lines[$lineCount++]; - $thisLineLength = $maxLineLength; - } - $currentLine .= $encodedChar; - } - - return implode("\r\n", $lines); - } - - /** - * Updates the charset used. - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->_charStream->setCharacterSet($charset); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Encoding.php b/h-source/External/swiftmailer/lib/classes/Swift/Encoding.php deleted file mode 100755 index 1849a82..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Encoding.php +++ /dev/null @@ -1,70 +0,0 @@ -lookup($key); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/CommandEvent.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/CommandEvent.php deleted file mode 100755 index 73eb585..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Events/CommandEvent.php +++ /dev/null @@ -1,67 +0,0 @@ -_command = $command; - $this->_successCodes = $successCodes; - } - - /** - * Get the command which was sent to the server. - * @return string - */ - public function getCommand() - { - return $this->_command; - } - - /** - * Get the numeric response codes which indicate success for this command. - * @return int[] - */ - public function getSuccessCodes() - { - return $this->_successCodes; - } - -} \ No newline at end of file diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/CommandListener.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/CommandListener.php deleted file mode 100755 index 2fd7117..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Events/CommandListener.php +++ /dev/null @@ -1,29 +0,0 @@ -_source = $source; - } - - /** - * Get the source object of this event. - * @return object - */ - public function getSource() - { - return $this->_source; - } - - /** - * Prevent this Event from bubbling any further up the stack. - * @param boolean $cancel, optional - */ - public function cancelBubble($cancel = true) - { - $this->_bubbleCancelled = $cancel; - } - - /** - * Returns true if this Event will not bubble any further up the stack. - * @return boolean - */ - public function bubbleCancelled() - { - return $this->_bubbleCancelled; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php deleted file mode 100755 index addf9e7..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Events/ResponseEvent.php +++ /dev/null @@ -1,65 +0,0 @@ -_response = $response; - $this->_valid = $valid; - } - - /** - * Get the response which was received from the server. - * @return string - */ - public function getResponse() - { - return $this->_response; - } - - /** - * Get the success status of this Event. - * @return boolean - */ - public function isValid() - { - return $this->_valid; - } - -} \ No newline at end of file diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/ResponseListener.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/ResponseListener.php deleted file mode 100755 index 092385b..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Events/ResponseListener.php +++ /dev/null @@ -1,29 +0,0 @@ -_message = $message; - $this->_result = self::RESULT_PENDING; - } - - /** - * Get the Transport used to send the Message. - * @return Swift_Transport - */ - public function getTransport() - { - return $this->getSource(); - } - - /** - * Get the Message being sent. - * @return Swift_Mime_Message - */ - public function getMessage() - { - return $this->_message; - } - - /** - * Set the array of addresses that failed in sending. - * @param array $recipients - */ - public function setFailedRecipients($recipients) - { - $this->_failedRecipients = $recipients; - } - - /** - * Get an recipient addresses which were not accepted for delivery. - * @return string[] - */ - public function getFailedRecipients() - { - return $this->_failedRecipients; - } - - /** - * Set the result of sending. - * @return int - */ - public function setResult($result) - { - $this->_result = $result; - } - - /** - * Get the result of this Event. - * The return value is a bitmask from - * {@link RESULT_PENDING, RESULT_SUCCESS, RESULT_TENTATIVE, RESULT_FAILED} - * @return int - */ - public function getResult() - { - return $this->_result; - } - -} \ No newline at end of file diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/SendListener.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/SendListener.php deleted file mode 100755 index a8f0cc3..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Events/SendListener.php +++ /dev/null @@ -1,35 +0,0 @@ -_eventMap = array( - 'Swift_Events_CommandEvent' => 'Swift_Events_CommandListener', - 'Swift_Events_ResponseEvent' => 'Swift_Events_ResponseListener', - 'Swift_Events_SendEvent' => 'Swift_Events_SendListener', - 'Swift_Events_TransportChangeEvent' => 'Swift_Events_TransportChangeListener', - 'Swift_Events_TransportExceptionEvent' => 'Swift_Events_TransportExceptionListener' - ); - } - - /** - * Create a new SendEvent for $source and $message. - * - * @param Swift_Transport $source - * @param Swift_Mime_Message - * @return Swift_Events_SendEvent - */ - public function createSendEvent(Swift_Transport $source, - Swift_Mime_Message $message) - { - return new Swift_Events_SendEvent($source, $message); - } - - /** - * Create a new CommandEvent for $source and $command. - * - * @param Swift_Transport $source - * @param string $command That will be executed - * @param array $successCodes That are needed - * @return Swift_Events_CommandEvent - */ - public function createCommandEvent(Swift_Transport $source, - $command, $successCodes = array()) - { - return new Swift_Events_CommandEvent($source, $command, $successCodes); - } - - /** - * Create a new ResponseEvent for $source and $response. - * - * @param Swift_Transport $source - * @param string $response - * @param boolean $valid If the response is valid - * @return Swift_Events_ResponseEvent - */ - public function createResponseEvent(Swift_Transport $source, - $response, $valid) - { - return new Swift_Events_ResponseEvent($source, $response, $valid); - } - - /** - * Create a new TransportChangeEvent for $source. - * - * @param Swift_Transport $source - * @return Swift_Events_TransportChangeEvent - */ - public function createTransportChangeEvent(Swift_Transport $source) - { - return new Swift_Events_TransportChangeEvent($source); - } - - /** - * Create a new TransportExceptionEvent for $source. - * - * @param Swift_Transport $source - * @param Swift_TransportException $ex - * @return Swift_Events_TransportExceptionEvent - */ - public function createTransportExceptionEvent(Swift_Transport $source, - Swift_TransportException $ex) - { - return new Swift_Events_TransportExceptionEvent($source, $ex); - } - - /** - * Bind an event listener to this dispatcher. - * - * @param Swift_Events_EventListener $listener - */ - public function bindEventListener(Swift_Events_EventListener $listener) - { - foreach ($this->_listeners as $l) - { - //Already loaded - if ($l === $listener) - { - return; - } - } - $this->_listeners[] = $listener; - } - - /** - * Dispatch the given Event to all suitable listeners. - * - * @param Swift_Events_EventObject $evt - * @param string $target method - */ - public function dispatchEvent(Swift_Events_EventObject $evt, $target) - { - $this->_prepareBubbleQueue($evt); - $this->_bubble($evt, $target); - } - - // -- Private methods - - /** Queue listeners on a stack ready for $evt to be bubbled up it */ - private function _prepareBubbleQueue(Swift_Events_EventObject $evt) - { - $this->_bubbleQueue = array(); - $evtClass = get_class($evt); - foreach ($this->_listeners as $listener) - { - if (array_key_exists($evtClass, $this->_eventMap) - && ($listener instanceof $this->_eventMap[$evtClass])) - { - $this->_bubbleQueue[] = $listener; - } - } - } - - /** Bubble $evt up the stack calling $target() on each listener */ - private function _bubble(Swift_Events_EventObject $evt, $target) - { - if (!$evt->bubbleCancelled() && $listener = array_shift($this->_bubbleQueue)) - { - $listener->$target($evt); - $this->_bubble($evt, $target); - } - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php deleted file mode 100755 index f069a4c..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportChangeEvent.php +++ /dev/null @@ -1,31 +0,0 @@ -getSource(); - } - -} \ No newline at end of file diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php deleted file mode 100755 index ba729d0..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportChangeListener.php +++ /dev/null @@ -1,53 +0,0 @@ -_exception = $ex; - } - - /** - * Get the TransportException thrown. - * @return Swift_TransportException - */ - public function getException() - { - return $this->_exception; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php b/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php deleted file mode 100755 index d6dce94..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Events/TransportExceptionListener.php +++ /dev/null @@ -1,30 +0,0 @@ -createDependenciesFor('transport.failover') - ); - - $this->setTransports($transports); - } - - /** - * Create a new FailoverTransport instance. - * @param string $transports - * @return Swift_FailoverTransport - */ - public static function newInstance($transports = array()) - { - return new self($transports); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/FileStream.php b/h-source/External/swiftmailer/lib/classes/Swift/FileStream.php deleted file mode 100755 index a7f894d..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/FileStream.php +++ /dev/null @@ -1,28 +0,0 @@ -setFile( - new Swift_ByteStream_FileByteStream($path) - ); - return $image; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/InputByteStream.php b/h-source/External/swiftmailer/lib/classes/Swift/InputByteStream.php deleted file mode 100755 index e8f45f4..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/InputByteStream.php +++ /dev/null @@ -1,72 +0,0 @@ -_stream = $stream; - } - - /** - * Set a string into the cache under $itemKey for the namespace $nsKey. - * @param string $nsKey - * @param string $itemKey - * @param string $string - * @param int $mode - * @see MODE_WRITE, MODE_APPEND - */ - public function setString($nsKey, $itemKey, $string, $mode) - { - $this->_prepareCache($nsKey); - switch ($mode) - { - case self::MODE_WRITE: - $this->_contents[$nsKey][$itemKey] = $string; - break; - case self::MODE_APPEND: - if (!$this->hasKey($nsKey, $itemKey)) - { - $this->_contents[$nsKey][$itemKey] = ''; - } - $this->_contents[$nsKey][$itemKey] .= $string; - break; - default: - throw new Swift_SwiftException( - 'Invalid mode [' . $mode . '] used to set nsKey='. - $nsKey . ', itemKey=' . $itemKey - ); - } - } - - /** - * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. - * @param string $nsKey - * @param string $itemKey - * @param Swift_OutputByteStream $os - * @param int $mode - * @see MODE_WRITE, MODE_APPEND - */ - public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, - $mode) - { - $this->_prepareCache($nsKey); - switch ($mode) - { - case self::MODE_WRITE: - $this->clearKey($nsKey, $itemKey); - case self::MODE_APPEND: - if (!$this->hasKey($nsKey, $itemKey)) - { - $this->_contents[$nsKey][$itemKey] = ''; - } - while (false !== $bytes = $os->read(8192)) - { - $this->_contents[$nsKey][$itemKey] .= $bytes; - } - break; - default: - throw new Swift_SwiftException( - 'Invalid mode [' . $mode . '] used to set nsKey='. - $nsKey . ', itemKey=' . $itemKey - ); - } - } - - /** - * Provides a ByteStream which when written to, writes data to $itemKey. - * NOTE: The stream will always write in append mode. - * @param string $nsKey - * @param string $itemKey - * @return Swift_InputByteStream - */ - public function getInputByteStream($nsKey, $itemKey, - Swift_InputByteStream $writeThrough = null) - { - $is = clone $this->_stream; - $is->setKeyCache($this); - $is->setNsKey($nsKey); - $is->setItemKey($itemKey); - if (isset($writeThrough)) - { - $is->setWriteThroughStream($writeThrough); - } - return $is; - } - - /** - * Get data back out of the cache as a string. - * @param string $nsKey - * @param string $itemKey - * @return string - */ - public function getString($nsKey, $itemKey) - { - $this->_prepareCache($nsKey); - if ($this->hasKey($nsKey, $itemKey)) - { - return $this->_contents[$nsKey][$itemKey]; - } - } - - /** - * Get data back out of the cache as a ByteStream. - * @param string $nsKey - * @param string $itemKey - * @param Swift_InputByteStream $is to write the data to - */ - public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) - { - $this->_prepareCache($nsKey); - $is->write($this->getString($nsKey, $itemKey)); - } - - /** - * Check if the given $itemKey exists in the namespace $nsKey. - * @param string $nsKey - * @param string $itemKey - * @return boolean - */ - public function hasKey($nsKey, $itemKey) - { - $this->_prepareCache($nsKey); - return array_key_exists($itemKey, $this->_contents[$nsKey]); - } - - /** - * Clear data for $itemKey in the namespace $nsKey if it exists. - * @param string $nsKey - * @param string $itemKey - */ - public function clearKey($nsKey, $itemKey) - { - unset($this->_contents[$nsKey][$itemKey]); - } - - /** - * Clear all data in the namespace $nsKey if it exists. - * @param string $nsKey - */ - public function clearAll($nsKey) - { - unset($this->_contents[$nsKey]); - } - - // -- Private methods - - /** - * Initialize the namespace of $nsKey if needed. - * @param string $nsKey - * @access private - */ - private function _prepareCache($nsKey) - { - if (!array_key_exists($nsKey, $this->_contents)) - { - $this->_contents[$nsKey] = array(); - } - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php b/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php deleted file mode 100755 index 599fd6c..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/DiskKeyCache.php +++ /dev/null @@ -1,316 +0,0 @@ -_stream = $stream; - $this->_path = $path; - $this->_quotes = get_magic_quotes_runtime(); - } - - /** - * Set a string into the cache under $itemKey for the namespace $nsKey. - * @param string $nsKey - * @param string $itemKey - * @param string $string - * @param int $mode - * @throws Swift_IoException - * @see MODE_WRITE, MODE_APPEND - */ - public function setString($nsKey, $itemKey, $string, $mode) - { - $this->_prepareCache($nsKey); - switch ($mode) - { - case self::MODE_WRITE: - $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START); - break; - case self::MODE_APPEND: - $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_END); - break; - default: - throw new Swift_SwiftException( - 'Invalid mode [' . $mode . '] used to set nsKey='. - $nsKey . ', itemKey=' . $itemKey - ); - break; - } - fwrite($fp, $string); - } - - /** - * Set a ByteStream into the cache under $itemKey for the namespace $nsKey. - * @param string $nsKey - * @param string $itemKey - * @param Swift_OutputByteStream $os - * @param int $mode - * @see MODE_WRITE, MODE_APPEND - * @throws Swift_IoException - */ - public function importFromByteStream($nsKey, $itemKey, Swift_OutputByteStream $os, - $mode) - { - $this->_prepareCache($nsKey); - switch ($mode) - { - case self::MODE_WRITE: - $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START); - break; - case self::MODE_APPEND: - $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_END); - break; - default: - throw new Swift_SwiftException( - 'Invalid mode [' . $mode . '] used to set nsKey='. - $nsKey . ', itemKey=' . $itemKey - ); - break; - } - while (false !== $bytes = $os->read(8192)) - { - fwrite($fp, $bytes); - } - } - - /** - * Provides a ByteStream which when written to, writes data to $itemKey. - * NOTE: The stream will always write in append mode. - * @param string $nsKey - * @param string $itemKey - * @return Swift_InputByteStream - */ - public function getInputByteStream($nsKey, $itemKey, - Swift_InputByteStream $writeThrough = null) - { - $is = clone $this->_stream; - $is->setKeyCache($this); - $is->setNsKey($nsKey); - $is->setItemKey($itemKey); - if (isset($writeThrough)) - { - $is->setWriteThroughStream($writeThrough); - } - return $is; - } - - /** - * Get data back out of the cache as a string. - * @param string $nsKey - * @param string $itemKey - * @return string - * @throws Swift_IoException - */ - public function getString($nsKey, $itemKey) - { - $this->_prepareCache($nsKey); - if ($this->hasKey($nsKey, $itemKey)) - { - $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START); - if ($this->_quotes) - { - set_magic_quotes_runtime(0); - } - $str = ''; - while (!feof($fp) && false !== $bytes = fread($fp, 8192)) - { - $str .= $bytes; - } - if ($this->_quotes) - { - set_magic_quotes_runtime(1); - } - return $str; - } - } - - /** - * Get data back out of the cache as a ByteStream. - * @param string $nsKey - * @param string $itemKey - * @param Swift_InputByteStream $is to write the data to - */ - public function exportToByteStream($nsKey, $itemKey, Swift_InputByteStream $is) - { - if ($this->hasKey($nsKey, $itemKey)) - { - $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_START); - if ($this->_quotes) - { - set_magic_quotes_runtime(0); - } - while (!feof($fp) && false !== $bytes = fread($fp, 8192)) - { - $is->write($bytes); - } - if ($this->_quotes) - { - set_magic_quotes_runtime(1); - } - } - } - - /** - * Check if the given $itemKey exists in the namespace $nsKey. - * @param string $nsKey - * @param string $itemKey - * @return boolean - */ - public function hasKey($nsKey, $itemKey) - { - return is_file($this->_path . '/' . $nsKey . '/' . $itemKey); - } - - /** - * Clear data for $itemKey in the namespace $nsKey if it exists. - * @param string $nsKey - * @param string $itemKey - */ - public function clearKey($nsKey, $itemKey) - { - if ($this->hasKey($nsKey, $itemKey)) - { - $fp = $this->_getHandle($nsKey, $itemKey, self::POSITION_END); - fclose($fp); - unlink($this->_path . '/' . $nsKey . '/' . $itemKey); - } - unset($this->_keys[$nsKey][$itemKey]); - } - - /** - * Clear all data in the namespace $nsKey if it exists. - * @param string $nsKey - */ - public function clearAll($nsKey) - { - if (array_key_exists($nsKey, $this->_keys)) - { - foreach ($this->_keys[$nsKey] as $itemKey=>$null) - { - $this->clearKey($nsKey, $itemKey); - } - rmdir($this->_path . '/' . $nsKey); - unset($this->_keys[$nsKey]); - } - } - - // -- Private methods - - /** - * Initialize the namespace of $nsKey if needed. - * @param string $nsKey - * @access private - */ - private function _prepareCache($nsKey) - { - $cacheDir = $this->_path . '/' . $nsKey; - if (!is_dir($cacheDir)) - { - if (!mkdir($cacheDir)) - { - throw new Swift_IoException('Failed to create cache directory ' . $cacheDir); - } - $this->_keys[$nsKey] = array(); - } - } - - /** - * Get a file handle on the cache item. - * @param string $nsKey - * @param string $itemKey - * @param int $position - * @return resource - * @access private - */ - private function _getHandle($nsKey, $itemKey, $position) - { - if (!isset($this->_keys[$nsKey]) || !array_key_exists($itemKey, $this->_keys[$nsKey])) - { - $fp = fopen($this->_path . '/' . $nsKey . '/' . $itemKey, 'w+b'); - $this->_keys[$nsKey][$itemKey] = $fp; - } - if (self::POSITION_START == $position) - { - fseek($this->_keys[$nsKey][$itemKey], 0, SEEK_SET); - } - else - { - fseek($this->_keys[$nsKey][$itemKey], 0, SEEK_END); - } - return $this->_keys[$nsKey][$itemKey]; - } - - /** - * Destructor. - */ - public function __destruct() - { - foreach ($this->_keys as $nsKey=>$null) - { - $this->clearAll($nsKey); - } - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php b/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php deleted file mode 100755 index a1f4440..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/KeyCache/KeyCacheInputStream.php +++ /dev/null @@ -1,53 +0,0 @@ -_keyCache = $keyCache; - } - - /** - * Specify a stream to write through for each write(). - * @param Swift_InputByteStream $is - */ - public function setWriteThroughStream(Swift_InputByteStream $is) - { - $this->_writeThrough = $is; - } - - /** - * Writes $bytes to the end of the stream. - * @param string $bytes - * @param Swift_InputByteStream $is, optional - */ - public function write($bytes, Swift_InputByteStream $is = null) - { - $this->_keyCache->setString( - $this->_nsKey, $this->_itemKey, $bytes, Swift_KeyCache::MODE_APPEND - ); - if (isset($is)) - { - $is->write($bytes); - } - if (isset($this->_writeThrough)) - { - $this->_writeThrough->write($bytes); - } - } - - /** - * Not used. - */ - public function commit() - { - } - - /** - * Not used. - */ - public function bind(Swift_InputByteStream $is) - { - } - - /** - * Not used. - */ - public function unbind(Swift_InputByteStream $is) - { - } - - /** - * Flush the contents of the stream (empty it) and set the internal pointer - * to the beginning. - */ - public function flushBuffers() - { - $this->_keyCache->clearKey($this->_nsKey, $this->_itemKey); - } - - /** - * Set the nsKey which will be written to. - * @param string $nsKey - */ - public function setNsKey($nsKey) - { - $this->_nsKey = $nsKey; - } - - /** - * Set the itemKey which will be written to. - * @param string $itemKey - */ - public function setItemKey($itemKey) - { - $this->_itemKey = $itemKey; - } - - /** - * Any implementation should be cloneable, allowing the clone to access a - * separate $nsKey and $itemKey. - */ - public function __clone() - { - $this->_writeThrough = null; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php b/h-source/External/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php deleted file mode 100755 index 14ae292..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/LoadBalancedTransport.php +++ /dev/null @@ -1,48 +0,0 @@ -createDependenciesFor('transport.loadbalanced') - ); - - $this->setTransports($transports); - } - - /** - * Create a new LoadBalancedTransport instance. - * @param string $transports - * @return Swift_LoadBalancedTransport - */ - public static function newInstance($transports = array()) - { - return new self($transports); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/MailTransport.php b/h-source/External/swiftmailer/lib/classes/Swift/MailTransport.php deleted file mode 100755 index afe29c6..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/MailTransport.php +++ /dev/null @@ -1,48 +0,0 @@ -createDependenciesFor('transport.mail') - ); - - $this->setExtraParams($extraParams); - } - - /** - * Create a new MailTransport instance. - * @param string $extraParams To be passed to mail() - * @return Swift_MailTransport - */ - public static function newInstance($extraParams = '-f%s') - { - return new self($extraParams); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mailer.php b/h-source/External/swiftmailer/lib/classes/Swift/Mailer.php deleted file mode 100755 index c92feb4..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mailer.php +++ /dev/null @@ -1,173 +0,0 @@ -_transport = $transport; - } - - /** - * Create a new Mailer instance. - * - * @param Swift_Transport $transport - * @return Swift_Mailer - */ - public static function newInstance(Swift_Transport $transport) - { - return new self($transport); - } - - /** - * Send the given Message like it would be sent in a mail client. - * - * All recipients (with the exception of Bcc) will be able to see the other - * recipients this message was sent to. - * - * If you need to send to each recipient without disclosing details about the - * other recipients see {@link batchSend()}. - * - * Recipient/sender data will be retreived from the Message object. - * - * The return value is the number of recipients who were accepted for - * delivery. - * - * @param Swift_Mime_Message $message - * @param array &$failedRecipients, optional - * @return int - * @see batchSend() - */ - public function send(Swift_Mime_Message $message, &$failedRecipients = null) - { - $failedRecipients = (array) $failedRecipients; - - if (!$this->_transport->isStarted()) - { - $this->_transport->start(); - } - - return $this->_transport->send($message, $failedRecipients); - } - - /** - * Send the given Message to all recipients individually. - * - * This differs from {@link send()} in the way headers are presented to the - * recipient. The only recipient in the "To:" field will be the individual - * recipient it was sent to. - * - * If an iterator is provided, recipients will be read from the iterator - * one-by-one, otherwise recipient data will be retreived from the Message - * object. - * - * Sender information is always read from the Message object. - * - * The return value is the number of recipients who were accepted for - * delivery. - * - * @param Swift_Mime_Message $message - * @param array &$failedRecipients, optional - * @param Swift_Mailer_RecipientIterator $it, optional - * @return int - * @see send() - */ - public function batchSend(Swift_Mime_Message $message, - &$failedRecipients = null, - Swift_Mailer_RecipientIterator $it = null) - { - $failedRecipients = (array) $failedRecipients; - - $sent = 0; - $to = $message->getTo(); - $cc = $message->getCc(); - $bcc = $message->getBcc(); - - if (!empty($cc)) - { - $message->setCc(array()); - } - if (!empty($bcc)) - { - $message->setBcc(array()); - } - - //Use an iterator if set - if (isset($it)) - { - while ($it->hasNext()) - { - $message->setTo($it->nextRecipient()); - $sent += $this->send($message, $failedRecipients); - } - } - else - { - foreach ($to as $address => $name) - { - $message->setTo(array($address => $name)); - $sent += $this->send($message, $failedRecipients); - } - } - - $message->setTo($to); - - if (!empty($cc)) - { - $message->setCc($cc); - } - if (!empty($bcc)) - { - $message->setBcc($bcc); - } - - return $sent; - } - - /** - * Register a plugin using a known unique key (e.g. myPlugin). - * - * @param Swift_Events_EventListener $plugin - * @param string $key - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - $this->_transport->registerPlugin($plugin); - } - - /** - * The Transport used to send messages. - * @return Swift_Transport - */ - public function getTransport() - { - return $this->_transport; - } -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php b/h-source/External/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php deleted file mode 100755 index 65d60c1..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mailer/ArrayRecipientIterator.php +++ /dev/null @@ -1,59 +0,0 @@ -_recipients = $recipients; - } - - /** - * Returns true only if there are more recipients to send to. - * @return boolean - */ - public function hasNext() - { - return !empty($this->_recipients); - } - - /** - * Returns an array where the keys are the addresses of recipients and the - * values are the names. - * e.g. ('foo@bar' => 'Foo') or ('foo@bar' => NULL) - * @return array - */ - public function nextRecipient() - { - return array_splice($this->_recipients, 0, 1); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php b/h-source/External/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php deleted file mode 100755 index 2713841..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mailer/RecipientIterator.php +++ /dev/null @@ -1,34 +0,0 @@ - 'Foo') or ('foo@bar' => NULL) - * @return array - */ - public function nextRecipient(); - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Message.php b/h-source/External/swiftmailer/lib/classes/Swift/Message.php deleted file mode 100755 index e8183ea..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Message.php +++ /dev/null @@ -1,82 +0,0 @@ -createDependenciesFor('mime.message') - ); - - if (!isset($charset)) - { - $charset = Swift_DependencyContainer::getInstance() - ->lookup('properties.charset'); - } - $this->setSubject($subject); - $this->setBody($body); - $this->setCharset($charset); - if ($contentType) - { - $this->setContentType($contentType); - } - } - - /** - * Create a new Message. - * @param string $subject - * @param string $body - * @param string $contentType - * @param string $charset - * @return Swift_Mime_Message - */ - public static function newInstance($subject = null, $body = null, - $contentType = null, $charset = null) - { - return new self($subject, $body, $contentType, $charset); - } - - /** - * Add a MimePart to this Message. - * @param string|Swift_OutputByteStream $body - * @param string $contentType - * @param string $charset - */ - public function addPart($body, $contentType = null, $charset = null) - { - return $this->attach(Swift_MimePart::newInstance( - $body, $contentType, $charset - )); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Attachment.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Attachment.php deleted file mode 100755 index 25ef68b..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Attachment.php +++ /dev/null @@ -1,143 +0,0 @@ -setDisposition('attachment'); - $this->setContentType('application/octet-stream'); - $this->_mimeTypes = $mimeTypes; - } - - /** - * Get the nesting level used for this attachment. - * Always returns {@link LEVEL_MIXED}. - * @return int - */ - public function getNestingLevel() - { - return self::LEVEL_MIXED; - } - - /** - * Get the Content-Disposition of this attachment. - * By default attachments have a disposition of "attachment". - * @return string - */ - public function getDisposition() - { - return $this->_getHeaderFieldModel('Content-Disposition'); - } - - /** - * Set the Content-Disposition of this attachment. - * @param string $disposition - */ - public function setDisposition($disposition) - { - if (!$this->_setHeaderFieldModel('Content-Disposition', $disposition)) - { - $this->getHeaders()->addParameterizedHeader( - 'Content-Disposition', $disposition - ); - } - return $this; - } - - /** - * Get the filename of this attachment when downloaded. - * @return string - */ - public function getFilename() - { - return $this->_getHeaderParameter('Content-Disposition', 'filename'); - } - - /** - * Set the filename of this attachment. - * @param string $filename - */ - public function setFilename($filename) - { - $this->_setHeaderParameter('Content-Disposition', 'filename', $filename); - $this->_setHeaderParameter('Content-Type', 'name', $filename); - return $this; - } - - /** - * Get the file size of this attachment. - * @return int - */ - public function getSize() - { - return $this->_getHeaderParameter('Content-Disposition', 'size'); - } - - /** - * Set the file size of this attachment. - * @param int $size - */ - public function setSize($size) - { - $this->_setHeaderParameter('Content-Disposition', 'size', $size); - return $this; - } - - /** - * Set the file that this attachment is for. - * @param Swift_FileStream $file - * @param string $contentType optional - */ - public function setFile(Swift_FileStream $file, $contentType = null) - { - $this->setFilename(basename($file->getPath())); - $this->setBody($file, $contentType); - if (!isset($contentType)) - { - $extension = strtolower(substr( - $file->getPath(), strrpos($file->getPath(), '.') + 1 - )); - - if (array_key_exists($extension, $this->_mimeTypes)) - { - $this->setContentType($this->_mimeTypes[$extension]); - } - } - return $this; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php deleted file mode 100755 index c26009f..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/CharsetObserver.php +++ /dev/null @@ -1,26 +0,0 @@ -= $maxLineLength || 76 < $maxLineLength) - { - $maxLineLength = 76; - } - - $remainder = 0; - - while (false !== $bytes = $os->read(8190)) - { - $encoded = base64_encode($bytes); - $encodedTransformed = ''; - $thisMaxLineLength = $maxLineLength - $remainder - $firstLineOffset; - - while ($thisMaxLineLength < strlen($encoded)) - { - $encodedTransformed .= substr($encoded, 0, $thisMaxLineLength) . "\r\n"; - $firstLineOffset = 0; - $encoded = substr($encoded, $thisMaxLineLength); - $thisMaxLineLength = $maxLineLength; - $remainder = 0; - } - - if (0 < $remainingLength = strlen($encoded)) - { - $remainder += $remainingLength; - $encodedTransformed .= $encoded; - $encoded = null; - } - - $is->write($encodedTransformed); - } - } - - /** - * Get the name of this encoding scheme. - * Returns the string 'base64'. - * @return string - */ - public function getName() - { - return 'base64'; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php deleted file mode 100755 index 4a725d8..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/PlainContentEncoder.php +++ /dev/null @@ -1,175 +0,0 @@ -_name = $name; - $this->_canonical = $canonical; - } - - /** - * Encode a given string to produce an encoded string. - * @param string $string - * @param int $firstLineOffset, ignored - * @param int $maxLineLength - 0 means no wrapping will occur - * @return string - */ - public function encodeString($string, $firstLineOffset = 0, - $maxLineLength = 0) - { - if ($this->_canonical) - { - $string = $this->_canonicalize($string); - } - return $this->_safeWordWrap($string, $maxLineLength, "\r\n"); - } - - /** - * Encode stream $in to stream $out. - * @param Swift_OutputByteStream $in - * @param Swift_InputByteStream $out - * @param int $firstLineOffset, ignored - * @param int $maxLineLength, optional, 0 means no wrapping will occur - */ - public function encodeByteStream( - Swift_OutputByteStream $os, Swift_InputByteStream $is, $firstLineOffset = 0, - $maxLineLength = 0) - { - $leftOver = ''; - while (false !== $bytes = $os->read(8192)) - { - $toencode = $leftOver . $bytes; - if ($this->_canonical) - { - $toencode = $this->_canonicalize($toencode); - } - $wrapped = $this->_safeWordWrap($toencode, $maxLineLength, "\r\n"); - $lastLinePos = strrpos($wrapped, "\r\n"); - $leftOver = substr($wrapped, $lastLinePos); - $wrapped = substr($wrapped, 0, $lastLinePos); - - $is->write($wrapped); - } - if (strlen($leftOver)) - { - $is->write($leftOver); - } - } - - /** - * Get the name of this encoding scheme. - * @return string - */ - public function getName() - { - return $this->_name; - } - - /** - * Not used. - */ - public function charsetChanged($charset) - { - } - - // -- Private methods - - /** - * A safer (but weaker) wordwrap for unicode. - * @param string $string - * @param int $length - * @param string $le - * @return string - * @access private - */ - private function _safeWordwrap($string, $length = 75, $le = "\r\n") - { - if (0 >= $length) - { - return $string; - } - - $originalLines = explode($le, $string); - - $lines = array(); - $lineCount = 0; - - foreach ($originalLines as $originalLine) - { - $lines[] = ''; - $currentLine =& $lines[$lineCount++]; - - //$chunks = preg_split('/(?<=[\ \t,\.!\?\-&\+\/])/', $originalLine); - $chunks = preg_split('/(?<=\s)/', $originalLine); - - foreach ($chunks as $chunk) - { - if (0 != strlen($currentLine) - && strlen($currentLine . $chunk) > $length) - { - $lines[] = ''; - $currentLine =& $lines[$lineCount++]; - } - $currentLine .= $chunk; - } - } - - return implode("\r\n", $lines); - } - - /** - * Canonicalize string input (fix CRLF). - * @param string $string - * @return string - * @access private - */ - private function _canonicalize($string) - { - return str_replace( - array("\r\n", "\r", "\n"), - array("\n", "\n", "\r\n"), - $string - ); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php deleted file mode 100755 index 3beeb63..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/ContentEncoder/QpContentEncoder.php +++ /dev/null @@ -1,117 +0,0 @@ - 76 || $maxLineLength <= 0) - { - $maxLineLength = 76; - } - - $thisLineLength = $maxLineLength - $firstLineOffset; - - $this->_charStream->flushContents(); - $this->_charStream->importByteStream($os); - - $currentLine = ''; - $prepend = ''; - $size=$lineLen=0; - - while (false !== $bytes = $this->_nextSequence()) - { - //If we're filtering the input - if (isset($this->_filter)) - { - //If we can't filter because we need more bytes - while ($this->_filter->shouldBuffer($bytes)) - { - //Then collect bytes into the buffer - if (false === $moreBytes = $this->_nextSequence(1)) - { - break; - } - - foreach ($moreBytes as $b) - { - $bytes[] = $b; - } - } - //And filter them - $bytes = $this->_filter->filter($bytes); - } - - $enc = $this->_encodeByteSequence($bytes, $size); - if ($currentLine && $lineLen+$size >= $thisLineLength) - { - $is->write($prepend . $this->_standardize($currentLine)); - $currentLine = ''; - $prepend = "=\r\n"; - $thisLineLength = $maxLineLength; - $lineLen=0; - } - $lineLen+=$size; - $currentLine .= $enc; - } - if (strlen($currentLine)) - { - $is->write($prepend . $this->_standardize($currentLine)); - } - } - - /** - * Get the name of this encoding scheme. - * Returns the string 'quoted-printable'. - * @return string - */ - public function getName() - { - return 'quoted-printable'; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php deleted file mode 100755 index 983b78d..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/EmbeddedFile.php +++ /dev/null @@ -1,51 +0,0 @@ -setDisposition('inline'); - $this->setId($this->getId()); - } - - /** - * Get the nesting level of this EmbeddedFile. - * Returns {@link LEVEL_RELATED}. - * @return int - */ - public function getNestingLevel() - { - return self::LEVEL_RELATED; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php deleted file mode 100755 index 50472db..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/EncodingObserver.php +++ /dev/null @@ -1,28 +0,0 @@ -clearCachedValueIf($charset != $this->_charset); - $this->_charset = $charset; - if (isset($this->_encoder)) - { - $this->_encoder->charsetChanged($charset); - } - } - - /** - * Get the character set used in this Header. - * @return string - */ - public function getCharset() - { - return $this->_charset; - } - - /** - * Set the language used in this Header. - * For example, for US English, 'en-us'. - * This can be unspecified. - * @param string $lang - */ - public function setLanguage($lang) - { - $this->clearCachedValueIf($this->_lang != $lang); - $this->_lang = $lang; - } - - /** - * Get the language used in this Header. - * @return string - */ - public function getLanguage() - { - return $this->_lang; - } - - /** - * Set the encoder used for encoding the header. - * @param Swift_Mime_HeaderEncoder $encoder - */ - public function setEncoder(Swift_Mime_HeaderEncoder $encoder) - { - $this->_encoder = $encoder; - $this->setCachedValue(null); - } - - /** - * Get the encoder used for encoding this Header. - * @return Swift_Mime_HeaderEncoder - */ - public function getEncoder() - { - return $this->_encoder; - } - - /** - * Get the name of this header (e.g. charset). - * @return string - */ - public function getFieldName() - { - return $this->_name; - } - - /** - * Set the maximum length of lines in the header (excluding EOL). - * @param int $lineLength - */ - public function setMaxLineLength($lineLength) - { - $this->clearCachedValueIf($this->_lineLength != $lineLength); - $this->_lineLength = $lineLength; - } - - /** - * Get the maximum permitted length of lines in this Header. - * @return int - */ - public function getMaxLineLength() - { - return $this->_lineLength; - } - - /** - * Get this Header rendered as a RFC 2822 compliant string. - * @return string - * @throws Swift_RfcComplianceException - */ - public function toString() - { - return $this->_tokensToString($this->toTokens()); - } - - /** - * Returns a string representation of this object. - * - * @return string - * - * @see toString() - */ - public function __toString() - { - return $this->toString(); - } - - // -- Points of extension - - /** - * Set the name of this Header field. - * @param string $name - * @access protected - */ - protected function setFieldName($name) - { - $this->_name = $name; - } - - /** - * Initialize some RFC 2822 (and friends) ABNF grammar definitions. - * @access protected - */ - protected function initializeGrammar() - { - $this->_specials = array( - '(', ')', '<', '>', '[', ']', - ':', ';', '@', ',', '.', '"' - ); - - /*** Refer to RFC 2822 for ABNF grammar ***/ - - //All basic building blocks - $this->_grammar['NO-WS-CTL'] = '[\x01-\x08\x0B\x0C\x0E-\x19\x7F]'; - $this->_grammar['WSP'] = '[ \t]'; - $this->_grammar['CRLF'] = '(?:\r\n)'; - $this->_grammar['FWS'] = '(?:(?:' . $this->_grammar['WSP'] . '*' . - $this->_grammar['CRLF'] . ')?' . $this->_grammar['WSP'] . ')'; - $this->_grammar['text'] = '[\x00-\x08\x0B\x0C\x0E-\x7F]'; - $this->_grammar['quoted-pair'] = '(?:\\\\' . $this->_grammar['text'] . ')'; - $this->_grammar['ctext'] = '(?:' . $this->_grammar['NO-WS-CTL'] . - '|[\x21-\x27\x2A-\x5B\x5D-\x7E])'; - //Uses recursive PCRE (?1) -- could be a weak point?? - $this->_grammar['ccontent'] = '(?:' . $this->_grammar['ctext'] . '|' . - $this->_grammar['quoted-pair'] . '|(?1))'; - $this->_grammar['comment'] = '(\((?:' . $this->_grammar['FWS'] . '|' . - $this->_grammar['ccontent']. ')*' . $this->_grammar['FWS'] . '?\))'; - $this->_grammar['CFWS'] = '(?:(?:' . $this->_grammar['FWS'] . '?' . - $this->_grammar['comment'] . ')*(?:(?:' . $this->_grammar['FWS'] . '?' . - $this->_grammar['comment'] . ')|' . $this->_grammar['FWS'] . '))'; - $this->_grammar['qtext'] = '(?:' . $this->_grammar['NO-WS-CTL'] . - '|[\x21\x23-\x5B\x5D-\x7E])'; - $this->_grammar['qcontent'] = '(?:' . $this->_grammar['qtext'] . '|' . - $this->_grammar['quoted-pair'] . ')'; - $this->_grammar['quoted-string'] = '(?:' . $this->_grammar['CFWS'] . '?"' . - '(' . $this->_grammar['FWS'] . '?' . $this->_grammar['qcontent'] . ')*' . - $this->_grammar['FWS'] . '?"' . $this->_grammar['CFWS'] . '?)'; - $this->_grammar['atext'] = '[a-zA-Z0-9!#\$%&\'\*\+\-\/=\?\^_`\{\}\|~]'; - $this->_grammar['atom'] = '(?:' . $this->_grammar['CFWS'] . '?' . - $this->_grammar['atext'] . '+' . $this->_grammar['CFWS'] . '?)'; - $this->_grammar['dot-atom-text'] = '(?:' . $this->_grammar['atext'] . '+' . - '(\.' . $this->_grammar['atext'] . '+)*)'; - $this->_grammar['dot-atom'] = '(?:' . $this->_grammar['CFWS'] . '?' . - $this->_grammar['dot-atom-text'] . '+' . $this->_grammar['CFWS'] . '?)'; - $this->_grammar['word'] = '(?:' . $this->_grammar['atom'] . '|' . - $this->_grammar['quoted-string'] . ')'; - $this->_grammar['phrase'] = '(?:' . $this->_grammar['word'] . '+?)'; - $this->_grammar['no-fold-quote'] = '(?:"(?:' . $this->_grammar['qtext'] . - '|' . $this->_grammar['quoted-pair'] . ')*")'; - $this->_grammar['dtext'] = '(?:' . $this->_grammar['NO-WS-CTL'] . - '|[\x21-\x5A\x5E-\x7E])'; - $this->_grammar['no-fold-literal'] = '(?:\[(?:' . $this->_grammar['dtext'] . - '|' . $this->_grammar['quoted-pair'] . ')*\])'; - - //Message IDs - $this->_grammar['id-left'] = '(?:' . $this->_grammar['dot-atom-text'] . '|' . - $this->_grammar['no-fold-quote'] . ')'; - $this->_grammar['id-right'] = '(?:' . $this->_grammar['dot-atom-text'] . '|' . - $this->_grammar['no-fold-literal'] . ')'; - - //Addresses, mailboxes and paths - $this->_grammar['local-part'] = '(?:' . $this->_grammar['dot-atom'] . '|' . - $this->_grammar['quoted-string'] . ')'; - $this->_grammar['dcontent'] = '(?:' . $this->_grammar['dtext'] . '|' . - $this->_grammar['quoted-pair'] . ')'; - $this->_grammar['domain-literal'] = '(?:' . $this->_grammar['CFWS'] . '?\[(' . - $this->_grammar['FWS'] . '?' . $this->_grammar['dcontent'] . ')*?' . - $this->_grammar['FWS'] . '?\]' . $this->_grammar['CFWS'] . '?)'; - $this->_grammar['domain'] = '(?:' . $this->_grammar['dot-atom'] . '|' . - $this->_grammar['domain-literal'] . ')'; - $this->_grammar['addr-spec'] = '(?:' . $this->_grammar['local-part'] . '@' . - $this->_grammar['domain'] . ')'; - } - - /** - * Get the grammar defined for $name token. - * @param string $name execatly as written in the RFC - * @return string - */ - protected function getGrammar($name) - { - if (array_key_exists($name, $this->_grammar)) - { - return $this->_grammar[$name]; - } - else - { - throw new Swift_RfcComplianceException( - "No such grammar '" . $name . "' defined." - ); - } - } - - /** - * Escape special characters in a string (convert to quoted-pairs). - * @param string $token - * @param string[] $include additonal chars to escape - * @param string[] $exclude chars from escaping - * @return string - */ - protected function escapeSpecials($token, $include = array(), - $exclude = array()) - { - foreach ( - array_merge(array('\\'), array_diff($this->_specials, $exclude), $include) as $char) - { - $token = str_replace($char, '\\' . $char, $token); - } - return $token; - } - - /** - * Produces a compliant, formatted RFC 2822 'phrase' based on the string given. - * @param Swift_Mime_Header $header - * @param string $string as displayed - * @param string $charset of the text - * @param Swift_Mime_HeaderEncoder $encoder - * @param boolean $shorten the first line to make remove for header name - * @return string - */ - protected function createPhrase(Swift_Mime_Header $header, $string, $charset, - Swift_Mime_HeaderEncoder $encoder = null, $shorten = false) - { - //Treat token as exactly what was given - $phraseStr = $string; - //If it's not valid - if (!preg_match('/^' . $this->_grammar['phrase'] . '$/D', $phraseStr)) - { - // .. but it is just ascii text, try escaping some characters - // and make it a quoted-string - if (preg_match('/^' . $this->_grammar['text'] . '*$/D', $phraseStr)) - { - $phraseStr = $this->escapeSpecials( - $phraseStr, array('"'), $this->_specials - ); - $phraseStr = '"' . $phraseStr . '"'; - } - else // ... otherwise it needs encoding - { - //Determine space remaining on line if first line - if ($shorten) - { - $usedLength = strlen($header->getFieldName() . ': '); - } - else - { - $usedLength = 0; - } - $phraseStr = $this->encodeWords($header, $string, $usedLength); - } - } - - return $phraseStr; - } - - /** - * Encode needed word tokens within a string of input. - * @param string $input - * @param string $usedLength, optional - * @return string - */ - protected function encodeWords(Swift_Mime_Header $header, $input, - $usedLength = -1) - { - $value = ''; - - $tokens = $this->getEncodableWordTokens($input); - - foreach ($tokens as $token) - { - //See RFC 2822, Sect 2.2 (really 2.2 ??) - if ($this->tokenNeedsEncoding($token)) - { - //Don't encode starting WSP - $firstChar = substr($token, 0, 1); - switch($firstChar) - { - case ' ': - case "\t": - $value .= $firstChar; - $token = substr($token, 1); - } - - if (-1 == $usedLength) - { - $usedLength = strlen($header->getFieldName() . ': ') + strlen($value); - } - $value .= $this->getTokenAsEncodedWord($token, $usedLength); - - $header->setMaxLineLength(76); //Forefully override - } - else - { - $value .= $token; - } - } - - return $value; - } - - /** - * Test if a token needs to be encoded or not. - * @param string $token - * @return boolean - */ - protected function tokenNeedsEncoding($token) - { - return preg_match('~[\x00-\x08\x10-\x19\x7F-\xFF\r\n]~', $token); - } - - /** - * Splits a string into tokens in blocks of words which can be encoded quickly. - * @param string $string - * @return string[] - */ - protected function getEncodableWordTokens($string) - { - $tokens = array(); - - $encodedToken = ''; - //Split at all whitespace boundaries - foreach (preg_split('~(?=[\t ])~', $string) as $token) - { - if ($this->tokenNeedsEncoding($token)) - { - $encodedToken .= $token; - } - else - { - if (strlen($encodedToken) > 0) - { - $tokens[] = $encodedToken; - $encodedToken = ''; - } - $tokens[] = $token; - } - } - if (strlen($encodedToken)) - { - $tokens[] = $encodedToken; - } - - return $tokens; - } - - /** - * Get a token as an encoded word for safe insertion into headers. - * @param string $token to encode - * @param int $firstLineOffset, optional - * @return string - */ - protected function getTokenAsEncodedWord($token, $firstLineOffset = 0) - { - //Adjust $firstLineOffset to account for space needed for syntax - $charsetDecl = $this->_charset; - if (isset($this->_lang)) - { - $charsetDecl .= '*' . $this->_lang; - } - $encodingWrapperLength = strlen( - '=?' . $charsetDecl . '?' . $this->_encoder->getName() . '??=' - ); - - if ($firstLineOffset >= 75) //Does this logic need to be here? - { - $firstLineOffset = 0; - } - - $encodedTextLines = explode("\r\n", - $this->_encoder->encodeString( - $token, $firstLineOffset, 75 - $encodingWrapperLength - ) - ); - - foreach ($encodedTextLines as $lineNum => $line) - { - $encodedTextLines[$lineNum] = '=?' . $charsetDecl . - '?' . $this->_encoder->getName() . - '?' . $line . '?='; - } - - return implode("\r\n ", $encodedTextLines); - } - - /** - * Generates tokens from the given string which include CRLF as individual tokens. - * @param string $token - * @return string[] - * @access protected - */ - protected function generateTokenLines($token) - { - return preg_split('~(\r\n)~', $token, -1, PREG_SPLIT_DELIM_CAPTURE); - } - - /** - * Set a value into the cache. - * @param string $value - * @access protected - */ - protected function setCachedValue($value) - { - $this->_cachedValue = $value; - } - - /** - * Get the value in the cache. - * @return string - * @access protected - */ - protected function getCachedValue() - { - return $this->_cachedValue; - } - - /** - * Clear the cached value if $condition is met. - * @param boolean $condition - * @access protected - */ - protected function clearCachedValueIf($condition) - { - if ($condition) - { - $this->setCachedValue(null); - } - } - - // -- Private methods - - /** - * Generate a list of all tokens in the final header. - * @param string $string input, optional - * @return string[] - * @access private - */ - protected function toTokens($string = null) - { - if (is_null($string)) - { - $string = $this->getFieldBody(); - } - - $tokens = array(); - - //Generate atoms; split at all invisible boundaries followed by WSP - foreach (preg_split('~(?=[ \t])~', $string) as $token) - { - $tokens = array_merge($tokens, $this->generateTokenLines($token)); - } - - return $tokens; - } - - /** - * Takes an array of tokens which appear in the header and turns them into - * an RFC 2822 compliant string, adding FWSP where needed. - * @param string[] $tokens - * @return string - * @access private - */ - private function _tokensToString(array $tokens) - { - $lineCount = 0; - $headerLines = array(); - $headerLines[] = $this->_name . ': '; - $currentLine =& $headerLines[$lineCount++]; - - //Build all tokens back into compliant header - foreach ($tokens as $i => $token) - { - //Line longer than specified maximum or token was just a new line - if (("\r\n" == $token) || - ($i > 0 && strlen($currentLine . $token) > $this->_lineLength) - && 0 < strlen($currentLine)) - { - $headerLines[] = ''; - $currentLine =& $headerLines[$lineCount++]; - } - - //Append token to the line - if ("\r\n" != $token) - { - $currentLine .= $token; - } - } - - //Implode with FWS (RFC 2822, 2.2.3) - return implode("\r\n", $headerLines) . "\r\n"; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php deleted file mode 100755 index 598c0c5..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/DateHeader.php +++ /dev/null @@ -1,118 +0,0 @@ - - * - * - * @param string $name of Header - */ - public function __construct($name) - { - $this->setFieldName($name); - } - - /** - * Get the type of Header that this instance represents. - * @return int - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - */ - public function getFieldType() - { - return self::TYPE_DATE; - } - - /** - * Set the model for the field body. - * This method takes a UNIX timestamp. - * @param int $model - */ - public function setFieldBodyModel($model) - { - $this->setTimestamp($model); - } - - /** - * Get the model for the field body. - * This method returns a UNIX timestamp. - * @return mixed - */ - public function getFieldBodyModel() - { - return $this->getTimestamp(); - } - - /** - * Get the UNIX timestamp of the Date in this Header. - * @return int - */ - public function getTimestamp() - { - return $this->_timestamp; - } - - /** - * Set the UNIX timestamp of the Date in this Header. - * @param int $timestamp - */ - public function setTimestamp($timestamp) - { - if (!is_null($timestamp)) - { - $timestamp = (int) $timestamp; - } - $this->clearCachedValueIf($this->_timestamp != $timestamp); - $this->_timestamp = $timestamp; - } - - /** - * Get the string value of the body in this Header. - * This is not necessarily RFC 2822 compliant since folding white space will - * not be added at this stage (see {@link toString()} for that). - * @return string - * @see toString() - */ - public function getFieldBody() - { - if (!$this->getCachedValue()) - { - if (isset($this->_timestamp)) - { - $this->setCachedValue(date('r', $this->_timestamp)); - } - } - return $this->getCachedValue(); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php deleted file mode 100755 index 55ff737..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/IdentificationHeader.php +++ /dev/null @@ -1,161 +0,0 @@ -setFieldName($name); - $this->initializeGrammar(); - } - - /** - * Get the type of Header that this instance represents. - * @return int - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - */ - public function getFieldType() - { - return self::TYPE_ID; - } - - /** - * Set the model for the field body. - * This method takes a string ID, or an array of IDs - * @param mixed $model - * @throws Swift_RfcComplianceException - */ - public function setFieldBodyModel($model) - { - $this->setId($model); - } - - /** - * Get the model for the field body. - * This method returns an array of IDs - * @return array - */ - public function getFieldBodyModel() - { - return $this->getIds(); - } - - /** - * Set the ID used in the value of this header. - * @param string $id - * @throws Swift_RfcComplianceException - */ - public function setId($id) - { - return $this->setIds(array($id)); - } - - /** - * Get the ID used in the value of this Header. - * If multiple IDs are set only the first is returned. - * @return string - */ - public function getId() - { - if (count($this->_ids) > 0) - { - return $this->_ids[0]; - } - } - - /** - * Set a collection of IDs to use in the value of this Header. - * @param string[] $ids - * @throws Swift_RfcComplianceException - */ - public function setIds(array $ids) - { - $actualIds = array(); - - foreach ($ids as $k => $id) - { - if (preg_match( - '/^' . $this->getGrammar('id-left') . '@' . - $this->getGrammar('id-right') . '$/D', - $id - )) - { - $actualIds[] = $id; - } - else - { - throw new Swift_RfcComplianceException( - 'Invalid ID given <' . $id . '>' - ); - } - } - - $this->clearCachedValueIf($this->_ids != $actualIds); - $this->_ids = $actualIds; - } - - /** - * Get the list of IDs used in this Header. - * @return string[] - */ - public function getIds() - { - return $this->_ids; - } - - /** - * Get the string value of the body in this Header. - * This is not necessarily RFC 2822 compliant since folding white space will - * not be added at this stage (see {@link toString()} for that). - * @return string - * @see toString() - * @throws Swift_RfcComplianceException - */ - public function getFieldBody() - { - if (!$this->getCachedValue()) - { - $angleAddrs = array(); - - foreach ($this->_ids as $id) - { - $angleAddrs[] = '<' . $id . '>'; - } - - $this->setCachedValue(implode(' ', $angleAddrs)); - } - return $this->getCachedValue(); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php deleted file mode 100755 index 77d3bba..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/MailboxHeader.php +++ /dev/null @@ -1,316 +0,0 @@ -setFieldName($name); - $this->setEncoder($encoder); - $this->initializeGrammar(); - } - - /** - * Get the type of Header that this instance represents. - * @return int - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - */ - public function getFieldType() - { - return self::TYPE_MAILBOX; - } - - /** - * Set the model for the field body. - * This method takes a string, or an array of addresses. - * @param mixed $model - * @throws Swift_RfcComplianceException - */ - public function setFieldBodyModel($model) - { - $this->setNameAddresses($model); - } - - /** - * Get the model for the field body. - * This method returns an associative array like {@link getNameAddresses()} - * @return array - * @throws Swift_RfcComplianceException - */ - public function getFieldBodyModel() - { - return $this->getNameAddresses(); - } - - /** - * Set a list of mailboxes to be shown in this Header. - * The mailboxes can be a simple array of addresses, or an array of - * key=>value pairs where (email => personalName). - * Example: - * - * setNameAddresses(array( - * 'chris@swiftmailer.org' => 'Chris Corbyn', - * 'mark@swiftmailer.org' //No associated personal name - * )); - * ?> - * - * @param string|string[] $mailboxes - * @throws Swift_RfcComplianceException - * @see __construct() - * @see setAddresses() - * @see setValue() - */ - public function setNameAddresses($mailboxes) - { - $this->_mailboxes = $this->normalizeMailboxes((array) $mailboxes); - $this->setCachedValue(null); //Clear any cached value - } - - /** - * Get the full mailbox list of this Header as an array of valid RFC 2822 strings. - * Example: - * - * 'Chris Corbyn', - * 'mark@swiftmailer.org' => 'Mark Corbyn') - * ); - * print_r($header->getNameAddressStrings()); - * // array ( - * // 0 => Chris Corbyn , - * // 1 => Mark Corbyn - * // ) - * ?> - * - * @return string[] - * @throws Swift_RfcComplianceException - * @see getNameAddresses() - * @see toString() - */ - public function getNameAddressStrings() - { - return $this->_createNameAddressStrings($this->getNameAddresses()); - } - - /** - * Get all mailboxes in this Header as key=>value pairs. - * The key is the address and the value is the name (or null if none set). - * Example: - * - * 'Chris Corbyn', - * 'mark@swiftmailer.org' => 'Mark Corbyn') - * ); - * print_r($header->getNameAddresses()); - * // array ( - * // chris@swiftmailer.org => Chris Corbyn, - * // mark@swiftmailer.org => Mark Corbyn - * // ) - * ?> - * - * @return string[] - * @see getAddresses() - * @see getNameAddressStrings() - */ - public function getNameAddresses() - { - return $this->_mailboxes; - } - - /** - * Makes this Header represent a list of plain email addresses with no names. - * Example: - * - * setAddresses( - * array('one@domain.tld', 'two@domain.tld', 'three@domain.tld') - * ); - * ?> - * - * @param string[] $addresses - * @throws Swift_RfcComplianceException - * @see setNameAddresses() - * @see setValue() - */ - public function setAddresses($addresses) - { - return $this->setNameAddresses(array_values((array) $addresses)); - } - - /** - * Get all email addresses in this Header. - * @return string[] - * @see getNameAddresses() - */ - public function getAddresses() - { - return array_keys($this->_mailboxes); - } - - /** - * Remove one or more addresses from this Header. - * @param string|string[] $addresses - */ - public function removeAddresses($addresses) - { - $this->setCachedValue(null); - foreach ((array) $addresses as $address) - { - unset($this->_mailboxes[$address]); - } - } - - /** - * Get the string value of the body in this Header. - * This is not necessarily RFC 2822 compliant since folding white space will - * not be added at this stage (see {@link toString()} for that). - * @return string - * @throws Swift_RfcComplianceException - * @see toString() - */ - public function getFieldBody() - { - //Compute the string value of the header only if needed - if (is_null($this->getCachedValue())) - { - $this->setCachedValue($this->createMailboxListString($this->_mailboxes)); - } - return $this->getCachedValue(); - } - - // -- Points of extension - - /** - * Normalizes a user-input list of mailboxes into consistent key=>value pairs. - * @param string[] $mailboxes - * @return string[] - * @access protected - */ - protected function normalizeMailboxes(array $mailboxes) - { - $actualMailboxes = array(); - - foreach ($mailboxes as $key => $value) - { - if (is_string($key)) //key is email addr - { - $address = $key; - $name = $value; - } - else - { - $address = $value; - $name = null; - } - $this->_assertValidAddress($address); - $actualMailboxes[$address] = $name; - } - - return $actualMailboxes; - } - - /** - * Produces a compliant, formatted display-name based on the string given. - * @param string $displayName as displayed - * @param boolean $shorten the first line to make remove for header name - * @return string - * @access protected - */ - protected function createDisplayNameString($displayName, $shorten = false) - { - return $this->createPhrase($this, $displayName, - $this->getCharset(), $this->getEncoder(), $shorten - ); - } - - /** - * Creates a string form of all the mailboxes in the passed array. - * @param string[] $mailboxes - * @return string - * @throws Swift_RfcComplianceException - * @access protected - */ - protected function createMailboxListString(array $mailboxes) - { - return implode(', ', $this->_createNameAddressStrings($mailboxes)); - } - - // -- Private methods - - /** - * Return an array of strings conforming the the name-addr spec of RFC 2822. - * @param string[] $mailboxes - * @return string[] - * @access private - */ - private function _createNameAddressStrings(array $mailboxes) - { - $strings = array(); - - foreach ($mailboxes as $email => $name) - { - $mailboxStr = $email; - if (!is_null($name)) - { - $nameStr = $this->createDisplayNameString($name, empty($strings)); - $mailboxStr = $nameStr . ' <' . $mailboxStr . '>'; - } - $strings[] = $mailboxStr; - } - - return $strings; - } - - /** - * Throws an Exception if the address passed does not comply with RFC 2822. - * @param string $address - * @throws Exception If invalid. - * @access protected - */ - private function _assertValidAddress($address) - { - if (!preg_match('/^' . $this->getGrammar('addr-spec') . '$/D', - $address)) - { - throw new Swift_RfcComplianceException( - 'Address in mailbox given [' . $address . - '] does not comply with RFC 2822, 3.6.2.' - ); - } - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php deleted file mode 100755 index 974b44e..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/ParameterizedHeader.php +++ /dev/null @@ -1,274 +0,0 @@ -setFieldName($name); - $this->setEncoder($encoder); - $this->_paramEncoder = $paramEncoder; - $this->initializeGrammar(); - $this->_tokenRe = '(?:[\x21\x23-\x27\x2A\x2B\x2D\x2E\x30-\x39\x41-\x5A\x5E-\x7E]+)'; - } - - /** - * Get the type of Header that this instance represents. - * @return int - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - */ - public function getFieldType() - { - return self::TYPE_PARAMETERIZED; - } - - /** - * Set the character set used in this Header. - * @param string $charset - */ - public function setCharset($charset) - { - parent::setCharset($charset); - if (isset($this->_paramEncoder)) - { - $this->_paramEncoder->charsetChanged($charset); - } - } - - /** - * Set the value of $parameter. - * @param string $parameter - * @param string $value - */ - public function setParameter($parameter, $value) - { - $this->setParameters(array_merge($this->getParameters(), array($parameter => $value))); - } - - /** - * Get the value of $parameter. - * @return string - */ - public function getParameter($parameter) - { - $params = $this->getParameters(); - return array_key_exists($parameter, $params) - ? $params[$parameter] - : null; - } - - /** - * Set an associative array of parameter names mapped to values. - * @param string[] - */ - public function setParameters(array $parameters) - { - $this->clearCachedValueIf($this->_params != $parameters); - $this->_params = $parameters; - } - - /** - * Returns an associative array of parameter names mapped to values. - * @return string[] - */ - public function getParameters() - { - return $this->_params; - } - - /** - * Get the value of this header prepared for rendering. - * @return string - */ - public function getFieldBody() //TODO: Check caching here - { - $body = parent::getFieldBody(); - foreach ($this->_params as $name => $value) - { - if (!is_null($value)) - { - //Add the parameter - $body .= '; ' . $this->_createParameter($name, $value); - } - } - return $body; - } - - // -- Protected methods - - /** - * Generate a list of all tokens in the final header. - * This doesn't need to be overridden in theory, but it is for implementation - * reasons to prevent potential breakage of attributes. - * @return string[] - * @access protected - */ - protected function toTokens($string = null) - { - $tokens = parent::toTokens(parent::getFieldBody()); - - //Try creating any parameters - foreach ($this->_params as $name => $value) - { - if (!is_null($value)) - { - //Add the semi-colon separator - $tokens[count($tokens)-1] .= ';'; - $tokens = array_merge($tokens, $this->generateTokenLines( - ' ' . $this->_createParameter($name, $value) - )); - } - } - - return $tokens; - } - - // -- Private methods - - /** - * Render a RFC 2047 compliant header parameter from the $name and $value. - * @param string $name - * @param string $value - * @return string - * @access private - */ - private function _createParameter($name, $value) - { - $origValue = $value; - - $encoded = false; - //Allow room for parameter name, indices, "=" and DQUOTEs - $maxValueLength = $this->getMaxLineLength() - strlen($name . '=*N"";') - 1; - $firstLineOffset = 0; - - //If it's not already a valid parameter value... - if (!preg_match('/^' . $this->_tokenRe . '$/D', $value)) - { - //TODO: text, or something else?? - //... and it's not ascii - if (!preg_match('/^' . $this->getGrammar('text') . '*$/D', $value)) - { - $encoded = true; - //Allow space for the indices, charset and language - $maxValueLength = $this->getMaxLineLength() - strlen($name . '*N*="";') - 1; - $firstLineOffset = strlen( - $this->getCharset() . "'" . $this->getLanguage() . "'" - ); - } - } - - //Encode if we need to - if ($encoded || strlen($value) > $maxValueLength) - { - if (isset($this->_paramEncoder)) - { - $value = $this->_paramEncoder->encodeString( - $origValue, $firstLineOffset, $maxValueLength - ); - } - else //We have to go against RFC 2183/2231 in some areas for interoperability - { - $value = $this->getTokenAsEncodedWord($origValue); - $encoded = false; - } - } - - $valueLines = isset($this->_paramEncoder) ? explode("\r\n", $value) : array($value); - - //Need to add indices - if (count($valueLines) > 1) - { - $paramLines = array(); - foreach ($valueLines as $i => $line) - { - $paramLines[] = $name . '*' . $i . - $this->_getEndOfParameterValue($line, $encoded, $i == 0); - } - return implode(";\r\n ", $paramLines); - } - else - { - return $name . $this->_getEndOfParameterValue( - $valueLines[0], $encoded, true - ); - } - } - - /** - * Returns the parameter value from the "=" and beyond. - * @param string $value to append - * @param boolean $encoded - * @param boolean $firstLine - * @return string - * @access private - */ - private function _getEndOfParameterValue($value, $encoded = false, $firstLine = false) - { - if (!preg_match('/^' . $this->_tokenRe . '$/D', $value)) - { - $value = '"' . $value . '"'; - } - $prepend = '='; - if ($encoded) - { - $prepend = '*='; - if ($firstLine) - { - $prepend = '*=' . $this->getCharset() . "'" . $this->getLanguage() . - "'"; - } - } - return $prepend . $value; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php deleted file mode 100755 index 0a8a100..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/PathHeader.php +++ /dev/null @@ -1,126 +0,0 @@ -setFieldName($name); - $this->initializeGrammar(); - } - - /** - * Get the type of Header that this instance represents. - * @return int - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - */ - public function getFieldType() - { - return self::TYPE_PATH; - } - - /** - * Set the model for the field body. - * This method takes a string for an address. - * @param string $model - * @throws Swift_RfcComplianceException - */ - public function setFieldBodyModel($model) - { - $this->setAddress($model); - } - - /** - * Get the model for the field body. - * This method returns a string email address. - * @return mixed - */ - public function getFieldBodyModel() - { - return $this->getAddress(); - } - - /** - * Set the Address which should appear in this Header. - * @param string $address - * @throws Swift_RfcComplianceException - */ - public function setAddress($address) - { - if (is_null($address)) - { - $this->_address = null; - } - elseif ('' == $address - || preg_match('/^' . $this->getGrammar('addr-spec') . '$/D', $address)) - { - $this->_address = $address; - } - else - { - throw new Swift_RfcComplianceException( - 'Address set in PathHeader does not comply with addr-spec of RFC 2822.' - ); - } - $this->setCachedValue(null); - } - - /** - * Get the address which is used in this Header (if any). - * Null is returned if no address is set. - * @return string - */ - public function getAddress() - { - return $this->_address; - } - - /** - * Get the string value of the body in this Header. - * This is not necessarily RFC 2822 compliant since folding white space will - * not be added at this stage (see {@link toString()} for that). - * @return string - * @see toString() - */ - public function getFieldBody() - { - if (!$this->getCachedValue()) - { - if (isset($this->_address)) - { - $this->setCachedValue('<' . $this->_address . '>'); - } - } - return $this->getCachedValue(); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php deleted file mode 100755 index fdcc21e..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Headers/UnstructuredHeader.php +++ /dev/null @@ -1,108 +0,0 @@ -setFieldName($name); - $this->setEncoder($encoder); - } - /** - * Get the type of Header that this instance represents. - * @return int - * @see TYPE_TEXT, TYPE_PARAMETERIZED, TYPE_MAILBOX - * @see TYPE_DATE, TYPE_ID, TYPE_PATH - */ - public function getFieldType() - { - return self::TYPE_TEXT; - } - - /** - * Set the model for the field body. - * This method takes a string for the field value. - * @param string $model - */ - public function setFieldBodyModel($model) - { - $this->setValue($model); - } - - /** - * Get the model for the field body. - * This method returns a string. - * @return string - */ - public function getFieldBodyModel() - { - return $this->getValue(); - } - - /** - * Get the (unencoded) value of this header. - * @return string - */ - public function getValue() - { - return $this->_value; - } - - /** - * Set the (unencoded) value of this header. - * @param string $value - */ - public function setValue($value) - { - $this->clearCachedValueIf($this->_value != $value); - $this->_value = $value; - } - - /** - * Get the value of this header prepared for rendering. - * @return string - */ - public function getFieldBody() - { - if (!$this->getCachedValue()) - { - $this->setCachedValue( - str_replace('\\', '\\\\', $this->encodeWords( - $this, $this->_value, -1, $this->getCharset(), $this->getEncoder() - )) - ); - } - return $this->getCachedValue(); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Message.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/Message.php deleted file mode 100755 index 0496c08..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/Message.php +++ /dev/null @@ -1,230 +0,0 @@ - 'Real Name'). - * - * If the second parameter is provided and the first is a string, then $name - * is associated with the address. - * - * @param mixed $address - * @param string $name optional - */ - public function setSender($address, $name = null); - - /** - * Get the sender address for this message. - * - * This has a higher significance than the From address. - * - * @return string - */ - public function getSender(); - - /** - * Set the From address of this message. - * - * It is permissible for multiple From addresses to be set using an array. - * - * If multiple From addresses are used, you SHOULD set the Sender address and - * according to RFC 2822, MUST set the sender address. - * - * An array can be used if display names are to be provided: i.e. - * array('email@address.com' => 'Real Name'). - * - * If the second parameter is provided and the first is a string, then $name - * is associated with the address. - * - * @param mixed $addresses - * @param string $name optional - */ - public function setFrom($addresses, $name = null); - - /** - * Get the From address(es) of this message. - * - * This method always returns an associative array where the keys are the - * addresses. - * - * @return string[] - */ - public function getFrom(); - - /** - * Set the Reply-To address(es). - * - * Any replies from the receiver will be sent to this address. - * - * It is permissible for multiple reply-to addresses to be set using an array. - * - * This method has the same synopsis as {@link setFrom()} and {@link setTo()}. - * - * If the second parameter is provided and the first is a string, then $name - * is associated with the address. - * - * @param mixed $addresses - * @param string $name optional - */ - public function setReplyTo($addresses, $name = null); - - /** - * Get the Reply-To addresses for this message. - * - * This method always returns an associative array where the keys provide the - * email addresses. - * - * @return string[] - */ - public function getReplyTo(); - - /** - * Set the To address(es). - * - * Recipients set in this field will receive a copy of this message. - * - * This method has the same synopsis as {@link setFrom()} and {@link setCc()}. - * - * If the second parameter is provided and the first is a string, then $name - * is associated with the address. - * - * @param mixed $addresses - * @param string $name optional - */ - public function setTo($addresses, $name = null); - - /** - * Get the To addresses for this message. - * - * This method always returns an associative array, whereby the keys provide - * the actual email addresses. - * - * @return string[] - */ - public function getTo(); - - /** - * Set the Cc address(es). - * - * Recipients set in this field will receive a 'carbon-copy' of this message. - * - * This method has the same synopsis as {@link setFrom()} and {@link setTo()}. - * - * @param mixed $addresses - * @param string $name optional - */ - public function setCc($addresses, $name = null); - - /** - * Get the Cc addresses for this message. - * - * This method always returns an associative array, whereby the keys provide - * the actual email addresses. - * - * @return string[] - */ - public function getCc(); - - /** - * Set the Bcc address(es). - * - * Recipients set in this field will receive a 'blind-carbon-copy' of this - * message. - * - * In other words, they will get the message, but any other recipients of the - * message will have no such knowledge of their receipt of it. - * - * This method has the same synopsis as {@link setFrom()} and {@link setTo()}. - * - * @param mixed $addresses - * @param string $name optional - */ - public function setBcc($addresses, $name = null); - - /** - * Get the Bcc addresses for this message. - * - * This method always returns an associative array, whereby the keys provide - * the actual email addresses. - * - * @return string[] - */ - public function getBcc(); - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php deleted file mode 100755 index 2b08009..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/MimeEntity.php +++ /dev/null @@ -1,108 +0,0 @@ -setContentType('text/plain'); - if (!is_null($charset)) - { - $this->setCharset($charset); - } - } - - /** - * Set the body of this entity, either as a string, or as an instance of - * {@link Swift_OutputByteStream}. - * - * @param mixed $body - * @param string $contentType optional - * @param string $charset optional - */ - public function setBody($body, $contentType = null, $charset = null) - { - parent::setBody($body, $contentType); - if (isset($charset)) - { - $this->setCharset($charset); - } - return $this; - } - - /** - * Get the character set of this entity. - * - * @return string - */ - public function getCharset() - { - return $this->_getHeaderParameter('Content-Type', 'charset'); - } - - /** - * Set the character set of this entity. - * - * @param string $charset - */ - public function setCharset($charset) - { - $this->_setHeaderParameter('Content-Type', 'charset', $charset); - if ($charset !== $this->_userCharset) - { - $this->_clearCache(); - } - $this->_userCharset = $charset; - parent::charsetChanged($charset); - return $this; - } - - /** - * Get the format of this entity (i.e. flowed or fixed). - * - * @return string - */ - public function getFormat() - { - return $this->_getHeaderParameter('Content-Type', 'format'); - } - - /** - * Set the format of this entity (flowed or fixed). - * - * @param string $format - */ - public function setFormat($format) - { - $this->_setHeaderParameter('Content-Type', 'format', $format); - $this->_userFormat = $format; - return $this; - } - - /** - * Test if delsp is being used for this entity. - * - * @return boolean - */ - public function getDelSp() - { - return ($this->_getHeaderParameter('Content-Type', 'delsp') == 'yes') - ? true - : false; - } - - /** - * Turn delsp on or off for this entity. - * - * @param boolean $delsp - */ - public function setDelSp($delsp = true) - { - $this->_setHeaderParameter('Content-Type', 'delsp', $delsp ? 'yes' : null); - $this->_userDelSp = $delsp; - return $this; - } - - /** - * Get the nesting level of this entity. - * - * @return int - * @see LEVEL_TOP, LEVEL_ALTERNATIVE, LEVEL_MIXED, LEVEL_RELATED - */ - public function getNestingLevel() - { - return $this->_nestingLevel; - } - - /** - * Receive notification that the charset has changed on this document, or a - * parent document. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->setCharset($charset); - } - - // -- Protected methods - - /** Fix the content-type and encoding of this entity */ - protected function _fixHeaders() - { - parent::_fixHeaders(); - if (count($this->getChildren())) - { - $this->_setHeaderParameter('Content-Type', 'charset', null); - $this->_setHeaderParameter('Content-Type', 'format', null); - $this->_setHeaderParameter('Content-Type', 'delsp', null); - } - else - { - $this->setCharset($this->_userCharset); - $this->setFormat($this->_userFormat); - $this->setDelSp($this->_userDelSp); - } - } - - /** Set the nesting level of this entity */ - protected function _setNestingLevel($level) - { - $this->_nestingLevel = $level; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php deleted file mode 100755 index da65ca9..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/ParameterizedHeader.php +++ /dev/null @@ -1,35 +0,0 @@ -_encoder = $encoder; - $this->_paramEncoder = $paramEncoder; - $this->_charset = $charset; - } - - /** - * Create a new Mailbox Header with a list of $addresses. - * @param string $name - * @param array|string $addresses - * @return Swift_Mime_Header - */ - public function createMailboxHeader($name, $addresses = null) - { - $header = new Swift_Mime_Headers_MailboxHeader($name, $this->_encoder); - if (isset($addresses)) - { - $header->setFieldBodyModel($addresses); - } - $this->_setHeaderCharset($header); - return $header; - } - - /** - * Create a new Date header using $timestamp (UNIX time). - * @param string $name - * @param int $timestamp - * @return Swift_Mime_Header - */ - public function createDateHeader($name, $timestamp = null) - { - $header = new Swift_Mime_Headers_DateHeader($name); - if (isset($timestamp)) - { - $header->setFieldBodyModel($timestamp); - } - $this->_setHeaderCharset($header); - return $header; - } - - /** - * Create a new basic text header with $name and $value. - * @param string $name - * @param string $value - * @return Swift_Mime_Header - */ - public function createTextHeader($name, $value = null) - { - $header = new Swift_Mime_Headers_UnstructuredHeader($name, $this->_encoder); - if (isset($value)) - { - $header->setFieldBodyModel($value); - } - $this->_setHeaderCharset($header); - return $header; - } - - /** - * Create a new ParameterizedHeader with $name, $value and $params. - * @param string $name - * @param string $value - * @param array $params - * @return Swift_Mime_ParameterizedHeader - */ - public function createParameterizedHeader($name, $value = null, - $params = array()) - { - $header = new Swift_Mime_Headers_ParameterizedHeader($name, - $this->_encoder, (strtolower($name) == 'content-disposition') - ? $this->_paramEncoder - : null - ); - if (isset($value)) - { - $header->setFieldBodyModel($value); - } - foreach ($params as $k => $v) - { - $header->setParameter($k, $v); - } - $this->_setHeaderCharset($header); - return $header; - } - - /** - * Create a new ID header for Message-ID or Content-ID. - * @param string $name - * @param string|array $ids - * @return Swift_Mime_Header - */ - public function createIdHeader($name, $ids = null) - { - $header = new Swift_Mime_Headers_IdentificationHeader($name); - if (isset($ids)) - { - $header->setFieldBodyModel($ids); - } - $this->_setHeaderCharset($header); - return $header; - } - - /** - * Create a new Path header with an address (path) in it. - * @param string $name - * @param string $path - * @return Swift_Mime_Header - */ - public function createPathHeader($name, $path = null) - { - $header = new Swift_Mime_Headers_PathHeader($name); - if (isset($path)) - { - $header->setFieldBodyModel($path); - } - $this->_setHeaderCharset($header); - return $header; - } - - /** - * Notify this observer that the entity's charset has changed. - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->_charset = $charset; - $this->_encoder->charsetChanged($charset); - $this->_paramEncoder->charsetChanged($charset); - } - - // -- Private methods - - /** Apply the charset to the Header */ - private function _setHeaderCharset(Swift_Mime_Header $header) - { - if (isset($this->_charset)) - { - $header->setCharset($this->_charset); - } - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php deleted file mode 100755 index eeb0221..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleHeaderSet.php +++ /dev/null @@ -1,396 +0,0 @@ -_factory = $factory; - if (isset($charset)) - { - $this->setCharset($charset); - } - } - - /** - * Set the charset used by these headers. - * - * @param string $charset - */ - public function setCharset($charset) - { - $this->_charset = $charset; - $this->_factory->charsetChanged($charset); - $this->_notifyHeadersOfCharset($charset); - } - - /** - * Add a new Mailbox Header with a list of $addresses. - * - * @param string $name - * @param array|string $addresses - */ - public function addMailboxHeader($name, $addresses = null) - { - $this->_storeHeader($name, - $this->_factory->createMailboxHeader($name, $addresses)); - } - - /** - * Add a new Date header using $timestamp (UNIX time). - * - * @param string $name - * @param int $timestamp - */ - public function addDateHeader($name, $timestamp = null) - { - $this->_storeHeader($name, - $this->_factory->createDateHeader($name, $timestamp)); - } - - /** - * Add a new basic text header with $name and $value. - * - * @param string $name - * @param string $value - */ - public function addTextHeader($name, $value = null) - { - $this->_storeHeader($name, - $this->_factory->createTextHeader($name, $value)); - } - - /** - * Add a new ParameterizedHeader with $name, $value and $params. - * - * @param string $name - * @param string $value - * @param array $params - */ - public function addParameterizedHeader($name, $value = null, - $params = array()) - { - $this->_storeHeader($name, - $this->_factory->createParameterizedHeader($name, $value, - $params)); - } - - /** - * Add a new ID header for Message-ID or Content-ID. - * - * @param string $name - * @param string|array $ids - */ - public function addIdHeader($name, $ids = null) - { - $this->_storeHeader($name, $this->_factory->createIdHeader($name, $ids)); - } - - /** - * Add a new Path header with an address (path) in it. - * - * @param string $name - * @param string $path - */ - public function addPathHeader($name, $path = null) - { - $this->_storeHeader($name, $this->_factory->createPathHeader($name, $path)); - } - - /** - * Returns true if at least one header with the given $name exists. - * - * If multiple headers match, the actual one may be specified by $index. - * - * @param string $name - * @param int $index - * - * @return boolean - */ - public function has($name, $index = 0) - { - $lowerName = strtolower($name); - return array_key_exists($lowerName, $this->_headers) - && array_key_exists($index, $this->_headers[$lowerName]); - } - - /** - * Set a header in the HeaderSet. - * - * The header may be a previously fetched header via {@link get()} or it may - * be one that has been created separately. - * - * If $index is specified, the header will be inserted into the set at this - * offset. - * - * @param Swift_Mime_Header $header - * @param int $index - */ - public function set(Swift_Mime_Header $header, $index = 0) - { - $this->_storeHeader($header->getFieldName(), $header, $index); - } - - /** - * Get the header with the given $name. - * - * If multiple headers match, the actual one may be specified by $index. - * Returns NULL if none present. - * - * @param string $name - * @param int $index - * - * @return Swift_Mime_Header - */ - public function get($name, $index = 0) - { - if ($this->has($name, $index)) - { - $lowerName = strtolower($name); - return $this->_headers[$lowerName][$index]; - } - } - - /** - * Get all headers with the given $name. - * - * @param string $name - * - * @return array - */ - public function getAll($name = null) - { - if (!isset($name)) - { - $headers = array(); - foreach ($this->_headers as $collection) - { - $headers = array_merge($headers, $collection); - } - return $headers; - } - - $lowerName = strtolower($name); - if (!array_key_exists($lowerName, $this->_headers)) - { - return array(); - } - return $this->_headers[$lowerName]; - } - - /** - * Remove the header with the given $name if it's set. - * - * If multiple headers match, the actual one may be specified by $index. - * - * @param string $name - * @param int $index - */ - public function remove($name, $index = 0) - { - $lowerName = strtolower($name); - unset($this->_headers[$lowerName][$index]); - } - - /** - * Remove all headers with the given $name. - * - * @param string $name - */ - public function removeAll($name) - { - $lowerName = strtolower($name); - unset($this->_headers[$lowerName]); - } - - /** - * Create a new instance of this HeaderSet. - * - * @return Swift_Mime_HeaderSet - */ - public function newInstance() - { - return new self($this->_factory); - } - - /** - * Define a list of Header names as an array in the correct order. - * - * These Headers will be output in the given order where present. - * - * @param array $sequence - */ - public function defineOrdering(array $sequence) - { - $this->_order = array_flip(array_map('strtolower', $sequence)); - } - - /** - * Set a list of header names which must always be displayed when set. - * - * Usually headers without a field value won't be output unless set here. - * - * @param array $names - */ - public function setAlwaysDisplayed(array $names) - { - $this->_required = array_flip(array_map('strtolower', $names)); - } - - /** - * Notify this observer that the entity's charset has changed. - * - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->setCharset($charset); - } - - /** - * Returns a string with a representation of all headers. - * - * @return string - */ - public function toString() - { - $string = ''; - $headers = $this->_headers; - if ($this->_canSort()) - { - uksort($headers, array($this, '_sortHeaders')); - } - foreach ($headers as $collection) - { - foreach ($collection as $header) - { - if ($this->_isDisplayed($header) || $header->getFieldBody() != '') - { - $string .= $header->toString(); - } - } - } - return $string; - } - - /** - * Returns a string representation of this object. - * - * @return string - * - * @see toString() - */ - public function __toString() - { - return $this->toString(); - } - - // -- Private methods - - /** Save a Header to the internal collection */ - private function _storeHeader($name, Swift_Mime_Header $header, $offset = null) - { - if (!isset($this->_headers[strtolower($name)])) - { - $this->_headers[strtolower($name)] = array(); - } - if (!isset($offset)) - { - $this->_headers[strtolower($name)][] = $header; - } - else - { - $this->_headers[strtolower($name)][$offset] = $header; - } - } - - /** Test if the headers can be sorted */ - private function _canSort() - { - return count($this->_order) > 0; - } - - /** uksort() algorithm for Header ordering */ - private function _sortHeaders($a, $b) - { - $lowerA = strtolower($a); - $lowerB = strtolower($b); - $aPos = array_key_exists($lowerA, $this->_order) - ? $this->_order[$lowerA] - : -1; - $bPos = array_key_exists($lowerB, $this->_order) - ? $this->_order[$lowerB] - : -1; - - if ($aPos == -1) - { - return 1; - } - elseif ($bPos == -1) - { - return -1; - } - - return ($aPos < $bPos) ? -1 : 1; - } - - /** Test if the given Header is always displayed */ - private function _isDisplayed(Swift_Mime_Header $header) - { - return array_key_exists(strtolower($header->getFieldName()), $this->_required); - } - - /** Notify all Headers of the new charset */ - private function _notifyHeadersOfCharset($charset) - { - foreach ($this->_headers as $headerGroup) - { - foreach ($headerGroup as $header) - { - $header->setCharset($charset); - } - } - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php deleted file mode 100755 index bbe1e8f..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleMessage.php +++ /dev/null @@ -1,609 +0,0 @@ -getHeaders()->defineOrdering(array( - 'Return-Path', - 'Sender', - 'Message-ID', - 'Date', - 'Subject', - 'From', - 'Reply-To', - 'To', - 'Cc', - 'Bcc', - 'MIME-Version', - 'Content-Type', - 'Content-Transfer-Encoding' - )); - $this->getHeaders()->setAlwaysDisplayed( - array('Date', 'Message-ID', 'From') - ); - $this->getHeaders()->addTextHeader('MIME-Version', '1.0'); - $this->setDate(time()); - $this->setId($this->getId()); - $this->getHeaders()->addMailboxHeader('From'); - } - - /** - * Always returns {@link LEVEL_TOP} for a message instance. - * @return int - */ - public function getNestingLevel() - { - return self::LEVEL_TOP; - } - - /** - * Set the subject of this message. - * @param string $subject - */ - public function setSubject($subject) - { - if (!$this->_setHeaderFieldModel('Subject', $subject)) - { - $this->getHeaders()->addTextHeader('Subject', $subject); - } - return $this; - } - - /** - * Get the subject of this message. - * @return string - */ - public function getSubject() - { - return $this->_getHeaderFieldModel('Subject'); - } - - /** - * Set the date at which this message was created. - * @param int $date - */ - public function setDate($date) - { - if (!$this->_setHeaderFieldModel('Date', $date)) - { - $this->getHeaders()->addDateHeader('Date', $date); - } - return $this; - } - - /** - * Get the date at which this message was created. - * @return int - */ - public function getDate() - { - return $this->_getHeaderFieldModel('Date'); - } - - /** - * Set the return-path (the bounce address) of this message. - * @param string $address - */ - public function setReturnPath($address) - { - if (!$this->_setHeaderFieldModel('Return-Path', $address)) - { - $this->getHeaders()->addPathHeader('Return-Path', $address); - } - return $this; - } - - /** - * Get the return-path (bounce address) of this message. - * @return string - */ - public function getReturnPath() - { - return $this->_getHeaderFieldModel('Return-Path'); - } - - /** - * Set the sender of this message. - * This does not override the From field, but it has a higher significance. - * @param string $sender - * @param string $name optional - */ - public function setSender($address, $name = null) - { - if (!is_array($address) && isset($name)) - { - $address = array($address => $name); - } - - if (!$this->_setHeaderFieldModel('Sender', (array) $address)) - { - $this->getHeaders()->addMailboxHeader('Sender', (array) $address); - } - return $this; - } - - /** - * Get the sender of this message. - * @return string - */ - public function getSender() - { - return $this->_getHeaderFieldModel('Sender'); - } - - /** - * Add a From: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - */ - public function addFrom($address, $name = null) - { - $current = $this->getFrom(); - $current[$address] = $name; - return $this->setFrom($current); - } - - /** - * Set the from address of this message. - * - * You may pass an array of addresses if this message is from multiple people. - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param string $addresses - * @param string $name optional - */ - public function setFrom($addresses, $name = null) - { - if (!is_array($addresses) && isset($name)) - { - $addresses = array($addresses => $name); - } - - if (!$this->_setHeaderFieldModel('From', (array) $addresses)) - { - $this->getHeaders()->addMailboxHeader('From', (array) $addresses); - } - return $this; - } - - /** - * Get the from address of this message. - * - * @return string - */ - public function getFrom() - { - return $this->_getHeaderFieldModel('From'); - } - - /** - * Add a Reply-To: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - */ - public function addReplyTo($address, $name = null) - { - $current = $this->getReplyTo(); - $current[$address] = $name; - return $this->setReplyTo($current); - } - - /** - * Set the reply-to address of this message. - * - * You may pass an array of addresses if replies will go to multiple people. - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param string $addresses - * @param string $name optional - */ - public function setReplyTo($addresses, $name = null) - { - if (!is_array($addresses) && isset($name)) - { - $addresses = array($addresses => $name); - } - - if (!$this->_setHeaderFieldModel('Reply-To', (array) $addresses)) - { - $this->getHeaders()->addMailboxHeader('Reply-To', (array) $addresses); - } - return $this; - } - - /** - * Get the reply-to address of this message. - * - * @return string - */ - public function getReplyTo() - { - return $this->_getHeaderFieldModel('Reply-To'); - } - - /** - * Add a To: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - */ - public function addTo($address, $name = null) - { - $current = $this->getTo(); - $current[$address] = $name; - return $this->setTo($current); - } - - /** - * Set the to addresses of this message. - * - * If multiple recipients will receive the message and array should be used. - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param array $addresses - * @param string $name optional - */ - public function setTo($addresses, $name = null) - { - if (!is_array($addresses) && isset($name)) - { - $addresses = array($addresses => $name); - } - - if (!$this->_setHeaderFieldModel('To', (array) $addresses)) - { - $this->getHeaders()->addMailboxHeader('To', (array) $addresses); - } - return $this; - } - - /** - * Get the To addresses of this message. - * - * @return array - */ - public function getTo() - { - return $this->_getHeaderFieldModel('To'); - } - - /** - * Add a Cc: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - */ - public function addCc($address, $name = null) - { - $current = $this->getCc(); - $current[$address] = $name; - return $this->setCc($current); - } - - /** - * Set the Cc addresses of this message. - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param array $addresses - * @param string $name optional - */ - public function setCc($addresses, $name = null) - { - if (!is_array($addresses) && isset($name)) - { - $addresses = array($addresses => $name); - } - - if (!$this->_setHeaderFieldModel('Cc', (array) $addresses)) - { - $this->getHeaders()->addMailboxHeader('Cc', (array) $addresses); - } - return $this; - } - - /** - * Get the Cc address of this message. - * - * @return array - */ - public function getCc() - { - return $this->_getHeaderFieldModel('Cc'); - } - - /** - * Add a Bcc: address to this message. - * - * If $name is passed this name will be associated with the address. - * - * @param string $address - * @param string $name optional - */ - public function addBcc($address, $name = null) - { - $current = $this->getBcc(); - $current[$address] = $name; - return $this->setBcc($current); - } - - /** - * Set the Bcc addresses of this message. - * - * If $name is passed and the first parameter is a string, this name will be - * associated with the address. - * - * @param array $addresses - * @param string $name optional - */ - public function setBcc($addresses, $name = null) - { - if (!is_array($addresses) && isset($name)) - { - $addresses = array($addresses => $name); - } - - if (!$this->_setHeaderFieldModel('Bcc', (array) $addresses)) - { - $this->getHeaders()->addMailboxHeader('Bcc', (array) $addresses); - } - return $this; - } - - /** - * Get the Bcc addresses of this message. - * - * @return array - */ - public function getBcc() - { - return $this->_getHeaderFieldModel('Bcc'); - } - - /** - * Set the priority of this message. - * The value is an integer where 1 is the highest priority and 5 is the lowest. - * @param int $priority - */ - public function setPriority($priority) - { - $priorityMap = array( - 1 => 'Highest', - 2 => 'High', - 3 => 'Normal', - 4 => 'Low', - 5 => 'Lowest' - ); - $pMapKeys = array_keys($priorityMap); - if ($priority > max($pMapKeys)) - { - $priority = max($pMapKeys); - } - elseif ($priority < min($pMapKeys)) - { - $priority = min($pMapKeys); - } - if (!$this->_setHeaderFieldModel('X-Priority', - sprintf('%d (%s)', $priority, $priorityMap[$priority]))) - { - $this->getHeaders()->addTextHeader('X-Priority', - sprintf('%d (%s)', $priority, $priorityMap[$priority])); - } - return $this; - } - - /** - * Get the priority of this message. - * The returned value is an integer where 1 is the highest priority and 5 - * is the lowest. - * @return int - */ - public function getPriority() - { - list($priority) = sscanf($this->_getHeaderFieldModel('X-Priority'), - '%[1-5]' - ); - return isset($priority) ? $priority : 3; - } - - /** - * Ask for a delivery receipt from the recipient to be sent to $addresses - * @param array $addresses - */ - public function setReadReceiptTo($addresses) - { - if (!$this->_setHeaderFieldModel('Disposition-Notification-To', $addresses)) - { - $this->getHeaders() - ->addMailboxHeader('Disposition-Notification-To', $addresses); - } - return $this; - } - - /** - * Get the addresses to which a read-receipt will be sent. - * @return string - */ - public function getReadReceiptTo() - { - return $this->_getHeaderFieldModel('Disposition-Notification-To'); - } - - /** - * Attach a {@link Swift_Mime_MimeEntity} such as an Attachment or MimePart. - * @param Swift_Mime_MimeEntity $entity - */ - public function attach(Swift_Mime_MimeEntity $entity) - { - $this->setChildren(array_merge($this->getChildren(), array($entity))); - return $this; - } - - /** - * Remove an already attached entity. - * @param Swift_Mime_MimeEntity $entity - */ - public function detach(Swift_Mime_MimeEntity $entity) - { - $newChildren = array(); - foreach ($this->getChildren() as $child) - { - if ($entity !== $child) - { - $newChildren[] = $child; - } - } - $this->setChildren($newChildren); - return $this; - } - - /** - * Attach a {@link Swift_Mime_MimeEntity} and return it's CID source. - * This method should be used when embedding images or other data in a message. - * @param Swift_Mime_MimeEntity $entity - * @return string - */ - public function embed(Swift_Mime_MimeEntity $entity) - { - $this->attach($entity); - return 'cid:' . $entity->getId(); - } - - /** - * Get this message as a complete string. - * @return string - */ - public function toString() - { - if (count($children = $this->getChildren()) > 0 && $this->getBody() != '') - { - $this->setChildren(array_merge(array($this->_becomeMimePart()), $children)); - $string = parent::toString(); - $this->setChildren($children); - } - else - { - $string = parent::toString(); - } - return $string; - } - - /** - * Returns a string representation of this object. - * - * @return string - * - * @see toString() - */ - public function __toString() - { - return $this->toString(); - } - - /** - * Write this message to a {@link Swift_InputByteStream}. - * @param Swift_InputByteStream $is - */ - public function toByteStream(Swift_InputByteStream $is) - { - if (count($children = $this->getChildren()) > 0 && $this->getBody() != '') - { - $this->setChildren(array_merge(array($this->_becomeMimePart()), $children)); - parent::toByteStream($is); - $this->setChildren($children); - } - else - { - parent::toByteStream($is); - } - } - - // -- Protected methods - - /** @see Swift_Mime_SimpleMimeEntity::_getIdField() */ - protected function _getIdField() - { - return 'Message-ID'; - } - - // -- Private methods - - /** Turn the body of this message into a child of itself if needed */ - private function _becomeMimePart() - { - $part = new parent($this->getHeaders()->newInstance(), $this->getEncoder(), - $this->_getCache(), $this->_userCharset - ); - $part->setContentType($this->_userContentType); - $part->setBody($this->getBody()); - $part->setFormat($this->_userFormat); - $part->setDelSp($this->_userDelSp); - $part->_setNestingLevel($this->_getTopNestingLevel()); - return $part; - } - - /** Get the highest nesting level nested inside this message */ - private function _getTopNestingLevel() - { - $highestLevel = $this->getNestingLevel(); - foreach ($this->getChildren() as $child) - { - $childLevel = $child->getNestingLevel(); - if ($highestLevel < $childLevel) - { - $highestLevel = $childLevel; - } - } - return $highestLevel; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php b/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php deleted file mode 100755 index 1615822..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Mime/SimpleMimeEntity.php +++ /dev/null @@ -1,803 +0,0 @@ - array(self::LEVEL_TOP, self::LEVEL_MIXED), - 'multipart/alternative' => array(self::LEVEL_MIXED, self::LEVEL_ALTERNATIVE), - 'multipart/related' => array(self::LEVEL_ALTERNATIVE, self::LEVEL_RELATED) - ); - - /** A set of filter rules to define what level an entity should be nested at */ - private $_compoundLevelFilters = array(); - - /** The nesting level of this entity */ - private $_nestingLevel = self::LEVEL_ALTERNATIVE; - - /** A KeyCache instance used during encoding and streaming */ - private $_cache; - - /** Direct descendants of this entity */ - private $_immediateChildren = array(); - - /** All descendants of this entity */ - private $_children = array(); - - /** The maximum line length of the body of this entity */ - private $_maxLineLength = 78; - - /** The order in which alternative mime types should appear */ - private $_alternativePartOrder = array( - 'text/plain' => 1, - 'text/html' => 2, - 'multipart/related' => 3 - ); - - /** The CID of this entity */ - private $_id; - - /** The key used for accessing the cache */ - private $_cacheKey; - - protected $_userContentType; - - /** - * Create a new SimpleMimeEntity with $headers, $encoder and $cache. - * @param Swift_Mime_HeaderSet $headers - * @param Swift_Mime_ContentEncoder $encoder - * @param Swift_KeyCache $cache - */ - public function __construct(Swift_Mime_HeaderSet $headers, - Swift_Mime_ContentEncoder $encoder, Swift_KeyCache $cache) - { - $this->_cacheKey = uniqid(); - $this->_cache = $cache; - $this->_headers = $headers; - $this->setEncoder($encoder); - $this->_headers->defineOrdering( - array('Content-Type', 'Content-Transfer-Encoding') - ); - - // This array specifies that, when the entire MIME document contains - // $compoundLevel, then for each child within $level, if its Content-Type - // is $contentType then it should be treated as if it's level is - // $neededLevel instead. I tried to write that unambiguously! :-\ - // Data Structure: - // array ( - // $compoundLevel => array( - // $level => array( - // $contentType => $neededLevel - // ) - // ) - // ) - - $this->_compoundLevelFilters = array( - (self::LEVEL_ALTERNATIVE + self::LEVEL_RELATED) => array( - self::LEVEL_ALTERNATIVE => array( - 'text/plain' => self::LEVEL_ALTERNATIVE, - 'text/html' => self::LEVEL_RELATED - ) - ) - ); - - $this->_id = $this->getRandomId(); - } - - /** - * Generate a new Content-ID or Message-ID for this MIME entity. - * @return string - */ - public function generateId() - { - $this->setId($this->getRandomId()); - return $this->_id; - } - - /** - * Get the {@link Swift_Mime_HeaderSet} for this entity. - * @return Swift_Mime_HeaderSet - */ - public function getHeaders() - { - return $this->_headers; - } - - /** - * Get the nesting level of this entity. - * @return int - * @see LEVEL_TOP, LEVEL_MIXED, LEVEL_RELATED, LEVEL_ALTERNATIVE - */ - public function getNestingLevel() - { - return $this->_nestingLevel; - } - - /** - * Get the Content-type of this entity. - * @return string - */ - public function getContentType() - { - return $this->_getHeaderFieldModel('Content-Type'); - } - - /** - * Set the Content-type of this entity. - * @param string $type - */ - public function setContentType($type) - { - $this->_setContentTypeInHeaders($type); - // Keep track of the value so that if the content-type changes automatically - // due to added child entities, it can be restored if they are later removed - $this->_userContentType = $type; - return $this; - } - - /** - * Get the CID of this entity. - * The CID will only be present in headers if a Content-ID header is present. - * @return string - */ - public function getId() - { - return $this->_headers->has($this->_getIdField()) - ? current((array) $this->_getHeaderFieldModel($this->_getIdField())) - : $this->_id; - } - - /** - * Set the CID of this entity. - * @param string $id - */ - public function setId($id) - { - if (!$this->_setHeaderFieldModel($this->_getIdField(), $id)) - { - $this->_headers->addIdHeader($this->_getIdField(), $id); - } - $this->_id = $id; - return $this; - } - - /** - * Get the description of this entity. - * This value comes from the Content-Description header if set. - * @return string - */ - public function getDescription() - { - return $this->_getHeaderFieldModel('Content-Description'); - } - - /** - * Set the description of this entity. - * This method sets a value in the Content-ID header. - * @param string $description - */ - public function setDescription($description) - { - if (!$this->_setHeaderFieldModel('Content-Description', $description)) - { - $this->_headers->addTextHeader('Content-Description', $description); - } - return $this; - } - - /** - * Get the maximum line length of the body of this entity. - * @return int - */ - public function getMaxLineLength() - { - return $this->_maxLineLength; - } - - /** - * Set the maximum line length of lines in this body. - * Though not enforced by the library, lines should not exceed 1000 chars. - * @param int $length - */ - public function setMaxLineLength($length) - { - $this->_maxLineLength = $length; - return $this; - } - - /** - * Get all children added to this entity. - * @return array of Swift_Mime_Entity - */ - public function getChildren() - { - return $this->_children; - } - - /** - * Set all children of this entity. - * @param array $children Swiift_Mime_Entity instances - * @param int $compoundLevel For internal use only - */ - public function setChildren(array $children, $compoundLevel = null) - { - //TODO: Try to refactor this logic - - $compoundLevel = isset($compoundLevel) - ? $compoundLevel - : $this->_getCompoundLevel($children) - ; - - $immediateChildren = array(); - $grandchildren = array(); - $newContentType = $this->_userContentType; - - foreach ($children as $child) - { - $level = $this->_getNeededChildLevel($child, $compoundLevel); - if (empty($immediateChildren)) //first iteration - { - $immediateChildren = array($child); - } - else - { - $nextLevel = $this->_getNeededChildLevel($immediateChildren[0], $compoundLevel); - if ($nextLevel == $level) - { - $immediateChildren[] = $child; - } - elseif ($level < $nextLevel) - { - //Re-assign immediateChildren to grandchilden - $grandchildren = array_merge($grandchildren, $immediateChildren); - //Set new children - $immediateChildren = array($child); - } - else - { - $grandchildren[] = $child; - } - } - } - - if (!empty($immediateChildren)) - { - $lowestLevel = $this->_getNeededChildLevel($immediateChildren[0], $compoundLevel); - - //Determine which composite media type is needed to accomodate the - // immediate children - foreach ($this->_compositeRanges as $mediaType => $range) - { - if ($lowestLevel > $range[0] - && $lowestLevel <= $range[1]) - { - $newContentType = $mediaType; - break; - } - } - - //Put any grandchildren in a subpart - if (!empty($grandchildren)) - { - $subentity = $this->_createChild(); - $subentity->_setNestingLevel($lowestLevel); - $subentity->setChildren($grandchildren, $compoundLevel); - array_unshift($immediateChildren, $subentity); - } - } - - $this->_immediateChildren = $immediateChildren; - $this->_children = $children; - $this->_setContentTypeInHeaders($newContentType); - $this->_fixHeaders(); - $this->_sortChildren(); - - return $this; - } - - /** - * Get the body of this entity as a string. - * @return string - */ - public function getBody() - { - return ($this->_body instanceof Swift_OutputByteStream) - ? $this->_readStream($this->_body) - : $this->_body; - } - - /** - * Set the body of this entity, either as a string, or as an instance of - * {@link Swift_OutputByteStream}. - * @param mixed $body - * @param string $contentType optional - */ - public function setBody($body, $contentType = null) - { - if ($body !== $this->_body) - { - $this->_clearCache(); - } - - $this->_body = $body; - if (isset($contentType)) - { - $this->setContentType($contentType); - } - return $this; - } - - /** - * Get the encoder used for the body of this entity. - * @return Swift_Mime_ContentEncoder - */ - public function getEncoder() - { - return $this->_encoder; - } - - /** - * Set the encoder used for the body of this entity. - * @param Swift_Mime_ContentEncoder $encoder - */ - public function setEncoder(Swift_Mime_ContentEncoder $encoder) - { - if ($encoder !== $this->_encoder) - { - $this->_clearCache(); - } - - $this->_encoder = $encoder; - $this->_setEncoding($encoder->getName()); - $this->_notifyEncoderChanged($encoder); - return $this; - } - - /** - * Get the boundary used to separate children in this entity. - * @return string - */ - public function getBoundary() - { - if (!isset($this->_boundary)) - { - $this->_boundary = '_=_swift_v4_' . time() . uniqid() . '_=_'; - } - return $this->_boundary; - } - - /** - * Set the boundary used to separate children in this entity. - * @param string $boundary - * @throws Swift_RfcComplianceException - */ - public function setBoundary($boundary) - { - $this->_assertValidBoundary($boundary); - $this->_boundary = $boundary; - return $this; - } - - /** - * Receive notification that the charset of this entity, or a parent entity - * has changed. - * @param string $charset - */ - public function charsetChanged($charset) - { - $this->_notifyCharsetChanged($charset); - } - - /** - * Receive notification that the encoder of this entity or a parent entity - * has changed. - * @param Swift_Mime_ContentEncoder $encoder - */ - public function encoderChanged(Swift_Mime_ContentEncoder $encoder) - { - $this->_notifyEncoderChanged($encoder); - } - - /** - * Get this entire entity as a string. - * @return string - */ - public function toString() - { - $string = $this->_headers->toString(); - if (isset($this->_body) && empty($this->_immediateChildren)) - { - if ($this->_cache->hasKey($this->_cacheKey, 'body')) - { - $body = $this->_cache->getString($this->_cacheKey, 'body'); - } - else - { - $body = "\r\n" . $this->_encoder->encodeString($this->getBody(), 0, - $this->getMaxLineLength() - ); - $this->_cache->setString($this->_cacheKey, 'body', $body, - Swift_KeyCache::MODE_WRITE - ); - } - $string .= $body; - } - - if (!empty($this->_immediateChildren)) - { - foreach ($this->_immediateChildren as $child) - { - $string .= "\r\n\r\n--" . $this->getBoundary() . "\r\n"; - $string .= $child->toString(); - } - $string .= "\r\n\r\n--" . $this->getBoundary() . "--\r\n"; - } - - return $string; - } - - /** - * Returns a string representation of this object. - * - * @return string - * - * @see toString() - */ - public function __toString() - { - return $this->toString(); - } - - /** - * Write this entire entity to a {@link Swift_InputByteStream}. - * @param Swift_InputByteStream - */ - public function toByteStream(Swift_InputByteStream $is) - { - $is->write($this->_headers->toString()); - $is->commit(); - - if (empty($this->_immediateChildren)) - { - if (isset($this->_body)) - { - if ($this->_cache->hasKey($this->_cacheKey, 'body')) - { - $this->_cache->exportToByteStream($this->_cacheKey, 'body', $is); - } - else - { - $cacheIs = $this->_cache->getInputByteStream($this->_cacheKey, 'body'); - if ($cacheIs) - { - $is->bind($cacheIs); - } - - $is->write("\r\n"); - - if ($this->_body instanceof Swift_OutputByteStream) - { - $this->_body->setReadPointer(0); - - $this->_encoder->encodeByteStream($this->_body, $is, 0, - $this->getMaxLineLength() - ); - } - else - { - $is->write($this->_encoder->encodeString( - $this->getBody(), 0, $this->getMaxLineLength() - )); - } - - if ($cacheIs) - { - $is->unbind($cacheIs); - } - } - } - } - - if (!empty($this->_immediateChildren)) - { - foreach ($this->_immediateChildren as $child) - { - $is->write("\r\n\r\n--" . $this->getBoundary() . "\r\n"); - $child->toByteStream($is); - } - $is->write("\r\n\r\n--" . $this->getBoundary() . "--\r\n"); - } - } - - // -- Protected methods - - /** - * Get the name of the header that provides the ID of this entity */ - protected function _getIdField() - { - return 'Content-ID'; - } - - /** - * Get the model data (usually an array or a string) for $field. - */ - protected function _getHeaderFieldModel($field) - { - if ($this->_headers->has($field)) - { - return $this->_headers->get($field)->getFieldBodyModel(); - } - } - - /** - * Set the model data for $field. - */ - protected function _setHeaderFieldModel($field, $model) - { - if ($this->_headers->has($field)) - { - $this->_headers->get($field)->setFieldBodyModel($model); - return true; - } - else - { - return false; - } - } - - /** - * Get the parameter value of $parameter on $field header. - */ - protected function _getHeaderParameter($field, $parameter) - { - if ($this->_headers->has($field)) - { - return $this->_headers->get($field)->getParameter($parameter); - } - } - - /** - * Set the parameter value of $parameter on $field header. - */ - protected function _setHeaderParameter($field, $parameter, $value) - { - if ($this->_headers->has($field)) - { - $this->_headers->get($field)->setParameter($parameter, $value); - return true; - } - else - { - return false; - } - } - - /** - * Re-evaluate what content type and encoding should be used on this entity. - */ - protected function _fixHeaders() - { - if (count($this->_immediateChildren)) - { - $this->_setHeaderParameter('Content-Type', 'boundary', - $this->getBoundary() - ); - $this->_headers->remove('Content-Transfer-Encoding'); - } - else - { - $this->_setHeaderParameter('Content-Type', 'boundary', null); - $this->_setEncoding($this->_encoder->getName()); - } - } - - /** - * Get the KeyCache used in this entity. - */ - protected function _getCache() - { - return $this->_cache; - } - - /** - * Empty the KeyCache for this entity. - */ - protected function _clearCache() - { - $this->_cache->clearKey($this->_cacheKey, 'body'); - } - - /** - * Returns a random Content-ID or Message-ID. - * @return string - */ - protected function getRandomId() - { - $idLeft = time() . '.' . uniqid(); - $idRight = !empty($_SERVER['SERVER_NAME']) - ? $_SERVER['SERVER_NAME'] - : 'swift.generated'; - return $idLeft . '@' . $idRight; - } - - // -- Private methods - - private function _readStream(Swift_OutputByteStream $os) - { - $string = ''; - while (false !== $bytes = $os->read(8192)) - { - $string .= $bytes; - } - return $string; - } - - private function _setEncoding($encoding) - { - if (!$this->_setHeaderFieldModel('Content-Transfer-Encoding', $encoding)) - { - $this->_headers->addTextHeader('Content-Transfer-Encoding', $encoding); - } - } - - private function _assertValidBoundary($boundary) - { - if (!preg_match( - '/^[a-z0-9\'\(\)\+_\-,\.\/:=\?\ ]{0,69}[a-z0-9\'\(\)\+_\-,\.\/:=\?]$/Di', - $boundary)) - { - throw new Swift_RfcComplianceException('Mime boundary set is not RFC 2046 compliant.'); - } - } - - private function _setContentTypeInHeaders($type) - { - if (!$this->_setHeaderFieldModel('Content-Type', $type)) - { - $this->_headers->addParameterizedHeader('Content-Type', $type); - } - } - - private function _setNestingLevel($level) - { - $this->_nestingLevel = $level; - } - - private function _getCompoundLevel($children) - { - $level = 0; - foreach ($children as $child) - { - $level |= $child->getNestingLevel(); - } - return $level; - } - - private function _getNeededChildLevel($child, $compoundLevel) - { - $filter = array(); - foreach ($this->_compoundLevelFilters as $bitmask => $rules) - { - if (($compoundLevel & $bitmask) === $bitmask) - { - $filter = $rules + $filter; - } - } - - $realLevel = $child->getNestingLevel(); - $lowercaseType = strtolower($child->getContentType()); - - if (isset($filter[$realLevel]) - && isset($filter[$realLevel][$lowercaseType])) - { - return $filter[$realLevel][$lowercaseType]; - } - else - { - return $realLevel; - } - } - - private function _createChild() - { - return new self($this->_headers->newInstance(), - $this->_encoder, $this->_cache); - } - - private function _notifyEncoderChanged(Swift_Mime_ContentEncoder $encoder) - { - foreach ($this->_immediateChildren as $child) - { - $child->encoderChanged($encoder); - } - } - - private function _notifyCharsetChanged($charset) - { - $this->_encoder->charsetChanged($charset); - $this->_headers->charsetChanged($charset); - foreach ($this->_immediateChildren as $child) - { - $child->charsetChanged($charset); - } - } - - private function _sortChildren() - { - $shouldSort = false; - foreach ($this->_immediateChildren as $child) - { - //NOTE: This include alternative parts moved into a related part - if ($child->getNestingLevel() == self::LEVEL_ALTERNATIVE) - { - $shouldSort = true; - break; - } - } - - //Sort in order of preference, if there is one - if ($shouldSort) - { - usort($this->_immediateChildren, array($this, '_childSortAlgorithm')); - } - } - - private function _childSortAlgorithm($a, $b) - { - $typePrefs = array(); - $types = array( - strtolower($a->getContentType()), - strtolower($b->getContentType()) - ); - foreach ($types as $type) - { - $typePrefs[] = (array_key_exists($type, $this->_alternativePartOrder)) - ? $this->_alternativePartOrder[$type] - : (max($this->_alternativePartOrder) + 1); - } - return ($typePrefs[0] >= $typePrefs[1]) ? 1 : -1; - } - - // -- Destructor - - /** - * Empties it's own contents from the cache. - */ - public function __destruct() - { - $this->_cache->clearAll($this->_cacheKey); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/MimePart.php b/h-source/External/swiftmailer/lib/classes/Swift/MimePart.php deleted file mode 100755 index 60b6d56..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/MimePart.php +++ /dev/null @@ -1,65 +0,0 @@ -createDependenciesFor('mime.part') - ); - - if (!isset($charset)) - { - $charset = Swift_DependencyContainer::getInstance() - ->lookup('properties.charset'); - } - $this->setBody($body); - $this->setCharset($charset); - if ($contentType) - { - $this->setContentType($contentType); - } - } - - /** - * Create a new MimePart. - * @param string $body - * @param string $contentType - * @param string $charset - * @return Swift_Mime_MimePart - */ - public static function newInstance($body = null, $contentType = null, - $charset = null) - { - return new self($body, $contentType, $charset); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/OutputByteStream.php b/h-source/External/swiftmailer/lib/classes/Swift/OutputByteStream.php deleted file mode 100755 index 951b838..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/OutputByteStream.php +++ /dev/null @@ -1,41 +0,0 @@ -setThreshold($threshold); - $this->setSleepTime($sleep); - $this->_sleeper = $sleeper; - } - - /** - * Set the number of emails to send before restarting. - * @param int $threshold - */ - public function setThreshold($threshold) - { - $this->_threshold = $threshold; - } - - /** - * Get the number of emails to send before restarting. - * @return int - */ - public function getThreshold() - { - return $this->_threshold; - } - - /** - * Set the number of seconds to sleep for during a restart. - * @param int $sleep time - */ - public function setSleepTime($sleep) - { - $this->_sleep = $sleep; - } - - /** - * Get the number of seconds to sleep for during a restart. - * @return int - */ - public function getSleepTime() - { - return $this->_sleep; - } - - /** - * Invoked immediately before the Message is sent. - * @param Swift_Events_SendEvent $evt - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - } - - /** - * Invoked immediately after the Message is sent. - * @param Swift_Events_SendEvent $evt - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - ++$this->_counter; - if ($this->_counter >= $this->_threshold) - { - $transport = $evt->getTransport(); - $transport->stop(); - if ($this->_sleep) - { - $this->sleep($this->_sleep); - } - $transport->start(); - $this->_counter = 0; - } - } - - /** - * Sleep for $seconds. - * @param int $seconds - */ - public function sleep($seconds) - { - if (isset($this->_sleeper)) - { - $this->_sleeper->sleep($seconds); - } - else - { - sleep($seconds); - } - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php deleted file mode 100755 index 501cd80..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/BandwidthMonitorPlugin.php +++ /dev/null @@ -1,173 +0,0 @@ -getMessage(); - $message->toByteStream($this); - } - - /** - * Invoked immediately following a command being sent. - * @param Swift_Events_ResponseEvent $evt - */ - public function commandSent(Swift_Events_CommandEvent $evt) - { - $command = $evt->getCommand(); - $this->_out += strlen($command); - } - - /** - * Invoked immediately following a response coming back. - * @param Swift_Events_ResponseEvent $evt - */ - public function responseReceived(Swift_Events_ResponseEvent $evt) - { - $response = $evt->getResponse(); - $this->_in += strlen($response); - } - - /** - * Called when a message is sent so that the outgoing counter can be increased. - * @param string $bytes - */ - public function write($bytes) - { - $this->_out += strlen($bytes); - foreach ($this->_mirrors as $stream) - { - $stream->write($bytes); - } - } - - /** - * Not used. - */ - public function commit() - { - } - - /** - * Attach $is to this stream. - * The stream acts as an observer, receiving all data that is written. - * All {@link write()} and {@link flushBuffers()} operations will be mirrored. - * - * @param Swift_InputByteStream $is - */ - public function bind(Swift_InputByteStream $is) - { - $this->_mirrors[] = $is; - } - - /** - * Remove an already bound stream. - * If $is is not bound, no errors will be raised. - * If the stream currently has any buffered data it will be written to $is - * before unbinding occurs. - * - * @param Swift_InputByteStream $is - */ - public function unbind(Swift_InputByteStream $is) - { - foreach ($this->_mirrors as $k => $stream) - { - if ($is === $stream) - { - unset($this->_mirrors[$k]); - } - } - } - - /** - * Not used. - */ - public function flushBuffers() - { - foreach ($this->_mirrors as $stream) - { - $stream->flushBuffers(); - } - } - - /** - * Get the total number of bytes sent to the server. - * @return int - */ - public function getBytesOut() - { - return $this->_out; - } - - /** - * Get the total number of bytes received from the server. - * @return int - */ - public function getBytesIn() - { - return $this->_in; - } - - /** - * Reset the internal counters to zero. - */ - public function reset() - { - $this->_out = 0; - $this->_in = 0; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php deleted file mode 100755 index 9735d0a..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Decorator/Replacements.php +++ /dev/null @@ -1,36 +0,0 @@ - - * $replacements = array( - * "address1@domain.tld" => array("{a}" => "b", "{c}" => "d"), - * "address2@domain.tld" => array("{a}" => "x", "{c}" => "y") - * ) - * - * - * When using an instance of {@link Swift_Plugins_Decorator_Replacements}, - * the object should return just the array of replacements for the address - * given to {@link Swift_Plugins_Decorator_Replacements::getReplacementsFor()}. - * - * @param mixed $replacements - */ - public function __construct($replacements) - { - if (!($replacements instanceof Swift_Plugins_Decorator_Replacements)) - { - $this->_replacements = (array) $replacements; - } - else - { - $this->_replacements = $replacements; - } - } - - /** - * Invoked immediately before the Message is sent. - * - * @param Swift_Events_SendEvent $evt - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); - $this->_restoreMessage($message); - $to = array_keys($message->getTo()); - $address = array_shift($to); - if ($replacements = $this->getReplacementsFor($address)) - { - $body = $message->getBody(); - $search = array_keys($replacements); - $replace = array_values($replacements); - $bodyReplaced = str_replace( - $search, $replace, $body - ); - if ($body != $bodyReplaced) - { - $this->_originalBody = $body; - $message->setBody($bodyReplaced); - } - $subject = $message->getSubject(); - $subjectReplaced = str_replace( - $search, $replace, $subject - ); - if ($subject != $subjectReplaced) - { - $this->_originalSubject = $subject; - $message->setSubject($subjectReplaced); - } - $children = (array) $message->getChildren(); - foreach ($children as $child) - { - list($type, ) = sscanf($child->getContentType(), '%[^/]/%s'); - if ('text' == $type) - { - $body = $child->getBody(); - $bodyReplaced = str_replace( - $search, $replace, $body - ); - if ($body != $bodyReplaced) - { - $child->setBody($bodyReplaced); - $this->_originalChildBodies[$child->getId()] = $body; - } - } - } - $this->_lastMessage = $message; - } - } - - /** - * Find a map of replacements for the address. - * - * If this plugin was provided with a delegate instance of - * {@link Swift_Plugins_Decorator_Replacements} then the call will be - * delegated to it. Otherwise, it will attempt to find the replacements - * from the array provided in the constructor. - * - * If no replacements can be found, an empty value (NULL) is returned. - * - * @param string $address - * - * @return array - */ - public function getReplacementsFor($address) - { - if ($this->_replacements instanceof Swift_Plugins_Decorator_Replacements) - { - return $this->_replacements->getReplacementsFor($address); - } - else - { - return isset($this->_replacements[$address]) - ? $this->_replacements[$address] - : null - ; - } - } - - /** - * Invoked immediately after the Message is sent. - * - * @param Swift_Events_SendEvent $evt - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - $this->_restoreMessage($evt->getMessage()); - } - - // -- Private methods - - /** Restore a changed message back to its original state */ - private function _restoreMessage(Swift_Mime_Message $message) - { - if ($this->_lastMessage === $message) - { - if (isset($this->_originalBody)) - { - $message->setBody($this->_originalBody); - $this->_originalBody = null; - } - if (isset($this->_originalSubject)) - { - $message->setSubject($this->_originalSubject); - $this->_originalSubject = null; - } - if (!empty($this->_originalChildBodies)) - { - $children = (array) $message->getChildren(); - foreach ($children as $child) - { - $id = $child->getId(); - if (array_key_exists($id, $this->_originalChildBodies)) - { - $child->setBody($this->_originalChildBodies[$id]); - } - } - $this->_originalChildBodies = array(); - } - $this->_lastMessage = null; - } - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Logger.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Logger.php deleted file mode 100755 index 9864da0..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Logger.php +++ /dev/null @@ -1,37 +0,0 @@ -_logger = $logger; - } - - /** - * Add a log entry. - * - * @param string $entry - */ - public function add($entry) - { - $this->_logger->add($entry); - } - - /** - * Clear the log contents. - */ - public function clear() - { - $this->_logger->clear(); - } - - /** - * Get this log as a string. - * - * @return string - */ - public function dump() - { - return $this->_logger->dump(); - } - - /** - * Invoked immediately following a command being sent. - * - * @param Swift_Events_ResponseEvent $evt - */ - public function commandSent(Swift_Events_CommandEvent $evt) - { - $command = $evt->getCommand(); - $this->_logger->add(sprintf(">> %s", $command)); - } - - /** - * Invoked immediately following a response coming back. - * - * @param Swift_Events_ResponseEvent $evt - */ - public function responseReceived(Swift_Events_ResponseEvent $evt) - { - $response = $evt->getResponse(); - $this->_logger->add(sprintf("<< %s", $response)); - } - - /** - * Invoked just before a Transport is started. - * - * @param Swift_Events_TransportChangeEvent $evt - */ - public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt) - { - $transportName = get_class($evt->getSource()); - $this->_logger->add(sprintf("++ Starting %s", $transportName)); - } - - /** - * Invoked immediately after the Transport is started. - * - * @param Swift_Events_TransportChangeEvent $evt - */ - public function transportStarted(Swift_Events_TransportChangeEvent $evt) - { - $transportName = get_class($evt->getSource()); - $this->_logger->add(sprintf("++ %s started", $transportName)); - } - - /** - * Invoked just before a Transport is stopped. - * - * @param Swift_Events_TransportChangeEvent $evt - */ - public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt) - { - $transportName = get_class($evt->getSource()); - $this->_logger->add(sprintf("++ Stopping %s", $transportName)); - } - - /** - * Invoked immediately after the Transport is stopped. - * - * @param Swift_Events_TransportChangeEvent $evt - */ - public function transportStopped(Swift_Events_TransportChangeEvent $evt) - { - $transportName = get_class($evt->getSource()); - $this->_logger->add(sprintf("++ %s stopped", $transportName)); - } - - /** - * Invoked as a TransportException is thrown in the Transport system. - * - * @param Swift_Events_TransportExceptionEvent $evt - */ - public function exceptionThrown(Swift_Events_TransportExceptionEvent $evt) - { - $e = $evt->getException(); - $message = $e->getMessage(); - $this->_logger->add(sprintf("!! %s", $message)); - $message .= PHP_EOL; - $message .= 'Log data:' . PHP_EOL; - $message .= $this->_logger->dump(); - $evt->cancelBubble(); - throw new Swift_TransportException($message); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php deleted file mode 100755 index 930eca2..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/ArrayLogger.php +++ /dev/null @@ -1,73 +0,0 @@ -_size = $size; - } - - /** - * Add a log entry. - * @param string $entry - */ - public function add($entry) - { - $this->_log[] = $entry; - while (count($this->_log) > $this->_size) - { - array_shift($this->_log); - } - } - - /** - * Clear the log contents. - */ - public function clear() - { - $this->_log = array(); - } - - /** - * Get this log as a string. - * @return string - */ - public function dump() - { - return implode(PHP_EOL, $this->_log); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php deleted file mode 100755 index 83dd54b..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Loggers/EchoLogger.php +++ /dev/null @@ -1,64 +0,0 @@ -_isHtml = $isHtml; - } - - /** - * Add a log entry. - * @param string $entry - */ - public function add($entry) - { - if ($this->_isHtml) - { - printf('%s%s%s', htmlspecialchars($entry, ENT_QUOTES), '
              ', PHP_EOL); - } - else - { - printf('%s%s', $entry, PHP_EOL); - } - } - - /** - * Not implemented. - */ - public function clear() - { - } - - /** - * Not implemented. - */ - public function dump() - { - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php deleted file mode 100755 index 1c96dcf..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Pop/Pop3Connection.php +++ /dev/null @@ -1,36 +0,0 @@ -_host = $host; - $this->_port = $port; - $this->_crypto = $crypto; - } - - /** - * Create a new PopBeforeSmtpPlugin for $host and $port. - * - * @param string $host - * @param int $port - * @param string $cypto as "tls" or "ssl" - * - * @return Swift_Plugins_PopBeforeSmtpPlugin - */ - public static function newInstance($host, $port = 110, $crypto = null) - { - return new self($host, $port, $crypto); - } - - /** - * Set a Pop3Connection to delegate to instead of connecting directly. - * - * @param Swift_Plugins_Pop_Pop3Connection $connection - */ - public function setConnection(Swift_Plugins_Pop_Pop3Connection $connection) - { - $this->_connection = $connection; - return $this; - } - - /** - * Bind this plugin to a specific SMTP transport instance. - * - * @param Swift_Transport - */ - public function bindSmtp(Swift_Transport $smtp) - { - $this->_transport = $smtp; - } - - /** - * Set the connection timeout in seconds (default 10). - * - * @param int $timeout - */ - public function setTimeout($timeout) - { - $this->_timeout = (int) $timeout; - return $this; - } - - /** - * Set the username to use when connecting (if needed). - * - * @param string $username - */ - public function setUsername($username) - { - $this->_username = $username; - return $this; - } - - /** - * Set the password to use when connecting (if needed). - * - * @param string $password - */ - public function setPassword($password) - { - $this->_password = $password; - return $this; - } - - /** - * Connect to the POP3 host and authenticate. - * - * @throws Swift_Plugins_Pop_Pop3Exception if connection fails - */ - public function connect() - { - if (isset($this->_connection)) - { - $this->_connection->connect(); - } - else - { - if (!isset($this->_socket)) - { - if (!$socket = fsockopen( - $this->_getHostString(), $this->_port, $errno, $errstr, $this->_timeout)) - { - throw new Swift_Plugins_Pop_Pop3Exception( - sprintf('Failed to connect to POP3 host [%s]: %s', $this->_host, $errstr) - ); - } - $this->_socket = $socket; - - if (false === $greeting = fgets($this->_socket)) - { - throw new Swift_Plugins_Pop_Pop3Exception( - sprintf('Failed to connect to POP3 host [%s]', trim($greeting)) - ); - } - - $this->_assertOk($greeting); - - if ($this->_username) - { - $this->_command(sprintf("USER %s\r\n", $this->_username)); - $this->_command(sprintf("PASS %s\r\n", $this->_password)); - } - } - } - } - - /** - * Disconnect from the POP3 host. - */ - public function disconnect() - { - if (isset($this->_connection)) - { - $this->_connection->disconnect(); - } - else - { - $this->_command("QUIT\r\n"); - if (!fclose($this->_socket)) - { - throw new Swift_Plugins_Pop_Pop3Exception( - sprintf('POP3 host [%s] connection could not be stopped', $this->_host) - ); - } - $this->_socket = null; - } - } - - /** - * Invoked just before a Transport is started. - * - * @param Swift_Events_TransportChangeEvent $evt - */ - public function beforeTransportStarted(Swift_Events_TransportChangeEvent $evt) - { - if (isset($this->_transport)) - { - if ($this->_transport !== $evt->getTransport()) - { - return; - } - } - - $this->connect(); - $this->disconnect(); - } - - /** - * Not used. - */ - public function transportStarted(Swift_Events_TransportChangeEvent $evt) - { - } - - /** - * Not used. - */ - public function beforeTransportStopped(Swift_Events_TransportChangeEvent $evt) - { - } - - /** - * Not used. - */ - public function transportStopped(Swift_Events_TransportChangeEvent $evt) - { - } - - // -- Private Methods - - private function _command($command) - { - if (!fwrite($this->_socket, $command)) - { - throw new Swift_Plugins_Pop_Pop3Exception( - sprintf('Failed to write command [%s] to POP3 host', trim($command)) - ); - } - - if (false === $response = fgets($this->_socket)) - { - throw new Swift_Plugins_Pop_Pop3Exception( - sprintf('Failed to read from POP3 host after command [%s]', trim($command)) - ); - } - - $this->_assertOk($response); - - return $response; - } - - private function _assertOk($response) - { - if (substr($response, 0, 3) != '+OK') - { - throw new Swift_Plugins_Pop_Pop3Exception( - sprintf('POP3 command failed [%s]', trim($response)) - ); - } - } - - private function _getHostString() - { - $host = $this->_host; - switch (strtolower($this->_crypto)) - { - case 'ssl': - $host = 'ssl://' . $host; - break; - - case 'tls': - $host = 'tls://' . $host; - break; - } - return $host; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporter.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporter.php deleted file mode 100755 index 00d5765..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporter.php +++ /dev/null @@ -1,36 +0,0 @@ -_reporter = $reporter; - } - - /** - * Not used. - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - } - - /** - * Invoked immediately after the Message is sent. - * @param Swift_Events_SendEvent $evt - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - $message = $evt->getMessage(); - $failures = array_flip($evt->getFailedRecipients()); - foreach ((array) $message->getTo() as $address => $null) - { - $this->_reporter->notify( - $message, $address, (array_key_exists($address, $failures) - ? Swift_Plugins_Reporter::RESULT_FAIL - : Swift_Plugins_Reporter::RESULT_PASS) - ); - } - foreach ((array) $message->getCc() as $address => $null) - { - $this->_reporter->notify( - $message, $address, (array_key_exists($address, $failures) - ? Swift_Plugins_Reporter::RESULT_FAIL - : Swift_Plugins_Reporter::RESULT_PASS) - ); - } - foreach ((array) $message->getBcc() as $address => $null) - { - $this->_reporter->notify( - $message, $address, (array_key_exists($address, $failures) - ? Swift_Plugins_Reporter::RESULT_FAIL - : Swift_Plugins_Reporter::RESULT_PASS) - ); - } - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php deleted file mode 100755 index 0022f5e..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HitReporter.php +++ /dev/null @@ -1,63 +0,0 @@ -_failures_cache[$address])) - { - $this->_failures[] = $address; - $this->_failures_cache[$address] = true; - } - } - - /** - * Get an array of addresses for which delivery failed. - * @return array - */ - public function getFailedRecipients() - { - return $this->_failures; - } - - /** - * Clear the buffer (empty the list). - */ - public function clear() - { - $this->_failures = $this->_failures_cache = array(); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php deleted file mode 100755 index 7370078..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Reporters/HtmlReporter.php +++ /dev/null @@ -1,47 +0,0 @@ -" . PHP_EOL; - echo "PASS " . $address . PHP_EOL; - echo "
              " . PHP_EOL; - flush(); - } - else - { - echo "
              " . PHP_EOL; - echo "FAIL " . $address . PHP_EOL; - echo "
              " . PHP_EOL; - flush(); - } - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php deleted file mode 100755 index 148cbd3..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Sleeper.php +++ /dev/null @@ -1,26 +0,0 @@ -_rate = $rate; - $this->_mode = $mode; - $this->_sleeper = $sleeper; - $this->_timer = $timer; - } - - /** - * Invoked immediately before the Message is sent. - * @param Swift_Events_SendEvent $evt - */ - public function beforeSendPerformed(Swift_Events_SendEvent $evt) - { - $time = $this->getTimestamp(); - if (!isset($this->_start)) - { - $this->_start = $time; - } - $duration = $time - $this->_start; - - if (self::BYTES_PER_MINUTE == $this->_mode) - { - $sleep = $this->_throttleBytesPerMinute($duration); - } - else - { - $sleep = $this->_throttleMessagesPerMinute($duration); - } - - if ($sleep > 0) - { - $this->sleep($sleep); - } - } - - /** - * Invoked when a Message is sent. - * @param Swift_Events_SendEvent $evt - */ - public function sendPerformed(Swift_Events_SendEvent $evt) - { - parent::sendPerformed($evt); - ++$this->_messages; - } - - /** - * Sleep for $seconds. - * @param int $seconds - */ - public function sleep($seconds) - { - if (isset($this->_sleeper)) - { - $this->_sleeper->sleep($seconds); - } - else - { - sleep($seconds); - } - } - - /** - * Get the current UNIX timestamp - * @return int - */ - public function getTimestamp() - { - if (isset($this->_timer)) - { - return $this->_timer->getTimestamp(); - } - else - { - return time(); - } - } - - // -- Private methods - - /** - * Get a number of seconds to sleep for. - * @param int $timePassed - * @return int - * @access private - */ - private function _throttleBytesPerMinute($timePassed) - { - $expectedDuration = $this->getBytesOut() / ($this->_rate / 60); - return (int) ceil($expectedDuration - $timePassed); - } - - /** - * Get a number of seconds to sleep for. - * @param int $timePassed - * @return int - * @access private - */ - private function _throttleMessagesPerMinute($timePassed) - { - $expectedDuration = $this->_messages / ($this->_rate / 60); - return (int) ceil($expectedDuration - $timePassed); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Timer.php b/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Timer.php deleted file mode 100755 index 92207bf..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Plugins/Timer.php +++ /dev/null @@ -1,26 +0,0 @@ -register('properties.charset')->asValue($charset); - return $this; - } - - /** - * Set the directory where temporary files can be saved. - * @param string $dir - * @return Swift_Preferences - */ - public function setTempDir($dir) - { - Swift_DependencyContainer::getInstance() - ->register('tempdir')->asValue($dir); - return $this; - } - - /** - * Set the type of cache to use (i.e. "disk" or "array"). - * @param string $type - * @return Swift_Preferences - */ - public function setCacheType($type) - { - Swift_DependencyContainer::getInstance() - ->register('cache')->asAliasOf(sprintf('cache.%s', $type)); - return $this; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php b/h-source/External/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php deleted file mode 100755 index db29e6d..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/ReplacementFilterFactory.php +++ /dev/null @@ -1,27 +0,0 @@ -createDependenciesFor('transport.sendmail') - ); - - $this->setCommand($command); - } - - /** - * Create a new SendmailTransport instance. - * @param string $command - * @return Swift_SendmailTransport - */ - public static function newInstance($command = '/usr/sbin/sendmail -bs') - { - return new self($command); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/SmtpTransport.php b/h-source/External/swiftmailer/lib/classes/Swift/SmtpTransport.php deleted file mode 100755 index 65180d5..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/SmtpTransport.php +++ /dev/null @@ -1,56 +0,0 @@ -createDependenciesFor('transport.smtp') - ); - - $this->setHost($host); - $this->setPort($port); - $this->setEncryption($security); - } - - /** - * Create a new SmtpTransport instance. - * @param string $host - * @param int $port - * @param int $security - * @return Swift_SmtpTransport - */ - public static function newInstance($host = 'localhost', $port = 25, - $security = null) - { - return new self($host, $port, $security); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/StreamFilter.php b/h-source/External/swiftmailer/lib/classes/Swift/StreamFilter.php deleted file mode 100755 index 6c262ce..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/StreamFilter.php +++ /dev/null @@ -1,33 +0,0 @@ -_search = $search; - $this->_index = array(); - $this->_tree = array(); - $this->_replace = array(); - $this->_repSize = array(); - - $tree = null; - $i = null; - $last_size = $size = 0; - foreach ($search as $i => $search_element) - { - if ($tree !== null) - { - $tree[-1] = min (count($replace) - 1, $i - 1); - $tree[-2] = $last_size; - } - $tree = &$this->_tree; - if (is_array ($search_element)) - { - foreach ($search_element as $k => $char) - { - $this->_index[$char] = true; - if (!isset($tree[$char])) - { - $tree[$char] = array(); - } - $tree = &$tree[$char]; - } - $last_size = $k+1; - $size = max($size, $last_size); - } - else - { - $last_size = 1; - if (!isset($tree[$search_element])) - { - $tree[$search_element] = array(); - } - $tree = &$tree[$search_element]; - $size = max($last_size, $size); - $this->_index[$search_element] = true; - } - } - if ($i !== null) - { - $tree[-1] = min (count ($replace) - 1, $i); - $tree[-2] = $last_size; - $this->_treeMaxLen = $size; - } - foreach ($replace as $rep) - { - if (!is_array($rep)) - { - $rep = array ($rep); - } - $this->_replace[] = $rep; - } - for ($i = count($this->_replace) - 1; $i >= 0; --$i) - { - $this->_replace[$i] = $rep = $this->filter($this->_replace[$i], $i); - $this->_repSize[$i] = count($rep); - } - } - - /** - * Returns true if based on the buffer passed more bytes should be buffered. - * @param array $buffer - * @return boolean - */ - public function shouldBuffer($buffer) - { - $endOfBuffer = end($buffer); - return isset ($this->_index[$endOfBuffer]); - } - - /** - * Perform the actual replacements on $buffer and return the result. - * @param array $buffer - * @return array - */ - public function filter($buffer, $_minReplaces = -1) - { - if ($this->_treeMaxLen == 0) - { - return $buffer; - } - - $newBuffer = array(); - $buf_size = count($buffer); - for ($i = 0; $i < $buf_size; ++$i) - { - $search_pos = $this->_tree; - $last_found = PHP_INT_MAX; - // We try to find if the next byte is part of a search pattern - for ($j = 0; $j <= $this->_treeMaxLen; ++$j) - { - // We have a new byte for a search pattern - if (isset ($buffer [$p = $i + $j]) && isset($search_pos[$buffer[$p]])) - { - $search_pos = $search_pos[$buffer[$p]]; - // We have a complete pattern, save, in case we don't find a better match later - if (isset($search_pos[- 1]) && $search_pos[-1] < $last_found - && $search_pos[-1] > $_minReplaces) - { - $last_found = $search_pos[-1]; - $last_size = $search_pos[-2]; - } - } - // We got a complete pattern - elseif ($last_found !== PHP_INT_MAX) - { - // Adding replacement datas to output buffer - $rep_size = $this->_repSize[$last_found]; - for ($j = 0; $j < $rep_size; ++$j) - { - $newBuffer[] = $this->_replace[$last_found][$j]; - } - // We Move cursor forward - $i += $last_size - 1; - // Edge Case, last position in buffer - if ($i >= $buf_size) - { - $newBuffer[] = $buffer[$i]; - } - - // We start the next loop - continue 2; - } - else - { - // this byte is not in a pattern and we haven't found another pattern - break; - } - } - // Normal byte, move it to output buffer - $newBuffer[] = $buffer[$i]; - } - - return $newBuffer; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php b/h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php deleted file mode 100755 index 9ab6c30..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilter.php +++ /dev/null @@ -1,66 +0,0 @@ -_search = $search; - $this->_replace = $replace; - } - - /** - * Returns true if based on the buffer passed more bytes should be buffered. - * @param string $buffer - * @return boolean - */ - public function shouldBuffer($buffer) - { - $endOfBuffer = substr($buffer, -1); - foreach ((array) $this->_search as $needle) - { - if (false !== strpos($needle, $endOfBuffer)) - { - return true; - } - } - return false; - } - - /** - * Perform the actual replacements on $buffer and return the result. - * @param string $buffer - * @return string - */ - public function filter($buffer) - { - return str_replace($this->_search, $this->_replace, $buffer); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php b/h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php deleted file mode 100755 index fcd4b83..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/StreamFilters/StringReplacementFilterFactory.php +++ /dev/null @@ -1,53 +0,0 @@ -_filters[$search][$replace])) - { - if (!isset($this->_filters[$search])) - { - $this->_filters[$search] = array(); - } - - if (!isset($this->_filters[$search][$replace])) - { - $this->_filters[$search][$replace] = array(); - } - - $this->_filters[$search][$replace] - = new Swift_StreamFilters_StringReplacementFilter($search, $replace); - } - - return $this->_filters[$search][$replace]; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/SwiftException.php b/h-source/External/swiftmailer/lib/classes/Swift/SwiftException.php deleted file mode 100755 index bd3b656..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/SwiftException.php +++ /dev/null @@ -1,28 +0,0 @@ -_eventDispatcher = $dispatcher; - $this->_buffer = $buf; - $this->_lookupHostname(); - } - - /** - * Set the name of the local domain which Swift will identify itself as. - * This should be a fully-qualified domain name and should be truly the domain - * you're using. If your server doesn't have a domain name, use the IP in square - * brackets (i.e. [127.0.0.1]). - * - * @param string $domain - */ - public function setLocalDomain($domain) - { - $this->_domain = $domain; - return $this; - } - - /** - * Get the name of the domain Swift will identify as. - * - * @return string - */ - public function getLocalDomain() - { - return $this->_domain; - } - - /** - * Start the SMTP connection. - */ - public function start() - { - if (!$this->_started) - { - if ($evt = $this->_eventDispatcher->createTransportChangeEvent($this)) - { - $this->_eventDispatcher->dispatchEvent($evt, 'beforeTransportStarted'); - if ($evt->bubbleCancelled()) - { - return; - } - } - - try - { - $this->_buffer->initialize($this->_getBufferParams()); - } - catch (Swift_TransportException $e) - { - $this->_throwException($e); - } - $this->_readGreeting(); - $this->_doHeloCommand(); - - if ($evt) - { - $this->_eventDispatcher->dispatchEvent($evt, 'transportStarted'); - } - - $this->_started = true; - } - } - - /** - * Test if an SMTP connection has been established. - * - * @return boolean - */ - public function isStarted() - { - return $this->_started; - } - - /** - * Send the given Message. - * - * Recipient/sender data will be retreived from the Message API. - * The return value is the number of recipients who were accepted for delivery. - * - * @param Swift_Mime_Message $message - * @param string[] &$failedRecipients to collect failures by-reference - * @return int - */ - public function send(Swift_Mime_Message $message, &$failedRecipients = null) - { - $sent = 0; - $failedRecipients = (array) $failedRecipients; - - if (!$reversePath = $this->_getReversePath($message)) - { - throw new Swift_TransportException( - 'Cannot send message without a sender address' - ); - } - - if ($evt = $this->_eventDispatcher->createSendEvent($this, $message)) - { - $this->_eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); - if ($evt->bubbleCancelled()) - { - return 0; - } - } - - $to = (array) $message->getTo(); - $cc = (array) $message->getCc(); - $bcc = (array) $message->getBcc(); - - $message->setBcc(array()); - - try - { - $sent += $this->_sendTo($message, $reversePath, $to, $failedRecipients); - $sent += $this->_sendCc($message, $reversePath, $cc, $failedRecipients); - $sent += $this->_sendBcc($message, $reversePath, $bcc, $failedRecipients); - } - catch (Exception $e) - { - $message->setBcc($bcc); - throw $e; - } - - $message->setBcc($bcc); - - if ($evt) - { - if ($sent == count($to) + count($cc) + count($bcc)) - { - $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); - } - elseif ($sent > 0) - { - $evt->setResult(Swift_Events_SendEvent::RESULT_TENTATIVE); - } - else - { - $evt->setResult(Swift_Events_SendEvent::RESULT_FAILED); - } - $evt->setFailedRecipients($failedRecipients); - $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); - } - - $message->generateId(); //Make sure a new Message ID is used - - return $sent; - } - - /** - * Stop the SMTP connection. - */ - public function stop() - { - if ($this->_started) - { - if ($evt = $this->_eventDispatcher->createTransportChangeEvent($this)) - { - $this->_eventDispatcher->dispatchEvent($evt, 'beforeTransportStopped'); - if ($evt->bubbleCancelled()) - { - return; - } - } - - try - { - $this->executeCommand("QUIT\r\n", array(221)); - } - catch (Swift_TransportException $e) {} - - try - { - $this->_buffer->terminate(); - - if ($evt) - { - $this->_eventDispatcher->dispatchEvent($evt, 'transportStopped'); - } - } - catch (Swift_TransportException $e) - { - $this->_throwException($e); - } - } - $this->_started = false; - } - - /** - * Register a plugin. - * - * @param Swift_Events_EventListener $plugin - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - $this->_eventDispatcher->bindEventListener($plugin); - } - - /** - * Reset the current mail transaction. - */ - public function reset() - { - $this->executeCommand("RSET\r\n", array(250)); - } - - /** - * Get the IoBuffer where read/writes are occurring. - * - * @return Swift_Transport_IoBuffer - */ - public function getBuffer() - { - return $this->_buffer; - } - - /** - * Run a command against the buffer, expecting the given response codes. - * - * If no response codes are given, the response will not be validated. - * If codes are given, an exception will be thrown on an invalid response. - * - * @param string $command - * @param int[] $codes - * @param string[] &$failures - * @return string - */ - public function executeCommand($command, $codes = array(), &$failures = null) - { - $failures = (array) $failures; - $seq = $this->_buffer->write($command); - $response = $this->_getFullResponse($seq); - if ($evt = $this->_eventDispatcher->createCommandEvent($this, $command, $codes)) - { - $this->_eventDispatcher->dispatchEvent($evt, 'commandSent'); - } - $this->_assertResponseCode($response, $codes); - return $response; - } - - // -- Protected methods - - /** Read the opening SMTP greeting */ - protected function _readGreeting() - { - $this->_assertResponseCode($this->_getFullResponse(0), array(220)); - } - - /** Send the HELO welcome */ - protected function _doHeloCommand() - { - $this->executeCommand( - sprintf("HELO %s\r\n", $this->_domain), array(250) - ); - } - - /** Send the MAIL FROM command */ - protected function _doMailFromCommand($address) - { - $this->executeCommand( - sprintf("MAIL FROM: <%s>\r\n", $address), array(250) - ); - } - - /** Send the RCPT TO command */ - protected function _doRcptToCommand($address) - { - $this->executeCommand( - sprintf("RCPT TO: <%s>\r\n", $address), array(250, 251, 252) - ); - } - - /** Send the DATA command */ - protected function _doDataCommand() - { - $this->executeCommand("DATA\r\n", array(354)); - } - - /** Stream the contents of the message over the buffer */ - protected function _streamMessage(Swift_Mime_Message $message) - { - $this->_buffer->setWriteTranslations(array("\r\n." => "\r\n..")); - try - { - $message->toByteStream($this->_buffer); - $this->_buffer->flushBuffers(); - } - catch (Swift_TransportException $e) - { - $this->_throwException($e); - } - $this->_buffer->setWriteTranslations(array()); - $this->executeCommand("\r\n.\r\n", array(250)); - } - - /** Determine the best-use reverse path for this message */ - protected function _getReversePath(Swift_Mime_Message $message) - { - $return = $message->getReturnPath(); - $sender = $message->getSender(); - $from = $message->getFrom(); - $path = null; - if (!empty($return)) - { - $path = $return; - } - elseif (!empty($sender)) - { - // Don't use array_keys - reset($sender); // Reset Pointer to first pos - $path = key($sender); // Get key - } - elseif (!empty($from)) - { - reset($from); // Reset Pointer to first pos - $path = key($from); // Get key - } - return $path; - } - - /** Throw a TransportException, first sending it to any listeners */ - protected function _throwException(Swift_TransportException $e) - { - if ($evt = $this->_eventDispatcher->createTransportExceptionEvent($this, $e)) - { - $this->_eventDispatcher->dispatchEvent($evt, 'exceptionThrown'); - if (!$evt->bubbleCancelled()) - { - throw $e; - } - } - else - { - throw $e; - } - } - - /** Throws an Exception if a response code is incorrect */ - protected function _assertResponseCode($response, $wanted) - { - list($code, $separator, $text) = sscanf($response, '%3d%[ -]%s'); - $valid = (empty($wanted) || in_array($code, $wanted)); - - if ($evt = $this->_eventDispatcher->createResponseEvent($this, $response, - $valid)) - { - $this->_eventDispatcher->dispatchEvent($evt, 'responseReceived'); - } - - if (!$valid) - { - $this->_throwException( - new Swift_TransportException( - 'Expected response code ' . implode('/', $wanted) . ' but got code ' . - '"' . $code . '", with message "' . $response . '"' - ) - ); - } - } - - /** Get an entire multi-line response using its sequence number */ - protected function _getFullResponse($seq) - { - $response = ''; - try - { - do - { - $line = $this->_buffer->readLine($seq); - $response .= $line; - } - while (null !== $line && false !== $line && ' ' != $line{3}); - } - catch (Swift_TransportException $e) - { - $this->_throwException($e); - } - return $response; - } - - // -- Private methods - - /** Send an email to the given recipients from the given reverse path */ - private function _doMailTransaction($message, $reversePath, - array $recipients, array &$failedRecipients) - { - $sent = 0; - $this->_doMailFromCommand($reversePath); - foreach ($recipients as $forwardPath) - { - try - { - $this->_doRcptToCommand($forwardPath); - $sent++; - } - catch (Swift_TransportException $e) - { - $failedRecipients[] = $forwardPath; - } - } - - if ($sent != 0) - { - $this->_doDataCommand(); - $this->_streamMessage($message); - } - else - { - $this->reset(); - } - - return $sent; - } - - /** Send a message to the given To: recipients */ - private function _sendTo(Swift_Mime_Message $message, $reversePath, - array $to, array &$failedRecipients) - { - if (empty($to)) - { - return 0; - } - return $this->_doMailTransaction($message, $reversePath, array_keys($to), - $failedRecipients); - } - - /** Send a message to the given Cc: recipients */ - private function _sendCc(Swift_Mime_Message $message, $reversePath, - array $cc, array &$failedRecipients) - { - if (empty($cc)) - { - return 0; - } - return $this->_doMailTransaction($message, $reversePath, array_keys($cc), - $failedRecipients); - } - - /** Send a message to all Bcc: recipients */ - private function _sendBcc(Swift_Mime_Message $message, $reversePath, - array $bcc, array &$failedRecipients) - { - $sent = 0; - foreach ($bcc as $forwardPath => $name) - { - $message->setBcc(array($forwardPath => $name)); - $sent += $this->_doMailTransaction( - $message, $reversePath, array($forwardPath), $failedRecipients - ); - } - return $sent; - } - - /** Try to determine the hostname of the server this is run on */ - private function _lookupHostname() - { - if (!empty($_SERVER['SERVER_NAME']) - && $this->_isFqdn($_SERVER['SERVER_NAME'])) - { - $this->_domain = $_SERVER['SERVER_NAME']; - } - elseif (!empty($_SERVER['SERVER_ADDR'])) - { - $this->_domain = sprintf('[%s]', $_SERVER['SERVER_ADDR']); - } - } - - /** Determine is the $hostname is a fully-qualified name */ - private function _isFqdn($hostname) - { - //We could do a really thorough check, but there's really no point - if (false !== $dotPos = strpos($hostname, '.')) - { - return ($dotPos > 0) && ($dotPos != strlen($hostname) - 1); - } - else - { - return false; - } - } - - /** - * Destructor. - */ - public function __destruct() - { - $this->stop(); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php deleted file mode 100755 index 4c7e0f2..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/CramMd5Authenticator.php +++ /dev/null @@ -1,88 +0,0 @@ -executeCommand("AUTH CRAM-MD5\r\n", array(334)); - $challenge = base64_decode(substr($challenge, 4)); - $message = base64_encode( - $username . ' ' . $this->_getResponse($password, $challenge) - ); - $agent->executeCommand(sprintf("%s\r\n", $message), array(235)); - return true; - } - catch (Swift_TransportException $e) - { - $agent->executeCommand("RSET\r\n", array(250)); - return false; - } - } - - /** - * Generate a CRAM-MD5 response from a server challenge. - * @param string $secret - * @param string $challenge - * @return string - */ - private function _getResponse($secret, $challenge) - { - if (strlen($secret) > 64) - { - $secret = pack('H32', md5($secret)); - } - - if (strlen($secret) < 64) - { - $secret = str_pad($secret, 64, chr(0)); - } - - $k_ipad = substr($secret, 0, 64) ^ str_repeat(chr(0x36), 64); - $k_opad = substr($secret, 0, 64) ^ str_repeat(chr(0x5C), 64); - - $inner = pack('H32', md5($k_ipad . $challenge)); - $digest = md5($k_opad . $inner); - - return $digest; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php deleted file mode 100755 index bd22617..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/LoginAuthenticator.php +++ /dev/null @@ -1,58 +0,0 @@ -executeCommand("AUTH LOGIN\r\n", array(334)); - $agent->executeCommand(sprintf("%s\r\n", base64_encode($username)), array(334)); - $agent->executeCommand(sprintf("%s\r\n", base64_encode($password)), array(235)); - return true; - } - catch (Swift_TransportException $e) - { - $agent->executeCommand("RSET\r\n", array(250)); - return false; - } - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php deleted file mode 100755 index ddd8094..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Auth/PlainAuthenticator.php +++ /dev/null @@ -1,57 +0,0 @@ -executeCommand(sprintf("AUTH PLAIN %s\r\n", $message), array(235)); - return true; - } - catch (Swift_TransportException $e) - { - $agent->executeCommand("RSET\r\n", array(250)); - return false; - } - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php deleted file mode 100755 index a223169..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/AuthHandler.php +++ /dev/null @@ -1,262 +0,0 @@ -setAuthenticators($authenticators); - } - - /** - * Set the Authenticators which can process a login request. - * @param Swift_Transport_Esmtp_Authenticator[] $authenticators - */ - public function setAuthenticators(array $authenticators) - { - $this->_authenticators = $authenticators; - } - - /** - * Get the Authenticators which can process a login request. - * @return Swift_Transport_Esmtp_Authenticator[] - */ - public function getAuthenticators() - { - return $this->_authenticators; - } - - /** - * Set the username to authenticate with. - * @param string $username - */ - public function setUsername($username) - { - $this->_username = $username; - } - - /** - * Get the username to authenticate with. - * @return string - */ - public function getUsername() - { - return $this->_username; - } - - /** - * Set the password to authenticate with. - * @param string $password - */ - public function setPassword($password) - { - $this->_password = $password; - } - - /** - * Get the password to authenticate with. - * @return string - */ - public function getPassword() - { - return $this->_password; - } - - /** - * Set the auth mode to use to authenticate. - * @param string $mode - */ - public function setAuthMode($mode) - { - $this->_auth_mode = $mode; - } - - /** - * Get the auth mode to use to authenticate. - * @return string - */ - public function getAuthMode() - { - return $this->_auth_mode; - } - - /** - * Get the name of the ESMTP extension this handles. - * @return boolean - */ - public function getHandledKeyword() - { - return 'AUTH'; - } - - /** - * Set the parameters which the EHLO greeting indicated. - * @param string[] $parameters - */ - public function setKeywordParams(array $parameters) - { - $this->_esmtpParams = $parameters; - } - - /** - * Runs immediately after a EHLO has been issued. - * @param Swift_Transport_SmtpAgent $agent to read/write - */ - public function afterEhlo(Swift_Transport_SmtpAgent $agent) - { - if ($this->_username) - { - $count = 0; - foreach ($this->_getAuthenticatorsForAgent() as $authenticator) - { - if (in_array(strtolower($authenticator->getAuthKeyword()), - array_map('strtolower', $this->_esmtpParams))) - { - $count++; - if ($authenticator->authenticate($agent, $this->_username, $this->_password)) - { - return; - } - } - } - throw new Swift_TransportException( - 'Failed to authenticate on SMTP server with username "' . - $this->_username . '" using ' . $count . ' possible authenticators' - ); - } - } - - /** - * Not used. - */ - public function getMailParams() - { - return array(); - } - - /** - * Not used. - */ - public function getRcptParams() - { - return array(); - } - - /** - * Not used. - */ - public function onCommand(Swift_Transport_SmtpAgent $agent, - $command, $codes = array(), &$failedRecipients = null, &$stop = false) - { - } - - /** - * Returns +1, -1 or 0 according to the rules for usort(). - * This method is called to ensure extensions can be execute in an appropriate order. - * @param string $esmtpKeyword to compare with - * @return int - */ - public function getPriorityOver($esmtpKeyword) - { - return 0; - } - - /** - * Returns an array of method names which are exposed to the Esmtp class. - * @return string[] - */ - public function exposeMixinMethods() - { - return array('setUsername', 'getUsername', 'setPassword', 'getPassword', 'setAuthMode', 'getAuthMode'); - } - - /** - * Not used. - */ - public function resetState() - { - } - - // -- Protected methods - - /** - * Returns the authenticator list for the given agent. - * @param Swift_Transport_SmtpAgent $agent - * @return array - * @access protected - */ - protected function _getAuthenticatorsForAgent() - { - if (!$mode = strtolower($this->_auth_mode)) - { - return $this->_authenticators; - } - - foreach ($this->_authenticators as $authenticator) - { - if (strtolower($authenticator->getAuthKeyword()) == $mode) - { - return array($authenticator); - } - } - - throw new Swift_TransportException('Auth mode '.$mode.' is invalid'); - } -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php deleted file mode 100755 index bf166d3..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/Esmtp/Authenticator.php +++ /dev/null @@ -1,38 +0,0 @@ -. - * @return string[] - */ - public function getMailParams(); - - /** - * Get params which are appended to RCPT TO:<>. - * @return string[] - */ - public function getRcptParams(); - - /** - * Runs when a command is due to be sent. - * @param Swift_Transport_SmtpAgent $agent to read/write - * @param string $command to send - * @param int[] $codes expected in response - * @param string[] &$failedRecipients - * @param boolean &$stop to be set true if the command is now sent - */ - public function onCommand(Swift_Transport_SmtpAgent $agent, - $command, $codes = array(), &$failedRecipients = null, &$stop = false); - - /** - * Returns +1, -1 or 0 according to the rules for usort(). - * This method is called to ensure extensions can be execute in an appropriate order. - * @param string $esmtpKeyword to compare with - * @return int - */ - public function getPriorityOver($esmtpKeyword); - - /** - * Returns an array of method names which are exposed to the Esmtp class. - * @return string[] - */ - public function exposeMixinMethods(); - - /** - * Tells this handler to clear any buffers and reset its state. - */ - public function resetState(); - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php deleted file mode 100755 index c7833c3..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/EsmtpTransport.php +++ /dev/null @@ -1,340 +0,0 @@ - 'tcp', - 'host' => 'localhost', - 'port' => 25, - 'timeout' => 30, - 'blocking' => 1, - 'type' => Swift_Transport_IoBuffer::TYPE_SOCKET - ); - - /** - * Creates a new EsmtpTransport using the given I/O buffer. - * @param Swift_Transport_IoBuffer $buf - * @param Swift_Transport_EsmtpHandler[] $extensionHandlers - * @param Swift_Events_EventDispatcher $dispatcher - */ - public function __construct(Swift_Transport_IoBuffer $buf, - array $extensionHandlers, Swift_Events_EventDispatcher $dispatcher) - { - parent::__construct($buf, $dispatcher); - $this->setExtensionHandlers($extensionHandlers); - } - - /** - * Set the host to connect to. - * @param string $host - */ - public function setHost($host) - { - $this->_params['host'] = $host; - return $this; - } - - /** - * Get the host to connect to. - * @return string - */ - public function getHost() - { - return $this->_params['host']; - } - - /** - * Set the port to connect to. - * @param int $port - */ - public function setPort($port) - { - $this->_params['port'] = (int) $port; - return $this; - } - - /** - * Get the port to connect to. - * @return int - */ - public function getPort() - { - return $this->_params['port']; - } - - /** - * Set the connection timeout. - * @param int $timeout seconds - */ - public function setTimeout($timeout) - { - $this->_params['timeout'] = (int) $timeout; - return $this; - } - - /** - * Get the connection timeout. - * @return int - */ - public function getTimeout() - { - return $this->_params['timeout']; - } - - /** - * Set the encryption type (tls or ssl) - * @param string $encryption - */ - public function setEncryption($enc) - { - $this->_params['protocol'] = $enc; - return $this; - } - - /** - * Get the encryption type. - * @return string - */ - public function getEncryption() - { - return $this->_params['protocol']; - } - - /** - * Set ESMTP extension handlers. - * @param Swift_Transport_EsmtpHandler[] $handlers - */ - public function setExtensionHandlers(array $handlers) - { - $assoc = array(); - foreach ($handlers as $handler) - { - $assoc[$handler->getHandledKeyword()] = $handler; - } - uasort($assoc, array($this, '_sortHandlers')); - $this->_handlers = $assoc; - $this->_setHandlerParams(); - return $this; - } - - /** - * Get ESMTP extension handlers. - * @return Swift_Transport_EsmtpHandler[] - */ - public function getExtensionHandlers() - { - return array_values($this->_handlers); - } - - /** - * Run a command against the buffer, expecting the given response codes. - * If no response codes are given, the response will not be validated. - * If codes are given, an exception will be thrown on an invalid response. - * @param string $command - * @param int[] $codes - * @param string[] &$failures - * @return string - */ - public function executeCommand($command, $codes = array(), &$failures = null) - { - $failures = (array) $failures; - $stopSignal = false; - $response = null; - foreach ($this->_getActiveHandlers() as $handler) - { - $response = $handler->onCommand( - $this, $command, $codes, $failures, $stopSignal - ); - if ($stopSignal) - { - return $response; - } - } - return parent::executeCommand($command, $codes, $failures); - } - - // -- Mixin invocation code - - /** Mixin handling method for ESMTP handlers */ - public function __call($method, $args) - { - foreach ($this->_handlers as $handler) - { - if (in_array(strtolower($method), - array_map('strtolower', (array) $handler->exposeMixinMethods()) - )) - { - $return = call_user_func_array(array($handler, $method), $args); - //Allow fluid method calls - if (is_null($return) && substr($method, 0, 3) == 'set') - { - return $this; - } - else - { - return $return; - } - } - } - trigger_error('Call to undefined method ' . $method, E_USER_ERROR); - } - - // -- Protected methods - - /** Get the params to initialize the buffer */ - protected function _getBufferParams() - { - return $this->_params; - } - - /** Overridden to perform EHLO instead */ - protected function _doHeloCommand() - { - try - { - $response = $this->executeCommand( - sprintf("EHLO %s\r\n", $this->_domain), array(250) - ); - } - catch (Swift_TransportException $e) - { - return parent::_doHeloCommand(); - } - - $this->_capabilities = $this->_getCapabilities($response); - $this->_setHandlerParams(); - foreach ($this->_getActiveHandlers() as $handler) - { - $handler->afterEhlo($this); - } - } - - /** Overridden to add Extension support */ - protected function _doMailFromCommand($address) - { - $handlers = $this->_getActiveHandlers(); - $params = array(); - foreach ($handlers as $handler) - { - $params = array_merge($params, (array) $handler->getMailParams()); - } - $paramStr = !empty($params) ? ' ' . implode(' ', $params) : ''; - $this->executeCommand( - sprintf("MAIL FROM: <%s>%s\r\n", $address, $paramStr), array(250) - ); - } - - /** Overridden to add Extension support */ - protected function _doRcptToCommand($address) - { - $handlers = $this->_getActiveHandlers(); - $params = array(); - foreach ($handlers as $handler) - { - $params = array_merge($params, (array) $handler->getRcptParams()); - } - $paramStr = !empty($params) ? ' ' . implode(' ', $params) : ''; - $this->executeCommand( - sprintf("RCPT TO: <%s>%s\r\n", $address, $paramStr), array(250, 251, 252) - ); - } - - // -- Private methods - - /** Determine ESMTP capabilities by function group */ - private function _getCapabilities($ehloResponse) - { - $capabilities = array(); - $ehloResponse = trim($ehloResponse); - $lines = explode("\r\n", $ehloResponse); - array_shift($lines); - foreach ($lines as $line) - { - if (preg_match('/^[0-9]{3}[ -]([A-Z0-9-]+)((?:[ =].*)?)$/Di', $line, $matches)) - { - $keyword = strtoupper($matches[1]); - $paramStr = strtoupper(ltrim($matches[2], ' =')); - $params = !empty($paramStr) ? explode(' ', $paramStr) : array(); - $capabilities[$keyword] = $params; - } - } - return $capabilities; - } - - /** Set parameters which are used by each extension handler */ - private function _setHandlerParams() - { - foreach ($this->_handlers as $keyword => $handler) - { - if (array_key_exists($keyword, $this->_capabilities)) - { - $handler->setKeywordParams($this->_capabilities[$keyword]); - } - } - } - - /** Get ESMTP handlers which are currently ok to use */ - private function _getActiveHandlers() - { - $handlers = array(); - foreach ($this->_handlers as $keyword => $handler) - { - if (array_key_exists($keyword, $this->_capabilities)) - { - $handlers[] = $handler; - } - } - return $handlers; - } - - /** Custom sort for extension handler ordering */ - private function _sortHandlers($a, $b) - { - return $a->getPriorityOver($b->getHandledKeyword()); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php deleted file mode 100755 index e62491c..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/FailoverTransport.php +++ /dev/null @@ -1,97 +0,0 @@ -_transports); - $sent = 0; - - for ($i = 0; $i < $maxTransports - && $transport = $this->_getNextTransport(); ++$i) - { - try - { - if (!$transport->isStarted()) - { - $transport->start(); - } - - return $transport->send($message, $failedRecipients); - } - catch (Swift_TransportException $e) - { - $this->_killCurrentTransport(); - } - } - - if (count($this->_transports) == 0) - { - throw new Swift_TransportException( - 'All Transports in FailoverTransport failed, or no Transports available' - ); - } - - return $sent; - } - - // -- Protected methods - - protected function _getNextTransport() - { - if (!isset($this->_currentTransport)) - { - $this->_currentTransport = parent::_getNextTransport(); - } - return $this->_currentTransport; - } - - protected function _killCurrentTransport() - { - $this->_currentTransport = null; - parent::_killCurrentTransport(); - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php deleted file mode 100755 index ac66ef0..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/IoBuffer.php +++ /dev/null @@ -1,65 +0,0 @@ -_transports = $transports; - $this->_deadTransports = array(); - } - - /** - * Get $transports to delegate to. - * - * @return array Swift_Transport - */ - public function getTransports(array $transports) - { - return array_merge($this->_transports, $this->_deadTransports); - } - - /** - * Test if this Transport mechanism has started. - * - * @return boolean - */ - public function isStarted() - { - return count($this->_transports) > 0; - } - - /** - * Start this Transport mechanism. - */ - public function start() - { - $this->_transports = array_merge($this->_transports, $this->_deadTransports); - } - - /** - * Stop this Transport mechanism. - */ - public function stop() - { - foreach ($this->_transports as $transport) - { - $transport->stop(); - } - } - - /** - * Send the given Message. - * - * Recipient/sender data will be retreived from the Message API. - * The return value is the number of recipients who were accepted for delivery. - * - * @param Swift_Mime_Message $message - * @param string[] &$failedRecipients to collect failures by-reference - * @return int - */ - public function send(Swift_Mime_Message $message, &$failedRecipients = null) - { - $maxTransports = count($this->_transports); - $sent = 0; - - for ($i = 0; $i < $maxTransports - && $transport = $this->_getNextTransport(); ++$i) - { - try - { - if (!$transport->isStarted()) - { - $transport->start(); - } - if ($sent = $transport->send($message, $failedRecipients)) - { - break; - } - } - catch (Swift_TransportException $e) - { - $this->_killCurrentTransport(); - } - } - - if (count($this->_transports) == 0) - { - throw new Swift_TransportException( - 'All Transports in LoadBalancedTransport failed, or no Transports available' - ); - } - - return $sent; - } - - /** - * Register a plugin. - * - * @param Swift_Events_EventListener $plugin - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - foreach ($this->_transports as $transport) - { - $transport->registerPlugin($plugin); - } - } - - // -- Protected methods - - /** - * Rotates the transport list around and returns the first instance. - * - * @return Swift_Transport - * @access protected - */ - protected function _getNextTransport() - { - if ($next = array_shift($this->_transports)) - { - $this->_transports[] = $next; - } - return $next; - } - - /** - * Tag the currently used (top of stack) transport as dead/useless. - * - * @access protected - */ - protected function _killCurrentTransport() - { - if ($transport = array_pop($this->_transports)) - { - try - { - $transport->stop(); - } - catch (Exception $e) - { - } - $this->_deadTransports[] = $transport; - } - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php deleted file mode 100755 index dda882f..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/MailInvoker.php +++ /dev/null @@ -1,36 +0,0 @@ -_invoker = $invoker; - $this->_eventDispatcher = $eventDispatcher; - } - - /** - * Not used. - */ - public function isStarted() - { - return false; - } - - /** - * Not used. - */ - public function start() - { - } - - /** - * Not used. - */ - public function stop() - { - } - - /** - * Set the additional parameters used on the mail() function. - * - * This string is formatted for sprintf() where %s is the sender address. - * - * @param string $params - */ - public function setExtraParams($params) - { - $this->_extraParams = $params; - return $this; - } - - /** - * Get the additional parameters used on the mail() function. - * - * This string is formatted for sprintf() where %s is the sender address. - * - * @return string - */ - public function getExtraParams() - { - return $this->_extraParams; - } - - /** - * Send the given Message. - * - * Recipient/sender data will be retreived from the Message API. - * The return value is the number of recipients who were accepted for delivery. - * - * @param Swift_Mime_Message $message - * @param string[] &$failedRecipients to collect failures by-reference - * @return int - */ - public function send(Swift_Mime_Message $message, &$failedRecipients = null) - { - $failedRecipients = (array) $failedRecipients; - - if ($evt = $this->_eventDispatcher->createSendEvent($this, $message)) - { - $this->_eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); - if ($evt->bubbleCancelled()) - { - return 0; - } - } - - $count = ( - count((array) $message->getTo()) - + count((array) $message->getCc()) - + count((array) $message->getBcc()) - ); - - $toHeader = $message->getHeaders()->get('To'); - $subjectHeader = $message->getHeaders()->get('Subject'); - - $to = $toHeader->getFieldBody(); - $subject = $subjectHeader->getFieldBody(); - - $reversePath = $this->_getReversePath($message); - - //Remove headers that would otherwise be duplicated - $message->getHeaders()->remove('To'); - $message->getHeaders()->remove('Subject'); - - $messageStr = $message->toString(); - - $message->getHeaders()->set($toHeader); - $message->getHeaders()->set($subjectHeader); - - //Separate headers from body - if (false !== $endHeaders = strpos($messageStr, "\r\n\r\n")) - { - $headers = substr($messageStr, 0, $endHeaders) . "\r\n"; //Keep last EOL - $body = substr($messageStr, $endHeaders + 4); - } - else - { - $headers = $messageStr . "\r\n"; - $body = ''; - } - - unset($messageStr); - - if ("\r\n" != PHP_EOL) //Non-windows (not using SMTP) - { - $headers = str_replace("\r\n", PHP_EOL, $headers); - $body = str_replace("\r\n", PHP_EOL, $body); - } - else //Windows, using SMTP - { - $headers = str_replace("\r\n.", "\r\n..", $headers); - $body = str_replace("\r\n.", "\r\n..", $body); - } - - if ($this->_invoker->mail($to, $subject, $body, $headers, - sprintf($this->_extraParams, $reversePath))) - { - if ($evt) - { - $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); - $evt->setFailedRecipients($failedRecipients); - $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); - } - } - else - { - $failedRecipients = array_merge( - $failedRecipients, - array_keys((array) $message->getTo()), - array_keys((array) $message->getCc()), - array_keys((array) $message->getBcc()) - ); - - if ($evt) - { - $evt->setResult(Swift_Events_SendEvent::RESULT_FAILED); - $evt->setFailedRecipients($failedRecipients); - $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); - } - - $message->generateId(); - - $count = 0; - } - - return $count; - } - - /** - * Register a plugin. - * - * @param Swift_Events_EventListener $plugin - */ - public function registerPlugin(Swift_Events_EventListener $plugin) - { - $this->_eventDispatcher->bindEventListener($plugin); - } - - // -- Private methods - - /** Determine the best-use reverse path for this message */ - private function _getReversePath(Swift_Mime_Message $message) - { - $return = $message->getReturnPath(); - $sender = $message->getSender(); - $from = $message->getFrom(); - $path = null; - if (!empty($return)) - { - $path = $return; - } - elseif (!empty($sender)) - { - $keys = array_keys($sender); - $path = array_shift($keys); - } - elseif (!empty($from)) - { - $keys = array_keys($from); - $path = array_shift($keys); - } - return $path; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php deleted file mode 100755 index aae8bde..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/SendmailTransport.php +++ /dev/null @@ -1,173 +0,0 @@ - 30, - 'blocking' => 1, - 'command' => '/usr/sbin/sendmail -bs', - 'type' => Swift_Transport_IoBuffer::TYPE_PROCESS - ); - - /** - * Create a new SendmailTransport with $buf for I/O. - * @param Swift_Transport_IoBuffer $buf - * @param Swift_Events_EventDispatcher $dispatcher - */ - public function __construct(Swift_Transport_IoBuffer $buf, - Swift_Events_EventDispatcher $dispatcher) - { - parent::__construct($buf, $dispatcher); - } - - /** - * Start the standalone SMTP session if running in -bs mode. - */ - public function start() - { - if (false !== strpos($this->getCommand(), ' -bs')) - { - parent::start(); - } - } - - /** - * Set the command to invoke. - * If using -t mode you are strongly advised to include -oi or -i in the - * flags. For example: /usr/sbin/sendmail -oi -t - * Swift will append a -f flag if one is not present. - * The recommended mode is "-bs" since it is interactive and failure notifications - * are hence possible. - * @param string $command - */ - public function setCommand($command) - { - $this->_params['command'] = $command; - return $this; - } - - /** - * Get the sendmail command which will be invoked. - * @return string - */ - public function getCommand() - { - return $this->_params['command']; - } - - /** - * Send the given Message. - * Recipient/sender data will be retreived from the Message API. - * The return value is the number of recipients who were accepted for delivery. - * NOTE: If using 'sendmail -t' you will not be aware of any failures until - * they bounce (i.e. send() will always return 100% success). - * @param Swift_Mime_Message $message - * @param string[] &$failedRecipients to collect failures by-reference - * @return int - */ - public function send(Swift_Mime_Message $message, &$failedRecipients = null) - { - $failedRecipients = (array) $failedRecipients; - $command = $this->getCommand(); - $buffer = $this->getBuffer(); - - if (false !== strpos($command, ' -t')) - { - if ($evt = $this->_eventDispatcher->createSendEvent($this, $message)) - { - $this->_eventDispatcher->dispatchEvent($evt, 'beforeSendPerformed'); - if ($evt->bubbleCancelled()) - { - return 0; - } - } - - if (false === strpos($command, ' -f')) - { - $command .= ' -f' . $this->_getReversePath($message); - } - - $buffer->initialize(array_merge($this->_params, array('command' => $command))); - - if (false === strpos($command, ' -i') && false === strpos($command, ' -oi')) - { - $buffer->setWriteTranslations(array("\r\n" => "\n", "\n." => "\n..")); - } - else - { - $buffer->setWriteTranslations(array("\r\n"=>"\n")); - } - - $count = count((array) $message->getTo()) - + count((array) $message->getCc()) - + count((array) $message->getBcc()) - ; - $message->toByteStream($buffer); - $buffer->flushBuffers(); - $buffer->setWriteTranslations(array()); - $buffer->terminate(); - - if ($evt) - { - $evt->setResult(Swift_Events_SendEvent::RESULT_SUCCESS); - $evt->setFailedRecipients($failedRecipients); - $this->_eventDispatcher->dispatchEvent($evt, 'sendPerformed'); - } - - $message->generateId(); - } - elseif (false !== strpos($command, ' -bs')) - { - $count = parent::send($message, $failedRecipients); - } - else - { - $this->_throwException(new Swift_TransportException( - 'Unsupported sendmail command flags [' . $command . ']. ' . - 'Must be one of "-bs" or "-t" but can include additional flags.' - )); - } - - return $count; - } - - // -- Protected methods - - /** Get the params to initialize the buffer */ - protected function _getBufferParams() - { - return $this->_params; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php deleted file mode 100755 index 271ba84..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/SimpleMailInvoker.php +++ /dev/null @@ -1,58 +0,0 @@ -. - - */ - -//@require 'Swift/Transport/MailInvoker.php'; - -/** - * This is the implementation class for {@link Swift_Transport_MailInvoker}. - * - * @package Swift - * @subpackage Transport - * @author Chris Corbyn - */ -class Swift_Transport_SimpleMailInvoker implements Swift_Transport_MailInvoker -{ - - /** - * Send mail via the mail() function. - * - * This method takes the same arguments as PHP mail(). - * - * @param string $to - * @param string $subject - * @param string $body - * @param string $headers - * @param string $extraParams - * - * @return boolean - */ - public function mail($to, $subject, $body, $headers = null, $extraParams = null) - { - if (!ini_get('safe_mode')) - { - return mail($to, $subject, $body, $headers, $extraParams); - } - else - { - return mail($to, $subject, $body, $headers); - } - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php b/h-source/External/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php deleted file mode 100755 index ee9b8ed..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/Transport/SmtpAgent.php +++ /dev/null @@ -1,36 +0,0 @@ -_replacementFactory = $replacementFactory; - } - - /** - * Perform any initialization needed, using the given $params. - * Parameters will vary depending upon the type of IoBuffer used. - * @param array $params - */ - public function initialize(array $params) - { - $this->_params = $params; - switch ($params['type']) - { - case self::TYPE_PROCESS: - $this->_establishProcessConnection(); - break; - case self::TYPE_SOCKET: - default: - $this->_establishSocketConnection(); - break; - } - } - - /** - * Set an individual param on the buffer (e.g. switching to SSL). - * @param string $param - * @param mixed $value - */ - public function setParam($param, $value) - { - if (isset($this->_stream)) - { - switch ($param) - { - case 'protocol': - if (!array_key_exists('protocol', $this->_params) - || $value != $this->_params['protocol']) - { - if ('tls' == $value) - { - stream_socket_enable_crypto( - $this->_stream, true, STREAM_CRYPTO_METHOD_TLS_CLIENT - ); - } - } - break; - } - } - $this->_params[$param] = $value; - } - - /** - * Perform any shutdown logic needed. - */ - public function terminate() - { - if (isset($this->_stream)) - { - switch ($this->_params['type']) - { - case self::TYPE_PROCESS: - fclose($this->_in); - fclose($this->_out); - proc_close($this->_stream); - break; - case self::TYPE_SOCKET: - default: - fclose($this->_stream); - break; - } - } - $this->_stream = null; - $this->_out = null; - $this->_in = null; - } - - /** - * Set an array of string replacements which should be made on data written - * to the buffer. This could replace LF with CRLF for example. - * @param string[] $replacements - */ - public function setWriteTranslations(array $replacements) - { - foreach ($this->_translations as $search => $replace) - { - if (!isset($replacements[$search])) - { - $this->removeFilter($search); - unset($this->_translations[$search]); - } - } - - foreach ($replacements as $search => $replace) - { - if (!isset($this->_translations[$search])) - { - $this->addFilter( - $this->_replacementFactory->createFilter($search, $replace), $search - ); - $this->_translations[$search] = true; - } - } - } - - /** - * Get a line of output (including any CRLF). - * The $sequence number comes from any writes and may or may not be used - * depending upon the implementation. - * @param int $sequence of last write to scan from - * @return string - */ - public function readLine($sequence) - { - if (isset($this->_out) && !feof($this->_out)) - { - $line = fgets($this->_out); - return $line; - } - } - - /** - * Reads $length bytes from the stream into a string and moves the pointer - * through the stream by $length. If less bytes exist than are requested the - * remaining bytes are given instead. If no bytes are remaining at all, boolean - * false is returned. - * @param int $length - * @return string - */ - public function read($length) - { - if (isset($this->_out) && !feof($this->_out)) - { - $ret = fread($this->_out, $length); - return $ret; - } - } - - /** Not implemented */ - public function setReadPointer($byteOffset) - { - } - - // -- Protected methods - - /** Flush the stream contents */ - protected function _flush() - { - if (isset($this->_in)) - { - fflush($this->_in); - } - } - - /** Write this bytes to the stream */ - protected function _commit($bytes) - { - if (isset($this->_in) - && fwrite($this->_in, $bytes)) - { - return ++$this->_sequence; - } - } - - // -- Private methods - - /** - * Establishes a connection to a remote server. - * @access private - */ - private function _establishSocketConnection() - { - $host = $this->_params['host']; - if (!empty($this->_params['protocol'])) - { - $host = $this->_params['protocol'] . '://' . $host; - } - $timeout = 15; - if (!empty($this->_params['timeout'])) - { - $timeout = $this->_params['timeout']; - } - if (!$this->_stream = fsockopen($host, $this->_params['port'], $errno, $errstr, $timeout)) - { - throw new Swift_TransportException( - 'Connection could not be established with host ' . $this->_params['host'] . - ' [' . $errstr . ' #' . $errno . ']' - ); - } - if (!empty($this->_params['blocking'])) - { - stream_set_blocking($this->_stream, 1); - } - else - { - stream_set_blocking($this->_stream, 0); - } - $this->_in =& $this->_stream; - $this->_out =& $this->_stream; - } - - /** - * Opens a process for input/output. - * @access private - */ - private function _establishProcessConnection() - { - $command = $this->_params['command']; - $descriptorSpec = array( - 0 => array('pipe', 'r'), - 1 => array('pipe', 'w'), - 2 => array('pipe', 'w') - ); - $this->_stream = proc_open($command, $descriptorSpec, $pipes); - stream_set_blocking($pipes[2], 0); - if ($err = stream_get_contents($pipes[2])) - { - throw new Swift_TransportException( - 'Process could not be started [' . $err . ']' - ); - } - $this->_in =& $pipes[0]; - $this->_out =& $pipes[1]; - } - -} diff --git a/h-source/External/swiftmailer/lib/classes/Swift/TransportException.php b/h-source/External/swiftmailer/lib/classes/Swift/TransportException.php deleted file mode 100755 index b7cd658..0000000 --- a/h-source/External/swiftmailer/lib/classes/Swift/TransportException.php +++ /dev/null @@ -1,31 +0,0 @@ - register('cache') - -> asAliasOf('cache.array') - - -> register('tempdir') - -> asValue('/tmp') - - -> register('cache.null') - -> asSharedInstanceOf('Swift_KeyCache_NullKeyCache') - - -> register('cache.array') - -> asSharedInstanceOf('Swift_KeyCache_ArrayKeyCache') - -> withDependencies(array('cache.inputstream')) - - -> register('cache.disk') - -> asSharedInstanceOf('Swift_KeyCache_DiskKeyCache') - -> withDependencies(array('cache.inputstream', 'tempdir')) - - -> register('cache.inputstream') - -> asNewInstanceOf('Swift_KeyCache_SimpleKeyCacheInputStream') - - ; diff --git a/h-source/External/swiftmailer/lib/dependency_maps/mime_deps.php b/h-source/External/swiftmailer/lib/dependency_maps/mime_deps.php deleted file mode 100755 index e03927a..0000000 --- a/h-source/External/swiftmailer/lib/dependency_maps/mime_deps.php +++ /dev/null @@ -1,97 +0,0 @@ - register('properties.charset') - -> asValue('utf-8') - - -> register('mime.message') - -> asNewInstanceOf('Swift_Mime_SimpleMessage') - -> withDependencies(array( - 'mime.headerset', - 'mime.qpcontentencoder', - 'cache', - 'properties.charset' - )) - - -> register('mime.part') - -> asNewInstanceOf('Swift_Mime_MimePart') - -> withDependencies(array( - 'mime.headerset', - 'mime.qpcontentencoder', - 'cache', - 'properties.charset' - )) - - -> register('mime.attachment') - -> asNewInstanceOf('Swift_Mime_Attachment') - -> withDependencies(array( - 'mime.headerset', - 'mime.base64contentencoder', - 'cache' - )) - -> addConstructorValue($swift_mime_types) - - -> register('mime.embeddedfile') - -> asNewInstanceOf('Swift_Mime_EmbeddedFile') - -> withDependencies(array( - 'mime.headerset', - 'mime.base64contentencoder', - 'cache' - )) - -> addConstructorValue($swift_mime_types) - - -> register('mime.headerfactory') - -> asNewInstanceOf('Swift_Mime_SimpleHeaderFactory') - -> withDependencies(array( - 'mime.qpheaderencoder', - 'mime.rfc2231encoder', - 'properties.charset' - )) - - -> register('mime.headerset') - -> asNewInstanceOf('Swift_Mime_SimpleHeaderSet') - -> withDependencies(array('mime.headerfactory', 'properties.charset')) - - -> register('mime.qpheaderencoder') - -> asNewInstanceOf('Swift_Mime_HeaderEncoder_QpHeaderEncoder') - -> withDependencies(array('mime.charstream')) - - -> register('mime.charstream') - -> asNewInstanceOf('Swift_CharacterStream_NgCharacterStream') - -> withDependencies(array('mime.characterreaderfactory', 'properties.charset')) - - -> register('mime.bytecanonicalizer') - -> asSharedInstanceOf('Swift_StreamFilters_ByteArrayReplacementFilter') - -> addConstructorValue(array(array(0x0D, 0x0A), array(0x0D), array(0x0A))) - -> addConstructorValue(array(array(0x0A), array(0x0A), array(0x0D, 0x0A))) - - -> register('mime.characterreaderfactory') - -> asSharedInstanceOf('Swift_CharacterReaderFactory_SimpleCharacterReaderFactory') - - -> register('mime.qpcontentencoder') - -> asNewInstanceOf('Swift_Mime_ContentEncoder_QpContentEncoder') - -> withDependencies(array('mime.charstream', 'mime.bytecanonicalizer')) - - -> register('mime.7bitcontentencoder') - -> asNewInstanceOf('Swift_Mime_ContentEncoder_PlainContentEncoder') - -> addConstructorValue('7bit') - -> addConstructorValue(true) - - -> register('mime.8bitcontentencoder') - -> asNewInstanceOf('Swift_Mime_ContentEncoder_PlainContentEncoder') - -> addConstructorValue('8bit') - -> addConstructorValue(true) - - -> register('mime.base64contentencoder') - -> asSharedInstanceOf('Swift_Mime_ContentEncoder_Base64ContentEncoder') - - -> register('mime.rfc2231encoder') - -> asNewInstanceOf('Swift_Encoder_Rfc2231Encoder') - -> withDependencies(array('mime.charstream')) - - ; - -unset($swift_mime_types); diff --git a/h-source/External/swiftmailer/lib/dependency_maps/transport_deps.php b/h-source/External/swiftmailer/lib/dependency_maps/transport_deps.php deleted file mode 100755 index 32881d6..0000000 --- a/h-source/External/swiftmailer/lib/dependency_maps/transport_deps.php +++ /dev/null @@ -1,62 +0,0 @@ - register('transport.smtp') - -> asNewInstanceOf('Swift_Transport_EsmtpTransport') - -> withDependencies(array( - 'transport.buffer', - array('transport.authhandler'), - 'transport.eventdispatcher' - )) - - -> register('transport.sendmail') - -> asNewInstanceOf('Swift_Transport_SendmailTransport') - -> withDependencies(array( - 'transport.buffer', - 'transport.eventdispatcher' - )) - - -> register('transport.mail') - -> asNewInstanceOf('Swift_Transport_MailTransport') - -> withDependencies(array('transport.mailinvoker', 'transport.eventdispatcher')) - - -> register('transport.loadbalanced') - -> asNewInstanceOf('Swift_Transport_LoadBalancedTransport') - - -> register('transport.failover') - -> asNewInstanceOf('Swift_Transport_FailoverTransport') - - -> register('transport.mailinvoker') - -> asSharedInstanceOf('Swift_Transport_SimpleMailInvoker') - - -> register('transport.buffer') - -> asNewInstanceOf('Swift_Transport_StreamBuffer') - -> withDependencies(array('transport.replacementfactory')) - - -> register('transport.authhandler') - -> asNewInstanceOf('Swift_Transport_Esmtp_AuthHandler') - -> withDependencies(array( - array( - 'transport.crammd5auth', - 'transport.loginauth', - 'transport.plainauth' - ) - )) - - -> register('transport.crammd5auth') - -> asNewInstanceOf('Swift_Transport_Esmtp_Auth_CramMd5Authenticator') - - -> register('transport.loginauth') - -> asNewInstanceOf('Swift_Transport_Esmtp_Auth_LoginAuthenticator') - - -> register('transport.plainauth') - -> asNewInstanceOf('Swift_Transport_Esmtp_Auth_PlainAuthenticator') - - -> register('transport.eventdispatcher') - -> asNewInstanceOf('Swift_Events_SimpleEventDispatcher') - - -> register('transport.replacementfactory') - -> asSharedInstanceOf('Swift_StreamFilters_StringReplacementFilterFactory') - - ; diff --git a/h-source/External/swiftmailer/lib/mime_types.php b/h-source/External/swiftmailer/lib/mime_types.php deleted file mode 100755 index 65c9aa0..0000000 --- a/h-source/External/swiftmailer/lib/mime_types.php +++ /dev/null @@ -1,76 +0,0 @@ - 'audio/x-aiff', - 'aiff' => 'audio/x-aiff', - 'avi' => 'video/avi', - 'bmp' => 'image/bmp', - 'bz2' => 'application/x-bz2', - 'csv' => 'text/csv', - 'dmg' => 'application/x-apple-diskimage', - 'doc' => 'application/msword', - 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', - 'eml' => 'message/rfc822', - 'aps' => 'application/postscript', - 'exe' => 'application/x-ms-dos-executable', - 'flv' => 'video/x-flv', - 'gif' => 'image/gif', - 'gz' => 'application/x-gzip', - 'hqx' => 'application/stuffit', - 'htm' => 'text/html', - 'html' => 'text/html', - 'jar' => 'application/x-java-archive', - 'jpeg' => 'image/jpeg', - 'jpg' => 'image/jpeg', - 'm3u' => 'audio/x-mpegurl', - 'm4a' => 'audio/mp4', - 'mdb' => 'application/x-msaccess', - 'mid' => 'audio/midi', - 'midi' => 'audio/midi', - 'mov' => 'video/quicktime', - 'mp3' => 'audio/mpeg', - 'mp4' => 'video/mp4', - 'mpeg' => 'video/mpeg', - 'mpg' => 'video/mpeg', - 'odg' => 'vnd.oasis.opendocument.graphics', - 'odp' => 'vnd.oasis.opendocument.presentation', - 'odt' => 'vnd.oasis.opendocument.text', - 'ods' => 'vnd.oasis.opendocument.spreadsheet', - 'ogg' => 'audio/ogg', - 'pdf' => 'application/pdf', - 'png' => 'image/png', - 'ppt' => 'application/vnd.ms-powerpoint', - 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', - 'ps' => 'application/postscript', - 'rar' => 'application/x-rar-compressed', - 'rtf' => 'application/rtf', - 'tar' => 'application/x-tar', - 'sit' => 'application/x-stuffit', - 'svg' => 'image/svg+xml', - 'tif' => 'image/tiff', - 'tiff' => 'image/tiff', - 'ttf' => 'application/x-font-truetype', - 'txt' => 'text/plain', - 'vcf' => 'text/x-vcard', - 'wav' => 'audio/wav', - 'wma' => 'audio/x-ms-wma', - 'wmv' => 'audio/x-ms-wmv', - 'xls' => 'application/excel', - 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', - 'xml' => 'application/xml', - 'zip' => 'application/zip' -); diff --git a/h-source/External/swiftmailer/lib/preferences.php b/h-source/External/swiftmailer/lib/preferences.php deleted file mode 100755 index 0b9e4b1..0000000 --- a/h-source/External/swiftmailer/lib/preferences.php +++ /dev/null @@ -1,20 +0,0 @@ -setCharset('utf-8'); - -// Without these lines the default caching mechanism is "array" but this uses -// a lot of memory. -// If possible, use a disk cache to enable attaching large attachments etc -if (function_exists('sys_get_temp_dir') && is_writable(sys_get_temp_dir())) -{ - Swift_Preferences::getInstance() - -> setTempDir(sys_get_temp_dir()) - -> setCacheType('disk'); -} diff --git a/h-source/External/swiftmailer/lib/swift_init.php b/h-source/External/swiftmailer/lib/swift_init.php deleted file mode 100755 index fe624a9..0000000 --- a/h-source/External/swiftmailer/lib/swift_init.php +++ /dev/null @@ -1,21 +0,0 @@ - - -GNOME icons, Humanity icons, and elementary icons are all licensed under the GPL. - -This package is licensed under GNU General Public License version 2. - -Icons based on GNOME and other GNOME projects are licensed GPL. - You can visit the GNOME website here: - http://www.gnome.org/ - -Icons based on Tango sources or taken from the Tango project are public domain. - You can visit the Tango project website here: - http://tango.freedesktop.org/Tango_Desktop_Project - -Icons based on Humanity sources or taken from the elementary project are licensed GPL. - You can visit the Humanity website here: - http://launchpad.net/humanity - -#################### -Special Thanks: # -#################### - -The awesome Humanity team for their hard work! diff --git a/h-source/Img/Icons/elementary_2_5/CONTRIBUTORS b/h-source/Img/Icons/elementary_2_5/CONTRIBUTORS deleted file mode 100755 index 801c4cc..0000000 --- a/h-source/Img/Icons/elementary_2_5/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -Sebastian Porta -Oliver Scholtz -Dennis Fisher, for his amazing work with emblems to make them look beautiful. diff --git a/h-source/Img/Icons/elementary_2_5/COPYING b/h-source/Img/Icons/elementary_2_5/COPYING deleted file mode 100755 index d60c31a..0000000 --- a/h-source/Img/Icons/elementary_2_5/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/h-source/Img/Icons/elementary_2_5/ChangeLog b/h-source/Img/Icons/elementary_2_5/ChangeLog deleted file mode 100755 index 2ba7169..0000000 --- a/h-source/Img/Icons/elementary_2_5/ChangeLog +++ /dev/null @@ -1,6 +0,0 @@ -Elementary icons 2.5 kde port - by jetpack, changelog: - -0.1 -=== -* Initial Version. -* Elementary icons by Dan Rabbit v2.5 \ No newline at end of file diff --git a/h-source/Img/Icons/elementary_2_5/add.png b/h-source/Img/Icons/elementary_2_5/add.png deleted file mode 100755 index e6c9c9c..0000000 Binary files a/h-source/Img/Icons/elementary_2_5/add.png and /dev/null differ diff --git a/h-source/Img/Icons/elementary_2_5/clear_filter.png b/h-source/Img/Icons/elementary_2_5/clear_filter.png deleted file mode 100755 index c4b47db..0000000 Binary files a/h-source/Img/Icons/elementary_2_5/clear_filter.png and /dev/null differ diff --git a/h-source/Img/Icons/elementary_2_5/delete.png b/h-source/Img/Icons/elementary_2_5/delete.png deleted file mode 100755 index c4b47db..0000000 Binary files a/h-source/Img/Icons/elementary_2_5/delete.png and /dev/null differ diff --git a/h-source/Img/Icons/elementary_2_5/down.png b/h-source/Img/Icons/elementary_2_5/down.png deleted file mode 100755 index 21c6d58..0000000 Binary files a/h-source/Img/Icons/elementary_2_5/down.png and /dev/null differ diff --git a/h-source/Img/Icons/elementary_2_5/edit.png b/h-source/Img/Icons/elementary_2_5/edit.png deleted file mode 100755 index ed0d0ef..0000000 Binary files a/h-source/Img/Icons/elementary_2_5/edit.png and /dev/null differ diff --git a/h-source/Img/Icons/elementary_2_5/find.png b/h-source/Img/Icons/elementary_2_5/find.png deleted file mode 100755 index 382cc98..0000000 Binary files a/h-source/Img/Icons/elementary_2_5/find.png and /dev/null differ diff --git a/h-source/Img/Icons/elementary_2_5/left.png b/h-source/Img/Icons/elementary_2_5/left.png deleted file mode 100755 index 316d4c1..0000000 Binary files a/h-source/Img/Icons/elementary_2_5/left.png and /dev/null differ diff --git a/h-source/Img/Icons/elementary_2_5/link.png b/h-source/Img/Icons/elementary_2_5/link.png deleted file mode 100755 index 625a1fb..0000000 Binary files a/h-source/Img/Icons/elementary_2_5/link.png and /dev/null differ diff --git a/h-source/Img/Icons/elementary_2_5/panel.png b/h-source/Img/Icons/elementary_2_5/panel.png deleted file mode 100755 index 464149f..0000000 Binary files a/h-source/Img/Icons/elementary_2_5/panel.png and /dev/null differ diff --git a/h-source/Img/Icons/elementary_2_5/up.png b/h-source/Img/Icons/elementary_2_5/up.png deleted file mode 100755 index 14d3603..0000000 Binary files a/h-source/Img/Icons/elementary_2_5/up.png and /dev/null differ diff --git a/h-source/Img/Icons/file.png b/h-source/Img/Icons/file.png deleted file mode 100644 index 443765f..0000000 Binary files a/h-source/Img/Icons/file.png and /dev/null differ diff --git a/h-source/Img/Icons/folder.png b/h-source/Img/Icons/folder.png deleted file mode 100644 index 89fb6d5..0000000 Binary files a/h-source/Img/Icons/folder.png and /dev/null differ diff --git a/h-source/Img/Icons/image.png b/h-source/Img/Icons/image.png deleted file mode 100644 index bbc8c82..0000000 Binary files a/h-source/Img/Icons/image.png and /dev/null differ diff --git a/h-source/Img/Icons/index.html b/h-source/Img/Icons/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Img/Icons/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Img/back-60.png b/h-source/Img/back-60.png deleted file mode 100644 index 225df8e..0000000 Binary files a/h-source/Img/back-60.png and /dev/null differ diff --git a/h-source/Img/back_last.png b/h-source/Img/back_last.png deleted file mode 100644 index 6411e49..0000000 Binary files a/h-source/Img/back_last.png and /dev/null differ diff --git a/h-source/Img/back_wiki.png b/h-source/Img/back_wiki.png deleted file mode 100644 index b34a9b9..0000000 Binary files a/h-source/Img/back_wiki.png and /dev/null differ diff --git a/h-source/Img/discover.png b/h-source/Img/discover.png deleted file mode 100644 index 28c799a..0000000 Binary files a/h-source/Img/discover.png and /dev/null differ diff --git a/h-source/Img/download.png b/h-source/Img/download.png deleted file mode 100644 index d2f81dc..0000000 Binary files a/h-source/Img/download.png and /dev/null differ diff --git a/h-source/Img/download_code.png b/h-source/Img/download_code.png deleted file mode 100755 index f40fc74..0000000 Binary files a/h-source/Img/download_code.png and /dev/null differ diff --git a/h-source/Img/download_code_gpl3.png b/h-source/Img/download_code_gpl3.png deleted file mode 100644 index 7349d11..0000000 Binary files a/h-source/Img/download_code_gpl3.png and /dev/null differ diff --git a/h-source/Img/edit-60.png b/h-source/Img/edit-60.png deleted file mode 100644 index 254ce23..0000000 Binary files a/h-source/Img/edit-60.png and /dev/null differ diff --git a/h-source/Img/fingerprint_icon-22.png b/h-source/Img/fingerprint_icon-22.png deleted file mode 100644 index 5593419..0000000 Binary files a/h-source/Img/fingerprint_icon-22.png and /dev/null differ diff --git a/h-source/Img/fingerprint_icon.png b/h-source/Img/fingerprint_icon.png deleted file mode 100644 index 989ba28..0000000 Binary files a/h-source/Img/fingerprint_icon.png and /dev/null differ diff --git a/h-source/Img/fsf_logo.png b/h-source/Img/fsf_logo.png deleted file mode 100755 index 90ac03d..0000000 Binary files a/h-source/Img/fsf_logo.png and /dev/null differ diff --git a/h-source/Img/history-60.png b/h-source/Img/history-60.png deleted file mode 100644 index c726964..0000000 Binary files a/h-source/Img/history-60.png and /dev/null differ diff --git a/h-source/Img/link.png b/h-source/Img/link.png deleted file mode 100644 index 12f9bce..0000000 Binary files a/h-source/Img/link.png and /dev/null differ diff --git a/h-source/Img/mobile.png b/h-source/Img/mobile.png deleted file mode 100644 index 4fbf1de..0000000 Binary files a/h-source/Img/mobile.png and /dev/null differ diff --git a/h-source/Img/new-60.png b/h-source/Img/new-60.png deleted file mode 100644 index d484867..0000000 Binary files a/h-source/Img/new-60.png and /dev/null differ diff --git a/h-source/Img/popup_back.png b/h-source/Img/popup_back.png deleted file mode 100644 index 4cb7139..0000000 Binary files a/h-source/Img/popup_back.png and /dev/null differ diff --git a/h-source/Img/rss.png b/h-source/Img/rss.png deleted file mode 100644 index f744669..0000000 Binary files a/h-source/Img/rss.png and /dev/null differ diff --git a/h-source/Img/search_back.png b/h-source/Img/search_back.png deleted file mode 100644 index 6fd3b01..0000000 Binary files a/h-source/Img/search_back.png and /dev/null differ diff --git a/h-source/Img/tab_icon_2.ico b/h-source/Img/tab_icon_2.ico deleted file mode 100644 index 1adece3..0000000 Binary files a/h-source/Img/tab_icon_2.ico and /dev/null differ diff --git a/h-source/Img/talk-60.png b/h-source/Img/talk-60.png deleted file mode 100644 index d892a8d..0000000 Binary files a/h-source/Img/talk-60.png and /dev/null differ diff --git a/h-source/Img/talk_messages.png b/h-source/Img/talk_messages.png deleted file mode 100644 index 6a753d5..0000000 Binary files a/h-source/Img/talk_messages.png and /dev/null differ diff --git a/h-source/Img/title.png b/h-source/Img/title.png deleted file mode 100644 index fb0b38d..0000000 Binary files a/h-source/Img/title.png and /dev/null differ diff --git a/h-source/Js/DisplayTag.js b/h-source/Js/DisplayTag.js deleted file mode 100755 index 1ba1fb7..0000000 --- a/h-source/Js/DisplayTag.js +++ /dev/null @@ -1,10 +0,0 @@ - \ No newline at end of file diff --git a/h-source/Js/TinyMCE.js b/h-source/Js/TinyMCE.js deleted file mode 100755 index b0f994e..0000000 --- a/h-source/Js/TinyMCE.js +++ /dev/null @@ -1,34 +0,0 @@ -tinyMCE.init({ - // General options - mode : "textareas", - theme : "advanced", - editor_selector : "contentArea", -// editor_deselector : "mceNoEditor", - plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template", - - // Theme options - theme_advanced_buttons1 : "justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect", - theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,code", - theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media", - theme_advanced_buttons4 : "styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,template,|,forecolor,backcolor,bold,italic,underline,strikethrough,|,insertdate,inserttime,preview", - theme_advanced_toolbar_location : "top", - theme_advanced_toolbar_align : "left", - theme_advanced_statusbar_location : "bottom", - theme_advanced_resizing : true, - - // Example content CSS (should be your site CSS) - content_css : "../stili_editor.css", - - // Drop lists for link/image/media/template dialogs - template_external_list_url : "lists/template_list.js", - external_link_list_url : "lists/link_list.js", - external_image_list_url : "lists/image_list.js", - media_external_list_url : "lists/media_list.js", - - // Replace values for the template plugin - template_replace_values : { - username : "Some User", - staffid : "991234" - } - }); - diff --git a/h-source/Js/functions.js b/h-source/Js/functions.js deleted file mode 100644 index 5b426d2..0000000 --- a/h-source/Js/functions.js +++ /dev/null @@ -1,189 +0,0 @@ - \ No newline at end of file diff --git a/h-source/Js/index.html b/h-source/Js/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Js/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png deleted file mode 100755 index 82524ab..0000000 Binary files a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png and /dev/null differ diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png deleted file mode 100755 index 6aed97a..0000000 Binary files a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png and /dev/null differ diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png deleted file mode 100755 index f11ca67..0000000 Binary files a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png and /dev/null differ diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png deleted file mode 100755 index 68306d1..0000000 Binary files a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png and /dev/null differ diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png deleted file mode 100755 index f567c28..0000000 Binary files a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png and /dev/null differ diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png deleted file mode 100755 index 29e9965..0000000 Binary files a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png and /dev/null differ diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png deleted file mode 100755 index 9a46d19..0000000 Binary files a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png and /dev/null differ diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png deleted file mode 100755 index f811f30..0000000 Binary files a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png and /dev/null differ diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png deleted file mode 100755 index 755fe99..0000000 Binary files a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png and /dev/null differ diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png deleted file mode 100755 index 98705f9..0000000 Binary files a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png and /dev/null differ diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png deleted file mode 100755 index 2179078..0000000 Binary files a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png and /dev/null differ diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png deleted file mode 100755 index de76ce2..0000000 Binary files a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png and /dev/null differ diff --git a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png b/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png deleted file mode 100755 index 42f8f99..0000000 Binary files a/h-source/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png and /dev/null differ diff --git a/h-source/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css b/h-source/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css deleted file mode 100755 index c4ed3ea..0000000 --- a/h-source/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css +++ /dev/null @@ -1,315 +0,0 @@ -/* - * jQuery UI CSS Framework @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { display: none; } -.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } -.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } -.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } -.ui-helper-clearfix { display: inline-block; } -/* required comment for clearfix to work in Opera \*/ -* html .ui-helper-clearfix { height:1%; } -.ui-helper-clearfix { display:block; } -/* end clearfix */ -.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { cursor: default !important; } - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } - - -/* - * jQuery UI CSS Framework @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - * - * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=segoe%20ui,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=3px&bgColorHeader=f9f9f9&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=100&borderColorHeader=cccccc&fcHeader=e69700&iconColorHeader=5fa5e3&bgColorContent=eeeeee&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=0a82eb&bgColorDefault=1484e6&bgTextureDefault=08_diagonals_thick.png&bgImgOpacityDefault=22&borderColorDefault=ffffff&fcDefault=ffffff&iconColorDefault=fcdd4a&bgColorHover=2293f7&bgTextureHover=08_diagonals_thick.png&bgImgOpacityHover=26&borderColorHover=2293f7&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=e69700&bgTextureActive=08_diagonals_thick.png&bgImgOpacityActive=20&borderColorActive=e69700&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=c5ddfc&bgTextureHighlight=07_diagonals_small.png&bgImgOpacityHighlight=25&borderColorHighlight=ffffff&fcHighlight=333333&iconColorHighlight=0b54d5&bgColorError=e69700&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=20&borderColorError=e69700&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=e6b900&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=e69700&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=20&thicknessShadow=0px&offsetTopShadow=6px&offsetLeftShadow=6px&cornerRadiusShadow=3px - */ - - -/* Component containers -----------------------------------*/ -.ui-widget { font-family: segoe ui, Arial, sans-serif; font-size: 1.1em; } -.ui-widget .ui-widget { font-size: 1em; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: segoe ui, Arial, sans-serif; font-size: 1em; } -.ui-widget-content { border: 1px solid #aaaaaa; background: #eeeeee url(images/ui-bg_inset-hard_100_eeeeee_1x100.png) 50% bottom repeat-x; color: #222222; } -.ui-widget-content a { color: #222222; } -.ui-widget-header { border: 1px solid #cccccc; background: #f9f9f9 url(images/ui-bg_highlight-soft_100_f9f9f9_1x100.png) 50% 50% repeat-x; color: #e69700; font-weight: bold; } -.ui-widget-header a { color: #e69700; } - -/* Interaction states -----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #ffffff; background: #1484e6 url(images/ui-bg_diagonals-thick_22_1484e6_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #ffffff; text-decoration: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #2293f7; background: #2293f7 url(images/ui-bg_diagonals-thick_26_2293f7_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } -.ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; } -.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #e69700; background: #e69700 url(images/ui-bg_diagonals-thick_20_e69700_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; } -.ui-widget :active { outline: none; } - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #ffffff; background: #c5ddfc url(images/ui-bg_diagonals-small_25_c5ddfc_40x40.png) 50% 50% repeat; color: #333333; } -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #333333; } -.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #e69700; background: #e69700 url(images/ui-bg_diagonals-thick_20_e69700_40x40.png) 50% 50% repeat; color: #ffffff; } -.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } -.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } -.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_0a82eb_256x240.png); } -.ui-widget-content .ui-icon {background-image: url(images/ui-icons_0a82eb_256x240.png); } -.ui-widget-header .ui-icon {background-image: url(images/ui-icons_5fa5e3_256x240.png); } -.ui-state-default .ui-icon { background-image: url(images/ui-icons_fcdd4a_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } -.ui-state-active .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_0b54d5_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } - -/* positioning */ -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-off { background-position: -96px -144px; } -.ui-icon-radio-on { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-tl { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; } -.ui-corner-tr { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; } -.ui-corner-bl { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; } -.ui-corner-br { -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } -.ui-corner-top { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; } -.ui-corner-bottom { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } -.ui-corner-right { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } -.ui-corner-left { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; } -.ui-corner-all { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } - -/* Overlays */ -.ui-widget-overlay { background: #e6b900 url(images/ui-bg_flat_0_e6b900_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } -.ui-widget-shadow { margin: 6px 0 0 6px; padding: 0px; background: #e69700 url(images/ui-bg_flat_0_e69700_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; }/* - * jQuery UI Dialog @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Dialog#theming - */ -.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } -.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } -.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } -.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } -.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } -.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } -.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } -.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } -.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } -.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } -.ui-draggable .ui-dialog-titlebar { cursor: move; } diff --git a/h-source/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js b/h-source/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js deleted file mode 100755 index 7469ef3..0000000 --- a/h-source/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js +++ /dev/null @@ -1,87 +0,0 @@ -/*! - * jQuery UI 1.8.4 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI - */ -(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.4",plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=0)&&c(a).is(":focusable")}})}})(jQuery); -;/*! - * jQuery UI Widget 1.8.4 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Widget - */ -(function(b,j){var k=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return k.call(b(this),a,c)})};b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options); -b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}): -this.each(function(){var g=b.data(this,a);if(g){d&&g.option(d);g._init()}else b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}); -this._create();this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}b.each(d,function(f, -h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a= -b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery); -;/* - * jQuery UI Position 1.8.4 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Position - */ -(function(c){c.ui=c.ui||{};var m=/left|center|right/,n=/top|center|bottom/,p=c.fn.position,q=c.fn.offset;c.fn.position=function(a){if(!a||!a.of)return p.apply(this,arguments);a=c.extend({},a);var b=c(a.of),d=(a.collision||"flip").split(" "),e=a.offset?a.offset.split(" "):[0,0],g,h,i;if(a.of.nodeType===9){g=b.width();h=b.height();i={top:0,left:0}}else if(a.of.scrollTo&&a.of.document){g=b.width();h=b.height();i={top:b.scrollTop(),left:b.scrollLeft()}}else if(a.of.preventDefault){a.at="left top";g=h= -0;i={top:a.of.pageY,left:a.of.pageX}}else{g=b.outerWidth();h=b.outerHeight();i=b.offset()}c.each(["my","at"],function(){var f=(a[this]||"").split(" ");if(f.length===1)f=m.test(f[0])?f.concat(["center"]):n.test(f[0])?["center"].concat(f):["center","center"];f[0]=m.test(f[0])?f[0]:"center";f[1]=n.test(f[1])?f[1]:"center";a[this]=f});if(d.length===1)d[1]=d[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(a.at[0]==="right")i.left+=g;else if(a.at[0]==="center")i.left+= -g/2;if(a.at[1]==="bottom")i.top+=h;else if(a.at[1]==="center")i.top+=h/2;i.left+=e[0];i.top+=e[1];return this.each(function(){var f=c(this),k=f.outerWidth(),l=f.outerHeight(),j=c.extend({},i);if(a.my[0]==="right")j.left-=k;else if(a.my[0]==="center")j.left-=k/2;if(a.my[1]==="bottom")j.top-=l;else if(a.my[1]==="center")j.top-=l/2;j.left=parseInt(j.left);j.top=parseInt(j.top);c.each(["left","top"],function(o,r){c.ui.position[d[o]]&&c.ui.position[d[o]][r](j,{targetWidth:g,targetHeight:h,elemWidth:k, -elemHeight:l,offset:e,my:a.my,at:a.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(j,{using:a.using}))})};c.ui.position={fit:{left:function(a,b){var d=c(window);b=a.left+b.elemWidth-d.width()-d.scrollLeft();a.left=b>0?a.left-b:Math.max(0,a.left)},top:function(a,b){var d=c(window);b=a.top+b.elemHeight-d.height()-d.scrollTop();a.top=b>0?a.top-b:Math.max(0,a.top)}},flip:{left:function(a,b){if(b.at[0]!=="center"){var d=c(window);d=a.left+b.elemWidth-d.width()-d.scrollLeft();var e=b.my[0]==="left"? --b.elemWidth:b.my[0]==="right"?b.elemWidth:0,g=-2*b.offset[0];a.left+=a.left<0?e+b.targetWidth+g:d>0?e-b.targetWidth+g:0}},top:function(a,b){if(b.at[1]!=="center"){var d=c(window);d=a.top+b.elemHeight-d.height()-d.scrollTop();var e=b.my[1]==="top"?-b.elemHeight:b.my[1]==="bottom"?b.elemHeight:0,g=b.at[1]==="top"?b.targetHeight:-b.targetHeight,h=-2*b.offset[1];a.top+=a.top<0?e+b.targetHeight+h:d>0?e+g+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(a,b){if(/static/.test(c.curCSS(a,"position")))a.style.position= -"relative";var d=c(a),e=d.offset(),g=parseInt(c.curCSS(a,"top",true),10)||0,h=parseInt(c.curCSS(a,"left",true),10)||0;e={top:b.top-e.top+g,left:b.left-e.left+h};"using"in b?b.using.call(a,e):d.css(e)};c.fn.offset=function(a){var b=this[0];if(!b||!b.ownerDocument)return null;if(a)return this.each(function(){c.offset.setOffset(this,a)});return q.call(this)}}})(jQuery); -;/* - * jQuery UI Dialog 1.8.4 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Dialog - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.button.js - * jquery.ui.draggable.js - * jquery.ui.mouse.js - * jquery.ui.position.js - * jquery.ui.resizable.js - */ -(function(c,j){c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",of:window,collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title"); -if(typeof this.originalTitle!=="string")this.originalTitle="";var a=this,b=a.options,d=b.title||a.originalTitle||" ",f=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
              ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(i){a.moveToTop(false, -i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var e=(a.uiDialogTitlebar=c("
              ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i); -return false}).appendTo(e);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id",f).html(d).prependTo(e);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;e.find("*").add(e).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&& -g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog"); -b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,f=d.options;if(f.modal&&!a||!f.stack&&!f.modal)return d._trigger("focus",b);if(f.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ= -f.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show); -a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(f){if(f.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),e=g.filter(":first");g=g.filter(":last");if(f.target===g[0]&&!f.shiftKey){e.focus(1);return false}else if(f.target===e[0]&&f.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._trigger("open");a._isOpen=true;return a}},_createButtons:function(a){var b=this,d=false, -f=c("
              ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("
              ").addClass("ui-dialog-buttonset").appendTo(f);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(e,h){e=c('').text(e).click(function(){h.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&e.button()});f.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(e){return{position:e.position, -offset:e.offset}}var b=this,d=b.options,f=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(e,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",e,a(h))},drag:function(e,h){b._trigger("drag",e,a(h))},stop:function(e,h){d.position=[h.position.left-f.scrollLeft(),h.position.top-f.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g); -b._trigger("dragStop",e,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}a=a===j?this.options.resizable:a;var d=this,f=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:d._minHeight(), -handles:a,start:function(e,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",e,b(h))},resize:function(e,h){d._trigger("resize",e,b(h))},stop:function(e,h){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();d._trigger("resizeStop",e,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight, -a.height)},_position:function(a){var b=[],d=[0,0],f;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,e){if(+b[g]===b[g]){d[g]=b[g];b[g]=e}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a); -f||this.uiDialog.hide()},_setOption:function(a,b){var d=this,f=d.uiDialog,g=f.is(":data(resizable)"),e=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);e=true;break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":f.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case "draggable":b? -d._makeDraggable():f.draggable("destroy");break;case "height":e=true;break;case "maxHeight":g&&f.resizable("option","maxHeight",b);e=true;break;case "maxWidth":g&&f.resizable("option","maxWidth",b);e=true;break;case "minHeight":g&&f.resizable("option","minHeight",b);e=true;break;case "minWidth":g&&f.resizable("option","minWidth",b);e=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&f.resizable("destroy");g&&typeof b==="string"&&f.resizable("option","handles",b);!g&&b!==false&& -d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break;case "width":e=true;break}c.Widget.prototype._setOption.apply(d,arguments);e&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:"auto"}:{minHeight:0,height:Math.max(a.height- -b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.4",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "), -create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){return c(d.target).zIndex()>=c.ui.dialog.overlay.maxZ})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("
              ").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(), -height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight); -b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
              a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
              "+""+"
              ",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
              t
              ",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
              ",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; -f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

              ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
              ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
              ","
              "],thead:[1,"","
              "],tr:[2,"","
              "],td:[3,"","
              "],col:[2,"","
              "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
              ","
              "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() -{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
              ").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/h-source/Js/jquery/jquery.mobile-1.1.0.css b/h-source/Js/jquery/jquery.mobile-1.1.0.css deleted file mode 100644 index 06dbf8f..0000000 --- a/h-source/Js/jquery/jquery.mobile-1.1.0.css +++ /dev/null @@ -1,2053 +0,0 @@ -/* -* jQuery Mobile Framework 1.1.0 db342b1f315c282692791aa870455901fdb46a55 -* http://jquerymobile.com -* -* Copyright 2011 (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -* -*/ -/* Swatches */ -/* A ------------------------------------------------------------------------------------------------------------*/ -.ui-bar-a { - border: 1px solid #333 /*{a-bar-border}*/; - background: #111111 /*{a-bar-background-color}*/; - color: #ffffff /*{a-bar-color}*/; - font-weight: bold; - text-shadow: 0 /*{a-bar-shadow-x}*/ -1px /*{a-bar-shadow-y}*/ 1px /*{a-bar-shadow-radius}*/ #000000 /*{a-bar-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #3c3c3c /*{a-bar-background-start}*/), to( #111 /*{a-bar-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); -} -.ui-bar-a, -.ui-bar-a input, -.ui-bar-a select, -.ui-bar-a textarea, -.ui-bar-a button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-bar-a .ui-link-inherit { - color: #fff /*{a-bar-color}*/; -} -.ui-bar-a .ui-link { - color: #7cc4e7 /*{a-bar-link-color}*/; - font-weight: bold; -} -.ui-bar-a .ui-link:hover { - color: #2489CE /*{a-bar-link-hover}*/; -} -.ui-bar-a .ui-link:active { - color: #2489CE /*{a-bar-link-active}*/; -} -.ui-bar-a .ui-link:visited { - color: #2489CE /*{a-bar-link-visited}*/; -} -.ui-body-a, -.ui-overlay-a { - border: 1px solid #444 /*{a-body-border}*/; - background: #222 /*{a-body-background-color}*/; - color: #fff /*{a-body-color}*/; - text-shadow: 0 /*{a-body-shadow-x}*/ 1px /*{a-body-shadow-y}*/ 1px /*{a-body-shadow-radius}*/ #111 /*{a-body-shadow-color}*/; - font-weight: normal; - background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-body-background-start}*/), to( #222 /*{a-body-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); -} -.ui-overlay-a { - background-image: none; - border-width: 0; -} -.ui-body-a, -.ui-body-a input, -.ui-body-a select, -.ui-body-a textarea, -.ui-body-a button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-body-a .ui-link-inherit { - color: #fff /*{a-body-color}*/; -} -.ui-body-a .ui-link { - color: #2489CE /*{a-body-link-color}*/; - font-weight: bold; -} -.ui-body-a .ui-link:hover { - color: #2489CE /*{a-body-link-hover}*/; -} -.ui-body-a .ui-link:active { - color: #2489CE /*{a-body-link-active}*/; -} -.ui-body-a .ui-link:visited { - color: #2489CE /*{a-body-link-visited}*/; -} -.ui-btn-up-a { - border: 1px solid #111 /*{a-bup-border}*/; - background: #333 /*{a-bup-background-color}*/; - font-weight: bold; - color: #fff /*{a-bup-color}*/; - text-shadow: 0 /*{a-bup-shadow-x}*/ 1px /*{a-bup-shadow-y}*/ 1px /*{a-bup-shadow-radius}*/ #111 /*{a-bup-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #444444 /*{a-bup-background-start}*/), to( #2d2d2d /*{a-bup-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); -} -.ui-btn-up-a a.ui-link-inherit { - color: #fff /*{a-bup-color}*/; -} -.ui-btn-hover-a { - border: 1px solid #000 /*{a-bhover-border}*/; - background: #444444 /*{a-bhover-background-color}*/; - font-weight: bold; - color: #fff /*{a-bhover-color}*/; - text-shadow: 0 /*{a-bhover-shadow-x}*/ 1px /*{a-bhover-shadow-y}*/ 1px /*{a-bhover-shadow-radius}*/ #111 /*{a-bhover-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #555555 /*{a-bhover-background-start}*/), to( #383838 /*{a-bhover-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); -} -.ui-btn-hover-a a.ui-link-inherit { - color: #fff /*{a-bhover-color}*/; -} -.ui-btn-down-a { - border: 1px solid #000 /*{a-bdown-border}*/; - background: #222 /*{a-bdown-background-color}*/; - font-weight: bold; - color: #fff /*{a-bdown-color}*/; - text-shadow: 0 /*{a-bdown-shadow-x}*/ 1px /*{a-bdown-shadow-y}*/ 1px /*{a-bdown-shadow-radius}*/ #111 /*{a-bdown-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #202020 /*{a-bdown-background-start}*/), to( #2c2c2c /*{a-bdown-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); -} -.ui-btn-down-a a.ui-link-inherit { - color: #fff /*{a-bdown-color}*/; -} -.ui-btn-up-a, -.ui-btn-hover-a, -.ui-btn-down-a { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; - text-decoration: none; -} -/* B ------------------------------------------------------------------------------------------------------------*/ -.ui-bar-b { - border: 1px solid #456f9a /*{b-bar-border}*/; - background: #5e87b0 /*{b-bar-background-color}*/; - color: #fff /*{b-bar-color}*/; - font-weight: bold; - text-shadow: 0 /*{b-bar-shadow-x}*/ 1px /*{b-bar-shadow-y}*/ 1px /*{b-bar-shadow-radius}*/ #3e6790 /*{b-bar-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bar-background-start}*/), to( #497bae /*{b-bar-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); -} -.ui-bar-b, -.ui-bar-b input, -.ui-bar-b select, -.ui-bar-b textarea, -.ui-bar-b button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-bar-b .ui-link-inherit { - color: #fff /*{b-bar-color}*/; -} -.ui-bar-b .ui-link { - color: #ddf0f8 /*{b-bar-link-color}*/; - font-weight: bold; -} -.ui-bar-b .ui-link:hover { - color: #ddf0f8 /*{b-bar-link-hover}*/; -} -.ui-bar-b .ui-link:active { - color: #ddf0f8 /*{b-bar-link-active}*/; -} -.ui-bar-b .ui-link:visited { - color: #ddf0f8 /*{b-bar-link-visited}*/; -} -.ui-body-b, -.ui-overlay-b { - border: 1px solid #999 /*{b-body-border}*/; - background: #f3f3f3 /*{b-body-background-color}*/; - color: #222222 /*{b-body-color}*/; - text-shadow: 0 /*{b-body-shadow-x}*/ 1px /*{b-body-shadow-y}*/ 0 /*{b-body-shadow-radius}*/ #fff /*{b-body-shadow-color}*/; - font-weight: normal; - background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{b-body-background-start}*/), to( #ccc /*{b-body-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); -} -.ui-overlay-b { - background-image: none; - border-width: 0; -} -.ui-body-b, -.ui-body-b input, -.ui-body-b select, -.ui-body-b textarea, -.ui-body-b button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-body-b .ui-link-inherit { - color: #333333 /*{b-body-color}*/; -} -.ui-body-b .ui-link { - color: #2489CE /*{b-body-link-color}*/; - font-weight: bold; -} -.ui-body-b .ui-link:hover { - color: #2489CE /*{b-body-link-hover}*/; -} -.ui-body-b .ui-link:active { - color: #2489CE /*{b-body-link-active}*/; -} -.ui-body-b .ui-link:visited { - color: #2489CE /*{b-body-link-visited}*/; -} -.ui-btn-up-b { - border: 1px solid #044062 /*{b-bup-border}*/; - background: #396b9e /*{b-bup-background-color}*/; - font-weight: bold; - color: #fff /*{b-bup-color}*/; - text-shadow: 0 /*{b-bup-shadow-x}*/ 1px /*{b-bup-shadow-y}*/ 1px /*{b-bup-shadow-radius}*/ #194b7e /*{b-bup-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #5f9cc5 /*{b-bup-background-start}*/), to( #396b9e /*{b-bup-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); -} -.ui-btn-up-b a.ui-link-inherit { - color: #fff /*{b-bup-color}*/; -} -.ui-btn-hover-b { - border: 1px solid #00415e /*{b-bhover-border}*/; - background: #4b88b6 /*{b-bhover-background-color}*/; - font-weight: bold; - color: #fff /*{b-bhover-color}*/; - text-shadow: 0 /*{b-bhover-shadow-x}*/ 1px /*{b-bhover-shadow-y}*/ 1px /*{b-bhover-shadow-radius}*/ #194b7e /*{b-bhover-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bhover-background-start}*/), to( #4272a4 /*{b-bhover-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); -} -.ui-btn-hover-b a.ui-link-inherit { - color: #fff /*{b-bhover-color}*/; -} -.ui-btn-down-b { - border: 1px solid #225377 /*{b-bdown-border}*/; - background: #4e89c5 /*{b-bdown-background-color}*/; - font-weight: bold; - color: #fff /*{b-bdown-color}*/; - text-shadow: 0 /*{b-bdown-shadow-x}*/ 1px /*{b-bdown-shadow-y}*/ 1px /*{b-bdown-shadow-radius}*/ #194b7e /*{b-bdown-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #295b8e /*{b-bdown-background-start}*/), to( #3e79b5 /*{b-bdown-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); -} -.ui-btn-down-b a.ui-link-inherit { - color: #fff /*{b-bdown-color}*/; -} -.ui-btn-up-b, -.ui-btn-hover-b, -.ui-btn-down-b { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; - text-decoration: none; -} -/* C ------------------------------------------------------------------------------------------------------------*/ -.ui-bar-c { - border: 1px solid #B3B3B3 /*{c-bar-border}*/; - background: #eeeeee /*{c-bar-background-color}*/; - color: #3E3E3E /*{c-bar-color}*/; - font-weight: bold; - text-shadow: 0 /*{c-bar-shadow-x}*/ 1px /*{c-bar-shadow-y}*/ 1px /*{c-bar-shadow-radius}*/ #fff /*{c-bar-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #f0f0f0 /*{c-bar-background-start}*/), to( #ddd /*{c-bar-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); -} -.ui-bar-c .ui-link-inherit { - color: #3E3E3E /*{c-bar-color}*/; -} -.ui-bar-c .ui-link { - color: #7cc4e7 /*{c-bar-link-color}*/; - font-weight: bold; -} -.ui-bar-c .ui-link:hover { - color: #2489CE /*{c-bar-link-hover}*/; -} -.ui-bar-c .ui-link:active { - color: #2489CE /*{c-bar-link-active}*/; -} -.ui-bar-c .ui-link:visited { - color: #2489CE /*{c-bar-link-visited}*/; -} -.ui-bar-c, -.ui-bar-c input, -.ui-bar-c select, -.ui-bar-c textarea, -.ui-bar-c button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-body-c, -.ui-overlay-c { - border: 1px solid #aaa /*{c-body-border}*/; - color: #333333 /*{c-body-color}*/; - text-shadow: 0 /*{c-body-shadow-x}*/ 1px /*{c-body-shadow-y}*/ 0 /*{c-body-shadow-radius}*/ #fff /*{c-body-shadow-color}*/; - background: #f9f9f9 /*{c-body-background-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #f9f9f9 /*{c-body-background-start}*/), to( #eeeeee /*{c-body-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); -} -.ui-overlay-c { - background-image: none; - border-width: 0; -} -.ui-body-c, -.ui-body-c input, -.ui-body-c select, -.ui-body-c textarea, -.ui-body-c button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-body-c .ui-link-inherit { - color: #333333 /*{c-body-color}*/; -} -.ui-body-c .ui-link { - color: #2489CE /*{c-body-link-color}*/; - font-weight: bold; -} -.ui-body-c .ui-link:hover { - color: #2489CE /*{c-body-link-hover}*/; -} -.ui-body-c .ui-link:active { - color: #2489CE /*{c-body-link-active}*/; -} -.ui-body-c .ui-link:visited { - color: #2489CE /*{c-body-link-visited}*/; -} -.ui-btn-up-c { - border: 1px solid #ccc /*{c-bup-border}*/; - background: #eee /*{c-bup-background-color}*/; - font-weight: bold; - color: #222 /*{c-bup-color}*/; - text-shadow: 0 /*{c-bup-shadow-x}*/ 1px /*{c-bup-shadow-y}*/ 0 /*{c-bup-shadow-radius}*/ #ffffff /*{c-bup-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #ffffff /*{c-bup-background-start}*/), to( #f1f1f1 /*{c-bup-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); -} -.ui-btn-up-c a.ui-link-inherit { - color: #2F3E46 /*{c-bup-color}*/; -} -.ui-btn-hover-c { - border: 1px solid #bbb /*{c-bhover-border}*/; - background: #dfdfdf /*{c-bhover-background-color}*/; - font-weight: bold; - color: #222 /*{c-bhover-color}*/; - text-shadow: 0 /*{c-bhover-shadow-x}*/ 1px /*{c-bhover-shadow-y}*/ 0 /*{c-bhover-shadow-radius}*/ #ffffff /*{c-bhover-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #f6f6f6 /*{c-bhover-background-start}*/), to( #e0e0e0 /*{c-bhover-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #f9f9f9 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); -} -.ui-btn-hover-c a.ui-link-inherit { - color: #2F3E46 /*{c-bhover-color}*/; -} -.ui-btn-down-c { - border: 1px solid #bbb /*{c-bdown-border}*/; - background: #d6d6d6 /*{c-bdown-background-color}*/; - font-weight: bold; - color: #222 /*{c-bdown-color}*/; - text-shadow: 0 /*{c-bdown-shadow-x}*/ 1px /*{c-bdown-shadow-y}*/ 0 /*{c-bdown-shadow-radius}*/ #ffffff /*{c-bdown-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #d0d0d0 /*{c-bdown-background-start}*/), to( #dfdfdf /*{c-bdown-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); -} -.ui-btn-down-c a.ui-link-inherit { - color: #2F3E46 /*{c-bdown-color}*/; -} -.ui-btn-up-c, -.ui-btn-hover-c, -.ui-btn-down-c { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; - text-decoration: none; -} -/* D ------------------------------------------------------------------------------------------------------------*/ -.ui-bar-d { - border: 1px solid #bbb /*{d-bar-border}*/; - background: #bbb /*{d-bar-background-color}*/; - color: #333 /*{d-bar-color}*/; - text-shadow: 0 /*{d-bar-shadow-x}*/ 1px /*{d-bar-shadow-y}*/ 0 /*{d-bar-shadow-radius}*/ #eee /*{d-bar-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{d-bar-background-start}*/), to( #bbb /*{d-bar-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); -} -.ui-bar-d, -.ui-bar-d input, -.ui-bar-d select, -.ui-bar-d textarea, -.ui-bar-d button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-bar-d .ui-link-inherit { - color: #333333 /*{d-bar-color}*/; -} -.ui-bar-d .ui-link { - color: #2489CE /*{d-bar-link-color}*/; - font-weight: bold; -} -.ui-bar-d .ui-link:hover { - color: #2489CE /*{d-bar-link-hover}*/; -} -.ui-bar-d .ui-link:active { - color: #2489CE /*{d-bar-link-active}*/; -} -.ui-bar-d .ui-link:visited { - color: #2489CE /*{d-bar-link-visited}*/; -} -.ui-body-d, -.ui-overlay-d { - border: 1px solid #bbb /*{d-body-border}*/; - color: #333333 /*{d-body-color}*/; - text-shadow: 0 /*{d-body-shadow-x}*/ 1px /*{d-body-shadow-y}*/ 0 /*{d-body-shadow-radius}*/ #fff /*{d-body-shadow-color}*/; - background: #ffffff /*{d-body-background-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #fff), to( #fff /*{d-body-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); -} -.ui-overlay-d { - background-image: none; - border-width: 0; -} -.ui-body-d, -.ui-body-d input, -.ui-body-d select, -.ui-body-d textarea, -.ui-body-d button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-body-d .ui-link-inherit { - color: #333333 /*{d-body-color}*/; -} -.ui-body-d .ui-link { - color: #2489CE /*{d-body-link-color}*/; - font-weight: bold; -} -.ui-body-d .ui-link:hover { - color: #2489CE /*{d-body-link-hover}*/; -} -.ui-body-d .ui-link:active { - color: #2489CE /*{d-body-link-active}*/; -} -.ui-body-d .ui-link:visited { - color: #2489CE /*{d-body-link-visited}*/; -} -.ui-btn-up-d { - border: 1px solid #bbb /*{d-bup-border}*/; - background: #fff /*{d-bup-background-color}*/; - font-weight: bold; - color: #333 /*{d-bup-color}*/; - text-shadow: 0 /*{d-bup-shadow-x}*/ 1px /*{d-bup-shadow-y}*/ 0 /*{d-bup-shadow-radius}*/ #fff /*{d-bup-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #fafafa), to( #f6f6f6 /*{d-bup-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); -} -.ui-btn-up-d a.ui-link-inherit { - color: #333 /*{d-bup-color}*/; -} -.ui-btn-hover-d { - border: 1px solid #aaa /*{d-bhover-border}*/; - background: #eeeeee /*{d-bhover-background-color}*/; - font-weight: bold; - color: #333 /*{d-bhover-color}*/; - cursor: pointer; - text-shadow: 0 /*{d-bhover-shadow-x}*/ 1px /*{d-bhover-shadow-y}*/ 0 /*{d-bhover-shadow-radius}*/ #fff /*{d-bhover-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #eee), to( #fff /*{d-bhover-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); -} -.ui-btn-hover-d a.ui-link-inherit { - color: #333 /*{d-bhover-color}*/; -} -.ui-btn-down-d { - border: 1px solid #aaa /*{d-bdown-border}*/; - background: #eee /*{d-bdown-background-color}*/; - font-weight: bold; - color: #333 /*{d-bdown-color}*/; - text-shadow: 0 /*{d-bdown-shadow-x}*/ 1px /*{d-bdown-shadow-y}*/ 0 /*{d-bdown-shadow-radius}*/ #ffffff /*{d-bdown-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #e5e5e5 /*{d-bdown-background-start}*/), to( #f2f2f2 /*{d-bdown-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); -} -.ui-btn-down-d a.ui-link-inherit { - color: #333 /*{d-bdown-color}*/; -} -.ui-btn-up-d, -.ui-btn-hover-d, -.ui-btn-down-d { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; - text-decoration: none; -} -/* E ------------------------------------------------------------------------------------------------------------*/ -.ui-bar-e { - border: 1px solid #F7C942 /*{e-bar-border}*/; - background: #fadb4e /*{e-bar-background-color}*/; - color: #333 /*{e-bar-color}*/; - text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/ #fff /*{e-bar-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); -} -.ui-bar-e, -.ui-bar-e input, -.ui-bar-e select, -.ui-bar-e textarea, -.ui-bar-e button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-bar-e .ui-link-inherit { - color: #333333 /*{e-bar-color}*/; -} -.ui-bar-e .ui-link { - color: #2489CE /*{e-bar-link-color}*/; - font-weight: bold; -} -.ui-bar-e .ui-link:hover { - color: #2489CE /*{e-bar-link-hover}*/; -} -.ui-bar-e .ui-link:active { - color: #2489CE /*{e-bar-link-active}*/; -} -.ui-bar-e .ui-link:visited { - color: #2489CE /*{e-bar-link-visited}*/; -} -.ui-body-e, -.ui-overlay-e { - border: 1px solid #F7C942 /*{e-body-border}*/; - color: #222222 /*{e-body-color}*/; - text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/ #fff /*{e-body-shadow-color}*/; - background: #fff9df /*{e-body-background-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); -} -.ui-overlay-e { - background-image: none; - border-width: 0; -} -.ui-body-e, -.ui-body-e input, -.ui-body-e select, -.ui-body-e textarea, -.ui-body-e button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-body-e .ui-link-inherit { - color: #333333 /*{e-body-color}*/; -} -.ui-body-e .ui-link { - color: #2489CE /*{e-body-link-color}*/; - font-weight: bold; -} -.ui-body-e .ui-link:hover { - color: #2489CE /*{e-body-link-hover}*/; -} -.ui-body-e .ui-link:active { - color: #2489CE /*{e-body-link-active}*/; -} -.ui-body-e .ui-link:visited { - color: #2489CE /*{e-body-link-visited}*/; -} -.ui-btn-up-e { - border: 1px solid #F4C63f /*{e-bup-border}*/; - background: #fadb4e /*{e-bup-background-color}*/; - font-weight: bold; - color: #222 /*{e-bup-color}*/; - text-shadow: 0 /*{e-bup-shadow-x}*/ 1px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/ #fff /*{e-bup-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #ffefaa /*{e-bup-background-start}*/), to( #ffe155 /*{e-bup-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); -} -.ui-btn-up-e a.ui-link-inherit { - color: #222 /*{e-bup-color}*/; -} -.ui-btn-hover-e { - border: 1px solid #F2C43d /*{e-bhover-border}*/; - background: #fbe26f /*{e-bhover-background-color}*/; - font-weight: bold; - color: #111 /*{e-bhover-color}*/; - text-shadow: 0 /*{e-bhover-shadow-x}*/ 1px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/ #fff /*{e-bhover-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #fff5ba /*{e-bhover-background-start}*/), to( #fbdd52 /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); -} -.ui-btn-hover-e a.ui-link-inherit { - color: #333 /*{e-bhover-color}*/; -} -.ui-btn-down-e { - border: 1px solid #F2C43d /*{e-bdown-border}*/; - background: #fceda7 /*{e-bdown-background-color}*/; - font-weight: bold; - color: #111 /*{e-bdown-color}*/; - text-shadow: 0 /*{e-bdown-shadow-x}*/ 1px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/ #ffffff /*{e-bdown-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #f8d94c /*{e-bdown-background-start}*/), to( #fadb4e /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); -} -.ui-btn-down-e a.ui-link-inherit { - color: #333 /*{e-bdown-color}*/; -} -.ui-btn-up-e, -.ui-btn-hover-e, -.ui-btn-down-e { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; - text-decoration: none; -} -/* Structure */ -/* links within "buttons" ------------------------------------------------------------------------------------------------------------*/ -a.ui-link-inherit { - text-decoration: none !important; -} -/* Active class used as the "on" state across all themes ------------------------------------------------------------------------------------------------------------*/ -.ui-btn-active { - border: 1px solid #2373a5 /*{global-active-border}*/; - background: #5393c5 /*{global-active-background-color}*/; - font-weight: bold; - color: #fff /*{global-active-color}*/; - cursor: pointer; - text-shadow: 0 /*{global-active-shadow-x}*/ 1px /*{global-active-shadow-y}*/ 1px /*{global-active-shadow-radius}*/ #3373a5 /*{global-active-shadow-color}*/; - text-decoration: none; - background-image: -webkit-gradient(linear, left top, left bottom, from( #5393c5 /*{global-active-background-start}*/), to( #6facd5 /*{global-active-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-btn-active a.ui-link-inherit { - color: #fff /*{global-active-color}*/; -} -/* button inner top highlight ------------------------------------------------------------------------------------------------------------*/ -.ui-btn-inner { - border-top: 1px solid #fff; - border-color: rgba(255,255,255,.3); -} -/* corner rounding classes ------------------------------------------------------------------------------------------------------------*/ -.ui-corner-tl { - -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; - -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; - border-top-left-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-tr { - -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; - -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; - border-top-right-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-bl { - -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; - -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; - border-bottom-left-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-br { - -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; - -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; - border-bottom-right-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-top { - -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; - -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; - border-top-left-radius: .6em /*{global-radii-blocks}*/; - -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; - -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; - border-top-right-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-bottom { - -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; - -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; - border-bottom-left-radius: .6em /*{global-radii-blocks}*/; - -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; - -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; - border-bottom-right-radius: .6em /*{global-radii-blocks}*/; - } -.ui-corner-right { - -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; - -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; - border-top-right-radius: .6em /*{global-radii-blocks}*/; - -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; - -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; - border-bottom-right-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-left { - -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; - -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; - border-top-left-radius: .6em /*{global-radii-blocks}*/; - -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; - -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; - border-bottom-left-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-all { - -moz-border-radius: .6em /*{global-radii-blocks}*/; - -webkit-border-radius: .6em /*{global-radii-blocks}*/; - border-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-none { - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; -} -/* Form field separator ------------------------------------------------------------------------------------------------------------*/ -.ui-br { - border-bottom: rgb(130,130,130); - border-bottom: rgba(130,130,130,.3); - border-bottom-width: 1px; - border-bottom-style: solid; -} -/* Interaction cues ------------------------------------------------------------------------------------------------------------*/ -.ui-disabled { - opacity: .3; -} -.ui-disabled, -.ui-disabled a { - cursor: default !important; - pointer-events: none; -} -.ui-disabled .ui-btn-text { - -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=30)"; - filter: alpha(opacity=30); - zoom: 1; -} -/* Icons ------------------------------------------------------------------------------------------------------------*/ -.ui-icon, -.ui-icon-searchfield:after { - background: #666 /*{global-icon-color}*/; - background: rgba(0,0,0,.4) /*{global-icon-disc}*/; - background-image: url(images/icons-18-white.png) /*{global-icon-set}*/; - background-repeat: no-repeat; - -moz-border-radius: 9px; - -webkit-border-radius: 9px; - border-radius: 9px; -} -/* Alt icon color ------------------------------------------------------------------------------------------------------------*/ -.ui-icon-alt { - background: #fff; - background: rgba(255,255,255,.3); - background-image: url(images/icons-18-black.png); - background-repeat: no-repeat; -} -/* HD/"retina" sprite ------------------------------------------------------------------------------------------------------------*/ -@media only screen and (-webkit-min-device-pixel-ratio: 1.5), - only screen and (min--moz-device-pixel-ratio: 1.5), - only screen and (min-resolution: 240dpi) { - - .ui-icon-plus, .ui-icon-minus, .ui-icon-delete, .ui-icon-arrow-r, - .ui-icon-arrow-l, .ui-icon-arrow-u, .ui-icon-arrow-d, .ui-icon-check, - .ui-icon-gear, .ui-icon-refresh, .ui-icon-forward, .ui-icon-back, - .ui-icon-grid, .ui-icon-star, .ui-icon-alert, .ui-icon-info, .ui-icon-home, .ui-icon-search, .ui-icon-searchfield:after, - .ui-icon-checkbox-off, .ui-icon-checkbox-on, .ui-icon-radio-off, .ui-icon-radio-on { - background-image: url(images/icons-36-white.png); - -moz-background-size: 776px 18px; - -o-background-size: 776px 18px; - -webkit-background-size: 776px 18px; - background-size: 776px 18px; - } - .ui-icon-alt { - background-image: url(images/icons-36-black.png); - } -} -/* plus minus */ -.ui-icon-plus { - background-position: -0 50%; -} -.ui-icon-minus { - background-position: -36px 50%; -} -/* delete/close */ -.ui-icon-delete { - background-position: -72px 50%; -} -/* arrows */ -.ui-icon-arrow-r { - background-position: -108px 50%; -} -.ui-icon-arrow-l { - background-position: -144px 50%; -} -.ui-icon-arrow-u { - background-position: -180px 50%; -} -.ui-icon-arrow-d { - background-position: -216px 50%; -} -/* misc */ -.ui-icon-check { - background-position: -252px 50%; -} -.ui-icon-gear { - background-position: -288px 50%; -} -.ui-icon-refresh { - background-position: -324px 50%; -} -.ui-icon-forward { - background-position: -360px 50%; -} -.ui-icon-back { - background-position: -396px 50%; -} -.ui-icon-grid { - background-position: -432px 50%; -} -.ui-icon-star { - background-position: -468px 50%; -} -.ui-icon-alert { - background-position: -504px 50%; -} -.ui-icon-info { - background-position: -540px 50%; -} -.ui-icon-home { - background-position: -576px 50%; -} -.ui-icon-search, -.ui-icon-searchfield:after { - background-position: -612px 50%; -} -.ui-icon-checkbox-off { - background-position: -684px 50%; -} -.ui-icon-checkbox-on { - background-position: -648px 50%; -} -.ui-icon-radio-off { - background-position: -756px 50%; -} -.ui-icon-radio-on { - background-position: -720px 50%; -} -/* checks,radios */ -.ui-checkbox .ui-icon { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; -} -.ui-icon-checkbox-off, -.ui-icon-radio-off { - background-color: transparent; -} -.ui-checkbox-on .ui-icon, -.ui-radio-on .ui-icon { - background-color: #4596ce /*{global-active-background-color}*/; /* NOTE: this hex should match the active state color. It's repeated here for cascade */ -} -/* loading icon */ -.ui-icon-loading { - background: url(images/ajax-loader.gif); - background-size: 46px 46px; -} -/* Button corner classes ------------------------------------------------------------------------------------------------------------*/ -.ui-btn-corner-tl { - -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; - -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; - border-top-left-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-tr { - -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; - -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; - border-top-right-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-bl { - -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; - -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; - border-bottom-left-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-br { - -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; - -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; - border-bottom-right-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-top { - -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; - -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; - border-top-left-radius: 1em /*{global-radii-buttons}*/; - -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; - -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; - border-top-right-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-bottom { - -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; - -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; - border-bottom-left-radius: 1em /*{global-radii-buttons}*/; - -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; - -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; - border-bottom-right-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-right { - -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; - -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; - border-top-right-radius: 1em /*{global-radii-buttons}*/; - -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; - -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; - border-bottom-right-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-left { - -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; - -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; - border-top-left-radius: 1em /*{global-radii-buttons}*/; - -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; - -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; - border-bottom-left-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-all { - -moz-border-radius: 1em /*{global-radii-buttons}*/; - -webkit-border-radius: 1em /*{global-radii-buttons}*/; - border-radius: 1em /*{global-radii-buttons}*/; -} -/* radius clip workaround for cleaning up corner trapping */ -.ui-corner-tl, -.ui-corner-tr, -.ui-corner-bl, -.ui-corner-br, -.ui-corner-top, -.ui-corner-bottom, -.ui-corner-right, -.ui-corner-left, -.ui-corner-all, -.ui-btn-corner-tl, -.ui-btn-corner-tr, -.ui-btn-corner-bl, -.ui-btn-corner-br, -.ui-btn-corner-top, -.ui-btn-corner-bottom, -.ui-btn-corner-right, -.ui-btn-corner-left, -.ui-btn-corner-all { - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -/* Overlay / modal ------------------------------------------------------------------------------------------------------------*/ -.ui-overlay { - background: #666; - opacity: .5; - filter: Alpha(Opacity=50); - position: absolute; - width: 100%; - height: 100%; -} -.ui-overlay-shadow { - -moz-box-shadow: 0px 0px 12px rgba(0,0,0,.6); - -webkit-box-shadow: 0px 0px 12px rgba(0,0,0,.6); - box-shadow: 0px 0px 12px rgba(0,0,0,.6); -} -.ui-shadow { - -moz-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; - -webkit-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; - box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; -} -.ui-bar-a .ui-shadow, -.ui-bar-b .ui-shadow , -.ui-bar-c .ui-shadow { - -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.3); - -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.3); - box-shadow: 0px 1px 0 rgba(255,255,255,.3); -} -.ui-shadow-inset { - -moz-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); - -webkit-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); - box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); -} -.ui-icon-shadow { - -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; - -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; - box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; -} -/* Focus state - set here for specificity (note: these classes are added by JavaScript) ------------------------------------------------------------------------------------------------------------*/ -.ui-btn:focus { - outline: 0; -} -.ui-focus, -.ui-btn:focus { - -moz-box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; - -webkit-box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; - box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; -} -/* unset box shadow in browsers that don't do it right ------------------------------------------------------------------------------------------------------------*/ -.ui-mobile-nosupport-boxshadow * { - -moz-box-shadow: none !important; - -webkit-box-shadow: none !important; - box-shadow: none !important; -} -/* ...and bring back focus */ -.ui-mobile-nosupport-boxshadow .ui-focus, -.ui-mobile-nosupport-boxshadow .ui-btn:focus { - outline-width: 1px; - outline-style: dotted; -} -/* some unsets - more probably needed */ -.ui-mobile, .ui-mobile body { height: 99.9%; } -.ui-mobile fieldset, .ui-page { padding: 0; margin: 0; } -.ui-mobile a img, .ui-mobile fieldset { border-width: 0; } -/* responsive page widths */ -.ui-mobile-viewport { margin: 0; overflow-x: visible; -webkit-text-size-adjust: none; -ms-text-size-adjust:none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } -/* Issue #2066 */ -body.ui-mobile-viewport, -div.ui-mobile-viewport { overflow-x: hidden; } -/* "page" containers - full-screen views, one should always be in view post-pageload */ -.ui-mobile [data-role=page], .ui-mobile [data-role=dialog], .ui-page { top: 0; left: 0; width: 100%; min-height: 100%; position: absolute; display: none; border: 0; } -.ui-mobile .ui-page-active { display: block; overflow: visible; } -/* on ios4, setting focus on the page element causes flashing during transitions when there is an outline, so we turn off outlines */ -.ui-page { outline: none; } -/*orientations from js are available */ -@media screen and (orientation: portrait){ -.ui-mobile, .ui-mobile .ui-page { min-height: 420px; } -} -@media screen and (orientation: landscape){ -.ui-mobile, .ui-mobile .ui-page { min-height: 300px; } -} -/* loading screen */ -.ui-loading .ui-loader { display: block; } -.ui-loader { display: none; z-index: 9999999; position: fixed; top: 50%; box-shadow: 0 1px 1px -1px #fff; left: 50%; border:0; } -.ui-loader-default { background: none; opacity: .18; width: 46px; height: 46px; margin-left: -23px; margin-top: -23px; } -.ui-loader-verbose { width: 200px; opacity: .88; height: auto; margin-left: -110px; margin-top: -43px; padding: 10px; } -.ui-loader-default h1 { font-size: 0; width: 0; height: 0; overflow: hidden; } -.ui-loader-verbose h1 { font-size: 16px; margin: 0; text-align: center; } -.ui-loader .ui-icon { background-color: #000; display: block; margin: 0; width: 44px; height: 44px; padding: 1px; -webkit-border-radius: 36px; -moz-border-radius: 36px; border-radius: 36px; } -.ui-loader-verbose .ui-icon { margin: 0 auto 10px; opacity: .75; } -.ui-loader-textonly { padding: 15px; margin-left: -115px; } -.ui-loader-textonly .ui-icon { display: none; } -.ui-loader-fakefix { position: absolute; } -/*fouc*/ -.ui-mobile-rendering > * { visibility: hidden; } -/*headers, content panels*/ -.ui-bar, .ui-body { position: relative; padding: .4em 15px; overflow: hidden; display: block; clear:both; } -.ui-bar { font-size: 16px; margin: 0; } -.ui-bar h1, .ui-bar h2, .ui-bar h3, .ui-bar h4, .ui-bar h5, .ui-bar h6 { margin: 0; padding: 0; font-size: 16px; display: inline-block; } -.ui-header, .ui-footer { position: relative; border-left-width: 0; border-right-width: 0; } -.ui-header .ui-btn-left, -.ui-header .ui-btn-right, -.ui-footer .ui-btn-left, -.ui-footer .ui-btn-right { position: absolute; top: 3px; } -.ui-header .ui-btn-left, -.ui-footer .ui-btn-left { left: 5px; } -.ui-header .ui-btn-right, -.ui-footer .ui-btn-right { right: 5px; } -.ui-footer .ui-btn-icon-notext, -.ui-header .ui-btn-icon-notext { top: 6px; } -.ui-header .ui-title, .ui-footer .ui-title { min-height: 1.1em; text-align: center; font-size: 16px; display: block; margin: .6em 30% .8em; padding: 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; outline: 0 !important; } -.ui-footer .ui-title { margin: .6em 15px .8em; } -/*content area*/ -.ui-content { border-width: 0; overflow: visible; overflow-x: hidden; padding: 15px; } -/* icons sizing */ -.ui-icon { width: 18px; height: 18px; } -/* non-js content hiding */ -.ui-nojs { position: absolute; left: -9999px; } -/* accessible content hiding */ -.ui-hide-label label, -.ui-hidden-accessible { position: absolute !important; left: -9999px; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } -/* Transitions originally inspired by those from jQtouch, nice work, folks */ -.ui-mobile-viewport-transitioning, -.ui-mobile-viewport-transitioning .ui-page { - width: 100%; - height: 100%; - overflow: hidden; -} -.in { - -webkit-animation-timing-function: ease-out; - -webkit-animation-duration: 350ms; - -moz-animation-timing-function: ease-out; - -moz-animation-duration: 350ms; -} -.out { - -webkit-animation-timing-function: ease-in; - -webkit-animation-duration: 225ms; - -moz-animation-timing-function: ease-in; - -moz-animation-duration: 225; -} -@-webkit-keyframes fadein { - from { opacity: 0; } - to { opacity: 1; } -} -@-moz-keyframes fadein { - from { opacity: 0; } - to { opacity: 1; } -} -@-webkit-keyframes fadeout { - from { opacity: 1; } - to { opacity: 0; } -} -@-moz-keyframes fadeout { - from { opacity: 1; } - to { opacity: 0; } -} -.fade.out { - opacity: 0; - -webkit-animation-duration: 125ms; - -webkit-animation-name: fadeout; - -moz-animation-duration: 125ms; - -moz-animation-name: fadeout; -} -.fade.in { - opacity: 1; - -webkit-animation-duration: 225ms; - -webkit-animation-name: fadein; - -moz-animation-duration: 225ms; - -moz-animation-name: fadein; -} -.pop { - -webkit-transform-origin: 50% 50%; - -moz-transform-origin: 50% 50%; -} -.pop.in { - -webkit-transform: scale(1); - -moz-transform: scale(1); - opacity: 1; - -webkit-animation-name: popin; - -moz-animation-name: popin; - -webkit-animation-duration: 350ms; - -moz-animation-duration: 350ms; -} -.pop.out { - -webkit-animation-name: fadeout; - -moz-animation-name: fadeout; - opacity: 0; - -webkit-animation-duration: 100ms; - -moz-animation-duration: 100ms; -} -.pop.in.reverse { - -webkit-animation-name: fadein; - -moz-animation-name: fadein; -} -.pop.out.reverse { - -webkit-transform: scale(.8); - -moz-transform: scale(.8); - -webkit-animation-name: popout; - -moz-animation-name: popout; -} -@-webkit-keyframes popin { - from { - -webkit-transform: scale(.8); - opacity: 0; - } - to { - -webkit-transform: scale(1); - opacity: 1; - } -} -@-moz-keyframes popin { - from { - -moz-transform: scale(.8); - opacity: 0; - } - to { - -moz-transform: scale(1); - opacity: 1; - } -} -@-webkit-keyframes popout { - from { - -webkit-transform: scale(1); - opacity: 1; - } - to { - -webkit-transform: scale(.8); - opacity: 0; - } -} -@-moz-keyframes popout { - from { - -moz-transform: scale(1); - opacity: 1; - } - to { - -moz-transform: scale(.8); - opacity: 0; - } -} -/* keyframes for slidein from sides */ -@-webkit-keyframes slideinfromright { - from { -webkit-transform: translateX(100%); } - to { -webkit-transform: translateX(0); } -} -@-moz-keyframes slideinfromright { - from { -moz-transform: translateX(100%); } - to { -moz-transform: translateX(0); } -} -@-webkit-keyframes slideinfromleft { - from { -webkit-transform: translateX(-100%); } - to { -webkit-transform: translateX(0); } -} -@-moz-keyframes slideinfromleft { - from { -moz-transform: translateX(-100%); } - to { -moz-transform: translateX(0); } -} -/* keyframes for slideout to sides */ -@-webkit-keyframes slideouttoleft { - from { -webkit-transform: translateX(0); } - to { -webkit-transform: translateX(-100%); } -} -@-moz-keyframes slideouttoleft { - from { -moz-transform: translateX(0); } - to { -moz-transform: translateX(-100%); } -} -@-webkit-keyframes slideouttoright { - from { -webkit-transform: translateX(0); } - to { -webkit-transform: translateX(100%); } -} -@-moz-keyframes slideouttoright { - from { -moz-transform: translateX(0); } - to { -moz-transform: translateX(100%); } -} -.slide.out, .slide.in { - -webkit-animation-timing-function: ease-out; - -webkit-animation-duration: 350ms; - -moz-animation-timing-function: ease-out; - -moz-animation-duration: 350ms; -} -.slide.out { - -webkit-transform: translateX(-100%); - -webkit-animation-name: slideouttoleft; - -moz-transform: translateX(-100%); - -moz-animation-name: slideouttoleft; -} -.slide.in { - -webkit-transform: translateX(0); - -webkit-animation-name: slideinfromright; - -moz-transform: translateX(0); - -moz-animation-name: slideinfromright; -} -.slide.out.reverse { - -webkit-transform: translateX(100%); - -webkit-animation-name: slideouttoright; - -moz-transform: translateX(100%); - -moz-animation-name: slideouttoright; -} -.slide.in.reverse { - -webkit-transform: translateX(0); - -webkit-animation-name: slideinfromleft; - -moz-transform: translateX(0); - -moz-animation-name: slideinfromleft; -} -.slidefade.out { - -webkit-transform: translateX(-100%); - -webkit-animation-name: slideouttoleft; - -moz-transform: translateX(-100%); - -moz-animation-name: slideouttoleft; - -webkit-animation-duration: 225ms; - -moz-animation-duration: 225ms; -} -.slidefade.in { - -webkit-transform: translateX(0); - -webkit-animation-name: fadein; - -moz-transform: translateX(0); - -moz-animation-name: fadein; - -webkit-animation-duration: 200ms; - -moz-animation-duration: 200ms; -} -.slidefade.out.reverse { - -webkit-transform: translateX(100%); - -webkit-animation-name: slideouttoright; - -moz-transform: translateX(100%); - -moz-animation-name: slideouttoright; - -webkit-animation-duration: 200ms; - -moz-animation-duration: 200ms; -} -.slidefade.in.reverse { - -webkit-transform: translateX(0); - -webkit-animation-name: fadein; - -moz-transform: translateX(0); - -moz-animation-name: fadein; - -webkit-animation-duration: 200ms; - -moz-animation-duration: 200ms; -} -/* slide down */ -.slidedown.out { - -webkit-animation-name: fadeout; - -moz-animation-name: fadeout; - -webkit-animation-duration: 100ms; - -moz-animation-duration: 100ms; -} -.slidedown.in { - -webkit-transform: translateY(0); - -webkit-animation-name: slideinfromtop; - -moz-transform: translateY(0); - -moz-animation-name: slideinfromtop; - -webkit-animation-duration: 250ms; - -moz-animation-duration: 250ms; -} -.slidedown.in.reverse { - -webkit-animation-name: fadein; - -moz-animation-name: fadein; - -webkit-animation-duration: 150ms; - -moz-animation-duration: 150ms; -} -.slidedown.out.reverse { - -webkit-transform: translateY(-100%); - -moz-transform: translateY(-100%); - -webkit-animation-name: slideouttotop; - -moz-animation-name: slideouttotop; - -webkit-animation-duration: 200ms; - -moz-animation-duration: 200ms; -} -@-webkit-keyframes slideinfromtop { - from { -webkit-transform: translateY(-100%); } - to { -webkit-transform: translateY(0); } -} -@-moz-keyframes slideinfromtop { - from { -moz-transform: translateY(-100%); } - to { -moz-transform: translateY(0); } -} -@-webkit-keyframes slideouttotop { - from { -webkit-transform: translateY(0); } - to { -webkit-transform: translateY(-100%); } -} -@-moz-keyframes slideouttotop { - from { -moz-transform: translateY(0); } - to { -moz-transform: translateY(-100%); } -} -/* slide up */ -.slideup.out { - -webkit-animation-name: fadeout; - -moz-animation-name: fadeout; - -webkit-animation-duration: 100ms; - -moz-animation-duration: 100ms; -} -.slideup.in { - -webkit-transform: translateY(0); - -webkit-animation-name: slideinfrombottom; - -moz-transform: translateY(0); - -moz-animation-name: slideinfrombottom; - -webkit-animation-duration: 250ms; - -moz-animation-duration: 250ms; -} -.slideup.in.reverse { - -webkit-animation-name: fadein; - -moz-animation-name: fadein; - -webkit-animation-duration: 150ms; - -moz-animation-duration: 150ms; -} -.slideup.out.reverse { - -webkit-transform: translateY(100%); - -moz-transform: translateY(100%); - -webkit-animation-name: slideouttobottom; - -moz-animation-name: slideouttobottom; - -webkit-animation-duration: 200ms; - -moz-animation-duration: 200ms; -} -@-webkit-keyframes slideinfrombottom { - from { -webkit-transform: translateY(100%); } - to { -webkit-transform: translateY(0); } -} -@-moz-keyframes slideinfrombottom { - from { -moz-transform: translateY(100%); } - to { -moz-transform: translateY(0); } -} -@-webkit-keyframes slideouttobottom { - from { -webkit-transform: translateY(0); } - to { -webkit-transform: translateY(100%); } -} -@-moz-keyframes slideouttobottom { - from { -moz-transform: translateY(0); } - to { -moz-transform: translateY(100%); } -} -/* The properties in this rule are only necessary for the 'flip' transition. - * We need specify the perspective to create a projection matrix. This will add - * some depth as the element flips. The depth number represents the distance of - * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate - * value. - */ -.viewport-flip { - -webkit-perspective: 1000; - -moz-perspective: 1000; - position: absolute; -} -.flip { - -webkit-backface-visibility:hidden; - -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ - -moz-backface-visibility:hidden; - -moz-transform:translateX(0); -} -.flip.out { - -webkit-transform: rotateY(-90deg) scale(.9); - -webkit-animation-name: flipouttoleft; - -webkit-animation-duration: 175ms; - -moz-transform: rotateY(-90deg) scale(.9); - -moz-animation-name: flipouttoleft; - -moz-animation-duration: 175ms; -} -.flip.in { - -webkit-animation-name: flipintoright; - -webkit-animation-duration: 225ms; - -moz-animation-name: flipintoright; - -moz-animation-duration: 225ms; -} -.flip.out.reverse { - -webkit-transform: rotateY(90deg) scale(.9); - -webkit-animation-name: flipouttoright; - -moz-transform: rotateY(90deg) scale(.9); - -moz-animation-name: flipouttoright; -} -.flip.in.reverse { - -webkit-animation-name: flipintoleft; - -moz-animation-name: flipintoleft; -} -@-webkit-keyframes flipouttoleft { - from { -webkit-transform: rotateY(0); } - to { -webkit-transform: rotateY(-90deg) scale(.9); } -} -@-moz-keyframes flipouttoleft { - from { -moz-transform: rotateY(0); } - to { -moz-transform: rotateY(-90deg) scale(.9); } -} -@-webkit-keyframes flipouttoright { - from { -webkit-transform: rotateY(0) ; } - to { -webkit-transform: rotateY(90deg) scale(.9); } -} -@-moz-keyframes flipouttoright { - from { -moz-transform: rotateY(0); } - to { -moz-transform: rotateY(90deg) scale(.9); } -} -@-webkit-keyframes flipintoleft { - from { -webkit-transform: rotateY(-90deg) scale(.9); } - to { -webkit-transform: rotateY(0); } -} -@-moz-keyframes flipintoleft { - from { -moz-transform: rotateY(-90deg) scale(.9); } - to { -moz-transform: rotateY(0); } -} -@-webkit-keyframes flipintoright { - from { -webkit-transform: rotateY(90deg) scale(.9); } - to { -webkit-transform: rotateY(0); } -} -@-moz-keyframes flipintoright { - from { -moz-transform: rotateY(90deg) scale(.9); } - to { -moz-transform: rotateY(0); } -} -/* The properties in this rule are only necessary for the 'flip' transition. - * We need specify the perspective to create a projection matrix. This will add - * some depth as the element flips. The depth number represents the distance of - * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate - * value. - */ -.viewport-turn { - -webkit-perspective: 1000; - -moz-perspective: 1000; - position: absolute; -} -.turn { - -webkit-backface-visibility:hidden; - -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ - -webkit-transform-origin: 0; - - -moz-backface-visibility:hidden; - -moz-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ - -moz-transform-origin: 0; -} -.turn.out { - -webkit-transform: rotateY(-90deg) scale(.9); - -webkit-animation-name: flipouttoleft; - -moz-transform: rotateY(-90deg) scale(.9); - -moz-animation-name: flipouttoleft; - -webkit-animation-duration: 125ms; - -moz-animation-duration: 125ms; -} -.turn.in { - -webkit-animation-name: flipintoright; - -moz-animation-name: flipintoright; - -webkit-animation-duration: 250ms; - -moz-animation-duration: 250ms; - -} -.turn.out.reverse { - -webkit-transform: rotateY(90deg) scale(.9); - -webkit-animation-name: flipouttoright; - -moz-transform: rotateY(90deg) scale(.9); - -moz-animation-name: flipouttoright; -} -.turn.in.reverse { - -webkit-animation-name: flipintoleft; - -moz-animation-name: flipintoleft; -} -@-webkit-keyframes flipouttoleft { - from { -webkit-transform: rotateY(0); } - to { -webkit-transform: rotateY(-90deg) scale(.9); } -} -@-moz-keyframes flipouttoleft { - from { -moz-transform: rotateY(0); } - to { -moz-transform: rotateY(-90deg) scale(.9); } -} -@-webkit-keyframes flipouttoright { - from { -webkit-transform: rotateY(0) ; } - to { -webkit-transform: rotateY(90deg) scale(.9); } -} -@-moz-keyframes flipouttoright { - from { -moz-transform: rotateY(0); } - to { -moz-transform: rotateY(90deg) scale(.9); } -} -@-webkit-keyframes flipintoleft { - from { -webkit-transform: rotateY(-90deg) scale(.9); } - to { -webkit-transform: rotateY(0); } -} -@-moz-keyframes flipintoleft { - from { -moz-transform: rotateY(-90deg) scale(.9); } - to { -moz-transform: rotateY(0); } -} -@-webkit-keyframes flipintoright { - from { -webkit-transform: rotateY(90deg) scale(.9); } - to { -webkit-transform: rotateY(0); } -} -@-moz-keyframes flipintoright { - from { -moz-transform: rotateY(90deg) scale(.9); } - to { -moz-transform: rotateY(0); } -} -/* flow transition */ -.flow { - -webkit-transform-origin: 50% 30%; - -moz-transform-origin: 50% 30%; - -webkit-box-shadow: 0 0 20px rgba(0,0,0,.4); - -moz-box-shadow: 0 0 20px rgba(0,0,0,.4); -} -.ui-dialog.flow { - -webkit-transform-origin: none; - -moz-transform-origin: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; -} -.flow.out { - -webkit-transform: translateX(-100%) scale(.7); - -webkit-animation-name: flowouttoleft; - -webkit-animation-timing-function: ease; - -webkit-animation-duration: 350ms; - -moz-transform: translateX(-100%) scale(.7); - -moz-animation-name: flowouttoleft; - -moz-animation-timing-function: ease; - -moz-animation-duration: 350ms; -} -.flow.in { - -webkit-transform: translateX(0) scale(1); - -webkit-animation-name: flowinfromright; - -webkit-animation-timing-function: ease; - -webkit-animation-duration: 350ms; - -moz-transform: translateX(0) scale(1); - -moz-animation-name: flowinfromright; - -moz-animation-timing-function: ease; - -moz-animation-duration: 350ms; -} -.flow.out.reverse { - -webkit-transform: translateX(100%); - -webkit-animation-name: flowouttoright; - -moz-transform: translateX(100%); - -moz-animation-name: flowouttoright; -} -.flow.in.reverse { - -webkit-animation-name: flowinfromleft; - -moz-animation-name: flowinfromleft; -} -@-webkit-keyframes flowouttoleft { - 0% { -webkit-transform: translateX(0) scale(1); } - 60%, 70% { -webkit-transform: translateX(0) scale(.7); } - 100% { -webkit-transform: translateX(-100%) scale(.7); } -} -@-moz-keyframes flowouttoleft { - 0% { -moz-transform: translateX(0) scale(1); } - 60%, 70% { -moz-transform: translateX(0) scale(.7); } - 100% { -moz-transform: translateX(-100%) scale(.7); } -} -@-webkit-keyframes flowouttoright { - 0% { -webkit-transform: translateX(0) scale(1); } - 60%, 70% { -webkit-transform: translateX(0) scale(.7); } - 100% { -webkit-transform: translateX(100%) scale(.7); } -} -@-moz-keyframes flowouttoright { - 0% { -moz-transform: translateX(0) scale(1); } - 60%, 70% { -moz-transform: translateX(0) scale(.7); } - 100% { -moz-transform: translateX(100%) scale(.7); } -} -@-webkit-keyframes flowinfromleft { - 0% { -webkit-transform: translateX(-100%) scale(.7); } - 30%, 40% { -webkit-transform: translateX(0) scale(.7); } - 100% { -webkit-transform: translateX(0) scale(1); } -} -@-moz-keyframes flowinfromleft { - 0% { -moz-transform: translateX(-100%) scale(.7); } - 30%, 40% { -moz-transform: translateX(0) scale(.7); } - 100% { -moz-transform: translateX(0) scale(1); } -} -@-webkit-keyframes flowinfromright { - 0% { -webkit-transform: translateX(100%) scale(.7); } - 30%, 40% { -webkit-transform: translateX(0) scale(.7); } - 100% { -webkit-transform: translateX(0) scale(1); } -} -@-moz-keyframes flowinfromright { - 0% { -moz-transform: translateX(100%) scale(.7); } - 30%, 40% { -moz-transform: translateX(0) scale(.7); } - 100% { -moz-transform: translateX(0) scale(1); } -} -/* content configurations. */ -.ui-grid-a, .ui-grid-b, .ui-grid-c, .ui-grid-d { overflow: hidden; } -.ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d, .ui-block-e { margin: 0; padding: 0; border: 0; float: left; min-height:1px;} -/* grid solo: 100 - single item fallback */ -.ui-grid-solo .ui-block-a { width: 100%; float: none; } -/* grid a: 50/50 */ -.ui-grid-a .ui-block-a, .ui-grid-a .ui-block-b { width: 50%; } -.ui-grid-a .ui-block-a { clear: left; } -/* grid b: 33/33/33 */ -.ui-grid-b .ui-block-a, .ui-grid-b .ui-block-b, .ui-grid-b .ui-block-c { width: 33.333%; } -.ui-grid-b .ui-block-a { clear: left; } -/* grid c: 25/25/25/25 */ -.ui-grid-c .ui-block-a, .ui-grid-c .ui-block-b, .ui-grid-c .ui-block-c, .ui-grid-c .ui-block-d { width: 25%; } -.ui-grid-c .ui-block-a { clear: left; } -/* grid d: 20/20/20/20/20 */ -.ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e { width: 20%; } -.ui-grid-d .ui-block-a { clear: left; } -/* fixed page header & footer configuration */ -.ui-header-fixed, -.ui-footer-fixed { - left: 0; - right: 0; - width: 100%; - position: fixed; - z-index: 1000; -} -.ui-header-fixed { - top: 0; -} -.ui-footer-fixed { - bottom: 0; -} -.ui-header-fullscreen, -.ui-footer-fullscreen { - opacity: .9; -} -.ui-page-header-fixed { - padding-top: 2.5em; -} -.ui-page-footer-fixed { - padding-bottom: 3em; -} -.ui-page-header-fullscreen .ui-content, -.ui-page-footer-fullscreen .ui-content { - padding: 0; -} -.ui-fixed-hidden { - position: absolute; -} -.ui-page-header-fullscreen .ui-fixed-hidden, -.ui-page-footer-fullscreen .ui-fixed-hidden { - left: -99999em; -} -.ui-header-fixed .ui-btn, -.ui-footer-fixed .ui-btn { - z-index: 10; -} -.ui-navbar { overflow: hidden; } -.ui-navbar ul, .ui-navbar-expanded ul { list-style:none; padding: 0; margin: 0; position: relative; display: block; border: 0;} -.ui-navbar-collapsed ul { float: left; width: 75%; margin-right: -2px; } -.ui-navbar-collapsed .ui-navbar-toggle { float: left; width: 25%; } -.ui-navbar li.ui-navbar-truncate { position: absolute; left: -9999px; top: -9999px; } -.ui-navbar li .ui-btn, .ui-navbar .ui-navbar-toggle .ui-btn { display: block; font-size: 12px; text-align: center; margin: 0; border-right-width: 0; max-width: 100%; } -.ui-navbar li .ui-btn { margin-right: -1px; } -.ui-navbar li .ui-btn:last-child { margin-right: 0; } -.ui-header .ui-navbar li .ui-btn, .ui-header .ui-navbar .ui-navbar-toggle .ui-btn, -.ui-footer .ui-navbar li .ui-btn, .ui-footer .ui-navbar .ui-navbar-toggle .ui-btn { border-top-width: 0; border-bottom-width: 0; } -.ui-navbar .ui-btn-inner { padding-left: 2px; padding-right: 2px; } -.ui-navbar-noicons li .ui-btn .ui-btn-inner, .ui-navbar-noicons .ui-navbar-toggle .ui-btn-inner { padding-top: .8em; padding-bottom: .9em; } -/*expanded page styles*/ -.ui-navbar-expanded .ui-btn { margin: 0; font-size: 14px; } -.ui-navbar-expanded .ui-btn-inner { padding-left: 5px; padding-right: 5px; } -.ui-navbar-expanded .ui-btn-icon-top .ui-btn-inner { padding: 45px 5px 15px; text-align: center; } -.ui-navbar-expanded .ui-btn-icon-top .ui-icon { top: 15px; } -.ui-navbar-expanded .ui-btn-icon-bottom .ui-btn-inner { padding: 15px 5px 45px; text-align: center; } -.ui-navbar-expanded .ui-btn-icon-bottom .ui-icon { bottom: 15px; } -.ui-navbar-expanded li .ui-btn .ui-btn-inner { min-height: 2.5em; } -.ui-navbar-expanded .ui-navbar-noicons .ui-btn .ui-btn-inner { padding-top: 1.8em; padding-bottom: 1.9em; } -.ui-btn { display: block; text-align: center; cursor:pointer; position: relative; margin: .5em 5px; padding: 0; } -.ui-mini { margin: .25em 5px; } -.ui-btn-inner { padding: .6em 20px; min-width: .75em; display: block; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; position: relative; zoom: 1; } -.ui-btn input, .ui-btn button { z-index: 2; } -.ui-btn-left, .ui-btn-right, .ui-btn-inline { display: inline-block; } -.ui-btn-block { display: block; } -.ui-header .ui-btn, -.ui-footer .ui-btn { display: inline-block; margin: 0; } -.ui-header .ui-btn-inner, -.ui-footer .ui-btn-inner, -.ui-mini .ui-btn-inner { font-size: 12.5px; padding: .55em 11px .5em; } -.ui-header .ui-fullsize .ui-btn-inner, -.ui-footer .ui-fullsize .ui-btn-inner { font-size: 16px; padding: .6em 25px; } -.ui-btn-icon-notext { width: 24px; height: 24px; } -.ui-btn-icon-notext .ui-btn-inner { padding: 0; height: 100%; } -.ui-btn-icon-notext .ui-btn-inner .ui-icon { margin: 2px 1px 2px 3px; } -.ui-btn-text { position: relative; z-index: 1; width: 100%; } -.ui-btn-icon-notext .ui-btn-text { position: absolute; left: -9999px; } -.ui-btn-icon-left .ui-btn-inner { padding-left: 40px; } -.ui-btn-icon-right .ui-btn-inner { padding-right: 40px; } -.ui-btn-icon-top .ui-btn-inner { padding-top: 40px; } -.ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 40px; } -.ui-header .ui-btn-icon-left .ui-btn-inner, -.ui-footer .ui-btn-icon-left .ui-btn-inner, -.ui-mini .ui-btn-icon-left .ui-btn-inner { padding-left: 30px; } -.ui-header .ui-btn-icon-right .ui-btn-inner, -.ui-footer .ui-btn-icon-right .ui-btn-inner, -.ui-mini .ui-btn-icon-right .ui-btn-inner { padding-right: 30px; } -.ui-header .ui-btn-icon-top .ui-btn-inner, -.ui-footer .ui-btn-icon-top .ui-btn-inner, -.ui-mini .ui-btn-icon-top .ui-btn-inner { padding: 30px 3px .5em 3px; } -.ui-header .ui-btn-icon-bottom .ui-btn-inner, -.ui-footer .ui-btn-icon-bottom .ui-btn-inner, -.ui-mini .ui-btn-icon-bottom .ui-btn-inner { padding: .55em 3px 30px 3px; } -/*btn icon positioning*/ -.ui-btn-icon-notext .ui-icon { display: block; z-index: 0;} -.ui-btn-icon-left .ui-btn-inner .ui-icon, .ui-btn-icon-right .ui-btn-inner .ui-icon { position: absolute; top: 50%; margin-top: -9px; } -.ui-btn-icon-top .ui-btn-inner .ui-icon, .ui-btn-icon-bottom .ui-btn-inner .ui-icon { position: absolute; left: 50%; margin-left: -9px; } -.ui-btn-icon-left .ui-icon { left: 10px; } -.ui-btn-icon-right .ui-icon { right: 10px; } -.ui-btn-icon-top .ui-icon { top: 10px; } -.ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; } -.ui-header .ui-btn-icon-left .ui-icon, -.ui-footer .ui-btn-icon-left .ui-icon, -.ui-mini.ui-btn-icon-left .ui-icon, -.ui-mini .ui-btn-icon-left .ui-icon { left: 5px; } -.ui-header .ui-btn-icon-right .ui-icon, -.ui-footer .ui-btn-icon-right .ui-icon, -.ui-mini.ui-btn-icon-right .ui-icon, -.ui-mini .ui-btn-icon-right .ui-icon { right: 5px; } -.ui-header .ui-btn-icon-top .ui-icon, -.ui-footer .ui-btn-icon-top .ui-icon, -.ui-mini.ui-btn-icon-top .ui-icon, -.ui-mini .ui-btn-icon-top .ui-icon { top: 5px; } -.ui-header .ui-btn-icon-bottom .ui-icon, -.ui-footer .ui-btn-icon-bottom .ui-icon, -.ui-mini.ui-btn-icon-bottom .ui-icon, -.ui-mini .ui-btn-icon-bottom .ui-icon { bottom: 5px; } -/*hiding native button,inputs */ -.ui-btn-hidden { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-appearance: button; opacity: .1; cursor: pointer; background: #fff; background: rgba(255,255,255,0); filter: Alpha(Opacity=.0001); font-size: 1px; border: none; text-indent: -9999px; } -.ui-collapsible { margin: .5em 0; } -.ui-collapsible-heading { font-size: 16px; display: block; margin: 0 -8px; padding: 0; border-width: 0 0 1px 0; position: relative; } -.ui-collapsible-heading a { text-align: left; margin: 0; } -.ui-collapsible-heading .ui-btn-inner, -.ui-collapsible-heading .ui-btn-icon-left .ui-btn-inner { padding-left: 40px; } -.ui-collapsible-heading .ui-btn-icon-right .ui-btn-inner { padding-left: 12px; padding-right: 40px; } -.ui-collapsible-heading .ui-btn-icon-top .ui-btn-inner, -.ui-collapsible-heading .ui-btn-icon-bottom .ui-btn-inner { padding-right: 40px; text-align: center; } -.ui-collapsible-heading a span.ui-btn { position: absolute; left: 6px; top: 50%; margin: -12px 0 0 0; width: 20px; height: 20px; padding: 1px 0px 1px 2px; text-indent: -9999px; } -.ui-collapsible-heading a span.ui-btn .ui-btn-inner { padding: 10px 0; } -.ui-collapsible-heading a span.ui-btn .ui-icon { left: 0; margin-top: -10px; } -.ui-collapsible-heading-status { position: absolute; top: -9999px; left:0px; } -.ui-collapsible-content { - display: block; - margin: 0 -8px; - padding: 10px 16px; - border-top: none; /* Overrides ui-btn-up-* */ - background-image: none; /* Overrides ui-btn-up-* */ - font-weight: normal; /* Overrides ui-btn-up-* */ -} -.ui-collapsible-content-collapsed { display: none; } -.ui-collapsible-set { margin: .5em 0; } -.ui-collapsible-set .ui-collapsible { margin: -1px 0 0; } -.ui-controlgroup, fieldset.ui-controlgroup { padding: 0; margin: 0em 0 .5em; zoom: 1; } -.ui-bar .ui-controlgroup { margin: 0 .3em; } -.ui-controlgroup-label { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .4em; } -.ui-controlgroup-controls { display: block; width: 100%;} -.ui-controlgroup li { list-style: none; } -.ui-controlgroup-vertical .ui-btn, -.ui-controlgroup-vertical .ui-checkbox, .ui-controlgroup-vertical .ui-radio { margin: 0; border-bottom-width: 0; } -.ui-controlgroup-controls label.ui-select { position: absolute; left: -9999px; } -.ui-controlgroup-vertical .ui-controlgroup-last { border-bottom-width: 1px; } -.ui-controlgroup-horizontal { padding: 0; } -.ui-controlgroup-horizontal .ui-btn-inner { text-align:center; } -.ui-controlgroup-horizontal .ui-btn, .ui-controlgroup-horizontal .ui-select { display: inline-block; margin: 0 -6px 0 0; } -.ui-controlgroup-horizontal .ui-checkbox, .ui-controlgroup-horizontal .ui-radio { float: left; clear: none; margin: 0 -1px 0 0; } -.ui-controlgroup-horizontal .ui-checkbox .ui-btn, .ui-controlgroup-horizontal .ui-radio .ui-btn, -.ui-controlgroup-horizontal .ui-checkbox:last-child, .ui-controlgroup-horizontal .ui-radio:last-child { margin-right: 0; } -.ui-controlgroup-horizontal .ui-controlgroup-last { margin-right: 0; } -.ui-controlgroup .ui-checkbox label, .ui-controlgroup .ui-radio label { font-size: 16px; } -/* conflicts with listview.. -.ui-controlgroup .ui-btn-icon-notext { width: 30px; height: 30px; text-indent: -9999px; } -.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { padding: 5px 6px 5px 5px; } -*/ -@media all and (min-width: 450px){ - .ui-field-contain .ui-controlgroup-label { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } - .ui-field-contain .ui-controlgroup-controls { width: 60%; display: inline-block; } - .ui-field-contain .ui-controlgroup .ui-select { width: 100%; } - .ui-field-contain .ui-controlgroup-horizontal .ui-select { width: auto; } -} -.ui-dialog { - background: none !important; /* this is to ensure that dialog theming does not apply (by default at least) on the page div */ -} -.ui-dialog-contain { width: 92.5%; max-width: 500px; margin: 10% auto 15px auto; padding: 0; } -.ui-dialog .ui-header { - margin-top: 15%; - border: none; - overflow: hidden; -} -.ui-dialog .ui-header, -.ui-dialog .ui-content, -.ui-dialog .ui-footer { - display: block; - position: relative; - width: auto; -} -.ui-dialog .ui-header, -.ui-dialog .ui-footer { - z-index: 10; - padding: 0; -} -.ui-dialog .ui-footer { - padding: 0 15px; -} -.ui-dialog .ui-content { - padding: 15px; -} -.ui-dialog { - margin-top: -15px; -} -.ui-checkbox, .ui-radio { position: relative; clear: both; margin: .2em 0 .5em; z-index: 1; } -.ui-checkbox .ui-btn, .ui-radio .ui-btn { margin: 0; text-align: left; z-index: 2; } -.ui-checkbox .ui-btn-inner, .ui-radio .ui-btn-inner { white-space: normal; } -.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner { padding-left: 45px; } -.ui-checkbox .ui-mini.ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-mini.ui-btn-icon-left .ui-btn-inner { padding-left: 36px; } -.ui-checkbox .ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; } -.ui-checkbox .ui-mini.ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 36px; } -.ui-checkbox .ui-btn-icon-top .ui-btn-inner,.ui-radio .ui-btn-icon-top .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; } -.ui-checkbox .ui-btn-icon-bottom .ui-btn-inner, .ui-radio .ui-btn-icon-bottom .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; } -.ui-checkbox .ui-icon, .ui-radio .ui-icon { top: 1.1em; } -.ui-checkbox .ui-btn-icon-left .ui-icon, .ui-radio .ui-btn-icon-left .ui-icon { left: 15px; } -.ui-checkbox .ui-mini.ui-btn-icon-left .ui-icon, .ui-radio .ui-mini.ui-btn-icon-left .ui-icon { left: 9px; } -.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; } -.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; } -.ui-checkbox .ui-btn-icon-top .ui-icon, .ui-radio .ui-btn-icon-top .ui-icon { top: 10px; } -.ui-checkbox .ui-btn-icon-bottom .ui-icon, .ui-radio .ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; } -.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; } -.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; } -/* input, label positioning */ -.ui-checkbox input,.ui-radio input { position:absolute; left:20px; top:50%; width: 10px; height: 10px; margin:-5px 0 0 0; outline: 0 !important; z-index: 1; } -.ui-field-contain, fieldset.ui-field-contain { padding: .8em 0; margin: 0; border-width: 0 0 1px 0; overflow: visible; } -.ui-field-contain:first-child { border-top-width: 0; } -.ui-header .ui-field-contain-left, -.ui-header .ui-field-contain-right { - position: absolute; - top: 0; - width: 25%; -} -.ui-header .ui-field-contain-left { - left: 1em; -} -.ui-header .ui-field-contain-right { - right: 1em; -} -@media all and (min-width: 450px){ - .ui-field-contain, .ui-mobile fieldset.ui-field-contain { border-width: 0; padding: 0; margin: 1em 0; } -} -.ui-select { display: block; position: relative; } -.ui-select select { position: absolute; left: -9999px; top: -9999px; } -.ui-select .ui-btn { overflow: hidden; opacity: 1; margin: 0; } -/* Fixes #2588 — When Windows Phone 7.5 (Mango) tries to calculate a numeric opacity for a select—including “inherit”—without explicitly specifying an opacity on the parent to give it context, a bug appears where clicking elsewhere on the page after opening the select will open the select again. */ -.ui-select .ui-btn select { cursor: pointer; -webkit-appearance: button; left: 0; top:0; width: 100%; min-height: 1.5em; min-height: 100%; height: 3em; max-height: 100%; opacity: 0; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter: alpha(opacity=0); z-index: 2; } -.ui-select .ui-disabled { opacity: .3; } -@-moz-document url-prefix() {.ui-select .ui-btn select { opacity: 0.0001; }} -.ui-select .ui-btn select.ui-select-nativeonly { opacity: 1; text-indent: 0; } -.ui-select .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; } -.ui-select .ui-btn-icon-right .ui-icon { right: 15px; } -.ui-select .ui-mini.ui-btn-icon-right .ui-icon { right: 7px; } -/* labels */ -label.ui-select { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; } -/*listbox*/ -.ui-select .ui-btn-text, .ui-selectmenu .ui-btn-text { display: block; min-height: 1em; overflow: hidden !important; -/* This !important is required for iPad Safari specifically. See https://github.com/jquery/jquery-mobile/issues/2647 */ } -.ui-select .ui-btn-text { text-overflow: ellipsis; } -.ui-selectmenu { position: absolute; padding: 0; z-index: 1100 !important; width: 80%; max-width: 350px; padding: 6px; } -.ui-selectmenu .ui-listview { margin: 0; } -.ui-selectmenu .ui-btn.ui-li-divider { cursor: default; } -.ui-selectmenu-hidden { top: -9999px; left: -9999px; } -.ui-selectmenu-screen { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 99; } -.ui-screen-hidden, .ui-selectmenu-list .ui-li .ui-icon { display: none; } -.ui-selectmenu-list .ui-li .ui-icon { display: block; } -.ui-li.ui-selectmenu-placeholder { display: none; } -.ui-selectmenu .ui-header .ui-title { margin: 0.6em 46px 0.8em; } -@media all and (min-width: 450px){ - .ui-field-contain label.ui-select { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } - .ui-field-contain .ui-select { width: 60%; display: inline-block; } -} -/* when no placeholder is defined in a multiple select, the header height doesn't even extend past the close button. this shim's content in there */ -.ui-selectmenu .ui-header h1:after { content: '.'; visibility: hidden; } -label.ui-input-text { font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em; } -input.ui-input-text, textarea.ui-input-text { background-image: none; padding: .4em; line-height: 1.4; font-size: 16px; display: block; width: 97%; outline: 0; } -.ui-header input.ui-input-text, -.ui-footer input.ui-input-text { margin-left: 1.25%; padding: .4em 1%; width: 95.5% } /* Note that padding left/right on text inputs is factored into how the element is displayed in Firefox, but does not actually pad the text inside it. */ - input.ui-input-text { -webkit-appearance: none; } -textarea.ui-input-text { height: 50px; -webkit-transition: height 200ms linear; -moz-transition: height 200ms linear; -o-transition: height 200ms linear; transition: height 200ms linear; } -.ui-input-search { padding: 0 30px; background-image: none; position: relative; } -.ui-icon-searchfield:after { position: absolute; left: 7px; top: 50%; margin-top: -9px; content: ""; width: 18px; height: 18px; opacity: .5; } -.ui-input-search input.ui-input-text { border: none; width: 98%; padding: .4em 0; margin: 0; display: block; background: transparent none; outline: 0 !important; } -.ui-input-search .ui-input-clear { position: absolute; right: 0; top: 50%; margin-top: -13px; } -.ui-mini .ui-input-clear { right: -3px; } -.ui-input-search .ui-input-clear-hidden { display: none; } -input.ui-mini, .ui-mini input, textarea.ui-mini { font-size: 14px; } -textarea.ui-mini { height: 45px; } -/* orientation adjustments - incomplete!*/ -@media all and (min-width: 450px){ - .ui-field-contain label.ui-input-text { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0 } - .ui-field-contain input.ui-input-text, - .ui-field-contain textarea.ui-input-text, - .ui-field-contain .ui-input-search { width: 60%; display: inline-block; } - .ui-field-contain .ui-input-search { width: 50%; } - .ui-hide-label input.ui-input-text, - .ui-hide-label textarea.ui-input-text, - .ui-hide-label .ui-input-search { padding: .4em; width: 97%; } - .ui-input-search input.ui-input-text { width: 98%; /*echos rule from above*/ } -} -.ui-listview { margin: 0; counter-reset: listnumbering; } -.ui-content .ui-listview { margin: -15px; } -.ui-content .ui-listview-inset { margin: 1em 0; } -.ui-listview, .ui-li { list-style:none; padding:0; } -.ui-li, .ui-li.ui-field-contain { display: block; margin:0; position: relative; overflow: visible; text-align: left; border-width: 0; border-top-width: 1px; } -.ui-li .ui-btn-text a.ui-link-inherit { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } -.ui-li-divider, .ui-li-static { padding: .5em 15px; font-size: 14px; font-weight: bold; } -.ui-li-divider { counter-reset: listnumbering; } -ol.ui-listview .ui-link-inherit:before, ol.ui-listview .ui-li-static:before, .ui-li-dec { font-size: .8em; display: inline-block; padding-right: .3em; font-weight: normal;counter-increment: listnumbering; content: counter(listnumbering) ". "; } -ol.ui-listview .ui-li-jsnumbering:before { content: "" !important; } /* to avoid chance of duplication */ -.ui-listview-inset .ui-li { border-right-width: 1px; border-left-width: 1px; } -.ui-li:last-child, .ui-li.ui-field-contain:last-child { border-bottom-width: 1px; } -.ui-li>.ui-btn-inner { display: block; position: relative; padding: 0; } -.ui-li .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li { padding: .7em 15px .7em 15px; display: block; } -.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-thumb { min-height: 60px; padding-left: 100px; } -.ui-li-has-icon .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-icon { min-height: 20px; padding-left: 40px; } -.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-count { padding-right: 45px; } -.ui-li-has-arrow .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow { padding-right: 30px; } -.ui-li-has-arrow.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow.ui-li-has-count { padding-right: 75px; } -.ui-li-has-count .ui-btn-text { padding-right: 15px; } -.ui-li-heading { font-size: 16px; font-weight: bold; display: block; margin: .6em 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } -.ui-li-desc { font-size: 12px; font-weight: normal; display: block; margin: -.5em 0 .6em; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } -.ui-li-thumb, .ui-listview .ui-li-icon { position: absolute; left: 1px; top: 0; max-height: 80px; max-width: 80px; } -.ui-listview .ui-li-icon { max-height: 40px; max-width: 40px; left: 10px; top: .9em; } -.ui-li-thumb, .ui-listview .ui-li-icon, .ui-li-content { float: left; margin-right: 10px; } -.ui-li-aside { float: right; width: 50%; text-align: right; margin: .3em 0; } -@media all and (min-width: 480px){ - .ui-li-aside { width: 45%; } -} -.ui-li-divider { cursor: default; } -.ui-li-has-alt .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt { padding-right: 95px; } -.ui-li-has-count .ui-li-count { position: absolute; font-size: 11px; font-weight: bold; padding: .2em .5em; top: 50%; margin-top: -.9em; right: 48px; } -.ui-li-divider .ui-li-count, .ui-li-static .ui-li-count { right: 10px; } -.ui-li-has-alt .ui-li-count { right: 55px; } -.ui-li-link-alt { position: absolute; width: 40px; height: 100%; border-width: 0; border-left-width: 1px; top: 0; right: 0; margin: 0; padding: 0; z-index: 2; } -.ui-li-link-alt .ui-btn { overflow: hidden; position: absolute; right: 8px; top: 50%; margin: -11px 0 0 0; border-bottom-width: 1px; z-index: -1;} -.ui-li-link-alt .ui-btn-inner { padding: 0; height: 100%; position: absolute; width: 100%; top: 0; left: 0;} -.ui-li-link-alt .ui-btn .ui-icon { right: 50%; margin-right: -9px; } -.ui-listview * .ui-btn-inner > .ui-btn > .ui-btn-inner { border-top: 0px; } -.ui-listview-filter { border-width: 0; overflow: hidden; margin: -15px -15px 15px -15px } -.ui-listview-filter .ui-input-search { margin: 5px; width: auto; display: block; } -.ui-listview-filter-inset { margin: -15px -5px -15px -5px; background: transparent; } -.ui-li.ui-screen-hidden{display:none;} -/* Odd iPad positioning issue. */ -@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) { - .ui-li .ui-btn-text { overflow: visible; } -} -label.ui-slider { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; } -input.ui-slider-input, -.ui-field-contain input.ui-slider-input { display: inline-block; width: 50px; } -select.ui-slider-switch { display: none; } -div.ui-slider { position: relative; display: inline-block; overflow: visible; height: 15px; padding: 0; margin: 0 2% 0 20px; top: 4px; width: 65%; } -div.ui-slider-mini { height: 12px; margin-left: 10px; } -div.ui-slider-bg { border: none; height: 100%; padding-right: 8px; } -.ui-controlgroup a.ui-slider-handle, a.ui-slider-handle { position: absolute; z-index: 1; top: 50%; width: 28px; height: 28px; margin-top: -15px; margin-left: -15px; outline: 0; } -a.ui-slider-handle .ui-btn-inner { padding: 0; height: 100%; } -div.ui-slider-mini a.ui-slider-handle { height: 14px; width: 14px; margin: -8px 0 0 -7px; } -div.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: -9px 0 0 -9px; } -@media all and (min-width: 450px){ - .ui-field-contain label.ui-slider { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } - .ui-field-contain div.ui-slider { width: 43%; } - .ui-field-contain div.ui-slider-switch { width: 5.5em; } -} -div.ui-slider-switch { height: 32px; margin-left: 0; width: 5.8em; } -a.ui-slider-handle-snapping { -webkit-transition: left 70ms linear; -moz-transition: left 70ms linear; } -div.ui-slider-switch .ui-slider-handle { margin-top: 1px; } -.ui-slider-inneroffset { margin: 0 16px; position: relative; z-index: 1; } -div.ui-slider-switch.ui-slider-mini { width: 5em; height: 29px; } -div.ui-slider-switch.ui-slider-mini .ui-slider-inneroffset { margin: 0 15px 0 14px; } -div.ui-slider-switch.ui-slider-mini .ui-slider-handle { width: 25px; height: 25px; margin: 1px 0 0 -13px; } -div.ui-slider-switch.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: 0; } -span.ui-slider-label { position: absolute; text-align: center; width: 100%; overflow: hidden; font-size: 16px; top: 0; line-height: 2; min-height: 100%; border-width: 0; white-space: nowrap; } -.ui-slider-mini span.ui-slider-label { font-size: 14px; } -span.ui-slider-label-a { z-index: 1; left: 0; text-indent: -1.5em; } -span.ui-slider-label-b { z-index: 0; right: 0; text-indent: 1.5em;} -.ui-slider-inline { width: 120px; display: inline-block; } diff --git a/h-source/Js/jquery/jquery.mobile-1.1.0.js b/h-source/Js/jquery/jquery.mobile-1.1.0.js deleted file mode 100644 index c12426c..0000000 --- a/h-source/Js/jquery/jquery.mobile-1.1.0.js +++ /dev/null @@ -1,7551 +0,0 @@ -/* -* jQuery Mobile Framework 1.1.0 db342b1f315c282692791aa870455901fdb46a55 -* http://jquerymobile.com -* -* Copyright 2011 (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -* -*/ -(function ( root, doc, factory ) { - if ( typeof define === "function" && define.amd ) { - // AMD. Register as an anonymous module. - define( [ "jquery" ], function ( $ ) { - factory( $, root, doc ); - return $.mobile; - }); - } else { - // Browser globals - factory( root.jQuery, root, doc ); - } -}( this, document, function ( $, window, document, undefined ) { - - -// This plugin is an experiment for abstracting away the touch and mouse -// events so that developers don't have to worry about which method of input -// the device their document is loaded on supports. -// -// The idea here is to allow the developer to register listeners for the -// basic mouse events, such as mousedown, mousemove, mouseup, and click, -// and the plugin will take care of registering the correct listeners -// behind the scenes to invoke the listener at the fastest possible time -// for that device, while still retaining the order of event firing in -// the traditional mouse environment, should multiple handlers be registered -// on the same element for different events. -// -// The current version exposes the following virtual events to jQuery bind methods: -// "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel" - -(function( $, window, document, undefined ) { - -var dataPropertyName = "virtualMouseBindings", - touchTargetPropertyName = "virtualTouchID", - virtualEventNames = "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split( " " ), - touchEventProps = "clientX clientY pageX pageY screenX screenY".split( " " ), - mouseHookProps = $.event.mouseHooks ? $.event.mouseHooks.props : [], - mouseEventProps = $.event.props.concat( mouseHookProps ), - activeDocHandlers = {}, - resetTimerID = 0, - startX = 0, - startY = 0, - didScroll = false, - clickBlockList = [], - blockMouseTriggers = false, - blockTouchTriggers = false, - eventCaptureSupported = "addEventListener" in document, - $document = $( document ), - nextTouchID = 1, - lastTouchID = 0; - -$.vmouse = { - moveDistanceThreshold: 10, - clickDistanceThreshold: 10, - resetTimerDuration: 1500 -}; - -function getNativeEvent( event ) { - - while ( event && typeof event.originalEvent !== "undefined" ) { - event = event.originalEvent; - } - return event; -} - -function createVirtualEvent( event, eventType ) { - - var t = event.type, - oe, props, ne, prop, ct, touch, i, j; - - event = $.Event(event); - event.type = eventType; - - oe = event.originalEvent; - props = $.event.props; - - // addresses separation of $.event.props in to $.event.mouseHook.props and Issue 3280 - // https://github.com/jquery/jquery-mobile/issues/3280 - if ( t.search( /^(mouse|click)/ ) > -1 ) { - props = mouseEventProps; - } - - // copy original event properties over to the new event - // this would happen if we could call $.event.fix instead of $.Event - // but we don't have a way to force an event to be fixed multiple times - if ( oe ) { - for ( i = props.length, prop; i; ) { - prop = props[ --i ]; - event[ prop ] = oe[ prop ]; - } - } - - // make sure that if the mouse and click virtual events are generated - // without a .which one is defined - if ( t.search(/mouse(down|up)|click/) > -1 && !event.which ){ - event.which = 1; - } - - if ( t.search(/^touch/) !== -1 ) { - ne = getNativeEvent( oe ); - t = ne.touches; - ct = ne.changedTouches; - touch = ( t && t.length ) ? t[0] : ( (ct && ct.length) ? ct[ 0 ] : undefined ); - - if ( touch ) { - for ( j = 0, len = touchEventProps.length; j < len; j++){ - prop = touchEventProps[ j ]; - event[ prop ] = touch[ prop ]; - } - } - } - - return event; -} - -function getVirtualBindingFlags( element ) { - - var flags = {}, - b, k; - - while ( element ) { - - b = $.data( element, dataPropertyName ); - - for ( k in b ) { - if ( b[ k ] ) { - flags[ k ] = flags.hasVirtualBinding = true; - } - } - element = element.parentNode; - } - return flags; -} - -function getClosestElementWithVirtualBinding( element, eventType ) { - var b; - while ( element ) { - - b = $.data( element, dataPropertyName ); - - if ( b && ( !eventType || b[ eventType ] ) ) { - return element; - } - element = element.parentNode; - } - return null; -} - -function enableTouchBindings() { - blockTouchTriggers = false; -} - -function disableTouchBindings() { - blockTouchTriggers = true; -} - -function enableMouseBindings() { - lastTouchID = 0; - clickBlockList.length = 0; - blockMouseTriggers = false; - - // When mouse bindings are enabled, our - // touch bindings are disabled. - disableTouchBindings(); -} - -function disableMouseBindings() { - // When mouse bindings are disabled, our - // touch bindings are enabled. - enableTouchBindings(); -} - -function startResetTimer() { - clearResetTimer(); - resetTimerID = setTimeout(function(){ - resetTimerID = 0; - enableMouseBindings(); - }, $.vmouse.resetTimerDuration ); -} - -function clearResetTimer() { - if ( resetTimerID ){ - clearTimeout( resetTimerID ); - resetTimerID = 0; - } -} - -function triggerVirtualEvent( eventType, event, flags ) { - var ve; - - if ( ( flags && flags[ eventType ] ) || - ( !flags && getClosestElementWithVirtualBinding( event.target, eventType ) ) ) { - - ve = createVirtualEvent( event, eventType ); - - $( event.target).trigger( ve ); - } - - return ve; -} - -function mouseEventCallback( event ) { - var touchID = $.data(event.target, touchTargetPropertyName); - - if ( !blockMouseTriggers && ( !lastTouchID || lastTouchID !== touchID ) ){ - var ve = triggerVirtualEvent( "v" + event.type, event ); - if ( ve ) { - if ( ve.isDefaultPrevented() ) { - event.preventDefault(); - } - if ( ve.isPropagationStopped() ) { - event.stopPropagation(); - } - if ( ve.isImmediatePropagationStopped() ) { - event.stopImmediatePropagation(); - } - } - } -} - -function handleTouchStart( event ) { - - var touches = getNativeEvent( event ).touches, - target, flags; - - if ( touches && touches.length === 1 ) { - - target = event.target; - flags = getVirtualBindingFlags( target ); - - if ( flags.hasVirtualBinding ) { - - lastTouchID = nextTouchID++; - $.data( target, touchTargetPropertyName, lastTouchID ); - - clearResetTimer(); - - disableMouseBindings(); - didScroll = false; - - var t = getNativeEvent( event ).touches[ 0 ]; - startX = t.pageX; - startY = t.pageY; - - triggerVirtualEvent( "vmouseover", event, flags ); - triggerVirtualEvent( "vmousedown", event, flags ); - } - } -} - -function handleScroll( event ) { - if ( blockTouchTriggers ) { - return; - } - - if ( !didScroll ) { - triggerVirtualEvent( "vmousecancel", event, getVirtualBindingFlags( event.target ) ); - } - - didScroll = true; - startResetTimer(); -} - -function handleTouchMove( event ) { - if ( blockTouchTriggers ) { - return; - } - - var t = getNativeEvent( event ).touches[ 0 ], - didCancel = didScroll, - moveThreshold = $.vmouse.moveDistanceThreshold; - didScroll = didScroll || - ( Math.abs(t.pageX - startX) > moveThreshold || - Math.abs(t.pageY - startY) > moveThreshold ), - flags = getVirtualBindingFlags( event.target ); - - if ( didScroll && !didCancel ) { - triggerVirtualEvent( "vmousecancel", event, flags ); - } - - triggerVirtualEvent( "vmousemove", event, flags ); - startResetTimer(); -} - -function handleTouchEnd( event ) { - if ( blockTouchTriggers ) { - return; - } - - disableTouchBindings(); - - var flags = getVirtualBindingFlags( event.target ), - t; - triggerVirtualEvent( "vmouseup", event, flags ); - - if ( !didScroll ) { - var ve = triggerVirtualEvent( "vclick", event, flags ); - if ( ve && ve.isDefaultPrevented() ) { - // The target of the mouse events that follow the touchend - // event don't necessarily match the target used during the - // touch. This means we need to rely on coordinates for blocking - // any click that is generated. - t = getNativeEvent( event ).changedTouches[ 0 ]; - clickBlockList.push({ - touchID: lastTouchID, - x: t.clientX, - y: t.clientY - }); - - // Prevent any mouse events that follow from triggering - // virtual event notifications. - blockMouseTriggers = true; - } - } - triggerVirtualEvent( "vmouseout", event, flags); - didScroll = false; - - startResetTimer(); -} - -function hasVirtualBindings( ele ) { - var bindings = $.data( ele, dataPropertyName ), - k; - - if ( bindings ) { - for ( k in bindings ) { - if ( bindings[ k ] ) { - return true; - } - } - } - return false; -} - -function dummyMouseHandler(){} - -function getSpecialEventObject( eventType ) { - var realType = eventType.substr( 1 ); - - return { - setup: function( data, namespace ) { - // If this is the first virtual mouse binding for this element, - // add a bindings object to its data. - - if ( !hasVirtualBindings( this ) ) { - $.data( this, dataPropertyName, {}); - } - - // If setup is called, we know it is the first binding for this - // eventType, so initialize the count for the eventType to zero. - var bindings = $.data( this, dataPropertyName ); - bindings[ eventType ] = true; - - // If this is the first virtual mouse event for this type, - // register a global handler on the document. - - activeDocHandlers[ eventType ] = ( activeDocHandlers[ eventType ] || 0 ) + 1; - - if ( activeDocHandlers[ eventType ] === 1 ) { - $document.bind( realType, mouseEventCallback ); - } - - // Some browsers, like Opera Mini, won't dispatch mouse/click events - // for elements unless they actually have handlers registered on them. - // To get around this, we register dummy handlers on the elements. - - $( this ).bind( realType, dummyMouseHandler ); - - // For now, if event capture is not supported, we rely on mouse handlers. - if ( eventCaptureSupported ) { - // If this is the first virtual mouse binding for the document, - // register our touchstart handler on the document. - - activeDocHandlers[ "touchstart" ] = ( activeDocHandlers[ "touchstart" ] || 0) + 1; - - if (activeDocHandlers[ "touchstart" ] === 1) { - $document.bind( "touchstart", handleTouchStart ) - .bind( "touchend", handleTouchEnd ) - - // On touch platforms, touching the screen and then dragging your finger - // causes the window content to scroll after some distance threshold is - // exceeded. On these platforms, a scroll prevents a click event from being - // dispatched, and on some platforms, even the touchend is suppressed. To - // mimic the suppression of the click event, we need to watch for a scroll - // event. Unfortunately, some platforms like iOS don't dispatch scroll - // events until *AFTER* the user lifts their finger (touchend). This means - // we need to watch both scroll and touchmove events to figure out whether - // or not a scroll happenens before the touchend event is fired. - - .bind( "touchmove", handleTouchMove ) - .bind( "scroll", handleScroll ); - } - } - }, - - teardown: function( data, namespace ) { - // If this is the last virtual binding for this eventType, - // remove its global handler from the document. - - --activeDocHandlers[ eventType ]; - - if ( !activeDocHandlers[ eventType ] ) { - $document.unbind( realType, mouseEventCallback ); - } - - if ( eventCaptureSupported ) { - // If this is the last virtual mouse binding in existence, - // remove our document touchstart listener. - - --activeDocHandlers[ "touchstart" ]; - - if ( !activeDocHandlers[ "touchstart" ] ) { - $document.unbind( "touchstart", handleTouchStart ) - .unbind( "touchmove", handleTouchMove ) - .unbind( "touchend", handleTouchEnd ) - .unbind( "scroll", handleScroll ); - } - } - - var $this = $( this ), - bindings = $.data( this, dataPropertyName ); - - // teardown may be called when an element was - // removed from the DOM. If this is the case, - // jQuery core may have already stripped the element - // of any data bindings so we need to check it before - // using it. - if ( bindings ) { - bindings[ eventType ] = false; - } - - // Unregister the dummy event handler. - - $this.unbind( realType, dummyMouseHandler ); - - // If this is the last virtual mouse binding on the - // element, remove the binding data from the element. - - if ( !hasVirtualBindings( this ) ) { - $this.removeData( dataPropertyName ); - } - } - }; -} - -// Expose our custom events to the jQuery bind/unbind mechanism. - -for ( var i = 0; i < virtualEventNames.length; i++ ){ - $.event.special[ virtualEventNames[ i ] ] = getSpecialEventObject( virtualEventNames[ i ] ); -} - -// Add a capture click handler to block clicks. -// Note that we require event capture support for this so if the device -// doesn't support it, we punt for now and rely solely on mouse events. -if ( eventCaptureSupported ) { - document.addEventListener( "click", function( e ){ - var cnt = clickBlockList.length, - target = e.target, - x, y, ele, i, o, touchID; - - if ( cnt ) { - x = e.clientX; - y = e.clientY; - threshold = $.vmouse.clickDistanceThreshold; - - // The idea here is to run through the clickBlockList to see if - // the current click event is in the proximity of one of our - // vclick events that had preventDefault() called on it. If we find - // one, then we block the click. - // - // Why do we have to rely on proximity? - // - // Because the target of the touch event that triggered the vclick - // can be different from the target of the click event synthesized - // by the browser. The target of a mouse/click event that is syntehsized - // from a touch event seems to be implementation specific. For example, - // some browsers will fire mouse/click events for a link that is near - // a touch event, even though the target of the touchstart/touchend event - // says the user touched outside the link. Also, it seems that with most - // browsers, the target of the mouse/click event is not calculated until the - // time it is dispatched, so if you replace an element that you touched - // with another element, the target of the mouse/click will be the new - // element underneath that point. - // - // Aside from proximity, we also check to see if the target and any - // of its ancestors were the ones that blocked a click. This is necessary - // because of the strange mouse/click target calculation done in the - // Android 2.1 browser, where if you click on an element, and there is a - // mouse/click handler on one of its ancestors, the target will be the - // innermost child of the touched element, even if that child is no where - // near the point of touch. - - ele = target; - - while ( ele ) { - for ( i = 0; i < cnt; i++ ) { - o = clickBlockList[ i ]; - touchID = 0; - - if ( ( ele === target && Math.abs( o.x - x ) < threshold && Math.abs( o.y - y ) < threshold ) || - $.data( ele, touchTargetPropertyName ) === o.touchID ) { - // XXX: We may want to consider removing matches from the block list - // instead of waiting for the reset timer to fire. - e.preventDefault(); - e.stopPropagation(); - return; - } - } - ele = ele.parentNode; - } - } - }, true); -} -})( jQuery, window, document ); - - - -// Script: jQuery hashchange event -// -// *Version: 1.3, Last updated: 7/21/2010* -// -// Project Home - http://benalman.com/projects/jquery-hashchange-plugin/ -// GitHub - http://github.com/cowboy/jquery-hashchange/ -// Source - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js -// (Minified) - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (0.8kb gzipped) -// -// About: License -// -// Copyright (c) 2010 "Cowboy" Ben Alman, -// Dual licensed under the MIT and GPL licenses. -// http://benalman.com/about/license/ -// -// About: Examples -// -// These working examples, complete with fully commented code, illustrate a few -// ways in which this plugin can be used. -// -// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/ -// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/ -// -// About: Support and Testing -// -// Information about what version or versions of jQuery this plugin has been -// tested with, what browsers it has been tested in, and where the unit tests -// reside (so you can test it yourself). -// -// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2 -// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5, -// Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5. -// Unit Tests - http://benalman.com/code/projects/jquery-hashchange/unit/ -// -// About: Known issues -// -// While this jQuery hashchange event implementation is quite stable and -// robust, there are a few unfortunate browser bugs surrounding expected -// hashchange event-based behaviors, independent of any JavaScript -// window.onhashchange abstraction. See the following examples for more -// information: -// -// Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/ -// Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/ -// WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/ -// Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/ -// -// Also note that should a browser natively support the window.onhashchange -// event, but not report that it does, the fallback polling loop will be used. -// -// About: Release History -// -// 1.3 - (7/21/2010) Reorganized IE6/7 Iframe code to make it more -// "removable" for mobile-only development. Added IE6/7 document.title -// support. Attempted to make Iframe as hidden as possible by using -// techniques from http://www.paciellogroup.com/blog/?p=604. Added -// support for the "shortcut" format $(window).hashchange( fn ) and -// $(window).hashchange() like jQuery provides for built-in events. -// Renamed jQuery.hashchangeDelay to and -// lowered its default value to 50. Added -// and properties plus document-domain.html -// file to address access denied issues when setting document.domain in -// IE6/7. -// 1.2 - (2/11/2010) Fixed a bug where coming back to a page using this plugin -// from a page on another domain would cause an error in Safari 4. Also, -// IE6/7 Iframe is now inserted after the body (this actually works), -// which prevents the page from scrolling when the event is first bound. -// Event can also now be bound before DOM ready, but it won't be usable -// before then in IE6/7. -// 1.1 - (1/21/2010) Incorporated document.documentMode test to fix IE8 bug -// where browser version is incorrectly reported as 8.0, despite -// inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag. -// 1.0 - (1/9/2010) Initial Release. Broke out the jQuery BBQ event.special -// window.onhashchange functionality into a separate plugin for users -// who want just the basic event & back button support, without all the -// extra awesomeness that BBQ provides. This plugin will be included as -// part of jQuery BBQ, but also be available separately. - -(function($,window,undefined){ - // Reused string. - var str_hashchange = 'hashchange', - - // Method / object references. - doc = document, - fake_onhashchange, - special = $.event.special, - - // Does the browser support window.onhashchange? Note that IE8 running in - // IE7 compatibility mode reports true for 'onhashchange' in window, even - // though the event isn't supported, so also test document.documentMode. - doc_mode = doc.documentMode, - supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 ); - - // Get location.hash (or what you'd expect location.hash to be) sans any - // leading #. Thanks for making this necessary, Firefox! - function get_fragment( url ) { - url = url || location.href; - return '#' + url.replace( /^[^#]*#?(.*)$/, '$1' ); - }; - - // Method: jQuery.fn.hashchange - // - // Bind a handler to the window.onhashchange event or trigger all bound - // window.onhashchange event handlers. This behavior is consistent with - // jQuery's built-in event handlers. - // - // Usage: - // - // > jQuery(window).hashchange( [ handler ] ); - // - // Arguments: - // - // handler - (Function) Optional handler to be bound to the hashchange - // event. This is a "shortcut" for the more verbose form: - // jQuery(window).bind( 'hashchange', handler ). If handler is omitted, - // all bound window.onhashchange event handlers will be triggered. This - // is a shortcut for the more verbose - // jQuery(window).trigger( 'hashchange' ). These forms are described in - // the section. - // - // Returns: - // - // (jQuery) The initial jQuery collection of elements. - - // Allow the "shortcut" format $(elem).hashchange( fn ) for binding and - // $(elem).hashchange() for triggering, like jQuery does for built-in events. - $.fn[ str_hashchange ] = function( fn ) { - return fn ? this.bind( str_hashchange, fn ) : this.trigger( str_hashchange ); - }; - - // Property: jQuery.fn.hashchange.delay - // - // The numeric interval (in milliseconds) at which the - // polling loop executes. Defaults to 50. - - // Property: jQuery.fn.hashchange.domain - // - // If you're setting document.domain in your JavaScript, and you want hash - // history to work in IE6/7, not only must this property be set, but you must - // also set document.domain BEFORE jQuery is loaded into the page. This - // property is only applicable if you are supporting IE6/7 (or IE8 operating - // in "IE7 compatibility" mode). - // - // In addition, the property must be set to the - // path of the included "document-domain.html" file, which can be renamed or - // modified if necessary (note that the document.domain specified must be the - // same in both your main JavaScript as well as in this file). - // - // Usage: - // - // jQuery.fn.hashchange.domain = document.domain; - - // Property: jQuery.fn.hashchange.src - // - // If, for some reason, you need to specify an Iframe src file (for example, - // when setting document.domain as in ), you can - // do so using this property. Note that when using this property, history - // won't be recorded in IE6/7 until the Iframe src file loads. This property - // is only applicable if you are supporting IE6/7 (or IE8 operating in "IE7 - // compatibility" mode). - // - // Usage: - // - // jQuery.fn.hashchange.src = 'path/to/file.html'; - - $.fn[ str_hashchange ].delay = 50; - /* - $.fn[ str_hashchange ].domain = null; - $.fn[ str_hashchange ].src = null; - */ - - // Event: hashchange event - // - // Fired when location.hash changes. In browsers that support it, the native - // HTML5 window.onhashchange event is used, otherwise a polling loop is - // initialized, running every milliseconds to - // see if the hash has changed. In IE6/7 (and IE8 operating in "IE7 - // compatibility" mode), a hidden Iframe is created to allow the back button - // and hash-based history to work. - // - // Usage as described in : - // - // > // Bind an event handler. - // > jQuery(window).hashchange( function(e) { - // > var hash = location.hash; - // > ... - // > }); - // > - // > // Manually trigger the event handler. - // > jQuery(window).hashchange(); - // - // A more verbose usage that allows for event namespacing: - // - // > // Bind an event handler. - // > jQuery(window).bind( 'hashchange', function(e) { - // > var hash = location.hash; - // > ... - // > }); - // > - // > // Manually trigger the event handler. - // > jQuery(window).trigger( 'hashchange' ); - // - // Additional Notes: - // - // * The polling loop and Iframe are not created until at least one handler - // is actually bound to the 'hashchange' event. - // * If you need the bound handler(s) to execute immediately, in cases where - // a location.hash exists on page load, via bookmark or page refresh for - // example, use jQuery(window).hashchange() or the more verbose - // jQuery(window).trigger( 'hashchange' ). - // * The event can be bound before DOM ready, but since it won't be usable - // before then in IE6/7 (due to the necessary Iframe), recommended usage is - // to bind it inside a DOM ready handler. - - // Override existing $.event.special.hashchange methods (allowing this plugin - // to be defined after jQuery BBQ in BBQ's source code). - special[ str_hashchange ] = $.extend( special[ str_hashchange ], { - - // Called only when the first 'hashchange' event is bound to window. - setup: function() { - // If window.onhashchange is supported natively, there's nothing to do.. - if ( supports_onhashchange ) { return false; } - - // Otherwise, we need to create our own. And we don't want to call this - // until the user binds to the event, just in case they never do, since it - // will create a polling loop and possibly even a hidden Iframe. - $( fake_onhashchange.start ); - }, - - // Called only when the last 'hashchange' event is unbound from window. - teardown: function() { - // If window.onhashchange is supported natively, there's nothing to do.. - if ( supports_onhashchange ) { return false; } - - // Otherwise, we need to stop ours (if possible). - $( fake_onhashchange.stop ); - } - - }); - - // fake_onhashchange does all the work of triggering the window.onhashchange - // event for browsers that don't natively support it, including creating a - // polling loop to watch for hash changes and in IE 6/7 creating a hidden - // Iframe to enable back and forward. - fake_onhashchange = (function(){ - var self = {}, - timeout_id, - - // Remember the initial hash so it doesn't get triggered immediately. - last_hash = get_fragment(), - - fn_retval = function(val){ return val; }, - history_set = fn_retval, - history_get = fn_retval; - - // Start the polling loop. - self.start = function() { - timeout_id || poll(); - }; - - // Stop the polling loop. - self.stop = function() { - timeout_id && clearTimeout( timeout_id ); - timeout_id = undefined; - }; - - // This polling loop checks every $.fn.hashchange.delay milliseconds to see - // if location.hash has changed, and triggers the 'hashchange' event on - // window when necessary. - function poll() { - var hash = get_fragment(), - history_hash = history_get( last_hash ); - - if ( hash !== last_hash ) { - history_set( last_hash = hash, history_hash ); - - $(window).trigger( str_hashchange ); - - } else if ( history_hash !== last_hash ) { - location.href = location.href.replace( /#.*/, '' ) + history_hash; - } - - timeout_id = setTimeout( poll, $.fn[ str_hashchange ].delay ); - }; - - // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv - // vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv - // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv - $.browser.msie && !supports_onhashchange && (function(){ - // Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8 - // when running in "IE7 compatibility" mode. - - var iframe, - iframe_src; - - // When the event is bound and polling starts in IE 6/7, create a hidden - // Iframe for history handling. - self.start = function(){ - if ( !iframe ) { - iframe_src = $.fn[ str_hashchange ].src; - iframe_src = iframe_src && iframe_src + get_fragment(); - - // Create hidden Iframe. Attempt to make Iframe as hidden as possible - // by using techniques from http://www.paciellogroup.com/blog/?p=604. - iframe = $(''); - if (options.previewPosition == 'after') { - iFrame.insertAfter(footer); - } else { - iFrame.insertBefore(header); - } - previewWindow = iFrame[iFrame.length - 1].contentWindow || frame[iFrame.length - 1]; - } - } else if (altKey === true) { - // Thx Stephen M. Redd for the IE8 fix - if (iFrame) { - iFrame.remove(); - } else { - previewWindow.close(); - } - previewWindow = iFrame = false; - } - if (!options.previewAutoRefresh) { - refreshPreview(); - } - } - - // refresh Preview window - function refreshPreview() { - renderPreview(); - } - - function renderPreview() { - var phtml; - if (options.previewParserPath !== '') { - $.ajax( { - type: 'POST', - url: options.previewParserPath, - data: options.previewParserVar+'='+encodeURIComponent($$.val()), - success: function(data) { - writeInPreview( localize(data, 1) ); - } - } ); - } else { - if (!template) { - $.ajax( { - url: options.previewTemplatePath, - success: function(data) { - writeInPreview( localize(data, 1).replace(//g, $$.val()) ); - } - } ); - } - } - return false; - } - - function writeInPreview(data) { - if (previewWindow.document) { - try { - sp = previewWindow.document.documentElement.scrollTop - } catch(e) { - sp = 0; - } - previewWindow.document.open(); - previewWindow.document.write(data); - previewWindow.document.close(); - previewWindow.document.documentElement.scrollTop = sp; - } - if (options.previewInWindow) { - previewWindow.focus(); - } - } - - // set keys pressed - function keyPressed(e) { - shiftKey = e.shiftKey; - altKey = e.altKey; - ctrlKey = (!(e.altKey && e.ctrlKey)) ? e.ctrlKey : false; - - if (e.type === 'keydown') { - if (ctrlKey === true) { - li = $("a[accesskey="+String.fromCharCode(e.keyCode)+"]", header).parent('li'); - if (li.length !== 0) { - ctrlKey = false; - setTimeout(function() { - li.triggerHandler('mousedown'); - },1); - return false; - } - } - if (e.keyCode === 13 || e.keyCode === 10) { // Enter key - if (ctrlKey === true) { // Enter + Ctrl - ctrlKey = false; - markup(options.onCtrlEnter); - return options.onCtrlEnter.keepDefault; - } else if (shiftKey === true) { // Enter + Shift - shiftKey = false; - markup(options.onShiftEnter); - return options.onShiftEnter.keepDefault; - } else { // only Enter - markup(options.onEnter); - return options.onEnter.keepDefault; - } - } - if (e.keyCode === 9) { // Tab key - if (shiftKey == true || ctrlKey == true || altKey == true) { // Thx Dr Floob. - return false; - } - if (caretOffset !== -1) { - get(); - caretOffset = $$.val().length - caretOffset; - set(caretOffset, 0); - caretOffset = -1; - return false; - } else { - markup(options.onTab); - return options.onTab.keepDefault; - } - } - } - } - - init(); - }); - }; - - $.fn.markItUpRemove = function() { - return this.each(function() { - var $$ = $(this).unbind().removeClass('markItUpEditor'); - $$.parent('div').parent('div.markItUp').parent('div').replaceWith($$); - } - ); - }; - - $.markItUp = function(settings) { - var options = { target:false }; - $.extend(options, settings); - if (options.target) { - return $(options.target).each(function() { - $(this).focus(); - $(this).trigger('insertion', [options]); - }); - } else { - $('textarea').trigger('insertion', [options]); - } - }; -})(jQuery); diff --git a/h-source/Js/markitup/sets/bbcode/images/bold.png b/h-source/Js/markitup/sets/bbcode/images/bold.png deleted file mode 100644 index 889ae80..0000000 Binary files a/h-source/Js/markitup/sets/bbcode/images/bold.png and /dev/null differ diff --git a/h-source/Js/markitup/sets/bbcode/images/clean.png b/h-source/Js/markitup/sets/bbcode/images/clean.png deleted file mode 100644 index 7e7cefb..0000000 Binary files a/h-source/Js/markitup/sets/bbcode/images/clean.png and /dev/null differ diff --git a/h-source/Js/markitup/sets/bbcode/images/code.png b/h-source/Js/markitup/sets/bbcode/images/code.png deleted file mode 100644 index 63fe6ce..0000000 Binary files a/h-source/Js/markitup/sets/bbcode/images/code.png and /dev/null differ diff --git a/h-source/Js/markitup/sets/bbcode/images/fonts.png b/h-source/Js/markitup/sets/bbcode/images/fonts.png deleted file mode 100644 index b7960db..0000000 Binary files a/h-source/Js/markitup/sets/bbcode/images/fonts.png and /dev/null differ diff --git a/h-source/Js/markitup/sets/bbcode/images/h1.png b/h-source/Js/markitup/sets/bbcode/images/h1.png deleted file mode 100644 index 9c122e9..0000000 Binary files a/h-source/Js/markitup/sets/bbcode/images/h1.png and /dev/null differ diff --git a/h-source/Js/markitup/sets/bbcode/images/h2.png b/h-source/Js/markitup/sets/bbcode/images/h2.png deleted file mode 100644 index fbd8765..0000000 Binary files a/h-source/Js/markitup/sets/bbcode/images/h2.png and /dev/null differ diff --git a/h-source/Js/markitup/sets/bbcode/images/h3.png b/h-source/Js/markitup/sets/bbcode/images/h3.png deleted file mode 100644 index c7836cf..0000000 Binary files a/h-source/Js/markitup/sets/bbcode/images/h3.png and /dev/null differ diff --git a/h-source/Js/markitup/sets/bbcode/images/italic.png b/h-source/Js/markitup/sets/bbcode/images/italic.png deleted file mode 100644 index 8482ac8..0000000 Binary files a/h-source/Js/markitup/sets/bbcode/images/italic.png and /dev/null differ diff --git a/h-source/Js/markitup/sets/bbcode/images/link.png b/h-source/Js/markitup/sets/bbcode/images/link.png deleted file mode 100644 index 25eacb7..0000000 Binary files a/h-source/Js/markitup/sets/bbcode/images/link.png and /dev/null differ diff --git a/h-source/Js/markitup/sets/bbcode/images/list-bullet.png b/h-source/Js/markitup/sets/bbcode/images/list-bullet.png deleted file mode 100644 index 4a8672b..0000000 Binary files a/h-source/Js/markitup/sets/bbcode/images/list-bullet.png and /dev/null differ diff --git a/h-source/Js/markitup/sets/bbcode/images/list-item.png b/h-source/Js/markitup/sets/bbcode/images/list-item.png deleted file mode 100644 index 8cb4d69..0000000 Binary files a/h-source/Js/markitup/sets/bbcode/images/list-item.png and /dev/null differ diff --git a/h-source/Js/markitup/sets/bbcode/images/list-numeric.png b/h-source/Js/markitup/sets/bbcode/images/list-numeric.png deleted file mode 100644 index 33b0b8d..0000000 Binary files a/h-source/Js/markitup/sets/bbcode/images/list-numeric.png and /dev/null differ diff --git a/h-source/Js/markitup/sets/bbcode/images/paragraph.png b/h-source/Js/markitup/sets/bbcode/images/paragraph.png deleted file mode 100644 index 95704fb..0000000 Binary files a/h-source/Js/markitup/sets/bbcode/images/paragraph.png and /dev/null differ diff --git a/h-source/Js/markitup/sets/bbcode/images/picture.png b/h-source/Js/markitup/sets/bbcode/images/picture.png deleted file mode 100644 index 4a158fe..0000000 Binary files a/h-source/Js/markitup/sets/bbcode/images/picture.png and /dev/null differ diff --git a/h-source/Js/markitup/sets/bbcode/images/preview.png b/h-source/Js/markitup/sets/bbcode/images/preview.png deleted file mode 100644 index a9925a0..0000000 Binary files a/h-source/Js/markitup/sets/bbcode/images/preview.png and /dev/null differ diff --git a/h-source/Js/markitup/sets/bbcode/images/quotes.png b/h-source/Js/markitup/sets/bbcode/images/quotes.png deleted file mode 100644 index e54ebeb..0000000 Binary files a/h-source/Js/markitup/sets/bbcode/images/quotes.png and /dev/null differ diff --git a/h-source/Js/markitup/sets/bbcode/images/stroke.png b/h-source/Js/markitup/sets/bbcode/images/stroke.png deleted file mode 100644 index 612058a..0000000 Binary files a/h-source/Js/markitup/sets/bbcode/images/stroke.png and /dev/null differ diff --git a/h-source/Js/markitup/sets/bbcode/images/underline.png b/h-source/Js/markitup/sets/bbcode/images/underline.png deleted file mode 100644 index 90d0df2..0000000 Binary files a/h-source/Js/markitup/sets/bbcode/images/underline.png and /dev/null differ diff --git a/h-source/Js/markitup/sets/bbcode/readme.txt b/h-source/Js/markitup/sets/bbcode/readme.txt deleted file mode 100644 index 745d5dd..0000000 --- a/h-source/Js/markitup/sets/bbcode/readme.txt +++ /dev/null @@ -1,11 +0,0 @@ -Markup language: -BBCode - -Description: -A basic BBCode markup set with Bold, Italic, Underline, Picture, Link, Size, List, Quotes, Code, Clean button, Preview button. - -Install: -- Download the zip file -- Unzip it in your markItUp! sets folder -- Modify your JS link to point at this set.js -- Modify your CSS link to point at this style.css \ No newline at end of file diff --git a/h-source/Js/markitup/sets/bbcode/set.js b/h-source/Js/markitup/sets/bbcode/set.js deleted file mode 100644 index 3d16ea5..0000000 --- a/h-source/Js/markitup/sets/bbcode/set.js +++ /dev/null @@ -1,32 +0,0 @@ -// ---------------------------------------------------------------------------- -// markItUp! -// ---------------------------------------------------------------------------- -// Copyright (C) 2008 Jay Salvat -// http://markitup.jaysalvat.com/ -// ---------------------------------------------------------------------------- -// BBCode tags example -// http://en.wikipedia.org/wiki/Bbcode -// ---------------------------------------------------------------------------- -// Feel free to add more tags -// ---------------------------------------------------------------------------- -mySettings = { - previewParserPath: '', // path to your BBCode parser - markupSet: [ - {name:'Heading 1', key:'1', openWith:'[h1]', closeWith:'[/h1]' }, - {name:'Heading 2', key:'2', openWith:'[h2]', closeWith:'[/h2]' }, - {name:'Heading 3', key:'3', openWith:'[h3]', closeWith:'[/h3]' }, - {name:'Paragraph', openWith:'[p]', closeWith:'[/p]' }, - {separator:'---------------' }, - {name:'Bold', key:'B', openWith:'[b]', closeWith:'[/b]'}, - {name:'Italic', key:'I', openWith:'[i]', closeWith:'[/i]'}, - {name:'Underline', key:'U', openWith:'[u]', closeWith:'[/u]'}, - {name:'Stroke through', key:'S', openWith:'[del]', closeWith:'[/del]' }, - {separator:'---------------' }, - {name:'Bulleted list', openWith:'[list]\n', closeWith:'\n[/list]'}, - {name:'Numeric list', openWith:'[enum]\n', closeWith:'\n[/enum]'}, - {name:'List item', openWith:'[*] ', closeWith:'[/*]'}, - {separator:'---------------' }, - {name:'Code', openWith:'[code]', closeWith:'[/code]'}, - {name:'Link', key: 'L', openWith:'[a]', closeWith:'[/a]',placeHolder:'http://the_url | the_text'}, - ] -} \ No newline at end of file diff --git a/h-source/Js/markitup/sets/bbcode/style.css b/h-source/Js/markitup/sets/bbcode/style.css deleted file mode 100644 index 4ab6031..0000000 --- a/h-source/Js/markitup/sets/bbcode/style.css +++ /dev/null @@ -1,72 +0,0 @@ -/* ------------------------------------------------------------------- -// markItUp! -// By Jay Salvat - http://markitup.jaysalvat.com/ -// ------------------------------------------------------------------*/ -.markItUp .markItUpButton1 a { - background-image:url(images/h1.png); -} -.markItUp .markItUpButton2 a { - background-image:url(images/h2.png); -} -.markItUp .markItUpButton3 a { - background-image:url(images/h3.png); -} -.markItUp .markItUpButton4 a { - background-image:url(images/paragraph.png); -} -.markItUp .markItUpButton5 a { - background-image:url(images/bold.png); -} -.markItUp .markItUpButton6 a { - background-image:url(images/italic.png); -} -.markItUp .markItUpButton7 a { - background-image:url(images/underline.png); -} -.markItUp .markItUpButton8 a { - background-image:url(images/stroke.png); -} -.markItUp .markItUpButton9 a { - background-image:url(images/list-bullet.png); -} -.markItUp .markItUpButton10 a { - background-image:url(images/list-numeric.png); -} -.markItUp .markItUpButton11 a { - background-image:url(images/list-item.png); -} -.markItUp .markItUpButton12 a { - background-image:url(images/code.png); -} -.markItUp .markItUpButton13 a { - background-image:url(images/link.png); -} -/*.markItUp .markItUpButton4 a { - background-image:url(images/stroke.png); -}*/ - -/*.markItUp .markItUpButton4 a { - background-image:url(images/picture.png); -}*/ -/*.markItUp .markItUpButton5 a { - background-image:url(images/link.png); -} - -.markItUp .markItUpButton6 a { - background-image:url(images/fonts.png); -} - - -.markItUp .markItUpButton10 a { - background-image:url(images/quotes.png); -} -.markItUp .markItUpButton11 a { - background-image:url(images/code.png); -} - -.markItUp .clean a { - background-image:url(images/clean.png); -} -.markItUp .preview a { - background-image:url(images/preview.png); -}*/ \ No newline at end of file diff --git a/h-source/Js/markitup/skins/simple/images/handle.png b/h-source/Js/markitup/skins/simple/images/handle.png deleted file mode 100644 index 3993b20..0000000 Binary files a/h-source/Js/markitup/skins/simple/images/handle.png and /dev/null differ diff --git a/h-source/Js/markitup/skins/simple/images/menu.png b/h-source/Js/markitup/skins/simple/images/menu.png deleted file mode 100644 index 44a07af..0000000 Binary files a/h-source/Js/markitup/skins/simple/images/menu.png and /dev/null differ diff --git a/h-source/Js/markitup/skins/simple/images/submenu.png b/h-source/Js/markitup/skins/simple/images/submenu.png deleted file mode 100644 index 03d1977..0000000 Binary files a/h-source/Js/markitup/skins/simple/images/submenu.png and /dev/null differ diff --git a/h-source/Js/markitup/skins/simple/style.css b/h-source/Js/markitup/skins/simple/style.css deleted file mode 100644 index 4ff830f..0000000 --- a/h-source/Js/markitup/skins/simple/style.css +++ /dev/null @@ -1,118 +0,0 @@ -/* ------------------------------------------------------------------- -// markItUp! Universal MarkUp Engine, JQuery plugin -// By Jay Salvat - http://markitup.jaysalvat.com/ -// ------------------------------------------------------------------*/ -.markItUp * { - margin:0px; padding:0px; - outline:none; -} -.markItUp a:link, -.markItUp a:visited { - color:#000; - text-decoration:none; -} -.markItUp { - width:700px; - margin:5px 0 5px 0; -} -.markItUpContainer { - font:11px Verdana, Arial, Helvetica, sans-serif; -} -.markItUpEditor { - font:12px 'Courier New', Courier, monospace; - padding:5px; - width:640px; - height:300px; - clear:both; display:block; - line-height:18px; - overflow:auto; -} -.markItUpPreviewFrame { - overflow:auto; - background-color:#FFF; - width:99.9%; - height:300px; - margin:5px 0; -} -.markItUpFooter { - width:100%; -} -.markItUpResizeHandle { - overflow:hidden; - width:22px; height:5px; - margin-left:auto; - margin-right:auto; - background-image:url(images/handle.png); - cursor:n-resize; -} -/***************************************************************************************/ -/* first row of buttons */ -.markItUpHeader ul li { - list-style:none; - float:left; - position:relative; -} -.markItUpHeader ul li:hover > ul{ - display:block; -} -.markItUpHeader ul .markItUpDropMenu { - background:transparent url(images/menu.png) no-repeat 115% 50%; - margin-right:5px; -} -.markItUpHeader ul .markItUpDropMenu li { - margin-right:0px; -} -/* next rows of buttons */ -.markItUpHeader ul ul { - display:none; - position:absolute; - top:18px; left:0px; - background:#FFF; - border:1px solid #000; -} -.markItUpHeader ul ul li { - float:none; - border-bottom:1px solid #000; -} -.markItUpHeader ul ul .markItUpDropMenu { - background:#FFF url(images/submenu.png) no-repeat 100% 50%; -} -.markItUpHeader ul .markItUpSeparator { - margin:0 10px; - width:1px; - height:16px; - overflow:hidden; - background-color:#CCC; -} -.markItUpHeader ul ul .markItUpSeparator { - width:auto; height:1px; - margin:0px; -} -/* next rows of buttons */ -.markItUpHeader ul ul ul { - position:absolute; - top:-1px; left:150px; -} -.markItUpHeader ul ul ul li { - float:none; -} -.markItUpHeader ul a { - display:block; - width:16px; height:16px; - text-indent:-10000px; - background-repeat:no-repeat; - padding:3px; - margin:0px; -} -.markItUpHeader ul ul a { - display:block; - padding-left:0px; - text-indent:0; - width:120px; - padding:5px 5px 5px 25px; - background-position:2px 50%; -} -.markItUpHeader ul ul a:hover { - color:#FFF; - background-color:#000; -} diff --git a/h-source/Js/stats.js b/h-source/Js/stats.js deleted file mode 100644 index 7d6be08..0000000 --- a/h-source/Js/stats.js +++ /dev/null @@ -1,35 +0,0 @@ - -/*************************************************************************** - phpTrafficA @soft.ZoneO.net - Copyright (C) 2004-2008 ZoneO-soft, Butchu (email: "butchu" with the domain "zoneo.net") - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - More Info About The Licence At http://www.gnu.org/copyleft/gpl.html -****************************************************************************/ - -function encode64(inp){ -var key="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; -var chr1,chr2,chr3,enc3,enc4,i=0,out=""; -while(i127) chr1=88; -chr2=inp.charCodeAt(i++);if(chr2>127) chr2=88; -chr3=inp.charCodeAt(i++);if(chr3>127) chr3=88; -if(isNaN(chr3)) {enc4=64;chr3=0;} else enc4=chr3&63; -if(isNaN(chr2)) {enc3=64;chr2=0;} else enc3=((chr2<<2)|(chr3>>6))&63; -out+=key.charAt((chr1>>2)&63)+key.charAt(((chr1<<4)|(chr2>>4))&63)+key.charAt(enc3)+key.charAt(enc4); -} -return encodeURIComponent(out); -} - -function stats(sid){ -var referer=encode64(document.referrer); -var thispage=encode64(window.location.pathname+location.search); -var date=new Date(); -var time=date.getTime(); -var resolution= screen.width + "x" + screen.height; -document.writeln("\"\"\n"); -} diff --git a/h-source/Library/Array/Validate/Base.php b/h-source/Library/Array/Validate/Base.php deleted file mode 100644 index fb4a66c..0000000 --- a/h-source/Library/Array/Validate/Base.php +++ /dev/null @@ -1,258 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to validate associative arrays -class Array_Validate_Base -{ - - public $errorString = null; //string containing the list fields not found - public $errorsNumb = null; //numbers of errors - - protected $_lang; //language of notices - protected $_resultString; //reference to the class arraycheckStrings containing all the result strings - - - public function __construct($lang = 'En') - { - $this->_lang = $lang; - $stringClass = 'Lang_'.$this->_lang.'_ValCondStrings'; - if (!class_exists($stringClass)) - { - $stringClass = 'Lang_En_ValCondStrings'; - } - $this->_resultString = new $stringClass(); - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other - public function checkEqual($associativeArray,$keyString) - { - $errorString = null; - $keyArray = explode(',',$keyString); - $numb = 0; - - //set the first value to null - $firstValue = null; - - foreach ($keyArray as $key) - { - if (array_key_exists($key,$associativeArray)) - { - $firstValue = $associativeArray[$key]; - break; - } - } - - if (isset($firstValue)) - { - for ($i = 0; $i < count($keyArray); $i++) - { - if (array_key_exists($keyArray[$i],$associativeArray)) - { - if (strcmp($associativeArray[$keyArray[$i]],$firstValue) !== 0) - { - $numb++; - $errorString = $this->_resultString->getNotEqualResultString($keyString); - } - } - } - } - - $this->errorString = $errorString; - return $numb === 0 ? true : false; - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphabetic values - //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null - public function checkAlpha($associativeArray,$keyString,$strength = 'strong') - { - return $this->checkGeneric($associativeArray,$keyString,$strength,'ctype_alpha','getNotAlphabeticResultString'); - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphanumeric values - //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null - public function checkAlphaNum($associativeArray,$keyString,$strength = 'strong') - { - return $this->checkGeneric($associativeArray,$keyString,$strength,'ctype_alnum','getNotAlphanumericResultString'); - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal digits - //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null - public function checkDigit($associativeArray,$keyString,$strength = 'strong') - { - return $this->checkGeneric($associativeArray,$keyString,$strength,'ctype_digit','getNotDecimalDigitResultString'); - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have mail format - //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null - public function checkMail($associativeArray,$keyString,$strength = 'strong') - { - return $this->checkGeneric($associativeArray,$keyString,$strength,'checkMail','getNotMailFormatResultString'); - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function - //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null - public function checkNumeric($associativeArray,$keyString,$strength = 'strong') - { - return $this->checkGeneric($associativeArray,$keyString,$strength,'is_numeric','getNotNumericResultString'); - } - - - //apply a generic check function - //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null - //$func: the function to apply - //$strFunc: the method of the object $this->_resultString to apply - private function checkGeneric($associativeArray,$keyString,$strength,$func,$strFunc) - { - - $errorString = null; - $keyArray = explode(',',$keyString); - $numb = 0; - - for ($i = 0; $i < count($keyArray); $i++) - { - if (array_key_exists($keyArray[$i],$associativeArray)) - { - if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong') - { - if (!call_user_func($func,$associativeArray[$keyArray[$i]])) - { - $numb++; - $errorString .= call_user_func(array($this->_resultString,$strFunc),$keyArray[$i]); - } - } - } - } - - $this->errorString = $errorString; - return $numb === 0 ? true : false; - - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have a number of chars smaller than $maxLenght - public function checkLength($associativeArray,$keyString,$maxLength = 10) - { - $errorString = null; - $keyArray = explode(',',$keyString); - $numb = 0; - for ($i = 0; $i < count($keyArray); $i++) - { - if (array_key_exists($keyArray[$i],$associativeArray)) - { - if (eg_strlen($associativeArray[$keyArray[$i]]) > $maxLength) - { - $numb++; - $errorString .= $this->_resultString->getLengthExceedsResultString($keyArray[$i],$maxLength); - } - } - } - $this->errorString = $errorString; - return $numb === 0 ? true : false; - - } - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are different from the values indicated in the argument $strings (a comma-separated list of words) - public function checkIsNotStrings($associativeArray,$keyString,$strings = '') - { - $errorString = null; - $keyArray = explode(',',$keyString); - $numb = 0; - //get the array from the comma-separated list of strings - $stringsArray = explode(',',$strings); - for ($i = 0; $i < count($keyArray); $i++) - { - if (array_key_exists($keyArray[$i],$associativeArray)) - { - foreach ($stringsArray as $string) - { - if (strcmp($associativeArray[$keyArray[$i]],$string) === 0) - { - $numb++; - $errorString .= $this->_resultString->getIsForbiddenStringResultString($keyArray[$i],$strings); - } - } - } - } - $this->errorString = $errorString; - return $numb === 0 ? true : false; - } - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are one of the values indicated in the argument $strings (a comma-separated list of words) - //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null - public function checkIsStrings($associativeArray,$keyString,$strings = '',$strength = 'strong') - { - $errorString = null; - $keyArray = explode(',',$keyString); - $numb = 0; - //get the array from the comma-separated list of strings - $stringsArray = explode(',',$strings); - for ($i = 0; $i < count($keyArray); $i++) - { - if (array_key_exists($keyArray[$i],$associativeArray)) - { - if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong') - { - if (!in_array($associativeArray[$keyArray[$i]],$stringsArray)) - { - $numb++; - $errorString .= $this->_resultString->getIsNotStringResultString($keyArray[$i],$strings); - } - } - } - } - $this->errorString = $errorString; - return $numb === 0 ? true : false; - } - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) match the regular expression $regExp - public function checkMatch($associativeArray,$keyString,$regExp = '/./',$strength = 'strong') - { - $errorString = null; - $keyArray = explode(',',$keyString); - $numb = 0; - for ($i = 0; $i < count($keyArray); $i++) - { - if (array_key_exists($keyArray[$i],$associativeArray)) - { - if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong') - { - if (!preg_match($regExp,$associativeArray[$keyArray[$i]])) - { - $numb++; - $errorString .= $this->_resultString->getDoesntMatchResultString($keyArray[$i],$regExp); - } - } - } - } - $this->errorString = $errorString; - return $numb === 0 ? true : false; - } - -} \ No newline at end of file diff --git a/h-source/Library/Array/Validate/Soft.php b/h-source/Library/Array/Validate/Soft.php deleted file mode 100644 index b348bdc..0000000 --- a/h-source/Library/Array/Validate/Soft.php +++ /dev/null @@ -1,102 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to validate associative arrays -class Array_Validate_Soft extends Array_Validate_Base -{ - - public function __construct($lang = 'Eng') - { - parent::__construct($lang); - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other - public function checkEqual($associativeArray,$keyString) - { - return parent::checkEqual($associativeArray,$keyString); - } - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphabetic values - public function checkAlpha($associativeArray,$keyString) - { - return parent::checkAlpha($associativeArray,$keyString,'soft'); - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphanumeric values - public function checkAlphaNum($associativeArray,$keyString) - { - return parent::checkAlphaNum($associativeArray,$keyString,'soft'); - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal digits - public function checkDigit($associativeArray,$keyString) - { - return parent::checkDigit($associativeArray,$keyString,'soft'); - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have mail format - public function checkMail($associativeArray,$keyString) - { - return parent::checkMail($associativeArray,$keyString,'soft'); - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function - public function checkNumeric($associativeArray,$keyString) - { - return parent::checkNumeric($associativeArray,$keyString,'soft'); - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have a number of chars smaller than $maxLenght - public function checkLength($associativeArray,$keyString,$maxLength = 10) - { - return parent::checkLength($associativeArray,$keyString,$maxLength); - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are different from the values indicated in the argument $strings (a comma-separated list of words) - public function checkIsNotStrings($associativeArray,$keyString,$strings = '') - { - return parent::checkIsNotStrings($associativeArray,$keyString,$strings); - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are one of the values indicated in the argument $strings (a comma-separated list of words) - public function checkIsStrings($associativeArray,$keyString,$strings = '') - { - return parent::checkIsStrings($associativeArray,$keyString,$strings,'soft'); - } - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) match the regular expression $regExp - public function checkMatch($associativeArray,$keyString,$regExp = '/./') - { - return parent::checkMatch($associativeArray,$keyString,$regExp,'soft'); - } - -} \ No newline at end of file diff --git a/h-source/Library/Array/Validate/Strong.php b/h-source/Library/Array/Validate/Strong.php deleted file mode 100644 index ccdce74..0000000 --- a/h-source/Library/Array/Validate/Strong.php +++ /dev/null @@ -1,197 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to manage arrays -class Array_Validate_Strong extends Array_Validate_Base -{ - - public function __construct($lang = 'Eng') - { - parent::__construct($lang); - } - - - public function checkNotEmpty($associativeArray,$keyString) - { - $errorString = null; - $keyArray = explode(',',$keyString); - $numb = 0; - for ($i = 0; $i < count($keyArray); $i++) - { - if (array_key_exists($keyArray[$i],$associativeArray)) - { - if (strcmp(trim($associativeArray[$keyArray[$i]]),'') === 0) - { - $errorString .= $this->_resultString->getNotDefinedResultString($keyArray[$i]); - $numb++; - } - } - else - { - $errorString .= $this->_resultString->getNotDefinedResultString($keyArray[$i]); - $numb++; - } - } - $this->errorString = $errorString; - $this->errorNumb = $numb; - return $numb === 0 ? true : false; - } - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other - public function checkEqual($associativeArray,$keyString) - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkEqual($associativeArray,$keyString); - - } else { - return false; - } - } - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphabetic values - public function checkAlpha($associativeArray,$keyString) - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkAlpha($associativeArray,$keyString,'strong'); - - } else { - return false; - } - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphanumeric values - public function checkAlphaNum($associativeArray,$keyString) - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkAlphaNum($associativeArray,$keyString,'strong'); - - } else { - return false; - } - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal digits - public function checkDigit($associativeArray,$keyString) - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkDigit($associativeArray,$keyString,'strong'); - - } else { - return false; - } - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have mail format - public function checkMail($associativeArray,$keyString) - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkMail($associativeArray,$keyString,'strong'); - - } else { - return false; - } - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function - public function checkNumeric($associativeArray,$keyString) - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkNumeric($associativeArray,$keyString,'strong'); - - } else { - return false; - } - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have a number of chars smaller than $maxLenght - public function checkLength($associativeArray,$keyString,$maxLength = 10) - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkLength($associativeArray,$keyString,$maxLength); - - } else { - return false; - } - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are different from the values indicated in the argument $strings (a comma-separated list of words) - public function checkIsNotStrings($associativeArray,$keyString,$strings = '') - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkIsNotStrings($associativeArray,$keyString,$strings); - - } else { - return false; - } - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are one of the values indicated in the argument $strings (a comma-separated list of words) - public function checkIsStrings($associativeArray,$keyString,$strings = '') - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkIsStrings($associativeArray,$keyString,$strings,'strong'); - - } else { - return false; - } - } - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) match the regular expression $regExp - public function checkMatch($associativeArray,$keyString,$regExp = '/./') - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkMatch($associativeArray,$keyString,$regExp,'strong'); - - } else { - return false; - } - } -} \ No newline at end of file diff --git a/h-source/Library/Array/Validate/index.html b/h-source/Library/Array/Validate/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Library/Array/Validate/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Library/Array/index.html b/h-source/Library/Array/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Library/Array/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Library/ArrayExt.php b/h-source/Library/ArrayExt.php deleted file mode 100755 index 2b02c9e..0000000 --- a/h-source/Library/ArrayExt.php +++ /dev/null @@ -1,80 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to manage arrays -class ArrayExt { - - public $errorString = null; //string containing the list fields not found - public $errorsNumb = null; //numbers of errors - - //get the subset of the associative array $associativeArray defined by the keys in the string $keyString (keys separated by comma) - public function subset($associativeArray,$keyString,$func = 'none') { - if (!in_array($func,explode(',',Params::$allowedSanitizeFunc))) { - throw new Exception('"'.$func. '" argument not allowed in '.__METHOD__.' method'); - } - $tempArray = array(); - if (strcmp($keyString,'') !== 0) { - $keyArray=explode(',',$keyString); - for ($i = 0; $i < count($keyArray); $i++) - { - $temp = array(); - //extract the function after the colon - if (strstr($keyArray[$i],':')) { - $temp = explode(':',$keyArray[$i]); - } else { - $temp[0] = $keyArray[$i]; - $temp[1] = 'none'; - } - //exception - if (!in_array($temp[1],explode(',',Params::$allowedSanitizeFunc))) { - throw new Exception('"'.$temp[1]. '" function not allowed'); - } - if (array_key_exists($temp[0],$associativeArray)) { - $tempArray[$temp[0]] = call_user_func($temp[1],$associativeArray[$temp[0]]); - } else { - $tempArray[$temp[0]] = ''; - } - } - } - return call_user_func($func.'Deep',$tempArray); //clean the array values - } - - //exctract the complementary subset from an associative array ($associativeArray) of the subset identified by the keys $keyString - public function subsetComplementary($associativeArray,$keyString,$func = 'none') { - if (!in_array($func,explode(',',Params::$allowedSanitizeFunc))) { - throw new Exception('"'.$func. '" argument not allowed in '.__METHOD__.' method'); - } - $keyArray=explode(',',$keyString); - $complementaryKeyArray = array(); - $keys = array_keys($associativeArray); - foreach ($keys as $key) { - if (!in_array($key,$keyArray)) { - $complementaryKeyArray[] = $key; - } - } - $complementaryKeyString = implode(',',$complementaryKeyArray); - return $this->subset($associativeArray,$complementaryKeyString,$func); - } - -} diff --git a/h-source/Library/Bootstrap.php b/h-source/Library/Bootstrap.php deleted file mode 100755 index 5d7a12f..0000000 --- a/h-source/Library/Bootstrap.php +++ /dev/null @@ -1,31 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -require_once (ROOT . DS . 'Config' . DS . 'Reporting.php'); -require_once (ROOT . DS . 'Config' . DS . 'Restricted.php'); -require_once (ROOT . DS . 'Config' . DS . 'Autoload.php'); -require_once (ROOT . DS . 'Library' . DS . 'Functions.php'); -require_once (ROOT . DS . 'Library' . DS . 'Strings' . DS . 'Functions.php'); -require_once (ROOT . DS . 'Library' . DS . 'ErrorReporting.php'); -require_once (ROOT . DS . 'Library' . DS . 'Call.php'); diff --git a/h-source/Library/BoxParser.php b/h-source/Library/BoxParser.php deleted file mode 100644 index 0e7e03f..0000000 --- a/h-source/Library/BoxParser.php +++ /dev/null @@ -1,86 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to parse an XML text in order to create the modules corresponding to the elements of the XML text. -//the module name tag defines the name of the object that has to be instantiate and saved in the -//$modules property (that is an array referencing different module objects) array(moduleObj1,moduleObj2, ...) -//if the module class corresponding ot the module name tag does not exists, than no module is created and the next module name is checked -class BoxParser { - - public $modules = array(); //array referencing different module classes --> array(moduleObj1,moduleObj2, ...) See files inside the Application/Modules folder - - //$simpleXMLText: it has to be an XML text - //$type; it can be string or file. - public function __construct($simpleXMLText, $type = 'string') - { - if ($type === 'string') - { - if (@simplexml_load_string($simpleXMLText)) - { - $simpleXmlObj = simplexml_load_string($simpleXMLText); - $this->populate($simpleXmlObj); - } - } - else if ($type === 'file') - { - if (@simplexml_load_file($simpleXMLText)) - { - $simpleXmlObj = simplexml_load_file($simpleXMLText); - $this->populate($simpleXmlObj); - } - } - } - - //inistantiate the module objects and save them in the $this->modules property array - private function populate($simpleXmlObj) - { - foreach ($simpleXmlObj as $mod) - { - $className = 'Mod'.ucwords((string)$mod->type); - if (class_exists($className)) - { - if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Modules' . DS . $className . '.php')) - { - $newModule = new $className($mod); - if ($newModule instanceof ModAbstract) - { - $this->modules[] = $newModule; - } - } - } - } - } - - //create the HTML of the modules - public function render() - { - $HTML = null; - foreach ($this->modules as $module) - { - $HTML .= $module->render(); - } - return $HTML; - } - -} \ No newline at end of file diff --git a/h-source/Library/Call.php b/h-source/Library/Call.php deleted file mode 100755 index a9145c2..0000000 --- a/h-source/Library/Call.php +++ /dev/null @@ -1,359 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - - -/* SANITIZE SUPERGLOBAL ARRAYS */ -function sanitizeSuperGlobal() -{ - $_GET = stripslashesDeep($_GET); - - $_POST = stripslashesDeep($_POST); - - $_COOKIE = stripslashesDeep($_COOKIE); - - $_SERVER = stripslashesDeep($_SERVER); -} - - - -function checkPostLength() -{ - if (MAX_POST_LENGTH !== 0) - { - foreach ($_POST as $key => $value) - { - if (strlen($value) > MAX_POST_LENGTH) die('the length of some of the $_POST values is too large'); - } - } -} - -function checkRequestUriLength() -{ - if (MAX_REQUEST_URI_LENGTH !== 0) - { - if (strlen($_SERVER['REQUEST_URI']) > MAX_REQUEST_URI_LENGTH) die('the length of the REQUEST_URI is too large'); - } -} - -function checkRegisterGlobals() -{ - if (ini_get('register_globals')) die('register globals is on: easyGiant works only with register globals off'); -} - -function callHook() -{ - - $currentUrl = null; - - if (MOD_REWRITE_MODULE === true) - { - $url = isset($_GET['url']) ? $_GET['url'] : DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION; - } - else - { - $url = (strcmp(getQueryString(),"") !== 0) ? getQueryString() : DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION; - } - -// rewrite the URL - if (Route::$rewrite === 'yes') - { - $res = rewrite($url); - $url = $res[0]; - $currentUrl = $res[1]; - } - -// echo $url; - - $urlArray = array(); - $urlArray = explode("/",$url); - - $controller = DEFAULT_CONTROLLER; - $action = DEFAULT_ACTION; - - if (isset($urlArray[0])) - { - $controller = (strcmp($urlArray[0],'') !== 0) ? strtolower(trim($urlArray[0])) : DEFAULT_CONTROLLER; - } - - array_shift($urlArray); - - if (isset($urlArray[0])) - { - $action = (strcmp($urlArray[0],'') !== 0) ? strtolower(trim($urlArray[0])) : DEFAULT_ACTION; - } - - //set ERROR_CONTROLLER and ERROR_ACTION - $errorController = ERROR_CONTROLLER !== false ? ERROR_CONTROLLER : DEFAULT_CONTROLLER; - $errorAction = ERROR_ACTION !== false ? ERROR_ACTION : DEFAULT_ACTION; - - /* - VERIFY THE ACTION NAME - */ - if (method_exists('Controller', $action) or !ctype_alnum($action) or (strcmp($action,'') === 0)) - { - $controller = $errorController; - $action = $errorAction; - $urlArray = array(); - } - - /* - VERIFY THE CONTROLLER NAME - */ - if (!ctype_alnum($controller) or (strcmp($controller,'') === 0)) - { - $controller = $errorController; - $action = $errorAction; - $urlArray = array(); - } - - //check that the controller class belongs to the application/controllers folder - //otherwise set the controller to the default controller - if (!file_exists(ROOT.DS.APPLICATION_PATH.DS.'Controllers'.DS.ucwords($controller).'Controller.php')) - { - $controller = $errorController; - $action = $errorAction; - $urlArray = array(); - } - - //set the controller class to DEFAULT_CONTROLLER if it doesn't exists - if (!class_exists(ucwords($controller).'Controller')) - { - $controller = $errorController; - $action = $errorAction; - $urlArray = array(); - } - - //set the action to DEFAULT_ACTION if it doesn't exists - if (!method_exists(ucwords($controller).'Controller', $action)) - { - $controller = $errorController; - $action = $errorAction; - $urlArray = array(); - } - - /* - CHECK COUPLES CONTROLLER,ACTION - */ - if (!in_array('all',Route::$allowed)) - { - $couple = "$controller,$action"; - if (!in_array($couple,Route::$allowed)) - { - $controller = $errorController; - $action = $errorAction; - $urlArray = array(); - } - } - - array_shift($urlArray); - $queryString = $urlArray; - //set the name of the application - $application = $controller; - $controller = ucwords($controller); - $model = $controller; - $controller .= 'Controller'; - $model .= 'Model'; - - //include the file containing the set of actions to carry out before the initialization of the controller class - Hooks::load(ROOT . DS . APPLICATION_PATH . DS . 'Hooks' . DS . 'BeforeInitialization.php'); - - if (class_exists($controller)) - { - $dispatch = new $controller($model,$application,$queryString); - - //pass the action to the controller object - $dispatch->action = $action; - - $dispatch->currPage = $dispatch->baseUrl.'/'.$dispatch->controller.'/'.$dispatch->action; - if (isset($currentUrl)) - { - $dispatch->currPage = $dispatch->baseUrl.'/'.$currentUrl; - } - - //require the file containing the set of actions to carry out after the initialization of the controller class - Hooks::load(ROOT . DS . APPLICATION_PATH . DS . 'Hooks' . DS . 'AfterInitialization.php'); - - $templateFlag= true; - - if (method_exists($controller, $action)) - { - //pass the action to the theme object - $dispatch->theme->action = $action; - $dispatch->theme->currPage = $dispatch->baseUrl.'/'.$dispatch->controller.'/'.$dispatch->action; - if (isset($currentUrl)) - { - $dispatch->theme->currPage = $dispatch->baseUrl.'/'.$currentUrl; - } - - call_user_func_array(array($dispatch,$action),$queryString); - } - else - { - $templateFlag= false; - } - - if ($templateFlag) - { - $dispatch->theme->render(); - } - - } - else - { - echo "

              the '$controller' controller is not present!

              "; - } - -} - - -//rewrite the URL -function rewrite($url) -{ - foreach (Route::$map as $key => $address) - { - $oldKey = $key; - $key = str_replace('\/','/',$key); - $key = str_replace('/','\/',$key); - if (preg_match('/^'.$key.'/',$url)) - { - $nurl = preg_replace('/^'.$key.'/',$address,$url); - return array($nurl,$oldKey); -// return preg_replace('/^'.$key.'/',$address,$url); - } - } -// return $url; - return array($url,null); -} - -function getQueryString() -{ - - if (strstr($_SERVER['REQUEST_URI'],'index.php/')) - { - return Params::$mbStringLoaded === true ? mb_substr(mb_strstr($_SERVER['REQUEST_URI'],'index.php/'),10) : substr(strstr($_SERVER['REQUEST_URI'],'index.php/'),10); - } - - return ''; -} - -function autoloader($className) -{ - - $backupName = $className; - - if (strstr($className,'_')) - { - $parts = explode('_',$className); - $className = implode(DS,$parts); - } - - if (file_exists(ROOT . DS . 'Library' . DS . $className . '.php')) - { - require_once(ROOT . DS . 'Library' . DS . $className . '.php'); - } - else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Controllers' . DS . $backupName . '.php')) - { - require_once(ROOT . DS . APPLICATION_PATH . DS . 'Controllers' . DS . $backupName . '.php'); - } - else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Models' . DS . $backupName . '.php')) - { - require_once(ROOT . DS . APPLICATION_PATH . DS . 'Models' . DS . $backupName . '.php'); - } - else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Modules' . DS . $backupName . '.php')) - { - require_once(ROOT . DS . APPLICATION_PATH . DS . 'Modules' . DS . $backupName . '.php'); - } - else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Strings' . DS . $className . '.php')) - { - require_once(ROOT . DS . APPLICATION_PATH . DS . 'Strings' . DS . $className . '.php'); - } - -} -spl_autoload_register('autoloader'); - -try { - - //check the length of the $_POST values - checkPostLength(); - - //check the length of the REQUEST_URI - checkRequestUriLength(); - - //connect to the database - Factory_Db::getInstance(DATABASE_TYPE,array(HOST,USER,PWD,DB)); - - //set htmlentities charset - switch (DEFAULT_CHARSET) - { - case 'SJIS': - Params::$htmlentititiesCharset = 'Shift_JIS'; - break; - } - - $allowedCharsets = array('UTF-8','ISO-8859-1','EUC-JP','SJIS'); - if (!in_array(DEFAULT_CHARSET,$allowedCharsets)) die('charset not-allowed'); - - //check if the mbstring extension is loaded - if (extension_loaded('mbstring')) - { - //set the internal encoding - mb_internal_encoding(DEFAULT_CHARSET); - Params::$mbStringLoaded = true; - } - - //load the files defined inside Config/Autoload.php - foreach (Autoload::$files as $file) - { - $parts = explode('.', $file); - $ext = strtolower(end($parts)); - $path = ROOT . DS . APPLICATION_PATH . DS . 'Include' . DS . $file; - if (file_exists($path) and $ext === 'php') - { - require_once($path); - } - } - - //include the file containing the set of actions to carry out before the check of the super global array - Hooks::load(ROOT . DS . APPLICATION_PATH . DS . 'Hooks' . DS . 'BeforeChecks.php'); - - //sanitize super global arrays - sanitizeSuperGlobal(); - - //report errors - ErrorReporting(); - - //verify that register globals is not active - checkRegisterGlobals(); - - //call the main hook - callHook(); - - //disconnect to the database - Factory_Db::disconnect(DATABASE_TYPE); - -} catch (Exception $e) { - - echo '
              Message: '.$e->getMessage().'
              '; - -} diff --git a/h-source/Library/Controller.php b/h-source/Library/Controller.php deleted file mode 100755 index b0eef53..0000000 --- a/h-source/Library/Controller.php +++ /dev/null @@ -1,321 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Controller { - - protected $m = array(); //associative array referencing different models - protected $h = array(); //associative array referencing different helpers - protected $s = array(); //associative array referencing different sessions objects (users_checkAdmin objects: see library/users/checkAdmin.php) - protected $c = array(); //associative array referencing different controllers - - protected $_queryString = array(); //the array of args coming from the url - - public $controller; - public $action; - public $currPage; //the URL of the current page - - public $request = null; //reference to a Request object - - public $modelName; - - public $argKeys = array(); //the array of keys representing the status args of the view action of the controller (validate function after colon) - public $argDefault = array(); //the array containing the default values of the $viewArgs array - - public $argFunc = array(); //the array containing the functions to be applied upon the $viewArgs array - - public $viewArgs = array(); //the associative array representing the status args of the main action of the controller. It is the combination of $argKeys and $queryString - public $viewStatus = ''; //string containing the additional url string to get the status of the view action of the controller (derived from $this->viewArgs) - - public $theme; - public $baseUrl = null; //the base url of the website: http://domainname - public $baseUrlSrc = null; //the base url of the website (http://domainname) if MOD_REWRITE_MODULE has been set to false - - public $headerObj; //reference to headerObj class - -// protected $_users; //object to manage access - - protected $scaffold = null; //the reference to the scaffold object - - function __construct($model, $controller, $queryString = array()) { - $this->controller = $controller; - $this->modelName = $model; - $this->_queryString = $queryString; - - $this->theme = new Theme($controller); - $this->baseUrl = $this->theme->baseUrl; - $this->baseUrlSrc = $this->theme->baseUrlSrc; - - $this->headerObj = new HeaderObj(DOMAIN_NAME); - $this->request = new Request(); - } - - //redirect to $path after the time $time - final public function redirect($path,$time = 0,$string = null) - { - $this->headerObj->redirect($path,$time,$string); - } - - //set the $_data structure of the theme - final public function set($value) - { - $this->theme->set($value); - } - - //append values to the $_data structure of the theme - final public function append($value) - { - $this->theme->append($value); - } - - //load a view file - final public function load($viewFile,$option = 'none') { - $this->theme->load($viewFile,$option); - } - - //clean the array containing the view files to load - final public function clean() { - $this->theme->clean(); - } - - //load an helper class - final function helper($helperName) { - $args = func_get_args(); - array_shift($args); - $name = 'Helper_'.$helperName; - if (class_exists($name)) - { - $this->h[$helperName] = new $name(); - - if ($this->h[$helperName] instanceof Helper_Html) { - $this->h[$helperName]->viewArgs = $this->viewArgs; - $this->h[$helperName]->viewStatus = $this->viewStatus; - } - - if (method_exists($this->h[$helperName], 'build')) { - call_user_func_array(array($this->h[$helperName],'build'),$args); - } - } - - } - - //load a model class - //$name: the name of the model class - final public function model($name = null) { - $modelName = isset($name) ? $name : $this->modelName; - if (class_exists($modelName)) { - $this->m[$modelName] = new $modelName(); - } else { - throw new Exception('Error in '.__METHOD__.': class "'.$modelName.'" has not been defined'); - } - } - - //load a controller - //$controllerName: the name of the controller class to load - final public function controller($controller) - { - if (class_exists($controller)) { - $model = str_replace('Controller',null,$controller).'Model'; - $application = strtolower(str_replace('Controller',null,$controller)); - $this->c[$controller] = new $controller($model,$application,array()); - $this->c[$controller]->theme = $this->theme; - } - } - - //load a users_checkAdmin class - //$sessonType: the type of session. It can be 'admin' (in the case of the access of an admin user) or 'registered' (in the case of the access of a registerd user) - final public function session($sessionType = 'admin') { - $sessionTypeArray = array('admin','registered'); - if (!in_array($sessionType,$sessionTypeArray)) { - throw new Exception('Error in '.__METHOD__.': the session type can be \'admin\' or \'registered\' only'); - } - //admin session - if ($sessionType === 'admin') { - $params = array( - 'users_controller' => ADMIN_USERS_CONTROLLER, - 'users_login_action' => ADMIN_USERS_LOGIN_ACTION, - 'panel_controller' => ADMIN_PANEL_CONTROLLER, - 'panel_main_action' => ADMIN_PANEL_MAIN_ACTION, - 'cookie_name' => ADMIN_COOKIE_NAME, - 'sessionsTable' => ADMIN_SESSIONS_TABLE, - 'usersTable' => ADMIN_USERS_TABLE, - 'groupsTable' => ADMIN_GROUPS_TABLE, - 'manyToManyTable' => ADMIN_MANYTOMANY_TABLE, - 'accessesTable' => ADMIN_ACCESSES_TABLE, - 'session_expire' => ADMIN_SESSION_EXPIRE, - 'cookie_path' => ADMIN_COOKIE_PATH, - 'database_type' => DATABASE_TYPE, - 'hijacking_check' => ADMIN_HIJACKING_CHECK, - 'on_hijacking_event' => ADMIN_ON_HIJACKING_EVENT, - 'hijacking_action' => ADMIN_HIJACKING_ACTION, - 'time_after_failure' => ADMIN_TIME_AFTER_FAILURE, - 'password_hash' => PASSWORD_HASH, - 'cookie_domain' => ADMIN_COOKIE_DOMAIN, - 'cookie_secure' => ADMIN_COOKIE_SECURE - ); - $this->s['admin'] = new Users_CheckAdmin($params); - } - //registered session - if ($sessionType === 'registered') { - $params = array( - 'users_controller' => REG_USERS_CONTROLLER, - 'users_login_action' => REG_USERS_LOGIN_ACTION, - 'panel_controller' => REG_PANEL_CONTROLLER, - 'panel_main_action' => REG_PANEL_MAIN_ACTION, - 'cookie_name' => REG_COOKIE_NAME, - 'sessionsTable' => REG_SESSIONS_TABLE, - 'usersTable' => REG_USERS_TABLE, - 'groupsTable' => REG_GROUPS_TABLE, - 'manyToManyTable' => REG_MANYTOMANY_TABLE, - 'accessesTable' => REG_ACCESSES_TABLE, - 'session_expire' => REG_SESSION_EXPIRE, - 'cookie_path' => REG_COOKIE_PATH, - 'database_type' => DATABASE_TYPE, - 'hijacking_check' => REG_HIJACKING_CHECK, - 'on_hijacking_event' => REG_ON_HIJACKING_EVENT, - 'hijacking_action' => REG_HIJACKING_ACTION, - 'time_after_failure' => REG_TIME_AFTER_FAILURE, - 'password_hash' => PASSWORD_HASH, - 'cookie_domain' => REG_COOKIE_DOMAIN, - 'cookie_secure' => REG_COOKIE_SECURE - ); - $this->s['registered'] = new Users_CheckAdmin($params); - } - } - - //method to set $this->argKeys. Chenge the string in the array! - final public function setArgKeys($argKeys) { -// $this->argKeys = explode(',',$argKeys); - $this->argKeys = array_keys($argKeys); - $this->argDefault = array_values($argKeys); - } - - //shift the $this->_queryString array a number of times equal to the number indicated by the $number variable and build the $this->viewArgs array and the $this->viewStatus string (additional url) - final public function shift($number = 0) { - - //save the query string array - $oldQueryString = $this->_queryString; - - for ($i = 0; $i < $number; $i++) - { - array_shift($this->_queryString); - } - $this->callInArgKeysFunc(); - for ($i = 0; $i < count($this->argKeys); $i++) - { - if (isset($_GET[$this->argKeys[$i]]) and strcmp($_GET[$this->argKeys[$i]],'') !== 0) - { - $this->viewArgs[$this->argKeys[$i]] = $this->request->get($this->argKeys[$i],'',$this->argFunc[$i]); - continue; - } - if (!isset($this->_queryString[$i])) { - $this->viewArgs[$this->argKeys[$i]] = isset($this->argDefault[$i]) ? $this->argDefault[$i] : null; - continue; - } - $this->viewArgs[$this->argKeys[$i]] = $this->_queryString[$i]; - } - $this->viewStatus = Url::createUrl(array_values($this->viewArgs)); - $this->updateHelpers(); - - //update the theme - $this->theme->viewStatus = $this->viewStatus; - $this->theme->viewArgs = $this->viewArgs; - - //restore the query string array - $this->_queryString = $oldQueryString; - } - - //call the functions defined in $this->argKeys after the colon (ex- 'page:forceInt' => apply the forceInt() function upon the $page arg) - final public function callInArgKeysFunc() { - for ($i = 0; $i < count($this->argKeys); $i++) { - - $this->argFunc[$i] = 'none'; - - if (strstr($this->argKeys[$i],':')) { - $temp = explode(':',$this->argKeys[$i]); - - $this->argFunc[$i] = $temp[1]; - - //exception - if (!in_array($temp[1],explode(',',params::$allowedSanitizeFunc))) { - throw new Exception('"'.$temp[1]. '" function not allowed in $this->argKeys'); - } - $this->argKeys[$i] = $temp[0]; - if (!isset($this->_queryString[$i])) { - continue; - } - $this->_queryString[$i] = call_user_func($temp[1],$this->_queryString[$i]); - } - } - } - - //function to update all the Helper that are instance of the HtmlHelper class. This function update the $viesArgs and $viewStatus properties. This function is called by the shift method. - final public function updateHelpers() { - foreach ($this->h as $Helper) { - if ($Helper instanceof Helper_Html) { - $Helper->viewArgs = $this->viewArgs; - $Helper->viewStatus = $this->viewStatus; - } - } - } - - //create the viewStatus property - final public function buildStatus() - { - $this->viewStatus = Url::createUrl(array_values($this->viewArgs)); - //update the theme - $this->theme->viewStatus = $this->viewStatus; - $this->theme->viewArgs = $this->viewArgs; - } - - //method to instanciate the scaffold - final public function loadScaffold($type,$params = null) { - - $typeArray = array('main','form'); - if (!in_array($type,$typeArray)) { - throw new Exception("the type '$type' is not allowed in ".__METHOD__); - } - $this->scaffold = new Scaffold($type,$this->controller,$this->m[$this->modelName],$this->viewArgs,$params); - - $this->helper('Menu',$this->controller,$this->scaffold->params['panelController']); - $this->scaffold->mainMenu = $this->h['Menu']; - - $this->m[$this->modelName]->popupBuild(); - $popupArray = $this->m[$this->modelName]->popupArray; - - if ($type === 'main') { - - $here = $this->controller.'/'.$this->scaffold->params['mainAction']; - $this->helper('Pages',$here,$this->scaffold->params['pageVariable']); - $this->helper('List',$this->m[$this->modelName]->identifierName,$here,$this->scaffold->params['pageVariable']); - - - $this->helper('Popup',$here,$popupArray,$this->scaffold->params['popupType'],$this->scaffold->params['pageVariable'],true); - - $this->scaffold->pageList = $this->h['Pages']; - $this->scaffold->itemList = $this->h['List']; - $this->scaffold->popupMenu = $this->h['Popup']; - } - } - -} \ No newline at end of file diff --git a/h-source/Library/Db/Mysql.php b/h-source/Library/Db/Mysql.php deleted file mode 100755 index 4561a1b..0000000 --- a/h-source/Library/Db/Mysql.php +++ /dev/null @@ -1,446 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to manage the database -//singleton! -class Db_Mysql { - - public $query = null; //the last query executed - public $charsetError = true; //true: non eccor occurred during the modification of the connection charset, false: one error occurred - public $charset = null; //the charset of the client connection - - private static $instance = null; //instance of this class - - private $dblink; - private $fieldsType = array('tinyint','smallint','int','mediumint','bigint','float','double'); - /** - - *connect to the database - *'host','user','password','db_name' - - */ - - //PHP-Mysql charset translation table - private $charsetTranslationTable = array( - 'UTF-8' => 'utf8', - 'ISO-8859-1' => 'latin1', - 'EUC-JP' => 'ujis', - 'SJIS' => 'sjis' - ); - - private function __construct($host,$user,$pwd,$db_name) - { - - $this->dblink = mysql_connect($host,$user,$pwd); - - if ($this->dblink === FALSE) { - die ("Connection error. Verify parameters in config.php"); - } - - $db2 = mysql_select_db($db_name, $this->dblink) - or die ("Database selection error. Verify parameters in config.php"); - - $charset = array_key_exists(DEFAULT_CHARSET,$this->charsetTranslationTable) ? $this->charsetTranslationTable[DEFAULT_CHARSET] : 'utf8'; - - if (!@mysql_set_charset($charset,$this->dblink)) $this->charsetError = false; - - $this->charset = mysql_client_encoding(); - } - - public static function getInstance($host = null, $user = null, $pwd = null, $db_name = null) - { - if (!isset(self::$instance)) { - $className = __CLASS__; - self::$instance = new $className($host,$user,$pwd,$db_name); - } - - return self::$instance; - } - - - //close the connection - public function disconnect() - { - mysql_close($this->dblink); - } - - //the text of the error message from previous MySQL operation - public function getError() - { - return mysql_error($this->dblink); - } - - //the numerical value of the error message from previous MySQL operation - public function getErrno() - { - return mysql_errno($this->dblink); - } - - public function getJoinString($string) - { - if (strstr($string,':')) - { - $tArray = explode(':',$string); - switch($tArray[0]) - { - case 'i': - $jString = ' INNER JOIN ' . $tArray[1]; - break; - case 'l': - $jString = ' LEFT JOIN ' . $tArray[1]; - break; - case 'r': - $jString = ' RIGHT JOIN ' . $tArray[1]; - break; - default: - $jString = ' INNER JOIN ' . $tArray[1]; - break; - } - return $jString; - } - else - { - return ' INNER JOIN '.$string; - } - } - - public function createSelectQuery($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=array(),$using=array(),$join=array()) - { - $maxValue = max(count($on),count($using),count($join)); - - $joinString = null; - for ($i=0; $i < $maxValue; $i++) - { - $joinString .= isset($join[$i]) ? $this->getJoinString($join[$i]) : null; - if (isset($using[$i])) - { - $joinString .= ' USING ('.$using[$i].')'; - } - else if (isset($on[$i])) - { - $joinString .= ' ON '.$on[$i]; - } - } - - if (isset($where)) - { - $where='WHERE '.$where; - } - if (isset($order_by)) { - $order_by='ORDER BY '.$order_by; - } - if (isset($group_by)) { - $group_by='GROUP BY '.$group_by; - } - if (isset($limit)) { - $limit='LIMIT '.$limit; - } - - $query="SELECT $fields FROM $table $joinString $where $group_by $order_by $limit;"; - return $query; - } - - public function get_num_rows($table,$where=null,$group_by=null,$on=array(),$using=array(),$join=array()) { - - $query = $this->createSelectQuery($table,'*',$where,$group_by,null,null,$on,$using,$join); - - $this->query=$query; - - $ris = mysql_query($query); - if ($ris) { - $num_rows = mysql_num_rows($ris); - return $num_rows; - } else { - return false; - } - } - - //get the maximum value of the field $field of the table $table having the $where conditions - public function getMath($func,$table,$field,$where=null,$group_by = null, $on=array(),$using=array(),$join=array()) - { - $query = $this->createSelectQuery($table,"$func($field) AS m",$where,$group_by,null,null,$on,$using,$join); - - $this->query = $query; - $result = mysql_query($query); - if ($result) - { - $row = mysql_fetch_array($result); - return $row['m']; - } - else - { - return false; - } - } - - //get the maximum value of the field $field of the table $table having the $where conditions - public function getMax($table,$field,$where=null,$group_by = null,$on=array(),$using=array(),$join=array()) - { - return $this->getMath('MAX',$table,$field,$where,$group_by,$on,$using,$join); - } - - //get the minimum value of the field $field of the table $table having the $where conditions - public function getMin($table,$field,$where=null,$group_by = null,$on=array(),$using=array(),$join=array()) - { - return $this->getMath('MIN',$table,$field,$where,$group_by,$on,$using,$join); - } - - //get the sum of the fields - public function getSum($table,$field,$where=null,$group_by = null,$on=array(),$using=array(),$join=array()) - { - return $this->getMath('SUM',$table,$field,$where,$group_by,$on,$using,$join); - } - - //get the average of the fields - public function getAvg($table,$field,$where=null,$group_by = null,$on=array(),$using=array(),$join=array()) - { - return $this->getMath('AVG',$table,$field,$where,$group_by,$on,$using,$join); - } - - public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=array(),$using=array(),$join=array()) - { - $query = $this->createSelectQuery($table,$fields,$where,$group_by,$order_by,$limit,$on,$using,$join); - - $this->query = $query; - $result = mysql_query($query); - return $this->getData($result); - } - - -// public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null) { -// $query = $this->selectQuery($table,$fields,$where,$group_by,$order_by,$limit); -// return $this->getData($query); -// } - - - //obtain an associative array containing the result values (keys:tableName_fieldsName) - //$par = 'single/multi' single table,multi table - public function getData($result) - { - $data = array(); //data from the query - $temp = array(); //temporary array (values of a single record) -// $result = mysql_query($query); - if ($result) - { - $fieldsNumber = mysql_num_fields($result); - while ($row = mysql_fetch_array($result)) - { - for ($i = 0;$i < $fieldsNumber;$i++) - { - $tableName = mysql_field_table($result, $i); - if (strcmp($tableName,'') === 0) $tableName = Params::$aggregateKey; - $fieldName = mysql_field_name($result, $i); - $temp[$tableName][$fieldName] = $row[$i]; - } - array_push($data,$temp); - } - return $data; - } - else - { - return false; - } - } - - //return an array containing all the types of the fields (indicated in $fields) of a table (indicated in $table) - public function getTypes($table, $fields) - { - $query = "DESCRIBE $table;"; - $result = mysql_query($query); - $temp = array(); - while ($row = mysql_fetch_assoc($result)) { - $temp[$row['Field']] = reset(explode('(',$row['Type'])); - } - - $types = array(); - $fields = explode(',',$fields); - for ($i = 0; $i < count($fields); $i++) - { - if (!array_key_exists($fields[$i],$temp)) return false; - $types[] = $temp[$fields[$i]]; - } - - return $types; - } - - public function insert($table,$fields,$values) { - - #$table is a string - #$fields has to be a string with comma as separator: name1,name2,... - #$values has to be an array - $values = array_values($values); - if (strcmp($fields,'') !== 0) - { - //get the type of the fields - $types = $this->getTypes($table,$fields); - if (!$types) return false; - - for($i = 0; $i < count($values); $i++) - { - if (!in_array($types[$i],$this->fieldsType)) - { - $values[$i] = '"'.$values[$i].'"'; - } - else - { - if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"'; - } - } - - $values = implode(',',$values); - $query="INSERT INTO $table ($fields) VALUES ($values);"; - $this->query = $query; - $ris = mysql_query($query); - - #check the result - if ($ris) { - return true; - } else { - return false; - } - - } else { - return false; - } - } - - // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT). - public function lastId() - { - return mysql_insert_id(); - } - - public function update($table,$fields,$values,$where) { - - #$table and $where are two strings - #$fields has to be a string with comma as separator: name1,name2,... - #$values has to be an array - $values = array_values($values); -// if (isset($where)) { - $where='WHERE '.$where; -// } - #get the array from the $fields string - if (strcmp($fields,'') !== 0) - { - //get the type of the fields - $types = $this->getTypes($table,$fields); - if (!$types) return false; - - $fields=explode(',',$fields); - $str=array(); - - for ($i=0;$ifieldsType)) - { - $values[$i] = '"'.$values[$i].'"'; - } - else - { - if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"'; - } - $str[$i]= $fields[$i].'='.$values[$i]; - } - - #set the string name1=value1,name2=... - $str=implode(',',$str); - $query="UPDATE $table SET $str $where;"; - $this->query=$query; - $ris = mysql_query($query); - - #check the result - if ($ris) { - return true; - } else { - return false; - } - } else { - return false; - } - - } - - - public function del($table,$where) { - - #$table and $where are two strings -// if (isset($where)) { - $where='WHERE '.$where; -// } - $query="DELETE FROM $table $where;"; - $this->query=$query; - $ris = mysql_query($query); - #check the result - - if ($ris) { - return true; - } else { - return false; - } - - } - - // function to check if exist the record having the field $id_name=$id_value - public function recordExists($table,$fieldName,$fieldValue,$where = null,$groupBy=null,$on=array(),$using=array(),$join=array()) - { - if (isset($where)) - { - $where=' AND '.$where; - } - - $fieldValue = '"'.$fieldValue.'"'; - - $num=$this->get_num_rows($table,$fieldName.'='.$fieldValue.$where,$groupBy,$on,$using,$join); - $res=($num>0) ? true : false; - return $res; - - } - - - //send a generic query to the database - //$query: the query to be sent - public function query($query) - { - $this->query = $query; - $result = mysql_query($query); - if ($result === false) - { - return false; - } - else if ($result === true) - { - return true; - } - else if (@get_resource_type($result)) - { - return $this->getData($result); - } - } - - // Prevent users to clone the instance - public function __clone() - { - throw new Exception('error in '. __METHOD__.': clone is not allowed'); - } - -} \ No newline at end of file diff --git a/h-source/Library/Db/Mysqli.php b/h-source/Library/Db/Mysqli.php deleted file mode 100644 index df57a54..0000000 --- a/h-source/Library/Db/Mysqli.php +++ /dev/null @@ -1,452 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to manage the database -//singleton! -class Db_Mysqli -{ - - public $query = null; //the last query executed - public $charsetError = true; //true: non eccor occurred during the modification of the connection charset, false: one error occurred - public $charset = null; //the charset of the client connection - - private static $instance = null; //instance of this class - - private $db; - private $fieldsType = array('tinyint','smallint','int','mediumint','bigint','float','double'); - - //PHP-Mysql charset translation table - private $charsetTranslationTable = array( - 'UTF-8' => 'utf8', - 'ISO-8859-1' => 'latin1', - 'EUC-JP' => 'ujis', - 'SJIS' => 'sjis' - ); - - /** - - *connect to the database - *'host','user','password','db_name' - - */ - - private function __construct($host,$user,$pwd,$db_name) - { - - $this->db = new mysqli($host,$user,$pwd,$db_name); - - if (mysqli_connect_error()) - { - die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); - } - - $charset = array_key_exists(DEFAULT_CHARSET,$this->charsetTranslationTable) ? $this->charsetTranslationTable[DEFAULT_CHARSET] : 'utf8'; - - if (!@$this->db->set_charset($charset)) $this->charsetError = false; - - $this->charset = $this->db->character_set_name(); - - } - - //return the $this->db property - public function getDb() - { - return $this->db; - } - - public static function getInstance($host = null, $user = null, $pwd = null, $db_name = null) - { - if (!isset(self::$instance)) { - $className = __CLASS__; - self::$instance = new $className($host,$user,$pwd,$db_name); - } - - return self::$instance; - } - - - //close the connection - public function disconnect() - { - $this->db->close(); - } - - //the text of the error message from previous MySQL operation - public function getError() - { - return $this->db->error; - } - - //the numerical value of the error message from previous MySQL operation - public function getErrno() - { - return $this->db->errno; - } - - public function getJoinString($string) - { - if (strstr($string,':')) - { - $tArray = explode(':',$string); - switch($tArray[0]) - { - case 'i': - $jString = ' INNER JOIN ' . $tArray[1]; - break; - case 'l': - $jString = ' LEFT JOIN ' . $tArray[1]; - break; - case 'r': - $jString = ' RIGHT JOIN ' . $tArray[1]; - break; - default: - $jString = ' INNER JOIN ' . $tArray[1]; - break; - } - return $jString; - } - else - { - return ' INNER JOIN '.$string; - } - } - - public function createSelectQuery($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=array(),$using=array(),$join=array()) - { - $maxValue = max(count($on),count($using),count($join)); - - $joinString = null; - for ($i=0; $i < $maxValue; $i++) - { - $joinString .= isset($join[$i]) ? $this->getJoinString($join[$i]) : null; - if (isset($using[$i])) - { - $joinString .= ' USING ('.$using[$i].')'; - } - else if (isset($on[$i])) - { - $joinString .= ' ON '.$on[$i]; - } - } - - if (isset($where)) - { - $where='WHERE '.$where; - } - if (isset($order_by)) { - $order_by='ORDER BY '.$order_by; - } - if (isset($group_by)) { - $group_by='GROUP BY '.$group_by; - } - if (isset($limit)) { - $limit='LIMIT '.$limit; - } - - $query="SELECT $fields FROM $table $joinString $where $group_by $order_by $limit;"; - return $query; - } - - public function get_num_rows($table,$where=null,$group_by=null,$on=array(),$using=array(),$join=array()) { - - $query = $this->createSelectQuery($table,'*',$where,$group_by,null,null,$on,$using,$join); - - $this->query = $query; - $ris = $this->db->query($query); - if ($ris) { - $num_rows = $ris->num_rows; - $ris->close(); - return $num_rows; - } else { - return false; - } - } - - public function getMath($func,$table,$field,$where=null,$group_by = null, $on=array(),$using=array(),$join=array()) - { - $query = $this->createSelectQuery($table,"$func($field) AS m",$where,$group_by,null,null,$on,$using,$join); - - $this->query = $query; - $result = $this->db->query($query); - if ($result) - { - $row = $result->fetch_array(); - $result->close(); - return $row['m']; - } - else - { - return false; - } - } - - //get the maximum value of the field $field of the table $table having the $where conditions - public function getMax($table,$field,$where=null,$group_by = null,$on=array(),$using=array(),$join=array()) - { - return $this->getMath('MAX',$table,$field,$where,$group_by,$on,$using,$join); - } - - //get the minimum value of the field $field of the table $table having the $where conditions - public function getMin($table,$field,$where=null,$group_by = null,$on=array(),$using=array(),$join=array()) - { - return $this->getMath('MIN',$table,$field,$where,$group_by,$on,$using,$join); - } - - //get the sum of the fields - public function getSum($table,$field,$where=null,$group_by = null,$on=array(),$using=array(),$join=array()) - { - return $this->getMath('SUM',$table,$field,$where,$group_by,$on,$using,$join); - } - - //get the average of the fields - public function getAvg($table,$field,$where=null,$group_by = null,$on=array(),$using=array(),$join=array()) - { - return $this->getMath('AVG',$table,$field,$where,$group_by,$on,$using,$join); - } - - public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=array(),$using=array(),$join=array()) - { - $query = $this->createSelectQuery($table,$fields,$where,$group_by,$order_by,$limit,$on,$using,$join); - - $this->query = $query; - $result = $this->db->query($query); - return $this->getData($result); - } - - -// public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null) { -// $query = $this->selectQuery($table,$fields,$where,$group_by,$order_by,$limit); -// return $this->getData($query); -// } - - - //obtain an associative array containing the result values (keys:tableName_fieldsName) - //$par = 'single/multi' single table,multi table - public function getData($result) { - $data = array(); //data from the query - $temp = array(); //temporary array (values of a single record) -// $result = $this->db->query($query); - if ($result) { - $fieldsNumber = $result->field_count; - while ($row = $result->fetch_array()) { - for ($i = 0;$i < $fieldsNumber;$i++) { - $finfo = $result->fetch_field_direct($i); - $tableName = $finfo->table; - if (strcmp($tableName,'') === 0) $tableName = Params::$aggregateKey; - $fieldName = $finfo->name; - $temp[$tableName][$fieldName] = $row[$i]; - } - array_push($data,$temp); - } - $result->close(); - return $data; - } else { - return false; - } - } - - //return an array containing all the types of the fields (indicated in $fields) of a table (indicated in $table) - public function getTypes($table, $fields) - { - $query = "DESCRIBE $table;"; - $result = $this->db->query($query); - $temp = array(); - while ($row = $result->fetch_assoc()) { - $temp[$row['Field']] = reset(explode('(',$row['Type'])); - } - $result->close(); - - $types = array(); - $fields = explode(',',$fields); - for ($i = 0; $i < count($fields); $i++) - { - if (!array_key_exists($fields[$i],$temp)) return false; - $types[] = $temp[$fields[$i]]; - } - - return $types; - } - - public function insert($table,$fields,$values) { - - #$table is a string - #$fields has to be a string with comma as separator: name1,name2,... - #$values has to be an array - $values = array_values($values); - if (strcmp($fields,'') !== 0) - { - //get the type of the fields - $types = $this->getTypes($table,$fields); - if (!$types) return false; - - for($i = 0; $i < count($values); $i++) - { - if (!in_array($types[$i],$this->fieldsType)) - { - $values[$i] = '"'.$values[$i].'"'; - } - else - { - if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"'; - } - } - - $values = implode(',',$values); - $query="INSERT INTO $table ($fields) VALUES ($values);"; - $this->query=$query; - - $ris = $this->db->query($query); - - #check the result - if ($ris) { - return true; - } else { - return false; - } - - } else { - return false; - } - } - - // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT). - public function lastId() - { - return $this->db->insert_id; - } - - public function update($table,$fields,$values,$where) { - - #$table and $where are two strings - #$fields has to be a string with comma as separator: name1,name2,... - #$values has to be an array - $values = array_values($values); -// if (isset($where)) { - $where='WHERE '.$where; -// } - #get the array from the $fields string - if (strcmp($fields,'') !== 0) - { - //get the type of the fields - $types = $this->getTypes($table,$fields); - if (!$types) return false; - - $fields = explode(',',$fields); - $str = array(); - - for ($i=0;$ifieldsType)) - { - $values[$i] = '"'.$values[$i].'"'; - } - else - { - if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"'; - } - $str[$i]= $fields[$i].'='.$values[$i]; - } - - #set the string name1=value1,name2=... - $str=implode(',',$str); - $query="UPDATE $table SET $str $where;"; - $this->query=$query; - $ris = $this->db->query($query); - - #check the result - if ($ris) { - return true; - } else { - return false; - } - } else { - return false; - } - - } - - - public function del($table,$where) { - - #$table and $where are two strings -// if (isset($where)) { - $where='WHERE '.$where; -// } - $query="DELETE FROM $table $where;"; - $this->query=$query; - $ris = $this->db->query($query); - #check the result - - if ($ris) { - return true; - } else { - return false; - } - - } - - - //function to check if exist the record having the field $id_name=$id_value - public function recordExists($table,$fieldName,$fieldValue,$where = null,$groupBy=null,$on=array(),$using=array(),$join=array()) - { - if (isset($where)) - { - $where=' AND '.$where; - } - - $fieldValue = '"'.$fieldValue.'"'; - - $num = $this->get_num_rows($table,$fieldName.'='.$fieldValue.$where,$groupBy,$on,$using,$join); - $res=($num>0) ? true : false; - return $res; - - } - - - //send a generic query to the database - //$query: the query to be sent - public function query($query) - { - $this->query = $query; - $result = $this->db->query($query); - if ($result === true) - { - return true; - } - else if ($result === false) - { - return false; - } - else if ($result instanceof MySQLi_Result) - { - return $this->getData($result); - } - } - - // Prevent users to clone the instance - public function __clone() - { - throw new Exception('error in '. __METHOD__.': clone is not allowed'); - } - -} \ No newline at end of file diff --git a/h-source/Library/Db/index.html b/h-source/Library/Db/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Library/Db/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Library/Email.php b/h-source/Library/Email.php deleted file mode 100644 index 9d2ff19..0000000 --- a/h-source/Library/Email.php +++ /dev/null @@ -1,246 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to send an e-mail -class Email { - - //sent to parameters (array) - private $_sendTo = array(); - - //cc parameters (array) - private $_cc = array(); - - //bcc parameters (array) - private $_bcc = array(); - - //the address of the sender - private $_from = null; - - //subject (string) - private $_subject = null; - - //charset - private $_charset = "iso-8859-1"; - - //Content-Transfer-Encoding - private $_ctencoding = "7bit"; - - //body - private $_body = ''; - - //headers - private $_headers = null; - - //check flag. If _check = true than check the mail addresses - private $_check = null; - - //regular expression to check each e-mail address - private $_addressRegExp = null; - - //array containing all the errors encountered during the execution - public $errorsArray = array(); - - public function __construct($bool = true) - { - $this->_check = $bool; - } - - //set the sentTo addresses array - //$addresses: array of e-mail addresses or a string - public function sendTo($addresses) - { - $this->_sendTo = explode(',',$addresses); - } - - //set the subject - public function subject($subject) - { - $this->_subject = $subject; - } - - //set the cc addresses array - //$addresses: array of e-mail addresses or a string - public function cc($addresses) - { - $this->_cc = explode(',',$addresses); - } - - //set the bcc addresses array - //$addresses: array of e-mail addresses or a string - public function bcc($addresses) - { - $this->_bcc = explode(',',$addresses); - } - - //set the address of the sender - public function from($address) - { - $this->_from = $address; - } - - //set the charset - public function charset($charset) - { - $this->_charset = $charset; - } - - //set the Content-Transfer-Encoding - public function ctencoding($ctencoding) - { - $this->_ctencoding = $ctencoding; - } - - //set the text body - public function body($body) - { - $this->_body = $body; - } - - //set the address regular expression - public function addressRegExp($regExp) - { - $this->_addressRegExp = $regExp; - } - - //check if the mail address is valid - public function isValidAddress($address) - { - - if( preg_match( '/^[^<>]*<(.+)>$/', $address, $matches ) ) - { - $address = $matches[1]; - } - - if (isset($this->_addressRegExp)) - { - if (preg_match($this->_addressRegExp,$address)) - { - return true; - } - else - { - return false; - } - } - else - { - if (checkMail($address)) return true; - } - - return false; - - } - - //check the addresses inside the $addresses array - public function checkAddresses($addresses) - { - foreach ($addresses as $address) - { - if(!$this->isValidAddress($address)) return false; - } - return true; - } - - //build the mail - public function buildMail() - { - - if (empty($this->_sendTo)) - { - $this->errorsArray[] = 'no address specified'; - return false; - } - - if ($this->_check) - { - if (!$this->checkAddresses($this->_sendTo)) - { - $this->errorsArray[] = 'errors in the sendTo address validation'; - return false; - } - - if (!empty($this->_cc)) - { - if (!$this->checkAddresses($this->_cc)) - { - $this->errorsArray[] = 'errors in the cc address validation'; - return false; - } - } - - if (!empty($this->_bcc)) - { - if (!$this->checkAddresses($this->_bcc)) - { - $this->errorsArray[] = 'errors in the bcc address validation'; - return false; - } - } - - if (isset($this->_from)) - { - if (!$this->checkAddresses(array($this->_from))) - { - $this->errorsArray[] = 'errors in the from address validation'; - return false; - } - } - } - - if (strcmp($this->_subject,'') === 0) - { - $this->errorsArray[] = 'no subject specified'; - return false; - } - - $headers = null; - if (isset($this->_from)) $headers .= "From: ".$this->_from."\r\n"; - $headers .= "MIME-Version: 1.0\r\n"; - $headers .= "Content-Type: text/plain; charset=\"".$this->_charset."\"\r\n"; - $headers .= "Content-Transfer-Encoding: ".$this->_ctencoding."\r\n"; - if (!empty($this->_cc)) $headers .= "CC: ".implode(',',$this->_cc)."\r\n"; - if (!empty($this->_bcc)) $headers .= "Bcc: ".implode(',',$this->_bcc)."\r\n"; - - $this->_headers = $headers; - - return true; - - } - - public function send() - { - if (!$this->buildMail()) return false; - - $to = implode(',',$this->_sendTo); - - if (!@mail($to,$this->_subject,$this->_body,$this->_headers)) - { - $this->errorsArray[] = 'error in the send process'; - return false; - } - - return true; - } - -} \ No newline at end of file diff --git a/h-source/Library/ErrorReporting.php b/h-source/Library/ErrorReporting.php deleted file mode 100644 index 2cb8aed..0000000 --- a/h-source/Library/ErrorReporting.php +++ /dev/null @@ -1,45 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -function ErrorReporting() { - if (RUNTIME_CONFIGURATION === true) - { - error_reporting(ERROR_REPORTING_DIRECTIVE); - if (DISPLAY_ERRORS === 'On') { - ini_set('display_errors','On'); - } else { - ini_set('display_errors','Off'); - } - - if (ERROR_REPORTING_FILE === true) - { - if (LOG_ERROR_FILE === 'default') - { - ini_set('error_log',ROOT.DS.'Logs/Errors.log'); - } else { - ini_set('error_log',LOG_ERROR_FILE); - } - } - } -} diff --git a/h-source/Library/Factory/Db.php b/h-source/Library/Factory/Db.php deleted file mode 100755 index 32a82c1..0000000 --- a/h-source/Library/Factory/Db.php +++ /dev/null @@ -1,69 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to create the database layer class -class Factory_Db { - - //start the database connection - //$dbType: mysql,mysqli,pg - //$dbArrayParams: array containing the HOST, the USER, the PWD, and the DB of the database (see config.php) - public static function getInstance($dbType,$dbArrayParams = array()) { - if (!in_array($dbType,Params::$allowedDb)) { - throw new Exception('error in ' . __METHOD__ . ' : the database type has to be '.implode(' or ',Params::$allowedDb)); - } - switch ($dbType) { - case 'Mysql': - return call_user_func_array(array('Db_'.$dbType,'getInstance'),$dbArrayParams); - break; - case 'Mysqli': - return call_user_func_array(array('Db_'.$dbType,'getInstance'),$dbArrayParams); - break; - case 'None': - return null; - break; - } - } - - //close the database connection - public static function disconnect($dbType) - { - if (!in_array($dbType,Params::$allowedDb)) { - throw new Exception('error in ' . __METHOD__ . ' : the database type has to be '.implode(' or ',Params::$allowedDb)); - } - switch ($dbType) { - case 'Mysql': - $mysql = Db_Mysql::getInstance(); - $mysql->disconnect(); - break; - case 'Mysqli': - $mysqli = Db_Mysqli::getInstance(); - $mysqli->disconnect(); - break; - case 'None': - return null; - break; - } - } - -} diff --git a/h-source/Library/Factory/Strings.php b/h-source/Library/Factory/Strings.php deleted file mode 100644 index 3e766bd..0000000 --- a/h-source/Library/Factory/Strings.php +++ /dev/null @@ -1,38 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//return the string class -class Factory_Strings { - - //return an instance of the Lang_{language}_Generic class - public static function generic($lang = 'En') { - $stringClass = 'Lang_'.$lang.'_Generic'; - if (!class_exists($stringClass)) - { - $stringClass = 'Lang_En_Generic'; - } - return new $stringClass(); - } - -} diff --git a/h-source/Library/Factory/index.html b/h-source/Library/Factory/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Library/Factory/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Library/Files/Log.php b/h-source/Library/Files/Log.php deleted file mode 100644 index 7eda7b7..0000000 --- a/h-source/Library/Files/Log.php +++ /dev/null @@ -1,114 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to manage a file di log -//this is a singleton class -class Files_Log -{ - - const DS = DIRECTORY_SEPARATOR; - - // array of instances of the class - //key: name of the instance, value:instance. The name of the instance is also the name of the log file to open - private static $instance = array(); - - public static $logFolder = './'; //the log folder - public static $logExtension = '.log'; //the extension of the log files - public static $logPermission = 0777; - - private $splFile; //SplFileObject - - //$fileName: the file to open - private function __construct($fileName) - { - $finalChar = self::$logFolder[strlen(self::$logFolder) - 1]; - if (strcmp($finalChar,self::DS) !== 0) self::$logFolder .= self::DS; - - $path = self::$logFolder . $fileName . self::$logExtension; - $this->splFile = new SplFileObject($path,'a+'); - //change the permission of the file - @chmod($path,self::$logPermission); - } - - // The singleton method - // $instanceName: name of the key of self::$instance. It is also the name of the log file to open - public static function getInstance($instanceName) - { - if (!isset(self::$instance[$instanceName])) { - $className = __CLASS__; - self::$instance[$instanceName] = new $className($instanceName); - } - - return self::$instance[$instanceName]; - } - - //write the string $string at the end of the file - public function writeString($string,$format = 'Y-m-d H:i:s') - { - $date = date($format); - $this->splFile->fwrite("[$date]\t".$string."\n"); - } - - //get the date string of the line $line - public function getDateString($line) - { - if (preg_match('/^[\[]{1}([a-zA-Z0-9:\-\s])*[\]]{1}/',$line,$match)) - { - $match[0] = str_replace('[',null,$match[0]); - $match[0] = str_replace(']',null,$match[0]); - return $match[0]; - } - else - { - return false; - } - } - - //delete all the lines older than a number of days equal to $days - public function clearBefore($days = 30) - { - $tempArray = array(); - $newTime = time() - (int)$days * 24 * 3600; - foreach ($this->splFile as $line) - { - $lineTime = strtotime($this->getDateString($line)); - if ($lineTime !== false and $lineTime > $newTime) - { - $tempArray[] = $line; - } - } - $this->splFile->ftruncate(0); - foreach ($tempArray as $row) - { - $this->splFile->fwrite($row); - } - } - - // Prevent users to clone the instance - public function __clone() - { - throw new Exception('error in '. __METHOD__.': clone is not allowed'); - } - -} \ No newline at end of file diff --git a/h-source/Library/Files/Upload.php b/h-source/Library/Files/Upload.php deleted file mode 100755 index 7dbc7d1..0000000 --- a/h-source/Library/Files/Upload.php +++ /dev/null @@ -1,603 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to manage upload files -class Files_Upload -{ - - const DS = DIRECTORY_SEPARATOR; - - private $base = null; //root directory - private $directory = null; //current directory. Path relative to the base directory (Files_Upload::base) - private $parentDir = null; //parent folder - private $subDir = array(); //subdirectories of the current directory - private $relSubDir = array(); //subfolders of $this->directory. The path starts from the $base folder - private $files = array(); //files inside the current directory - private $relFiles = array(); //files inside $this->directory. The path starts from the $base directory - private $params; //class parameters - private $pattern = null; //the pattern for the preg_match function - - protected $_resultString; //reference to the class uploadStrings containing all the result strings - - public $fileName = null; //the name of the last file that has been uploaded - public $notice = null; //the result string of the operation - - public function __construct($base,$params = null, $directory = null) { - - $this->base = $this->addTrailingSlash($base); - - //set the match pattern - $tmp = str_replace(self::DS,'\\'.self::DS,$this->base); - $this->pattern = "/^(".$tmp.")/"; - - $defaultParams = array( - 'filesPermission' => 0777, - 'delFolderAction' => 'delFolderAction', - 'delFileAction' => 'delFileAction', - 'createFolderAction' => 'createFolderAction', - 'uploadFileAction' => 'uploadFileAction', - 'maxFileSize' => 3000000, - 'language' => 'En', - 'allowedExtensions' => 'jpg,jpeg,png,gif,txt', - 'allowedMimeTypes' => '', - 'fileUploadKey' => 'userfile', - 'fileUploadBehaviour' => 'add_token', //can be none or add_token - 'fileUploadBeforeTokenChar' => '_', - 'functionUponFileNane' => 'none', - 'createImage' => false, - ); - - //set the $this->scaffold->params array - if (is_array($params)) - { - foreach ($params as $key => $value) - { - $defaultParams[$key] = $value; - } - } - $this->params = $defaultParams; - - //instantiate the $_resultString object - $stringClass = 'Lang_'.$this->params['language'].'_UploadStrings'; - if (!class_exists($stringClass)) - { - $stringClass = 'Lang_En_UploadStrings'; - } - $this->_resultString = new $stringClass(); - - $this->setDirectory($directory); - - } - - //set a new value for one element of the $params array - public function setParam($key,$value) - { - if (array_key_exists($key,$this->params)) - { - $this->params[$key] = $value; - } - } - - //change a resulting string - public function setString($key,$value) - { - $this->_resultString->string[$key] = $value; - } - - //obtain the current directory - public function setDirectory($directory = null) - { - $relDir = (strcmp($directory,"") !== 0) ? $this->addTrailingSlash($directory) : null; - $absDir = $this->addTrailingSlash($this->base.$directory); - - if (is_dir($absDir)) - { - if ($this->isValidFolder($absDir)) - { - $this->directory = $relDir; - return true; - } - else - { - $this->notice = $this->_resultString->getString('not-child'); - } - } - else - { - $this->directory = null; - $this->notice = $this->_resultString->getString('not-dir'); - } - return false; - } - - //check if $folder is a folder and is subfolder of $this->base - protected function isValidFolder($folder) - { - if (is_dir($folder)) - { - $folder = $this->addTrailingSlash(realpath($folder)); - if ($this->isMatching($folder)) return true; - } - return false; - } - - protected function isMatching($path) - { - if (preg_match($this->pattern,$path)) - { - if (strstr($path,'..')) return false; - return true; - } - return false; - } - - public function getDirectory() { - return $this->directory; - } - - public function getBase() - { - return $this->base; - } - - public function setBase($path) - { - $this->base = $this->addTrailingSlash($path); - - //set the match pattern - $tmp = str_replace(self::DS,'\\'.self::DS,$this->base); - $this->pattern = "/^(".$tmp.")/"; - } - - public function getSubDir() { - return $this->subDir; - } - - public function getRelSubDir() - { - return $this->relSubDir; - } - - public function getFiles() { - return $this->files; - } - - public function getRelFiles() - { - return $this->relFiles; - } - - public function getParentDir() { - return $this->parentDir; - } - - //add the trailing slash to the string - protected function addTrailingSlash($string) - { - $finalChar = $string[strlen($string) - 1]; - if (strcmp($finalChar,self::DS) !== 0) - { - return $string.self::DS; - } - return $string; - } - - protected function urlDeep($dir) { #funzione per creare l'indirizzo completo della cartella all'interno della quale voglio entrare - #$dir:cartella all'interno della quale voglio entrare - return $this->base.$this->directory.$dir.self::DS; - } - - public function listFiles() { #creo la lista di file e cartelle all'interno della directory corrente - $items = scandir($this->base.$this->directory); - foreach( $items as $this_file ) { - if( strcmp($this_file,".") !== 0 && strcmp($this_file,"..") !== 0 ) { - if (is_dir($this->urlDeep($this_file))) { - $this->subDir[] = $this_file; - $this->relSubDir[] = $this->directory.$this_file; - } else { - $this->files[] = $this_file; - $this->relFiles[] = $this->directory.$this_file; - } - } - } - //get the parent dir - $this->parentDir(); - } - - //get the extension of the file - public function getFileExtension($file) - { - if (strstr($file,'.')) - { - return strtolower(end(explode('.', $file))); - } - return ''; - } - - //get the file name without the extension - public function getNameWithoutFileExtension($file) - { - if (strstr($file,'.')) - { - $copy = explode('.', $file); - array_pop($copy); - return implode('.',$copy); - } - return $file; - } - - //get a not existing file name if the one retrieved from the upload process already exists in the current directory - public function getUniqueName($file,$int = 0) - { - $fileNameWithoutExt = $this->getNameWithoutFileExtension($file); - $extension = $this->getFileExtension($file); - $token = $int === 0 ? null : $this->params['fileUploadBeforeTokenChar'].$int; - - $dotExt = strcmp($extension,'') !== 0 ? ".$extension" : null; - - $newName = $fileNameWithoutExt.$token.$dotExt; - if (!file_exists($this->base.$this->directory.$newName)) - { - return $newName; - } - else - { - return $this->getUniqueName($file,$int+1); - } - - } - - protected function parentDir() { #individuo la cartella madre - - $folders = explode(self::DS,$this->directory); - array_pop($folders); - array_pop($folders); - $parent = implode(self::DS,$folders); - $parent = (strcmp($parent,"") !== 0) ? $this->addTrailingSlash($parent) : null; - - if ($this->isValidFolder($this->base.$parent)) - { - $this->parentDir = $parent; - } - else - { - $this->parentDir = null; - } - } - - //create the $name subfolder of the $this->directory folder - public function createFolder($name) { #funzione per creare una cartella nella directory corrente - $name = basename($name); - if (strcmp(trim($name),'') !== 0) - { - if (is_writable($this->base.$this->directory)) - { - $path = $this->base.$this->directory.$name; - - if ($this->isMatching($path)) - { - if (!file_exists($path)) - { - if (@mkdir($path,$this->params['filesPermission'])) - { - @chmod($path, $this->params['filesPermission']); - $this->notice = $this->_resultString->getString('executed'); - return true; - } - else - { - $this->notice = $this->_resultString->getString('error'); - } - } - else - { - $this->notice = $this->_resultString->getString('dir-exists'); - } - } - else - { - $this->notice = $this->_resultString->getString('not-child'); - } - } - else - { - $this->notice = $this->_resultString->getString('not-writable'); - } - } - else - { - $this->notice = $this->_resultString->getString('no-folder-specified'); - } - return false; - } - - //check if the $name folder is empty or not - protected function isEmpty($name) - { - $items = scandir($name); - foreach( $items as $this_file ) { - if( strcmp($this_file,".") !== 0 && strcmp($this_file,"..") !== 0 ) { - return false; - } - } - return true; - } - - public function removeFile($name) - { - $name = basename($name); - if (strcmp(trim($name),'') !== 0) - { - $path = $this->base.$this->directory.$name; - if ($this->isMatching($path)) - { - if ($this->removeAbsFile($path)) return true; - } - else - { - $this->notice = $this->_resultString->getString('not-child'); - } - } - else - { - $this->notice = $this->_resultString->getString('no-file-specified'); - } - return false; - } - - //remove the $name file - protected function removeAbsFile($name) - { - if (strcmp(trim($name),'') !== 0) - { - if (is_writable($name)) - { - if (@unlink($name)) - { - $this->notice = $this->_resultString->getString('executed'); - return true; - } - else - { - $this->notice = $this->_resultString->getString('error'); - } - } - else - { - $this->notice = $this->_resultString->getString('not-writable-file'); - } - } - else - { - $this->notice = $this->_resultString->getString('no-file-specified'); - } - return false; - } - - public function removeFolder($name) - { - $name = basename($name); - if (strcmp(trim($name),'') !== 0) - { - $dir = $this->base.$this->directory.$name; - if ($this->isMatching($dir)) - { - if ($this->removeAbsFolder($dir)) return true; - } - else - { - $this->notice = $this->_resultString->getString('not-child'); - } - } - else - { - $this->notice = $this->_resultString->getString('no-folder-specified'); - } - return false; - } - - //remove the $name folder - protected function removeAbsFolder($name) { - if (strcmp(trim($name),'') !== 0) { - if (is_writable($name)) - { - if ($this->isEmpty($name)) - { - if (@rmdir($name)) - { - $this->notice = $this->_resultString->getString('executed'); - return true; - } - else - { - $this->notice = $this->_resultString->getString('error'); - } - } - else - { - $this->notice = $this->_resultString->getString('not-empty'); - } - } - else - { - $this->notice = $this->_resultString->getString('not-writable'); - } - } - else - { - $this->notice = $this->_resultString->getString('no-folder-specified'); - } - return false; - } - - //remove all the files that are not inside the $list argument - public function removeFilesNotInTheList($list = array()) - { - $this->listFiles(); - $files = $this->getFiles(); - foreach ($files as $file) - { - if (!in_array($file,$list)) - { - $this->removeFile($file); - } - } - } - - //upload a file in the current directory - //$fileName: name of the file - public function uploadFile($fileName = null) - { - $userfile = $this->params['fileUploadKey']; - - if(strcmp(trim($_FILES[$userfile]["name"]),"") !== 0) - { - $nameFromUpload = basename($_FILES[$userfile]["name"]); - - $ext = $this->getFileExtension($nameFromUpload); - $nameWithoutExtension = $this->getNameWithoutFileExtension($nameFromUpload); - - $dotExt = strcmp($ext,'') !== 0 ? ".$ext" : null; - - //check if the "functionUponFileNane" function exists - if (!function_exists($this->params['functionUponFileNane'])) { - throw new Exception('Error in '.__METHOD__.': function '.$this->params['functionUponFileNane']. ' does not exist'); - } - - //check if the fileinfo extension is loaded - if (strcmp($this->params['allowedMimeTypes'],'') !== 0 and !extension_loaded('fileinfo')) { - throw new Exception('Error in '.__METHOD__.': no MIME type check is possible because the fileinfo extension is not loaded'); - } - - $nameWithoutExtension = call_user_func($this->params['functionUponFileNane'],$nameWithoutExtension); - - $fileName = isset($fileName) ? $fileName.$dotExt : $nameWithoutExtension.$dotExt; - - $this->fileName = $fileName; - - switch($this->params['fileUploadBehaviour']) - { - case 'none': - break; - case 'add_token': - $this->fileName = $this->getUniqueName($this->fileName); - $fileName = $this->fileName; - break; - } - - if(@is_uploaded_file($_FILES[$userfile]["tmp_name"])) { - if ($_FILES[$userfile]["size"] <= $this->params['maxFileSize']) - { - //check the extension of the file - $AllowedExtensionsArray = explode(',',$this->params['allowedExtensions']); - - if (strcmp($this->params['allowedExtensions'],'') === 0 or in_array($ext,$AllowedExtensionsArray)) - { - if (strcmp($this->params['allowedMimeTypes'],'') !== 0) - { - //get the MIME type of the file - $finfo = finfo_open(FILEINFO_MIME_TYPE); - $MIMEtype = finfo_file($finfo, $_FILES[$userfile]["tmp_name"]); - finfo_close($finfo); - } - - $AllowedMimeTypesArray = explode(',',$this->params['allowedMimeTypes']); - - if (strcmp($this->params['allowedMimeTypes'],'') === 0 or in_array($MIMEtype,$AllowedMimeTypesArray)) - { - //check if the file doesn't exist - if (!file_exists($this->base.$this->directory.$fileName)) - { - if (@move_uploaded_file($_FILES[$userfile]["tmp_name"],$this->base.$this->directory.$fileName)) - { - if ($this->params['createImage']) - { - //create the image - $basePath = $this->base.$this->directory; - $thumb = new Image_Gd_Thumbnail($basePath); - $thumb->render($fileName,$this->base.$this->directory.$fileName); - } - - @chmod($this->base.$this->directory.$fileName, $this->params['filesPermission']); - $this->notice = $this->_resultString->getString('executed'); - return true; - } - else - { - $this->notice = $this->_resultString->getString('error'); - } - } - else - { - $this->notice = $this->_resultString->getString('file-exists'); - } - } - else - { - $this->notice = $this->_resultString->getString('not-allowed-mime-type'); - } - } - else - { - $this->notice = $this->_resultString->getString('not-allowed-ext'); - } - } - else - { - $this->notice = $this->_resultString->getString('size-over'); - } - } - else - { - $this->notice = $this->_resultString->getString('no-upload-file'); - } - } - else - { - $this->notice = $this->_resultString->getString('no-upload-file'); - } - return false; - } - - //update the folder tree - public function updateTree() { - - if (isset($_POST[$this->params['delFolderAction']])) { - $this->removeFolder($_POST[$this->params['delFolderAction']]); - } - - if (isset($_POST[$this->params['delFileAction']])) { - $this->removeFile($_POST[$this->params['delFileAction']]); - } - - if (isset($_POST[$this->params['createFolderAction']])) { - $this->createFolder($_POST['folderName']); - } - - if (isset($_POST[$this->params['uploadFileAction']])) { - $this->uploadFile(); - } - - } -} \ No newline at end of file diff --git a/h-source/Library/Files/index.html b/h-source/Library/Files/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Library/Files/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Library/Form/Checkbox.php b/h-source/Library/Form/Checkbox.php deleted file mode 100755 index 497c097..0000000 --- a/h-source/Library/Form/Checkbox.php +++ /dev/null @@ -1,49 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -/** create the HTML of an input text entry */ -class Form_Checkbox extends Form_Entry -{ - - public function __construct($entryName = null) - { - $this->entryName = $entryName; - } - - public function render($value = null) - { - $wrap = $this->getWrapElements($value); - $returnString = $wrap[0]; - $returnString .= "
              \n\t"; - $returnString .= $wrap[1]; - $returnString .= $this->getLabelTag(); - $returnString .= $wrap[2]; - $returnString .= Html_Form::checkbox($this->entryName, $value, $this->options, $this->className,$this->idName); - $returnString .= $wrap[3]; - $returnString .="
              \n"; - $returnString .= $wrap[4]; - return $returnString; - } - -} diff --git a/h-source/Library/Form/Entry.php b/h-source/Library/Form/Entry.php deleted file mode 100755 index 6f45557..0000000 --- a/h-source/Library/Form/Entry.php +++ /dev/null @@ -1,112 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//base class of the form entries -abstract class Form_Entry { - - public $entryName = null; //the name of the entry - public $entryClass = null; //the class of the entry - public $idName = null; //the id of the input entry - public $className = null; //the class of the input entry - public $labelString = null; //label of the form - public $labelClass = null; //the class of the tag of the label - public $options = array(); //options (if the entry is a \n"; - } - $returnString .= $wrap[3]; - $returnString .="
              \n"; - $returnString .= $wrap[4]; - return $returnString; - } - -} diff --git a/h-source/Library/Form/Form.php b/h-source/Library/Form/Form.php deleted file mode 100755 index a1a9fda..0000000 --- a/h-source/Library/Form/Form.php +++ /dev/null @@ -1,140 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//create the HTML of the whole form -class Form_Form { - - public $entry = array(); //associative array containing the entries of the form (objects that inherit the class form_entryModel). Each element of the array corresponds to one field of the table - - public $action = null; //the action of the form - public $name = null; //the name of the form - public $className = 'formClass'; //the class of the form - public $id = null; - public $submit = array(); //the submit entries array('name'=>'value') - public $method = 'POST'; //the transmission method: POST/GET - public $enctype = null; //enctype attribute of the form - - public function __construct($action,$submit = array('generalAction'=>'save'),$method = 'POST',$enctype = null) - { - $this->action = $action; //action of the form: controller/action - $this->submit = $submit; - $this->method = $method; - $this->enctype = $enctype; - } - - //method to manage the $this->entry associative array - //entryType: the type of the object to be initialized, $entryName: the name of the entry - //$options: the list of options (if the entry is a \n\n"; - } - $htmlForm .= "\n"; - return $htmlForm; - } - -} diff --git a/h-source/Library/Form/Hidden.php b/h-source/Library/Form/Hidden.php deleted file mode 100755 index c589662..0000000 --- a/h-source/Library/Form/Hidden.php +++ /dev/null @@ -1,40 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//create the HTML of an input hidden entry -class Form_Hidden extends Form_Entry -{ - - public function __construct($entryName = null) - { - $this->entryName = $entryName; - } - - public function render($value = null) - { - $returnString = Html_Form::hidden($this->entryName, $value); - return $returnString; - } - -} diff --git a/h-source/Library/Form/Html.php b/h-source/Library/Form/Html.php deleted file mode 100644 index e5c9989..0000000 --- a/h-source/Library/Form/Html.php +++ /dev/null @@ -1,40 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//create the HTML of an input text entry -class Form_Html extends Form_Entry -{ - - public function __construct($entryName = null) - { - $this->entryName = $entryName; - } - - public function render($value = null) - { - $returnString = "
              \n\t$value\n
              \n"; - return $returnString; - } - -} diff --git a/h-source/Library/Form/InputText.php b/h-source/Library/Form/InputText.php deleted file mode 100755 index 344264e..0000000 --- a/h-source/Library/Form/InputText.php +++ /dev/null @@ -1,49 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//create the HTML of an input text entry -class Form_InputText extends Form_Entry -{ - - public function __construct($entryName = null) - { - $this->entryName = $entryName; - } - - public function render($value = null) - { - $wrap = $this->getWrapElements($value); - $returnString = $wrap[0]; - $returnString .= "
              \n\t"; - $returnString .= $wrap[1]; - $returnString .= $this->getLabelTag(); - $returnString .= $wrap[2]; - $returnString .= Html_Form::input($this->entryName, $value, $this->className, $this->idName); - $returnString .= $wrap[3]; - $returnString .="
              \n"; - $returnString .= $wrap[4]; - return $returnString; - } - -} diff --git a/h-source/Library/Form/Password.php b/h-source/Library/Form/Password.php deleted file mode 100644 index 9bfc68b..0000000 --- a/h-source/Library/Form/Password.php +++ /dev/null @@ -1,49 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//create the HTML of an input text entry -class Form_Password extends Form_Entry -{ - - public function __construct($entryName = null) - { - $this->entryName = $entryName; - } - - public function render($value = null) - { - $wrap = $this->getWrapElements($value); - $returnString = $wrap[0]; - $returnString .= "
              \n\t"; - $returnString .= $wrap[1]; - $returnString .= $this->getLabelTag(); - $returnString .= $wrap[2]; - $returnString .= Html_Form::password($this->entryName, null, $this->className); - $returnString .= $wrap[3]; - $returnString .="
              \n"; - $returnString .= $wrap[4]; - return $returnString; - } - -} diff --git a/h-source/Library/Form/Radio.php b/h-source/Library/Form/Radio.php deleted file mode 100755 index 4f596ed..0000000 --- a/h-source/Library/Form/Radio.php +++ /dev/null @@ -1,49 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//create the HTML of a radio entry -class Form_Radio extends Form_Entry -{ - - public function __construct($entryName = null) - { - $this->entryName = $entryName; - } - - public function render($value = null) - { - $wrap = $this->getWrapElements($value); - $returnString = $wrap[0]; - $returnString .= "
              \n\t"; - $returnString .= $wrap[1]; - $returnString .= $this->getLabelTag(); - $returnString .= $wrap[2]; - $returnString .= Html_Form::radio($this->entryName,$value,$this->options,$this->className, 'after', $this->idName); - $returnString .= $wrap[3]; - $returnString .="
              \n"; - $returnString .= $wrap[4]; - return $returnString; - } - -} diff --git a/h-source/Library/Form/Select.php b/h-source/Library/Form/Select.php deleted file mode 100755 index 53d7632..0000000 --- a/h-source/Library/Form/Select.php +++ /dev/null @@ -1,49 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//create the HTML of an select entry -class Form_Select extends Form_Entry -{ - - public function __construct($entryName = null) - { - $this->entryName = $entryName; - } - - public function render($value = null) - { - $wrap = $this->getWrapElements($value); - $returnString = $wrap[0]; - $returnString .= "
              \n\t"; - $returnString .= $wrap[1]; - $returnString .= $this->getLabelTag(); - $returnString .= $wrap[2]; - $returnString .= Html_Form::select($this->entryName,$value,$this->options,$this->className, $this->idName, $this->reverse); - $returnString .= $wrap[3]; - $returnString .="
              \n"; - $returnString .= $wrap[4]; - return $returnString; - } - -} diff --git a/h-source/Library/Form/Textarea.php b/h-source/Library/Form/Textarea.php deleted file mode 100755 index aaaf19e..0000000 --- a/h-source/Library/Form/Textarea.php +++ /dev/null @@ -1,49 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//create the HTML of a textarea entry -class Form_Textarea extends Form_Entry -{ - - public function __construct($entryName = null) - { - $this->entryName = $entryName; - } - - public function render($value = null) - { - $wrap = $this->getWrapElements($value); - $returnString = $wrap[0]; - $returnString .= "
              \n\t"; - $returnString .= $wrap[1]; - $returnString .= $this->getLabelTag(); - $returnString .= $wrap[2]; - $returnString .= Html_Form::textarea($this->entryName, $value, $this->className, $this->idName); - $returnString .= $wrap[3]; - $returnString .="
              \n"; - $returnString .= $wrap[4]; - return $returnString; - } - -} diff --git a/h-source/Library/Form/index.html b/h-source/Library/Form/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Library/Form/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Library/Functions.php b/h-source/Library/Functions.php deleted file mode 100755 index e0e77bf..0000000 --- a/h-source/Library/Functions.php +++ /dev/null @@ -1,304 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - - -/* - SANITIZE FUNCTIONS -*/ - -function none($string) { - return $string; -} - -function forceInt($string) { - return (int)$string; -} - -function forceNat($string) -{ - $string = (int)$string; - if ($string <= 0) return 1; - return $string; -} - -function sanitizeDb($stringa) { - - if (DATABASE_TYPE === 'Mysql') - { - $stringa = mysql_real_escape_string($stringa); - return $stringa; - } - - if (DATABASE_TYPE === 'Mysqli') - { - $mysqli = Db_Mysqli::getInstance(); - $db = $mysqli->getDb(); - $stringa = $db->real_escape_string($stringa); - return $stringa; - } - - return $stringa; -} - -function sanitizeAll($stringa) { - - $stringa=sanitizeHtml($stringa); - $stringa=sanitizeDb($stringa); - return $stringa; - -} - -function sanitizeHtml($stringa) { - - $charset = Params::$htmlentititiesCharset; - $stringa=htmlentities($stringa,ENT_QUOTES,$charset); - return $stringa; - -} - -//check if only alphabetic + optional characters are present in the string $string. Set $string to $altString if other characters are found -//$optChar: allowed characters divided by '|' Ex: '+|-|;' -function sanitizeCustom($string,$optChar,$altString = 'EasyGiant') -{ - - $optChar = html_entity_decode($optChar,ENT_QUOTES); - $optCharArray = explode('|',$optChar); - $temp = $string; - foreach($optCharArray as $char) - { - $temp = str_replace($char,null,$temp); - } - if (ctype_alnum($temp)) - { - return $string; - } - else - { - return $altString; - } -} - - - - -/* -SANITIZE DEEP -*/ - -function stripslashesDeep($value) { - return $value; -} - - -function sanitizeHtmlDeep($value) { - return array_map('sanitizeHtml', $value); -} - - -function sanitizeDbDeep($value) { - return array_map('sanitizeDb', $value); -} - - -function sanitizeCustomDeep($stringArray,$optChar,$altString = 'EasyGiant') -{ - $result = array(); - foreach ($stringArray as $key => $value) - { - $result[$key] = sanitizeCustom($value,$optChar,$altString); - } - return $result; -} - - -function sanitizeAllDeep($value) { - return array_map('sanitizeAll', $value); -} - - -function forceIntDeep($value) { - return array_map('forceInt', $value); -} - -function forceNatDeep($value) { - return array_map('forceNat', $value); -} - -function noneDeep($value) { - return array_map('none', $value); -} - - -function md5Deep($value) -{ - return array_map('md5', $value); -} - -function sha1Deep($value) -{ - return array_map('sha1', $value); -} - - - - - - - -function sanitizeAlnum($string) -{ - return ctype_alnum($string) ? sanitizeAll($string) : ''; -} - - -function sanitizeIp($ip) -{ - return preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/',$ip) ? sanitizeAll($ip) : ''; -} - - -/* - CHECK FUNCTIONS -*/ - -//check if a string has the mail format (abc.efg@hij.klm.on) -//modification of the rule found at http://www.sastgroup.com/tutorials/8-espressioni-regolari-per-validare-un-po-di-tutto -//original rule: /^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/ -function checkMail($string) -{ - if (preg_match('/^[a-zA-Z0-9_\-]+([.][a-zA-Z0-9_\-]+){0,2}[@][a-zA-Z0-9_\-]+([.][a-zA-Z0-9_\-]+){0,2}[.][a-zA-Z]{2,4}$/',$string)) - { - return true; - } - else - { - return false; - } -} - - - -function wrap($string,$tag_class) {#wrap the string with the tag and its class - #$tag_class has to be an associative array (tag1=>class1,$tag2=>class2,.. )!! - $str_front=null; - $str_rear=null; - if (is_array($tag_class)) { - foreach ($tag_class as $tag => $class) { - $tag = str_replace('+','',$tag); - if (!is_array($class)) - { - $str_class=isset($class) ? " class=\"".$class."\"" : null; - } - else - { - $str_class = null; - foreach ($class as $attr => $val) - { - $str_class .= " ".$attr."='".$val."' "; - } - } - $str_front.="<".$tag.$str_class.">\n"; - $str_rear.="\n"; - } - } - return $str_front.$string.$str_rear; -} - -//generate a random password -//$start: start number of mt_rand -//$end: end number of mt_rand -function randString($length,$start = 33, $end = 126) -{ - $random = ''; - for ($i = 0; $i < $length; $i++) - { - $random .= chr(mt_rand($start, $end)); - } - return $random; -} - -//generate a random string -//$charNumb:number of characters of the final string -//$allowedChars: allowed characters -function generateString($charNumb = 8,$allowedChars = '0123456789abcdefghijklmnopqrstuvwxyz') -{ - $str = null; - for ($i = 0; $i < $charNumb; $i++) - { - $str .= substr($allowedChars, mt_rand(0, strlen($allowedChars)-1), 1); - } - return $str; -} - - -function getIp() -{ - $ip = ""; - - if (isset($_SERVER)) - { - if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) - { - $ip = sanitizeIp($_SERVER["HTTP_X_FORWARDED_FOR"]); - } else if (!empty($_SERVER["HTTP_CLIENT_IP"])) { - $ip = sanitizeIp($_SERVER["HTTP_CLIENT_IP"]); - } else { - $ip = sanitizeIp($_SERVER["REMOTE_ADDR"]); - } - } else { - if ( getenv( 'HTTP_X_FORWARDED_FOR' ) !== false ) { - $ip = sanitizeIp(getenv( 'HTTP_X_FORWARDED_FOR' )); - } else if ( getenv( 'HTTP_CLIENT_IP' ) !== false ) { - $ip = sanitizeIp(getenv( 'HTTP_CLIENT_IP' )); - } else { - $ip = sanitizeIp(getenv( 'REMOTE_ADDR' )); - } - } - return $ip; -} - - - -function getUserAgent() { - if (isset($_SERVER['HTTP_USER_AGENT'])) - { - return md5($_SERVER['HTTP_USER_AGENT']); - } - else - { - return md5('firefox'); - } -} - - -function xml_encode($string) -{ - $trans = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES); - foreach ($trans as $k=>$v) - { - $trans[$k]= "&#".ord($k).";"; - } - - return strtr($string, $trans); -} diff --git a/h-source/Library/HeaderObj.php b/h-source/Library/HeaderObj.php deleted file mode 100644 index 994eb16..0000000 --- a/h-source/Library/HeaderObj.php +++ /dev/null @@ -1,45 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//manage the header -class HeaderObj { - - private $domainName; //the base path of the website (domainname) - - public function __construct($domainName) - { - $this->domainName = $domainName; - } - - //redirect to $path after the time $time - //string that appears until the page is redirected - public function redirect($path,$time = 0,$string = null) - { - $completePath = Url::getRoot().$path; - header('Refresh: '.$time.';url='.$completePath); - if (isset($string)) echo $string; - exit; - } - -} diff --git a/h-source/Library/Helper/Array.php b/h-source/Library/Helper/Array.php deleted file mode 100755 index 329463f..0000000 --- a/h-source/Library/Helper/Array.php +++ /dev/null @@ -1,28 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//Helper class to manage arrays -class Helper_Array extends ArrayExt { - -} \ No newline at end of file diff --git a/h-source/Library/Helper/Html.php b/h-source/Library/Helper/Html.php deleted file mode 100755 index 81a9bdd..0000000 --- a/h-source/Library/Helper/Html.php +++ /dev/null @@ -1,31 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//base class of all the Helper classes that returns HTML -class Helper_Html { - - public $viewArgs = array(); //arguments of the view action (to mantain the status, ex: page,language,etc) - public $viewStatus = null; //additional string to the url to define the status of the view action (ex: page,language,etc) - -} \ No newline at end of file diff --git a/h-source/Library/Helper/List.php b/h-source/Library/Helper/List.php deleted file mode 100755 index 57aeeff..0000000 --- a/h-source/Library/Helper/List.php +++ /dev/null @@ -1,496 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to create the HTML of a list of records -class Helper_List extends Helper_Html { - - private $__rowArray = array(); //the current associative array representing the database record - - protected $_itemsList = array(); //2-dimensional associative array containing the list items - //keys: type,table:field,controller/action,value - protected $_head = array(); //2-dimensional array containing the head of the table - protected $_identifierName; - - protected $_recordNumber = null; //number of records from the table - - protected $_allowedItems = array('simpleLink','simpleText','delForm','editForm','associateForm','moveupForm','movedownForm','Form','ledit','link','text'); //type of items allowed - - //it can be: both, top, bottom, none - protected $_boundaries = 'none'; - - //array of filters - protected $_filters = array(); - - //set if the submit buttons have to be images or not (it can be yse or not) - public $submitImageType = 'yes'; - - //set the files of the images - public $submitImages = array(); - - //set the titles of the input:submit - public $submitTitles = array(); - - //properties of columns - public $colProperties = array(); - - //table attributes - public $tableAttributes = array('class'=>'listTable','cellspacing'=>'0'); - - //$position: array. First element: page number, second element: number of pages - public $position = array(); - - //instance of Lang_{language}_Generic - public $strings = null; - - //the url (controller/action) of the current page - public $url = null; - - public $pageArg = null; //the key of the viewArgs array representing the page number. $this->viewArgs[$this->pageArg] is set to 1 if $this->pageArg !== null - - public function __construct() { - - //get the generic language class - $this->strings = Factory_Strings::generic(Params::$language); - - $baseUrl = '/Public/Img/Icons/elementary_2_5/'; - - //set the files of the images - $this->submitImages = array( - 'up' => $baseUrl.'up.png', - 'down' => $baseUrl.'down.png', - 'edit' => $baseUrl.'edit.png', - 'del' => $baseUrl.'delete.png', - 'link' => $baseUrl.'link.png', - ); - - $this->submitTitles = array( - 'edit' => $this->strings->gtext('edit'), - 'del' => $this->strings->gtext('delete'), - 'up' => $this->strings->gtext('move up'), - 'down' => $this->strings->gtext('move down'), - 'link' => $this->strings->gtext('associate') - ); - - } - - public function build($identifierName = 'identifier', $url = null, $pageArg = null) - { - $this->_identifierName = $identifierName; - $this->url = $url; - $this->pageArg = $pageArg; - } - - public function setIdentifierName($identifierName) - { - $this->_identifierName = $identifierName; - } - - //add a list Item. $type: the type of the item, $field: the table.field to exctract (use colon to separate the table and the field),$action: controller/action,$value=if type == link->the value of the link - public function addItem($type, $action = '', $field = '', $name = '', $value = '', $title = '') { - if (!in_array($type,$this->_allowedItems)) { - throw new Exception('"'.$type. '" argument not allowed in '.__METHOD__.' method'); - } - $temp=array(); - $temp['type'] = $type; - $temp['action'] = $action; - $temp['field'] = $field; - $temp['name'] = $name; - $temp['value'] = $value; - $temp['title'] = $title; - $this->_itemsList[] = $temp; - - //set the $this->_head array - $head = array(); - $head['type'] = $type; - - if ($type === 'simpleText') { - $head['action'] = $this->extractFieldName($action); - } else { - $head['action'] = ' '; - } - $this->_head[] = $head; - } - - - //set the head of the table - //$columnsName: name of the columns. It has to be a comma-separated list of strings - public function setHead($columnsName = '') - { - //get the array from the list - $columnsArray = explode(',',$columnsName); - for ($i = 0; $i < count($columnsArray); $i++) - { - if ($i < count($this->_itemsList)) $this->_head[$i]['action'] = $columnsArray[$i]; - } - } - - //set the filters - //$filters: array whose elements are the viewArgs to be used for the filters forms - public function setFilters($filters) - { - $this->_filters = $filters; - } - - //check that the ViewArgs array is complete - public function checkViewArgs() - { - foreach ($this->_filters as $field) - { - if (!array_key_exists($field,$this->viewArgs) and strcmp($field,null) !== 0) return false; - } - return true; - } - - //$method to extract the field name from the $action string (;table:field;). Used for the head - public function extractFieldName($string) { - $string = str_replace(';','',$string); - return $string; - } - - //replace the strings wrapped by ; with their correspondent value taken by the $recordArray associative array (a row of the select query) - public function replaceFields($string,$rowArray) { - $this->__rowArray = $rowArray; //used by the replaceField method - - $string = preg_replace_callback('/(\;)(.*?)(\;)/', 'Helper_List::replaceField' ,$string); - - return $string; - } - - //replace a single string wrapped by ; with its correspondent value taken by the $recordArray associative array (a row of the select query) - public function replaceField($match) - { - $string = $match[2]; - - if (strstr($string,':') or strstr($string,'.')) { - if (strstr($string,':')) - { - $char = ':'; - } - else - { - $char = '.'; - } - //check if a function has been indicated - if (strstr($string,'|')) - { - //get the function - $firstArray = explode('|',$string); - $func = $firstArray[0]; - //replace the fields - $temp = explode($char,$firstArray[1]); - $string = $this->__rowArray[$temp[0]][$temp[1]]; - - if (!function_exists($func)) { - throw new Exception('Error in '.__METHOD__.': function '.$func.' does not exists..'); - } - //apply the function - $string = call_user_func($func,$string); - } - else - { - $temp = explode($char,$string); - $string = $this->__rowArray[$temp[0]][$temp[1]]; - } - } - return $string; - } - - //call the method replaceFields upon the $items array using the associative array $rowArray - public function replaceAll($item,$rowArray) { - $item['action'] = $this->replaceFields($item['action'],$rowArray); - $item['field'] = $this->replaceFields($item['field'],$rowArray); - $item['name'] = $this->replaceFields($item['name'],$rowArray); - $item['value'] = $this->replaceFields($item['value'],$rowArray); - $item['title'] = $this->replaceFields($item['title'],$rowArray); - return $item; - } - - //wrap the column with the tag td - public function wrapColumn($string, $className = null) { - return wrap($string,array('td'=>$className)); - } - - //wrap the row with the tag tr - public function wrapRow($string,$className = null) { - return wrap($string,array('tr'=>$className)); - } - - public function wrapList($string) { - return wrap($string,array('table'=>$this->tableAttributes)); - } - - //method to create the HTML of the head of the table - public function createHead() { - $htmlHead = null; - - $count = 0; - foreach ($this->_head as $item) { - $temp = $item['action']; - - $prop = $item['type']; - if (isset($this->colProperties[$count])) - { - $prop = $this->colProperties[$count]; - } - - $htmlHead .= $this->wrapColumn($temp,$prop); - - $count++; - } - - return $htmlHead; - } - - //method to create the HTML of the head of the table - public function createFilters() { - $htmlFilters = null; - - if (count($this->_filters) > 0) - { - if ($this->checkViewArgs()) - { - $count = 0; - foreach ($this->_head as $item) { - - $prop = $item['type']; - if (isset($this->colProperties[$count])) - { - $prop = $this->colProperties[$count]; - } - - $html = ' '; - if (isset($this->_filters[$count])) - { - $html = $this->filterForm($this->_filters[$count]); - } - $htmlFilters .= $this->wrapColumn($html,$prop); - - $count++; - } - } - } - - return $htmlFilters; - } - - //create the HTML of a single row (values taken from the associative array $rowArray) - public function getRowList($rowArray) { - $htmlList = null; - - $count = 0; - foreach ($this->_itemsList as $item) { - $item = $this->replaceAll($item,$rowArray); - - $prop = $item['type']; - if (isset($this->colProperties[$count])) - { - $prop = $this->colProperties[$count]; - } - - if (($this->_boundaries === 'top' and $item['type'] === 'moveupForm') or ($this->_boundaries === 'bottom' and $item['type'] === 'movedownForm') or ($this->_boundaries === 'both' and ($item['type'] === 'moveupForm' or $item['type'] === 'movedownForm'))) - { - $htmlList .= $this->wrapColumn(' ',$prop); - } - else - { - $temp = call_user_func_array(array($this,$item['type']),array($item)); - $htmlList .= $this->wrapColumn($temp,$prop); - } - $count++; - } - return $htmlList; - } - - //$index: record number - public function ifInBoundaries($index) - { - $this->_boundaries = 'none'; - - if (!empty($this->position)) - { - if ($this->_recordNumber === 1 and strcmp($this->position[0],1) === 0) - { - $this->_boundaries = 'both'; - } - else if ($index === 0 and strcmp($this->position[0],1) === 0) - { - $this->_boundaries = 'top'; - } - else if ($index === ($this->_recordNumber-1) and strcmp($this->position[0],$this->position[1]) === 0) - { - $this->_boundaries = 'bottom'; - } - } - - } - - //create the HTML of the entire list. $queryResult: the array coming from the select query - public function render($queryResult) - { - //set the number of records - $this->_recordNumber = count($queryResult); - $htmlList = null; - //create the HTML of the head of the record list - $htmlList .= $this->wrapRow($this->createHead(),'listHead'); - //create the HTML of the filters - $htmlList .= $this->wrapRow($this->createFilters(),'listFilters'); - for ($i = 0; $i < count($queryResult); $i++) - { - $this->ifInBoundaries($i); - $temp = $this->getRowList($queryResult[$i]); - $htmlList .= $this->wrapRow($temp,'listRow'); - } - return $this->wrapList($htmlList); - } - - public function generalForm($itemArray, $submitName, $submitValue) - { - $string = "
              viewStatus."' method='POST'>\n"; - $name = (strcmp($itemArray['name'],'') !== 0) ? $itemArray['name'] : $submitName; - $value = (strcmp($itemArray['value'],'') !== 0) ? $itemArray['value'] : $submitValue; - - $oldValue = $value; - $value = $this->strings->gtext($value); - - if (strcmp($itemArray['title'],'') !== 0) - { - $title = "title='".$itemArray['title']."'"; - } - else - { - $title = isset($this->submitTitles[$oldValue]) ? "title='".$this->submitTitles[$oldValue]."'" : null; - } - - if (strcmp($this->submitImageType,'yes') === 0 and isset($this->submitImages[$oldValue])) - { - $imgSrc = $this->submitImages[$oldValue]; - - $string .= "\n"; - $string .= "\n"; - } - else - { - $string .= "\n"; - } - - $string .= "\n"; - $string .= "\n"; - return $string; - } - - public function Form($itemArray) - { - return $this->generalForm($itemArray, 'name_missing', 'value_missing'); - } - - public function moveupForm($itemArray) - { - return $this->generalForm($itemArray, 'moveupAction', 'up'); - } - - public function movedownForm($itemArray) - { - return $this->generalForm($itemArray, 'movedownAction', 'down'); - } - - public function editForm($itemArray) - { - return $this->generalForm($itemArray, 'generalAction', 'edit'); - } - - public function delForm($itemArray) - { - return $this->generalForm($itemArray, 'delAction', 'del'); - } - - public function associateForm($itemArray) - { - return $this->generalForm($itemArray, 'generalAction', 'link'); - } - - public function simpleText($itemArray) { - $text = strcmp($itemArray['action'],'') !== 0 ? $itemArray['action'] : ' '; - $string = "".$text."\n"; - return $string; - } - - public function text($itemArray) - { - return $this->simpleText($itemArray); - } - - public function simpleLink($itemArray) { - $string = "viewStatus."'>".$itemArray['name']."\n"; - return $string; - } - - public function link($itemArray) - { - return $this->simpleLink($itemArray); - } - - public function ledit($itemArray) - { - $text = isset($this->submitImages['edit']) ? "" : $itemArray['name']; - $title = isset($this->submitTitles['edit']) ? $this->submitTitles['edit'] : $itemArray['field']; - $string = "viewStatus."'>$text\n"; - return $string; - } - - //create the HTML of the filter - public function filterForm($viewArgsName) - { - $cleanName = str_replace('n!',null,$viewArgsName); - $cleanName = str_replace('-',null,$cleanName); - - if (isset($this->viewArgs[$this->pageArg])) - { - $this->viewArgs[$this->pageArg] = 1; - } - - $temp = $value = $this->viewArgs[$viewArgsName]; - //set the viewArg to the null query value - if (Params::$nullQueryValue) - { - $this->viewArgs[$viewArgsName] = Params::$nullQueryValue; - $viewStatus = Url::createUrl(array_values($this->viewArgs)); - if (strcmp($value,Params::$nullQueryValue) === 0) $value = ''; - } - $this->viewArgs[$viewArgsName] = $temp; - - $action = Url::getRoot($this->url).$viewStatus; - $imgSrc = Url::getRoot('Public/Img/Icons/elementary_2_5/find.png'); - $title = $this->strings->gtext('filter'); - $clearLinkTitle = $this->strings->gtext('clear the filter'); - - $html = "
              \n"; - $html .= ""; - $html .= ""; - $html .= "\n"; - $html .= "\n"; - - return $html; - } - -} \ No newline at end of file diff --git a/h-source/Library/Helper/Menu.php b/h-source/Library/Helper/Menu.php deleted file mode 100755 index 86ee24a..0000000 --- a/h-source/Library/Helper/Menu.php +++ /dev/null @@ -1,109 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to write the top menù of the view files -class Helper_Menu extends Helper_Html -{ - - public $panelController; //panel controller - public $controller; - - public $links = array(); - - //instance of Lang_{language}_Generic - public $strings = null; - - public function __construct() - { - $baseUrl = '/Public/Img/Icons/elementary_2_5/'; - - //get the generic language class - $this->strings = Factory_Strings::generic(Params::$language); - - $this->links = array( - - 'back' => array( - 'title' => $this->strings->gtext('back'), - 'class' => 'mainMenuItem', - 'text' => $this->strings->gtext('Back'), - 'url' => 'main', - 'icon' => $baseUrl."left.png", - ), - - 'add' => array( - 'title' => $this->strings->gtext('add a new record'), - 'class' => 'mainMenuItem', - 'text' => $this->strings->gtext('Add'), - 'url' => 'form/insert', - 'icon' => $baseUrl."add.png", - ), - - 'panel' => array( - 'title' => $this->strings->gtext('back to the Panel'), - 'class' => 'mainMenuItem', - 'text' => $this->strings->gtext('Panel'), - 'url' => 'main', - 'icon' => $baseUrl."panel.png", - ) - - ); - } - - public function build($controller = null, $panelController = null) - { - $this->controller = $controller; - $this->panelController = $panelController; - } - - //$voices: comma-separated list of links you want to print - public function render($linksList) - { - $linksArray = explode(',',$linksList); - $menu = null; - foreach ($linksArray as $linkName) - { - //check that the voice exists - if (array_key_exists($linkName,$this->links)) - { - //check that the text and the ure are defined - if (isset($this->links[$linkName]['text']) and isset($this->links[$linkName]['url'])) - { - $title = isset($this->links[$linkName]['title']) ? "title='".$this->links[$linkName]['title']."'" : null; - $class = isset($this->links[$linkName]['class']) ? "class='".$this->links[$linkName]['class']."'" : null; - $icon = isset($this->links[$linkName]['icon']) ? " " : null; - - //choose the controller (current or panel) - $controller = (strcmp($linkName,'panel') === 0) ? $this->panelController.'/' : $this->controller.'/'; - $viewStatus = (strcmp($linkName,'panel') === 0) ? null : $this->viewStatus; - - $href = Url::getRoot($controller.$this->links[$linkName]['url'].$viewStatus); - $text = $this->links[$linkName]['text']; - $menu .= "
              $icon $text
              \n"; - } - } - } - return $menu; - } - -} \ No newline at end of file diff --git a/h-source/Library/Helper/Pages.php b/h-source/Library/Helper/Pages.php deleted file mode 100755 index d8ac856..0000000 --- a/h-source/Library/Helper/Pages.php +++ /dev/null @@ -1,140 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//Helper class to create the HTML of the page list -class Helper_Pages extends Helper_Html -{ - - protected $_urlViewAction; //url of the current page - protected $_currentPage; //number of the page - protected $_numbOfPages; //number of pages - protected $_variableArg = ''; //value of the $viewArgs key that has to be modified - - public $previousString = null; //string of the link to the previous page - public $nextString = null; //string of the link to the next page - public $showNext = true; - public $showPrev = true; - - //instance of Lang_{language}_Generic - public $strings = null; - - public function __construct() - { - //get the generic language class - $this->strings = Factory_Strings::generic(Params::$language); - } - - public function build($urlViewAction = '' , $variableArg = 'page', $previousString = 'previous', $nextString = 'next') - { - $this->_variableArg = $variableArg; - $this->_urlViewAction =$urlViewAction; //url of the controller and (/) main action - $this->previousString = $this->strings->gtext($previousString); - $this->nextString = $this->strings->gtext($nextString); - } - - //return the number of pages - public function getNumbOfPages() - { - return $this->_numbOfPages; - } - - //get the limit of the select query clause - public function getLimit($currentPage,$recordNumber,$recordPerPage) - { - $this->_currentPage = $currentPage; - $this->_numbOfPages=(($recordNumber%$recordPerPage)===0) ? (int) ($recordNumber/$recordPerPage) : ((int) ($recordNumber/$recordPerPage))+1; - $start=(($currentPage-1)*$recordPerPage); - return "$start,$recordPerPage"; - } - - //return the page list string - public function render($pageNumber,$numberOfPages) - { - $pageList = null; - if ($this->showPrev) - { - $pageList .= $this->pageLink($this->_currentPage-1,$this->previousString); - } - $pageList .= $this->recursiveLink($pageNumber,$numberOfPages); - if ($this->showNext) - { - $pageList .= $this->pageLink($this->_currentPage+1,$this->nextString); - } - return $pageList; - } - - //recorsive function in order to write the page list - public function recursiveLink($pageNumber,$numberOfPages) - { - - if ($numberOfPages === 0) return null; - - if ($numberOfPages === 1) { - return $this->pageLink($pageNumber); - } else { - return $this->pageLink($pageNumber) . $this->recursiveLink($pageNumber+1,$numberOfPages-1); - } - } - - public function pageLink($pageNumber, $string = null) { - if ($pageNumber > 0 and $pageNumber <= $this->_numbOfPages) { - return $this->html($pageNumber,$string); - } else { - return null; - } - } - - //return the html link - public function html($pageNumber,$string = null) { - if (isset($string)) { - $strNumber = $string; - $strClass = "class='itemListPage'"; - } else { - if ($pageNumber === $this->_currentPage) - { - $strNumber = $pageNumber; - $strClass = "class='currentPage'"; - } - else - { - $strNumber = $pageNumber; - $strClass = "class='itemListPage'"; - } - } - $this->viewArgs[$this->_variableArg] = $pageNumber; - $viewStatus = Url::createUrl(array_values($this->viewArgs)); - $href= Url::getRoot(null) . $this->_urlViewAction .$viewStatus; - return $this->getATag($href,$strNumber,$strClass); - } - - //get the HTMl of the tag - //$href: href of the link - //$text: the text of the link - //$strClass: the class of the link - public function getATag($href,$text,$strClass) - { - return "$text"; - } - -} \ No newline at end of file diff --git a/h-source/Library/Helper/Popup.php b/h-source/Library/Helper/Popup.php deleted file mode 100755 index 43140fe..0000000 --- a/h-source/Library/Helper/Popup.php +++ /dev/null @@ -1,142 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to create the popup menu -class Helper_Popup extends Helper_Html { - - public $popupArray = array(); //array of popup objects (see popup.php) - public $url = null; //the url (controller/action) to link by means of the popup menù -// public $fieldArg = null; //the key of the viewArgs array to set to the field in the where clause -// public $valueArg = null; //the key of the viewArgs array to be set to the value in the where clause - public $pageArg = null; //the key of the viewArgs array representing the page number. $this->viewArgs[$this->pageArg] is set to 1 if $this->pageArg !== null - - //the type of the popup. If type !=exclusive, than each voice selected is added to the where clause. If type=exclusive, the selection of a popup voice causes the unselection of the other voices - public $type = null; - - public $allString = null; - - //list of popup names - public $popupItems = array(); - - //if it has to print the filter legend - public $printLegend = false; - - //popup legend - public $legend = array(); - - public function __construct() - { - //get the generic language class - $this->strings = Factory_Strings::generic(Params::$language); - - $this->allString = $this->strings->gtext('All'); - } - - public function build($url, $popupArray = null, $type = 'exclusive', $pageArg = null, $printLegend = false) { - $this->url = $url; - $this->popupArray = $popupArray; - $this->pageArg = $pageArg; - $this->type = $type; - $this->printLegend = $printLegend; - - foreach ($this->popupArray as $field => $popup) - { - $this->popupItems[] = $field; - } - } - - //check that the ViewArgs array is complete - public function checkViewArgs() - { - foreach ($this->popupArray as $field => $popup) - { - if (!array_key_exists($field,$this->viewArgs)) return false; - } - return true; - } - - //unselect the voices different from the current one - public function unselect($currentVoice) - { - foreach ($this->popupItems as $item) - { - if (strcmp($item,$currentVoice) !== 0) $this->viewArgs[$item] = Params::$nullQueryValue; - } - } - - //create the HTML of the popup - public function render() { - $returnString = null; - if ($this->checkViewArgs()) - { - if (isset($this->viewArgs[$this->pageArg])) - { - $this->viewArgs[$this->pageArg] = 1; - } - foreach ($this->popupArray as $field => $popup) - { - //default legend - $this->legend[$field] = Params::$nullQueryValue; - - if ($this->type === 'exclusive') $this->unselect($field); - //save the value of the current ViewArg - $tempArg = $this->viewArgs[$field]; - $this->legend[$field] = $tempArg; - - $returnString .= "\n"; - $this->viewArgs[$field] = $tempArg; - } - if ($this->printLegend) - { - $returnString .= "\n"; - } - if (count($this->popupArray)>0) { - $returnString .= "\n"; - } - } - return $returnString; - } - -} diff --git a/h-source/Library/Helper/index.html b/h-source/Library/Helper/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Library/Helper/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Library/Hooks.php b/h-source/Library/Hooks.php deleted file mode 100644 index b16b6d5..0000000 --- a/h-source/Library/Hooks.php +++ /dev/null @@ -1,38 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to call the hooks -class Hooks -{ - - //include an hook file - public static function load($path) - { - if (file_exists($path)) - { - include_once($path); - } - } - -} \ No newline at end of file diff --git a/h-source/Library/Html/Form.php b/h-source/Library/Html/Form.php deleted file mode 100644 index ec81cfb..0000000 --- a/h-source/Library/Html/Form.php +++ /dev/null @@ -1,211 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//create the HTML of the inputs of a form -class Html_Form { - - //return the HTML of a select - //$name: name of the select - //$value: the selected value of the select (set $value equal to null if you don't want to select an option) - //$options: options of the select. This param can be a comma-separated list of options or an associative array ('name'=>'value') - //$className: the class name of the select - //$idName: name of the id - static public function select($name, $value, $options, $className = null, $idName = null, $reverse = null, $attributes = null) - { - $strClass = isset($className) ? "class='".$className."'" : null; - $idStr = isset($idName) ? "id='".$idName."'" : null; - - $returnString = null; - $returnString .= "\n"; - return $returnString; - } - - //return the HTML of an - //$name: the name of the input - //$value: the value of the input - //$className: the class name of the input - //$idName: name of the id - static public function input($name, $value, $className = null, $idName = null, $attributes = null) - { - $strClass = isset($className) ? "class='".$className."'" : null; - $idStr = isset($idName) ? "id='".$idName."'" : null; - - $returnString ="\n"; - return $returnString; - } - - //return the HTML of an - //$name: the name of the input - //$className: the class name of the input - //$idName: name of the id - static public function fileUpload($name, $value, $className = null, $idName = null, $attributes = null) - { - $strClass = isset($className) ? "class='".$className."'" : null; - $idStr = isset($idName) ? "id='".$idName."'" : null; - - $returnString ="\n"; - return $returnString; - } - - //return the HTML of a checkBox - //$name: name of the checkBox (string) - //$value: the value of the checkBox (string or number) - //$option: option of the checkBox (string or number) - //$className: the class name of the checkBox (string) - //$idName: name of the id - static public function checkbox($name, $value, $option, $className = null, $idName = null, $attributes = null) - { - $strClass = isset($className) ? "class='".$className."'" : null; - $idStr = isset($idName) ? "id='".$idName."'" : null; - - $str = (strcmp($value,$option) === 0) ? "checked = 'checked'" : null; - return "\n"; - } - - //return the HTML of a hidden entry - //$name: name of the hidden entry (string) - //$value: the value of the hidden entry (string or number) - static public function hidden($name, $value, $className = null, $idName = null, $attributes = null) - { - $strClass = isset($className) ? "class='".$className."'" : null; - $idStr = isset($idName) ? "id='".$idName."'" : null; - - return "\n"; - } - - //return the HTML of a password entry - //$name: name of the password entry (string) - //$value: the value of the password entry (string or number) - //$idName: name of the id - static public function password($name, $value, $className = null, $idName = null, $attributes = null) - { - $strClass = isset($className) ? "class='".$className."'" : null; - $idStr = isset($idName) ? "id='".$idName."'" : null; - - return "\n"; - } - - //return the HTML of a textarea - //$name: name of the textarea (string) - //$value: the value of the textarea (string or number) - //$idName: name of the id - static public function textarea($name, $value, $className = null, $idName = null, $attributes = null) - { - $strClass = isset($className) ? "class='".$className."'" : null; - $idStr = isset($idName) ? "id='".$idName."'" : null; - - return "\n"; - } - - //return the HTML of a radio button - //$name: name of the radio button - //$value: the selected value of the radio button (set $value equal to null if you don't want to select an option) - //$options: options of the radio button. This param can be a comma-separated list of options or an associative array ('name'=>'value') - //$className: the class name of the radio button - //$position: position of the strings of the radio with respect to the "circles". It can be before or after - //$idName: name of the id - static public function radio($name, $value, $options, $className = null, $position = 'after', $idName = null, $attributes = null) - { - $strClass = isset($className) ? "class='".$className."'" : null; - $idStr = isset($idName) ? "id='".$idName."'" : null; - - $returnString = null; - - if (is_string($options)) { - $tempArray = explode(',',$options); - foreach ($tempArray as $item) - { - $optionsArray[$item] = $item; - } - } else { - $optionsArray = $options; - } - - foreach ($optionsArray as $optionName => $optionValue) { - - if ($position === 'before') - { - $before = $optionName; - $after = null; - } - else - { - $before = null; - $after = $optionName; - } - - $str= (strcmp($value,$optionValue) === 0) ? "checked='checked'" : null; - $returnString .= "$before$after\n"; - } - - return $returnString; - } - -} \ No newline at end of file diff --git a/h-source/Library/Html/index.html b/h-source/Library/Html/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Library/Html/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Library/Image/Gd/Captcha.php b/h-source/Library/Image/Gd/Captcha.php deleted file mode 100644 index 1e8d706..0000000 --- a/h-source/Library/Image/Gd/Captcha.php +++ /dev/null @@ -1,103 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to create a captcha -//you have to call session_start() before to initialize a captcha object -class Image_Gd_Captcha -{ - - private $params = array(); //parameters of the object - private $string = null; //the text string of the captcha - - public function __construct($params = null) - { - $here = realpath('.'); - - $defaultParams = array( - 'boxWidth' => 150, - 'boxHeight' => 100, - 'charNumber' => 6, - 'fontPath' => $here.'/External/Fonts/FreeFont/FreeMono.ttf', - 'undulation' => true, - 'align' => false, - 'charHeight' => 28, - 'sessionKey' => 'captchaString', - ); - - //set the $this->scaffold->params array - if (is_array($params)) - { - foreach ($params as $key => $value) - { - $defaultParams[$key] = $value; - } - } - $this->params = $defaultParams; - - $this->string = generateString($this->params['charNumber']); - } - - public function render() - { - //space among characters - $space = $this->params['boxWidth'] / ($this->params['charNumber']+1); - //create the image box - $img = imagecreatetruecolor($this->params['boxWidth'],$this->params['boxHeight']); - - $background = imagecolorallocate($img,255,255,255); - $border = imagecolorallocate($img,0,0,0); - $colors[] = imagecolorallocate($img,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125)); - $colors[] = imagecolorallocate($img,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125)); - $colors[] = imagecolorallocate($img,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125)); - - //create the background - imagefilledrectangle($img,1,1,$this->params['boxWidth']-2,$this->params['boxHeight']-2,$background); - imagerectangle($img,0,0,$this->params['boxWidth']-1,$this->params['boxHeight']-2,$border); - - //set the text - for ($i=0; $i< $this->params['charNumber']; $i++) - { - $color = $colors[$i % count($colors)]; - $char = substr($this->string,$i,1); - $fontPath = $this->params['fontPath']; - $angle = $this->params['undulation'] === false ? 0 : -20+rand(0,40); - $yposFixed = (int)(($this->params['boxHeight'])/2); - $ypos = $this->params['align'] === true ? $yposFixed : $yposFixed + mt_rand(0,10); - $charHeight = $this->params['charHeight']; - imagettftext($img,$charHeight + rand(0,8),$angle,($i+0.3)*$space,$ypos,$color,$fontPath,$char); - } - - $noiseColor = imagecolorallocate($img, mt_rand(125,255), mt_rand(125,255), mt_rand(125,255)); - /* generate random dots in background */ - for( $i=0; $i<($this->params['boxWidth'] * $this->params['boxHeight'])/7; $i++ ) { - imagefilledellipse($img, mt_rand(0,$this->params['boxWidth']), mt_rand(0,$this->params['boxHeight']), 1, 1, $noiseColor); - } - - $_SESSION[$this->params['sessionKey']] = $this->string; - header('Content-Type: image/png'); - imagepng($img); - imagedestroy($img); - } - -} \ No newline at end of file diff --git a/h-source/Library/Image/Gd/Thumbnail.php b/h-source/Library/Image/Gd/Thumbnail.php deleted file mode 100644 index 22e501e..0000000 --- a/h-source/Library/Image/Gd/Thumbnail.php +++ /dev/null @@ -1,220 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to create a thumbnail -class Image_Gd_Thumbnail -{ - const DS = DIRECTORY_SEPARATOR; - - private $params = array(); //parameters of the object - private $basePath = null; //the path of the folder inside which the images are saved - - public function __construct($basePath,$params = null) - { - $finalChar = $basePath[strlen($basePath) - 1]; - if (strcmp($finalChar,self::DS) !== 0) $basePath .= self::DS; - - $this->basePath = $basePath; - - $defaultParams = array( - 'imgWidth' => null, - 'imgHeight' => null, - 'defaultImage' => null, - 'cropImage' => 'no', - 'horizAlign' => 'left', - 'vertAlign' => 'top', - 'resample' => 'yes', - 'function' => 'none', - 'outputFormat' => 'jpeg', - ); - - //set the $this->scaffold->params array - if (is_array($params)) - { - foreach ($params as $key => $value) - { - $defaultParams[$key] = $value; - } - } - $this->params = $defaultParams; - } - - //create the thumbnail - //$imageName: the name of the file inside $this->basePath - //$outputFile: the name of the output file - public function render($imageFile, $outputFile = null) - { - $imagePath = $this->basePath . basename($imageFile); - - if (!file_exists($imagePath) and isset($this->params['defaultImage'])) $imagePath = $this->params['defaultImage']; - - $img = null; - $type = 'jpeg'; - $contentType = 'image/jpeg'; - - if (file_exists($imagePath)) - { - $ext = strtolower(end(explode('.', $imagePath))); - - if (strcmp($ext,'jpg') === 0 or strcmp($ext,'jpeg') === 0) { - $img = @imagecreatefromjpeg($imagePath); - $type = 'jpeg'; - $contentType = 'image/jpeg'; - } else if (strcmp($ext,'png') === 0) { - $img = @imagecreatefrompng($imagePath); - $type = 'png'; - $contentType = 'image/png'; - } else if (strcmp($ext,'gif') === 0) { - $img = @imagecreatefromgif($imagePath); - $type = 'gif'; - $contentType = 'image/gif'; - } - } - - //If an image was successfully loaded, test the image for size - if ($img) - { - //image size - $width = imagesx($img); - $height = imagesy($img); - - if (!isset($this->params['imgWidth'])) $this->params['imgWidth'] = $width; - if (!isset($this->params['imgHeight'])) $this->params['imgHeight'] = $height; - - if ($this->params['cropImage'] === 'no') - { - $scale = min($this->params['imgWidth']/$width, $this->params['imgHeight']/$height); - } - else if ($this->params['cropImage'] === 'yes') - { - $scale = max($this->params['imgWidth']/$width, $this->params['imgHeight']/$height); - } - - if ($scale < 1) { - - $xSrc = 0; - $ySrc = 0; - - if ($this->params['cropImage'] === 'no') - { - $newWidth = floor($scale*$width); - $newHeight = floor($scale*$height); - } - else if ($this->params['cropImage'] === 'yes') - { - - $newWidth = $this->params['imgWidth']; - $newHeight = $this->params['imgHeight']; - $oldWidth = $width; - $oldHeight = $height; - $width = floor($newWidth/$scale); - $height = floor($newHeight/$scale); - - switch ($this->params['horizAlign']) - { - case 'left': - $xSrc = 0; - break; - case 'right': - $xSrc = floor(($oldWidth-$width)); - break; - case 'center': - $xSrc = floor(($oldWidth-$width)/2); - break; - default: - $xSrc = $this->params['horizAlign']; - } - - switch ($this->params['vertAlign']) - { - case 'top': - $ySrc = 0; - break; - case 'bottom': - $ySrc = floor(($oldHeight-$height)); - break; - case 'center': - $ySrc = floor(($oldHeight-$height)/2); - break; - default: - $ySrc = $this->params['vertAlign']; - } - - } - - //temp image - $tmpImg = imagecreatetruecolor($newWidth, $newHeight); - - if ($this->params['resample'] === 'yes') - { - //copy and resample - imagecopyresampled($tmpImg, $img, 0, 0, $xSrc, $ySrc,$newWidth, $newHeight, $width, $height); - } - else - { - //copy and resize - imagecopyresized($tmpImg, $img, 0, 0, $xSrc, $ySrc,$newWidth, $newHeight, $width, $height); - } - imagedestroy($img); - $img = $tmpImg; - - if (!function_exists($this->params['function'])) { - throw new Exception('Error in '.__METHOD__.': function '.$this->params['function']. ' does not exist'); - } - - $img = call_user_func($this->params['function'],$img); - } - - } - - if (!$img) - { - $imgWidth = isset($this->params['imgWidth']) ? $this->params['imgWidth'] : 100; - $imgHeight = isset($this->params['imgHeight']) ? $this->params['imgHeight'] : 100; - - $img = imagecreate($imgWidth, $imgHeight); - imagecolorallocate($img,200,200,200); - } - - //print the image - if (!isset($outputFile)) - { - header("Content-type: $contentType"); - } - - if (strcmp($type,'png') === 0) - { - imagepng($img,$outputFile,9); - } - else if (strcmp($type,'gif') === 0) - { - imagegif($img,$outputFile); - } - else - { - imagejpeg($img,$outputFile,90); - } - } - -} \ No newline at end of file diff --git a/h-source/Library/Image/Gd/index.html b/h-source/Library/Image/Gd/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Library/Image/Gd/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Library/Image/index.html b/h-source/Library/Image/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Library/Image/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Library/Lang/En/DbCondStrings.php b/h-source/Library/Lang/En/DbCondStrings.php deleted file mode 100644 index bfc5867..0000000 --- a/h-source/Library/Lang/En/DbCondStrings.php +++ /dev/null @@ -1,34 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//error strings in the case database conditions are not satisfied -class Lang_En_DbCondStrings { - - //get the error string in the case that the value of the field $field is already present in the table $table - public function getNotUniqueString($field) - { - return "
              The value of ". $field ." is already present. Please choose a different value.
              \n"; - } - -} diff --git a/h-source/Library/Lang/En/Generic.php b/h-source/Library/Lang/En/Generic.php deleted file mode 100644 index 3268270..0000000 --- a/h-source/Library/Lang/En/Generic.php +++ /dev/null @@ -1,64 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//generic strings -class Lang_En_Generic -{ - - //English to English - public $translations = array( - 'edit' => 'edit', - 'delete' => 'delete', - 'move up' => 'move up', - 'move down' => 'move down', - 'associate' => 'associate', - 'up' => 'su', - 'down' => 'down', - 'link' => 'link', - 'del' => 'del', - 'back' => 'back', - 'Back' => 'Back', - 'add a new record' => 'add a new record', - 'Add' => 'Add', - 'back to the Panel' => 'back to the Panel', - 'Panel' => 'Panel', - 'previous' => 'previous', - 'next' => 'next', - 'All' => 'All', - 'pages' => 'pages', - 'filter' => 'filter', - 'clear the filter' => 'clear the filter', - ); - - public function gtext($string) - { - if (array_key_exists($string,$this->translations)) - { - return $this->translations[$string]; - } - - return $string; - } - -} diff --git a/h-source/Library/Lang/En/ModelStrings.php b/h-source/Library/Lang/En/ModelStrings.php deleted file mode 100644 index cf26b8f..0000000 --- a/h-source/Library/Lang/En/ModelStrings.php +++ /dev/null @@ -1,36 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Lang_En_ModelStrings extends Lang_ResultStrings { - - public $string = array( - "error" => "
              Query error: Contact the administrator!
              \n", - "executed" => "
              Operation executed!
              \n", - "associate" => "
              Referential integrity problem: record associated to some other record in a child table. Break the association before.
              \n", - "no-id" => "
              Alert: record identifier not defined!
              \n", - "not-linked" => "
              The Item is not associated : you can't dissociate it
              ", - "linked" => "
              The Item is already associated: you can't associate it another time
              " - ); - -} diff --git a/h-source/Library/Lang/En/UploadStrings.php b/h-source/Library/Lang/En/UploadStrings.php deleted file mode 100644 index 61bc0c5..0000000 --- a/h-source/Library/Lang/En/UploadStrings.php +++ /dev/null @@ -1,45 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Lang_En_UploadStrings extends Lang_ResultStrings { - - public $string = array( - "error" => "
              Error: verify the permissions of the file/directory
              \n", - "executed" => "
              Operation executed!
              \n", - "not-child" => "
              The selected directory is not a child of the base directory
              \n", - "not-dir" => "
              The selected directory is not a directory
              \n", - "not-empty" => "
              The selected directory is not empty
              \n", - "no-folder-specified" => "
              No folder has been specified
              \n", - "no-file-specified" => "
              No file has been specified
              \n", - "not-writable" => "
              The folder is not writable
              \n", - "not-writable-file" => "
              The file is not writable
              \n", - "dir-exists" => "
              The directory is already present in the current folder
              \n", - "no-upload-file" => "
              There is no file to upload
              \n", - "size-over" => "
              The size of the file is too big
              \n", - "not-allowed-ext" => "
              The extension of the file you want to upload is not allowed
              \n", - "not-allowed-mime-type" => "
              The MIME type of the file you want to upload is not allowed
              \n", - "file-exists" => "
              The file is already present in the current folder
              \n" - ); - -} diff --git a/h-source/Library/Lang/En/ValCondStrings.php b/h-source/Library/Lang/En/ValCondStrings.php deleted file mode 100644 index 7f4e7ea..0000000 --- a/h-source/Library/Lang/En/ValCondStrings.php +++ /dev/null @@ -1,93 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Lang_En_ValCondStrings { - - //if the element is not defined - public function getNotDefinedResultString($element) - { - return "
              ". $element ." not defined!
              \n"; - } - - //if the elements are not equal - public function getNotEqualResultString($element) - { - return "
              Different values: $element
              \n"; - } - - //if the element is not alphabetic - public function getNotAlphabeticResultString($element) - { - return "
              ".$element." has to be alphabetic
              \n"; - } - - //if the element is not alphanumeric - public function getNotAlphanumericResultString($element) - { - return "
              ".$element." has to be alphanumeric
              \n"; - } - - //if the element is not a decimal digit - public function getNotDecimalDigitResultString($element) - { - return "
              ".$element." has to be a decimal digit
              \n"; - } - - //if the element has the mail format - public function getNotMailFormatResultString($element) - { - return "
              ".$element." doesn't seem an e-mail address
              \n"; - } - - //if the element is numeric - public function getNotNumericResultString($element) - { - return "
              ".$element." has to be a numeric
              \n"; - } - - //if the element (string) length exceeds the value of characters (defined by $maxLength) - public function getLengthExceedsResultString($element,$maxLength) - { - return "
              ".$element." exceeds the value of $maxLength characters
              \n"; - } - - //if the element is one of the strings indicated by $stringList (a comma-separated list of strings) - public function getIsForbiddenStringResultString($element,$stringList) - { - return "
              ".$element." can't be one of the following strings: $stringList
              \n"; - } - - //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings) - public function getIsNotStringResultString($element,$stringList) - { - return "
              ".$element." has to be one of the following strings: $stringList
              \n"; - } - - //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings) - public function getDoesntMatchResultString($element,$regExp) - { - return "
              ".$element." has to match the following regular expression: $regExp
              \n"; - } - -} diff --git a/h-source/Library/Lang/En/index.html b/h-source/Library/Lang/En/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Library/Lang/En/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Library/Lang/Eng/DbCondStrings.php b/h-source/Library/Lang/Eng/DbCondStrings.php deleted file mode 100644 index e4196b6..0000000 --- a/h-source/Library/Lang/Eng/DbCondStrings.php +++ /dev/null @@ -1,34 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//error strings in the case database conditions are not satisfied -class Lang_Eng_DbCondStrings { - - //get the error string in the case that the value of the field $field is already present in the table $table - public function getNotUniqueString($field) - { - return "
              The value of ". $field ." is already present. Please choose a different value.
              \n"; - } - -} diff --git a/h-source/Library/Lang/Eng/Generic.php b/h-source/Library/Lang/Eng/Generic.php deleted file mode 100644 index bb0ab99..0000000 --- a/h-source/Library/Lang/Eng/Generic.php +++ /dev/null @@ -1,48 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//generic strings -class Lang_Eng_Generic -{ - - //English to English - public $translations = array( - 'edit' => 'edit', - 'delete' => 'delete', - 'move up' => 'move up', - 'move down' => 'move down', - 'associate' => 'associate', - ); - - public function gtext($string) - { - if (array_key_exists($string,$this->translations)) - { - return $this->translations[$string]; - } - - return $string; - } - -} diff --git a/h-source/Library/Lang/Eng/ModelStrings.php b/h-source/Library/Lang/Eng/ModelStrings.php deleted file mode 100644 index fa741a2..0000000 --- a/h-source/Library/Lang/Eng/ModelStrings.php +++ /dev/null @@ -1,36 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Lang_Eng_ModelStrings extends Lang_ResultStrings { - - public $string = array( - "error" => "
              Query error: Contact the administrator!
              \n", - "executed" => "
              Operation executed!
              \n", - "associate" => "
              Referential integrity problem: record associated to some other record in a child table. Break the association before.
              \n", - "no-id" => "
              Alert: record identifier not defined!
              \n", - "not-linked" => "
              The Item is not associated : you can't dissociate it
              ", - "linked" => "
              The Item is already associated: you can't associate it another time
              " - ); - -} diff --git a/h-source/Library/Lang/Eng/UploadStrings.php b/h-source/Library/Lang/Eng/UploadStrings.php deleted file mode 100644 index 2ae4c9b..0000000 --- a/h-source/Library/Lang/Eng/UploadStrings.php +++ /dev/null @@ -1,45 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Lang_Eng_UploadStrings extends Lang_ResultStrings { - - public $string = array( - "error" => "
              Error: verify the permissions of the file/directory
              \n", - "executed" => "
              Operation executed!
              \n", - "not-child" => "
              The selected directory is not a child of the base directory
              \n", - "not-dir" => "
              The selected directory is not a directory
              \n", - "not-empty" => "
              The selected directory is not empty
              \n", - "no-folder-specified" => "
              No folder has been specified
              \n", - "no-file-specified" => "
              No file has been specified
              \n", - "not-writable" => "
              The folder is not writable
              \n", - "not-writable-file" => "
              The file is not writable
              \n", - "dir-exists" => "
              The directory is already present in the current folder
              \n", - "no-upload-file" => "
              There is no file to upload
              \n", - "size-over" => "
              The size of the file is too big
              \n", - "not-allowed-ext" => "
              The extension of the file you want to upload is not allowed
              \n", - "not-allowed-mime-type" => "
              The MIME type of the file you want to upload is not allowed
              \n", - "file-exists" => "
              The file is already present in the current folder
              \n" - ); - -} diff --git a/h-source/Library/Lang/Eng/ValCondStrings.php b/h-source/Library/Lang/Eng/ValCondStrings.php deleted file mode 100644 index 42e70d8..0000000 --- a/h-source/Library/Lang/Eng/ValCondStrings.php +++ /dev/null @@ -1,93 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Lang_Eng_ValCondStrings { - - //if the element is not defined - public function getNotDefinedResultString($element) - { - return "
              ". $element ." not defined!
              \n"; - } - - //if the elements are not equal - public function getNotEqualResultString($element) - { - return "
              Different values: $element
              \n"; - } - - //if the element is not alphabetic - public function getNotAlphabeticResultString($element) - { - return "
              ".$element." has to be alphabetic
              \n"; - } - - //if the element is not alphanumeric - public function getNotAlphanumericResultString($element) - { - return "
              ".$element." has to be alphanumeric
              \n"; - } - - //if the element is not a decimal digit - public function getNotDecimalDigitResultString($element) - { - return "
              ".$element." has to be a decimal digit
              \n"; - } - - //if the element has the mail format - public function getNotMailFormatResultString($element) - { - return "
              ".$element." doesn't seem an e-mail address
              \n"; - } - - //if the element is numeric - public function getNotNumericResultString($element) - { - return "
              ".$element." has to be a numeric
              \n"; - } - - //if the element (string) length exceeds the value of characters (defined by $maxLength) - public function getLengthExceedsResultString($element,$maxLength) - { - return "
              ".$element." exceeds the value of $maxLength characters
              \n"; - } - - //if the element is one of the strings indicated by $stringList (a comma-separated list of strings) - public function getIsForbiddenStringResultString($element,$stringList) - { - return "
              ".$element." can't be one of the following strings: $stringList
              \n"; - } - - //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings) - public function getIsNotStringResultString($element,$stringList) - { - return "
              ".$element." has to be one of the following strings: $stringList
              \n"; - } - - //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings) - public function getDoesntMatchResultString($element,$regExp) - { - return "
              ".$element." has to match the following regular expression: $regExp
              \n"; - } - -} diff --git a/h-source/Library/Lang/Eng/index.html b/h-source/Library/Lang/Eng/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Library/Lang/Eng/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Library/Lang/ResultStrings.php b/h-source/Library/Lang/ResultStrings.php deleted file mode 100644 index 2181b90..0000000 --- a/h-source/Library/Lang/ResultStrings.php +++ /dev/null @@ -1,42 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Lang_ResultStrings { - - public $string = array(); - - //method to get the string $stringName - public function getString($stringName) - { - if (isset($this->string[$stringName])) - { - return $this->string[$stringName]; - } - else - { - return 'result string not defined!'; - } - } - -} diff --git a/h-source/Library/Lang/index.html b/h-source/Library/Lang/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Library/Lang/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Library/ModAbstract.php b/h-source/Library/ModAbstract.php deleted file mode 100644 index f576c10..0000000 --- a/h-source/Library/ModAbstract.php +++ /dev/null @@ -1,42 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//aach module class has to inherits from this abstract class -abstract class ModAbstract -{ - - //reference to a simpleXML object - protected $simpleXmlObj = null; - - //type hinting: simplexmlelement - public function __construct(SimpleXMLElement $simpleXmlObj) - { - $this->simpleXmlObj = $simpleXmlObj; - } - - //define the abstract method to render (create the HTML) of the single module - //$xmlObject: simpleXML object - abstract public function render(); - -} diff --git a/h-source/Library/Model/#Base.php# b/h-source/Library/Model/#Base.php# deleted file mode 100755 index 4162a56..0000000 --- a/h-source/Library/Model/#Base.php# +++ /dev/null @@ -1,1273 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -abstract class Model_Base -{ - - public $fields = ''; //the fields that have to be manipulated by the update and insert query - public $values = array(); //the values that corresponding to the $this->fields fields - public $form = null; //reference to a Form_Form object - public $formStruct = null; //the form structure - - public $submitName = null; //the current submitName (from the form) - public $identifierName = 'identifier'; - - public $notice = null; //a string explaining the result of the query applied (or not if an error occured): executed, error, etc - public $result = true; //the result of validate conditions, database conditions and query. It can be 'true' or 'false' - public $queryResult = false; //the result of the query - - //conditions that have to be satisfied before applying the query - //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions' - public $strongConditions = array(); - - //conditions that have to be satisfied before applying the query - //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions' - //do not return error if a value is equal to '' or null - public $softConditions = array(); - - //conditions that have to be satisfied before applying the query - //check that the new values inserted satisfy some conditions - //Ex: 'update'=>'checkUniqueCompl:titolo,autore;checkUnique:titolo','insert'=>'checkUnique:titolo' - public $databaseConditions = array(); - - public $popupArray = array(); //array of popup objects (see popup.php) - - public $supplInsertValues = array(); //associative array defining supplementary values to be inserted on each insert query. It has to have the following form: array(field1 => value1,field2 => value2, ...) - - public $supplUpdateValues = array(); //associative array defining supplementary values to be inserted on each update query. It has to have the following form: array(field1 => value1,field2 => value2, ...) - - public $select = null; //fields that have to be selected in select queries - public $where = array(); //associative array containing all the where clauses ($field => $value) - //group by, order by and limit clauses - public $groupBy = null; - public $orderBy = null; - public $limit = null; - - public $from = null; //from clause of the select queries - public $on = array(); //on array - public $using = array(); //using array - public $join = array(); //join array - - public $toList = false; //if the result have to be given in a list format - public $listArray = array(); //array containing the $key and the $value to be used to extract a list from a resultSet - - //logic operator between statements in the where clause of select queries - public $logicalOperators = array('AND'); - - public $files = null; //reference to the Files_Upload class - - protected $_tables='itemTable,boxTable,item_boxTable'; - protected $_idFields='id_item,id_box'; - protected $_tablesArray=array(); - protected $_idFieldsArray=array(); - protected $_where = array(); - - //the name of the field that has to be used to order the rows of the main table of the model - protected $_idOrder = null; - - protected $_onDelete = 'check'; //can be 'nocheck' or 'check'. check: referential integrity check. nocheck: no referential integrity check - protected $_reference = null; //array containing the child table that have a reference to this table and the foreign key of the child table-> array($childTable,$foreignKey) - - protected $_popupItemNames = array(); //the fields to be used as names in the popupArray elements. Associative array ($itemNameField1 => $itemNameValue1, ...) - - //the labels of the pop-up menus - protected $_popupLabels = array(); - - //functions that have to be applied upon the label fields of the popup menu - protected $_popupFunctions = array(); - - protected $_popupWhere = array(); //where clause for the pupup menu - - protected $_resultString; //reference to the class containing all the result strings of the db queries - protected $_dbCondString; //reference to the class containing all the result strings of the database conditions - - protected $_backupFields = ''; //field saved after the delFields method has been applied - protected $_backupValues = array(); //values saved after the delFields method has been applied - protected $_allowedDbMethods = array('update','insert','del','moveup','movedown'); //methods that can be called by the updateTable method - - protected $submitNames = array( - 'update' => 'updateAction', - 'insert' => 'insertAction', - 'del' =>'delAction', - 'moveup' =>'moveupAction', - 'movedown' =>'movedownAction' - ); - - protected $identifierValue = null; //the value of the identifier ($_POST[$this->identifier]) - protected $arrayExt; //arrayExt object (see library/arrayExt.php) - - protected $_arrayStrongCheck; //Array_Validate_Strong object - protected $_arraySoftCheck; //Array_Validate_Soft object - - public $db; //reference to the database layer class - protected $_lang = null; //language of notices - - - public function __construct() { - $this->_tablesArray = explode(',',$this->_tables); - $this->_idFieldsArray = explode(',',$this->_idFields); - $this->_where[$this->_idFieldsArray[0]] = $this->_tablesArray[0]; - $this->arrayExt = new ArrayExt(); - - //initialize the validate objects - $this->_arrayStrongCheck = new Array_Validate_Strong($this->_lang); - $this->_arraySoftCheck = new Array_Validate_Soft($this->_lang); - - $this->identifierName = $this->_idFieldsArray[0]; - - //set the language of notices - $this->_lang = Params::$language; - - //create the $_resultString object (result strings of the db queries) - $modelStringClass = 'Lang_'.$this->_lang.'_ModelStrings'; - if (!class_exists($modelStringClass)) - { - $modelStringClass = 'Lang_En_ModelStrings'; - } - $this->_resultString = new $modelStringClass(); - - //create the $_dbCondString object (result strings of the database conditions) - $dbCondStringClass = 'Lang_'.$this->_lang.'_DbCondStrings'; - if (!class_exists($dbCondStringClass)) - { - $dbCondStringClass = 'Lang_En_DbCondStrings'; - } - $this->_dbCondString = new $dbCondStringClass(); - - //instantiate the database class - $this->db = Factory_Db::getInstance(DATABASE_TYPE); - - //instantiate the Files_Upload class - $params = array( - 'filesPermission' => 0777, - 'language' => $this->_lang, - 'allowedExtensions' => 'png,jpg,jpeg,gif', - 'maxFileSize' => 20000000, - 'fileUploadKey' => 'userfile' - ); - - $this->files = new Files_Upload(ROOT."/media/",$params); - } - - //sanitize all the $values property - public function sanitize() - { - $keys = implode(',',array_keys($this->values)); - $this->values = $this->arrayExt->subset($this->values,$keys,'sanitizeDb'); - } - - //change a resulting string from a db query - public function setString($key,$value) - { - $this->_resultString->string[$key] = $value; - } - - //set the submitNames property (array) - //$methodName : the method name, $submitName: the submit name of the submit action of the form - public function setSubmitNames($methodName,$submitName) - { - if (!in_array($methodName,$this->_allowedDbMethods)) - { - throw new Exception('query type "'.$methodName. '" not allowed in '. __METHOD__); - } - $this->submitNames[$methodName] = $submitName; - } - - //get the last query executed - public function getQuery() - { - return $this->db->query; - } - - //get the where clause of the select query - public function getWhereQueryClause() - { - return $this->where; - } - - //set the where clause of the select query - //whereArray = array ($table_field => $value) - public function setWhereQueryClause($whereArray) - { - $this->where = $whereArray; - } - - //append the whereArray clause to $this_->whereClause - //whereArray = array ($table_field => $value) - public function appendWhereQueryClause($whereArray) - { - $this->where = array_merge($this->where,$whereArray); - } - - //drop the char $char from the beginning of the string $string - public function dropStartChar($string,$char) - { - while(strcmp($string[0],$char) === 0) - { - $string = substr($string,1); - } - return $string; - } - - //get the table name from $this->_where. If the table is not present then return $this->_tablesArray[0] - public function getTableName($field) - { - return isset($this->_where[$field]) ? $this->_where[$field] : $this->_tablesArray[0]; - } - - //method to create the where clause of the select query from the $this->where array - //$level: level of the ricorsion - //$whereClauseLevel: array containing the field=>value statements of the where clause. If $whereClause = null than $this->where is considered - public function createWhereClause($level = 0, $whereClauseLevel = null, $operator = null) - { - $whereClause = null; - $whereClauseArray = array(); - - $whereClause = isset($whereClauseLevel) ? $whereClauseLevel : $this->where; - - foreach ($whereClause as $field => $value) - { - if (is_array($value)) - { - if (strstr($field,"OR")) - { - $op = " OR "; - } - else if (strstr($field,"AND")) - { - $op = " AND "; - } - else - { - $op = null; - } - $newValue = $this->createWhereClause($level+1, $value, $op); - if (isset($newValue)) $whereClauseArray[] = $newValue; - } - else - { - $flag = 0; //equal where clause - if (isset($field)) - { - //drop the 'n:' and '-' chars from $field - $fieldClean = str_replace('n!',null,$field); - $fieldClean = $this->dropStartChar($fieldClean,'-'); - if (strcmp($value,Params::$nullQueryValue) !== 0 or (Params::$nullQueryValue === false)) - { - foreach (params::$whereClauseSymbolArray as $symbol) - { - if (strstr($value,$symbol)) - { - //check if write or not the table name - $tableName = strstr($field,'n!') ? null : $this->getTableName($field).'.'; - $whereClauseArray[] = $tableName.$fieldClean.' '.$value; - $flag = 1; //not equal where clause - break; - } - } - if ($flag === 0) - { - $value = '"'.$value.'"'; - //check if write or not the table name - $tableName = strstr($field,'n!') ? null : $this->getTableName($field).'.'; - $whereClauseArray[] = $tableName.$fieldClean.'='.$value; - } - } - } - } - } - //get the logic operator at the current level - if (isset($operator)) - { - $logicOper = $operator; - } - else - { - $logicOper = isset($this->logicalOperators[$level]) ? ' '.$this->logicalOperators[$level].' ' : ' AND '; - } - $whereClause = !empty($whereClauseArray) ? implode($logicOper,$whereClauseArray) : null; - $whereClause = (isset($whereClause) and $level>0) ? '('.$whereClause.')' : $whereClause; - return $whereClause; - } - - - //get the submitName having its key (the method name) - public function getSubmitName($key) - { - if (!array_key_exists($key,$this->submitNames)) - { - return 'generalAction'; -// throw new Exception('query type "'.$key. '" not allowed in '.__METHOD__); - } - return $this->submitNames[$key]; - - } - - - //return the values, taken from the $_POST array, to be inserted inside the forms - //$queryType: insert or update - //$func: sanitize function to apply upon each value - //$id: if $queryType='update' that the values are taken from the record (of the main table of this model) having the primary key equal to $id - //$defaultValues = associative array of the form: array($entry=>$defaultValue) - //$functionsIfFromDb = associative array of the form: array($entry=>$function_to_be_applied) - public function getFormValues($queryType = 'insert', $func = 'sanitizeHtml',$id = null,$defaultValues = array(),$functionsIfFromDb = array()) - { - @session_start(); - if (is_array($func)) - { - $funcPost = $func[0]; - $funcDb = $func[1]; - } - else - { - $funcPost = $func; - $funcDb = 'none'; - } - - $arrayType = array('update','insert'); - $values = array(); - $idName = $this->identifierName; - if (in_array($queryType,$arrayType)) - { - $ident = null; - if (isset($id)) - { - $ident = (int)$id; - } - else if (isset($_POST[$idName])) - { - $ident = (int)$_POST[$idName]; - } - if ($this->result) - { - if ($queryType === 'update') - { - if (isset($ident)) - { - $recordArray = $this->selectId($ident); - - $fieldsArray = explode(',',$this->fields); - - $values = $this->arrayExt->subset($recordArray,$this->fields,$funcDb); - -// foreach ($fieldsArray as $field) -// { -// $values[$field] = array_key_exists($field,$recordArray) ? $recordArray[$field] : ''; -// } - - $values[$idName] = $ident; - - //apply the functions upon entries - foreach ($functionsIfFromDb as $entry => $funcUponEntry) - { - if (array_key_exists($entry,$values)) - { - if (!function_exists($funcUponEntry)) { - throw new Exception('Error in '.__METHOD__.': function '.$funcUponEntry. ' does not exist'); - } - - $values[$entry] = call_user_func($funcUponEntry,$values[$entry]); - } - } - - //set values of $_SESSION array - foreach ($values as $k => $v) - { - if (isset($this->formStruct['entries'][$k]['type'])) - { - if ($this->formStruct['entries'][$k]['type'] === 'File') - { - $_SESSION['form_'.$k] = $v; - } - } - } - } - } - else if ($queryType === 'insert') - { - - $tempArray = is_array($defaultValues) ? $defaultValues : array(); - - $values = $this->arrayExt->subset($tempArray,$this->fields,$funcPost); - - } - } - else - { - $values = $this->arrayExt->subset($_POST,$this->fields,$funcPost); - - if ($queryType === 'update') - { - $values[$idName] = $ident; - - //take values from $_SESSION array - $tempFieldArray = explode(',',$this->fields); - - for ($i = 0; $i < count($tempFieldArray); $i++) - { - if (isset($this->formStruct['entries'][$tempFieldArray[$i]]['type'])) - { - if ($this->formStruct['entries'][$tempFieldArray[$i]]['type'] === 'File') - { - if (isset($_SESSION['form_'.$tempFieldArray[$i]])) - { - $values[$tempFieldArray[$i]] = $_SESSION['form_'.$tempFieldArray[$i]]; - } - } - } - } - } - } - } - return $values; - } - - - //method to set the properties $this->fields and $this->values - public function setFields($fields,$func = 'sanitizeAll') - { - $this->values = $this->arrayExt->subset($_POST,$fields,$func); - $this->fields = $this->extractFields($fields); - - //set the backup variables - $this->_backupFields = $this->fields; - $this->_backupValues = $this->values; - } - - - //clear the fields list - public function clearFields() - { - $this->_backupFields = $this->fields; - $this->_backupValues = $this->values; - $this->fields = ''; - $this->values = array(); - } - - //del the fields written in the $list argument. The $list argument has to be of the type: field1,field2,... - public function delFields($list) - { - $this->_backupFields = $this->fields; - $this->_backupValues = $this->values; - $this->values = $this->arrayExt->subsetComplementary($this->values,$list); -// $this->fields = implode(',',array_keys($this->values)); - } - - //restore the fields and values saved in $_backupFields and $_backupValues - public function restoreFields() - { - $this->fields = $this->_backupFields; - $this->values = $this->_backupValues; - } - - //method to clean the $fields string deleting the colons (and the word after the colon) - public function extractFields($fields) { - $fieldsArray = explode(',',$fields); - $resultString = array(); - foreach ($fieldsArray as $field) { - if (strstr($field,':')) { - $temp = explode(':',$field); - $resultString[] = $temp[0]; - } else { - $resultString[] = $field; - } - } - return implode(',',$resultString); - } - - //add the supplementary value on insert and update queries - //$queryType: insert or update - public function setSupplValues($queryType) - { - if ($queryType === 'insert') - { - $supplValues = $this->supplInsertValues; - } - else if ($queryType === 'update') - { - $supplValues = $this->supplUpdateValues; - } - - $baseFields = implode(',',array_keys($this->values)); - - $supplFields = implode(',',array_keys($supplValues)); - $supplFields = (strcmp($supplFields,'') === 0) ? $supplFields : ',' . $supplFields; - - $fields = $baseFields . $supplFields; - $values = array_merge(array_values($this->values),array_values($supplValues)); - - return array($fields,$values); - } - - - //method to call the update query (overriding of the base_db del method) - //update the record with the primary key equal to $id (default) - //if $whereClause is set then use $whereClause as where clause of the update query - public function update($id = null, $whereClause = null) - { - if (!is_array($this->supplUpdateValues)) - { - throw new Exception('error in ' . __METHOD__ . ': the supplUpdateValues property has to be an array.'); - } - $el = $this->setSupplValues('update'); - $this->queryResult = false; - - if (isset($whereClause)) - { - $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$whereClause); - $this->setNotice($result); - return $result; - } - else - { - if (isset($id)) - { - $where = $this->_idFieldsArray[0].'='.(int)($id); - $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$where); - $this->setNotice($result); - return $result; - } - else - { - $this->notice = $this->_resultString->getString('no-id'); - $this->result = false; - $this->identifierValue = null; - return false; - } - } - } - - //method to call the insert query (overriding of the base_db del method) - public function insert() { - - $this->queryResult = false; - if (!is_array($this->supplInsertValues)) { - throw new Exception('error in ' . __METHOD__ . ': the supplInsertValues property has to be an array.'); - } - - if (isset($this->_idOrder)) - { - $maxValue = $this->db->getMax($this->_tablesArray[0],$this->_idOrder); - $this->supplInsertValues[$this->_idOrder] = (int)$maxValue + 1; - } - - $el = $this->setSupplValues('insert'); - - $result = $this->db->insert($this->_tablesArray[0],$el[0],$el[1]); - $this->setNotice($result); - return $result; - } - - //method to call the delete query (overriding of the base_db del method) - public function del($id = null, $whereClause = null) { - - $this->queryResult = false; - - if (isset($whereClause)) - { - $result = $this->db->del($this->_tablesArray[0],$whereClause); - $this->setNotice($result); - return $result; - } - else - { - if (isset($id)) { - $where = $this->_idFieldsArray[0].'='.(int)$id; - $result = $this->db->del($this->_tablesArray[0],$where); - $this->setNotice($result); - return $result; - } else { - $this->notice = $this->_resultString->getString('no-id'); - $this->result = false; - $this->identifierValue = null; - return false; - } - } - } - - //move to the top the record having $this->_idOrder = $id - //where clause - public function moveup($id) - { - return $this->move($id,'up'); - } - - //move to the top the record having $this->_idOrder = $id - //where clause - public function movedown($id) - { - return $this->move($id,'down'); - } - - //move the record having $this->_tablesArray[0] = $id - //$par: 'up' or 'down' - //where clause - public function move($id,$par = 'up') - { - $this->queryResult = false; - if (isset($id)) - { - $increm = ($par === 'up') ? 1 : -1; - - $backupLimit = $this->limit; - $this->limit = null; - - $data = $this->getFields($this->_tablesArray[0].'.'.$this->_idFieldsArray[0].','.$this->_tablesArray[0].'.'.$this->_idOrder); - - for($i = 0; $i < count($data); $i++) - { - if (strcmp($data[$i][$this->_tablesArray[0]][$this->_idFieldsArray[0]],$id) === 0) - { - if (($par === 'up' and $i !== 0) or ($par === 'down' and $i !== (count($data)-1))) - { - $prevOrder = $data[$i-$increm][$this->_tablesArray[0]][$this->_idOrder]; - $prevId = $data[$i-$increm][$this->_tablesArray[0]][$this->_idFieldsArray[0]]; - $currentOrder = $data[$i][$this->_tablesArray[0]][$this->_idOrder]; - $currentId = $data[$i][$this->_tablesArray[0]][$this->_idFieldsArray[0]]; - - //exchange the id_order of the two record - $res1 = $this->db->update($this->_tablesArray[0],$this->_idOrder,array($prevOrder),$this->_idFieldsArray[0]."='$currentId'"); - $res2 = $this->db->update($this->_tablesArray[0],$this->_idOrder,array($currentOrder),$this->_idFieldsArray[0]."='$prevId'"); - $result = ($res1 and $res2); - $this->setNotice($result); - return $result; - } - } - } - - $this->limit = $backupLimit; - } - else - { - $this->notice = $this->_resultString->getString('no-id'); - $this->result = false; - $this->identifierValue = null; - return false; - } - return false; - } - - public function setNotice($result) { - if ($result) { - $this->notice = $this->_resultString->getString('executed'); - $this->result = true; - $this->queryResult = true; - } else { - $this->notice = $this->_resultString->getString('error'); - $this->result = false; - $this->queryResult = false; - } - } - - //method used to verify that the value of a field is not duplicated - //$fieldsList: list of fields to check. Ex: field1,field2,... - //$where: the where clause - public function checkUnique($fieldsList,$where = null) - { - $errorString = null; - $numb = 0; - $fieldsArray = explode(',',$fieldsList); - $queryFieldsArray = explode(',',$this->fields); - foreach ($fieldsArray as $field) - { - if (in_array($field,$queryFieldsArray)) - { - if ($this->db->recordExists($this->_tablesArray[0],$field,$this->values[$field],$where)) - { - $errorString .= $this->_dbCondString->getNotUniqueString($field); - $numb++; - } - } - } - $this->notice = $errorString; - return $numb === 0 ? true : false; - } - - //like checkUnique: check all the records of the table apart from the record that has to be modified - public function checkUniqueCompl($fieldsList,$id = null) - { - if (isset($id)) - { - $where = $this->_idFieldsArray[0].'!='.(int)($id); - return $this->checkUnique($fieldsList,$where); - } else { - $this->notice = $this->_resultString->getString('no-id'); - return false; - } - } - - //method to apply the database conditions listed in the $this->databaseConditions associative array - //$queryType: indicates what set of validate conditions has to be considered (it's the key of the associative array) - public function applyDatabaseConditions($queryType,$id = null) - { - if (array_key_exists($queryType,$this->databaseConditions)) - { - if (!is_array($this->databaseConditions[$queryType])) - { - throw new Exception('error in method '.__METHOD__.' : databaseConditions['.$queryType.'] has to be an associative array'); - } - - foreach ($this->databaseConditions[$queryType] as $key => $values) - { - - //personalized error string - $altErrorString = null; - - //delete all the '+' chars - $key = $this->dropStartChar($key,'+'); - - if (strcmp($values,'all') === 0 or strstr($values,'all|')) - { - if (strstr($values,'all|')) - { - $values = str_replace('all|',$this->fields.'|',$values); - } - else - { - $values = $this->fields; - } - } - - if (strstr($values,'|')) - { - $temp = explode('|',$values); - $altErrorString = "
              ".$temp[1]."
              \n"; - $values = $temp[0]; - } - - $allowedMethod = array('checkUnique','checkUniqueCompl'); - if (!in_array($key,$allowedMethod)) - { - throw new Exception('error in method '.__METHOD__.' : method "'.$key. '" not allowed in the property named databaseConditions'); - } - if (!call_user_func_array(array($this,$key),array($values,$id))) - { - if (isset($altErrorString)) $this->notice = $altErrorString; - $this->result = false; - $this->queryResult = false; - return false; - } - } - return true; - } else { - return true; - } - } - - - //method to apply the validate conditions listed in the $this->strongConditions associative array - //$queryType: indicates what set of validate conditions has to be considered (it's the key of the associative array) - //$strength: 'strong' or 'soft' - public function applyValidateConditions($queryType,$strength = 'strong') - { - if ($strength === 'strong') - { - $validateObj = $this->_arrayStrongCheck; - $conditions = $this->strongConditions; - $errString = 'strongConditions'; - } - else - { - $validateObj = $this->_arraySoftCheck; - $conditions = $this->softConditions; - $errString = 'softConditions'; - - if (Params::$nullQueryValue !== false) - { - $conditions['insert']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all'; - $conditions['update']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all'; - } - } - - if (array_key_exists($queryType,$conditions)) - { - if (!is_array($conditions[$queryType])) - { - throw new Exception('error in method '.__METHOD__.' : '.$errString.'['.$queryType.'] has to be an associative array'); - } - - foreach ($conditions[$queryType] as $key => $values) - { - - //personalized error string - $altErrorString = null; - - //delete all the '+' chars - $key = $this->dropStartChar($key,'+'); - - if (strcmp($values,'all') === 0 or strstr($values,'all|')) - { - if (strstr($values,'all|')) - { - $values = str_replace('all|',$this->fields.'|',$values); - } - else - { - $values = $this->fields; - } - } - - if (strstr($values,'|')) - { - $temp = explode('|',$values); - $altErrorString = "
              ".$temp[1]."
              \n"; - $values = $temp[0]; - } - - $baseArgs = array($_POST,$values); - - if (strstr($key,'|')) - { - $funcArray = explode('|',$key); - $funcName = $funcArray[0]; - array_shift($funcArray); - $funcArgs = array_merge($baseArgs,$funcArray); - } - else - { - $funcName = $key; - $funcArgs = $baseArgs; - } - - if (!method_exists($validateObj,$funcName) or $funcName === 'checkGeneric') - { - throw new Exception('error in method '.__METHOD__.' :method "'.$funcName. '" not allowed in '.$errString); - } - if (!call_user_func_array(array($validateObj,$funcName),$funcArgs)) - { - $this->notice .= (isset($altErrorString)) ? $altErrorString : $validateObj->errorString; - $this->result = false; - $this->queryResult = false; - return false; - } - } - return true; - } else { - return true; - } - } - - - //apply, in sequence, the strong,soft and database conditions - //$methodName: insert,update - //$id: the id of the record. It is necessary for database conditions - public function checkConditions($methodName,$id = null) - { - if ($this->applyValidateConditions($methodName,'strong')) - { - if ($this->applyValidateConditions($methodName,'soft')) - { - if ($this->applyDatabaseConditions($methodName,$id)) - { - return true; - } - } - } - return false; - } - - //method that calls the function indicated in $this->submitNames. Ex: if $_POST['delAction'] is found, then the "del" method is called. - public function updateTable($methodsList = '',$id = null) { - - $allowedMethodsArray = explode(',',$methodsList); - $resultArray = array(); - $this->identifierValue = null; - if (isset($id)) - { - $this->identifierValue = (int)$id; - } - else if (isset($_POST[$this->identifierName])) - { - $this->identifierValue = (int)$_POST[$this->identifierName]; - } - foreach ($this->submitNames as $methodName => $submitName) - { - if (array_key_exists($submitName,$_POST)) - { - $this->submitName = $submitName; - if (method_exists($this,$methodName)) - { - //if the method is allowed - if (in_array($methodName,$allowedMethodsArray)) - { - if ($this->checkConditions($methodName,$this->identifierValue)) - { - $this->notice = null; - call_user_func_array(array($this,$methodName),array($this->identifierValue)); - } - } - } - else - { - throw new Exception('method '.$methodName.' not defined in class '.__CLASS__.'; error in method '.__METHOD__.''); - } - return; //only one cycle! - } - } - } - - //method to build the array of popup objects - public function popupBuild() - { - foreach ($this->_popupItemNames as $field => $itemName) - { -// if (array_key_exists($field,$this->_where)) -// { - $fieldClean = str_replace('n!',null,$field); - $itemNameClean = str_replace('n!',null,$itemName); - $fieldClean = $this->dropStartChar($fieldClean,'-'); - $itemNameClean = $this->dropStartChar($itemNameClean,'-'); - - //fields that have to be extracted - $queryFields = ($fieldClean === $itemNameClean) ? $fieldClean : $fieldClean.','.$itemNameClean; - - $table = $this->getTableName($field); - $this->popupArray[$field] = new Popup(); - - $popupWhereClause = array_key_exists($field,$this->_popupWhere) ? $this->_popupWhere[$field] : null; - - $result = $this->db->select($table,$queryFields,$popupWhereClause,$fieldClean); - - if ($result and $result !== false) - { - //get the label of the popup menu - $label = array_key_exists($field,$this->_popupLabels) ? $this->_popupLabels[$field] : $table.' : '.$itemNameClean; - $this->popupArray[$field]->name = $label; - - //get the table name - $fieldTable = isset($result[0][$table][$fieldClean]) ? $table : Params::$aggregateKey; - $itemNameTable = isset($result[0][$table][$itemNameClean]) ? $table : Params::$aggregateKey; - - foreach ($result as $row) - { - $this->popupArray[$field]->itemsValue[] = $row[$fieldTable][$fieldClean]; - - if (array_key_exists($field,$this->_popupFunctions)) - { - if (!function_exists($this->_popupFunctions[$field])) - { - throw new Exception('Error in '.__METHOD__.': function '.$this->_popupFunctions[$field]. ' does not exist'); - } - - $tempName = call_user_func($this->_popupFunctions[$field],$row[$itemNameTable][$itemNameClean]); - } - else - { - $tempName = $row[$itemNameTable][$itemNameClean]; - } - - $this->popupArray[$field]->itemsName[] = $tempName; - } - } -// } - } - } - - - //get the element before and after the current one - //$key: the key of the self::$where array that indicates the field to be used in order to find out the records before and after - //$fields: the fields that have to be extracted - public function getNeighbours($key,$fields = '') - { - //backup of the values - $tempWhere = $this->where; - $tempLimit = $this->limit; - $tempOrderBy = $this->orderBy; - $this->limit = 1; - //before - $this->where[$key] = '<'.$tempWhere[$key]; - $this->orderBy = $this->getTableName($key).'.'.$key.' DESC'; - $dataAfter = $this->getFields($fields); - //after - $this->where[$key] = '>'.$tempWhere[$key]; - $this->orderBy = $this->getTableName($key).'.'.$key; - $dataBefore = $this->getFields($fields); - //restore the previous values - $this->where = $tempWhere; - $this->limit = $tempLimit; - $this->orderBy = $tempOrderBy; - $result[0] = isset($dataBefore[0]) ? $dataBefore[0] : null; - $result[1] = isset($dataAfter[0]) ? $dataAfter[0] : null; - return $result; - } - - //set the $select property and return the current object - public function select($fields = null) - { - $this->select = $fields; - return $this; - } - - //set the $from property and return the current object - public function from($tables = null) - { - $this->from = isset($tables) ? $tables : $this->_tables; - return $this; - } - - //set the on property and return the current object - public function on($joinClause = '-') - { - $this->on[] = $joinClause; - $this->using[] = null; - return $this; - } - - //set the $using property and return the current object - public function using($using = null) - { - $this->using[] = $using; - $this->on[] = null; - return $this; - } - - //set the $join property and return the current object - public function left($string = null) - { - $this->join[] = "l:$string"; - return $this; - } - - //set the $join property and return the current object - public function right($string = null) - { - $this->join[] = "r:$string"; - return $this; - } - - //set the $join property and return the current object - public function inner($string = null) - { - $this->join[] = "i:$string"; - return $this; - } - - //set the $where property and return the current object - public function where($where = array()) - { - $this->where = $where; - return $this; - } - - //append the $where array to the ::where property and return the current object - public function aWhere($where = array()) - { - $this->appendWhereQueryClause($where); - return $this; - } - - //set the $groupBy property and return the current object - public function groupBy($groupBy = null) - { - $this->groupBy = $groupBy; - return $this; - } - - //set the $orderBy property and return the current object - public function orderBy($orderBy = null) - { - $this->orderBy = $orderBy; - return $this; - } - - //set the $limit property and return the current object - public function limit($limit = null) - { - $this->limit = $limit; - return $this; - } - - //set the $listArray property - public function toList($key, $value = null) - { - $this->listArray = array($key,$value); - $this->toList = true; - return $this; - } - - //reset all the clauses of the select query - public function clear() - { - $this->select = null; - $this->where = array(); - $this->groupBy = null; - $this->orderBy = null; - $this->limit = null; - $this->from = null; - $this->on = array(); - $this->using = array(); - $this->join = array(); - $this->toList = false; - return $this; - } - - //initialize and populate the ::form property (reference to a Form_Form object) - public function setForm($defAction = null, $defSubmit = array(), $defMethod = 'POST', $defEnctype = null) - { - if (isset($this->formStruct)) - { - $action = array_key_exists('action',$this->formStruct) ? $this->formStruct['action'] : $defAction; - $submit = array_key_exists('submit',$this->formStruct) ? $this->formStruct['submit'] : $defSubmit; - $entries = array_key_exists('entries',$this->formStruct) ? $this->formStruct['entries'] : null; - $method = array_key_exists('post',$this->formStruct) ? $this->formStruct['post'] : $defMethod; - $enctype = array_key_exists('enctype',$this->formStruct) ? $this->formStruct['enctype'] : $defEnctype; - - $this->form = new Form_Form($action,$submit,$method,$enctype); - - if (isset($entries)) - { - $this->form->setEntries($entries); - } - - $copy = $this->form->entry; - - foreach ($copy as $name => $entry) - { - if (strcmp($entry->type,'Select') === 0 and isset($entry->options)) - { - if (!is_array($entry->options)) - { - if (strstr($entry->options,'foreign::')) - { - $elements = explode('::',$entry->options); - - for ($i = 0; $i < count($elements); $i++) - { - if (strcmp($elements[$i],'--') === 0) $elements[$i] = null; - } - //send the query - array_shift($elements); - $resultSet = call_user_func_array(array($this->db,'select'),$elements); - - $single = true; - - if (strstr($elements[1],',')) - { - $args = explode(',',$elements[1]); - //add the table name - $args[0] = $elements[0].'.'.$args[0]; - $args[1] = $elements[0].'.'.$args[1]; - //associative array - $single = false; - } - else - { - $args[0] = $elements[0].'.'.$elements[1]; - $args[1] = null; - } - - $list = $this->getList($resultSet,$args[0],$args[1]); - - $this->form->entry[$name]->options = ($single) ? implode(',',array_values($list)) : $list; - } - } - } - } - - } - else - { - $this->form = new Form_Form($defAction,$defSubmit,$defMethod,$defEnctype); - } - } - - //get a list from a result set - //$resultSet: the result set coming from a select query - public function getList($resultSet, $key, $value = null) - { - $list = array(); - - if (strstr($key,'.')) - { - $arr = explode('.',$key); - $keyTable = $arr[0]; - $keyField = $arr[1]; - } - else - { - $keyTable = $this->_tablesArray[0]; - $keyField = $key; - } - - if (!isset($value)) - { - foreach ($resultSet as $row) - { - $list[] = $row[$keyTable][$keyField]; - } - } - else - { - if (strstr($value,'.')) - { - $arr = explode('.',$value); - $valueTable = $arr[0]; - $valueField = $arr[1]; - } - else - { - $valueTable = $this->_tablesArray[0]; - $valueField = $value; - } - - foreach ($resultSet as $row) - { - $list[$row[$keyTable][$keyField]] = $row[$valueTable][$valueField]; - } - - } - return $list; - } - - // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT). - public function lastId() - { - return $this->db->lastId(); - } - - //send a free query - public function query($query) - { - return $this->db->query($query); - } - - //the text of the error message from previous MySQL operation - public function getError() - { - return $this->db->getError(); - } - - //the numerical value of the error message from previous MySQL operation - public function getErrno() - { - return $this->db->getErrno(); - } - - //define the abstract method to get the value of the record $id of the main table - abstract public function selectId($id); - - //define the abstract method to get the fields from the tables - abstract public function getFields(); - -} \ No newline at end of file diff --git a/h-source/Library/Model/Base.php b/h-source/Library/Model/Base.php deleted file mode 100755 index 4162a56..0000000 --- a/h-source/Library/Model/Base.php +++ /dev/null @@ -1,1273 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -abstract class Model_Base -{ - - public $fields = ''; //the fields that have to be manipulated by the update and insert query - public $values = array(); //the values that corresponding to the $this->fields fields - public $form = null; //reference to a Form_Form object - public $formStruct = null; //the form structure - - public $submitName = null; //the current submitName (from the form) - public $identifierName = 'identifier'; - - public $notice = null; //a string explaining the result of the query applied (or not if an error occured): executed, error, etc - public $result = true; //the result of validate conditions, database conditions and query. It can be 'true' or 'false' - public $queryResult = false; //the result of the query - - //conditions that have to be satisfied before applying the query - //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions' - public $strongConditions = array(); - - //conditions that have to be satisfied before applying the query - //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions' - //do not return error if a value is equal to '' or null - public $softConditions = array(); - - //conditions that have to be satisfied before applying the query - //check that the new values inserted satisfy some conditions - //Ex: 'update'=>'checkUniqueCompl:titolo,autore;checkUnique:titolo','insert'=>'checkUnique:titolo' - public $databaseConditions = array(); - - public $popupArray = array(); //array of popup objects (see popup.php) - - public $supplInsertValues = array(); //associative array defining supplementary values to be inserted on each insert query. It has to have the following form: array(field1 => value1,field2 => value2, ...) - - public $supplUpdateValues = array(); //associative array defining supplementary values to be inserted on each update query. It has to have the following form: array(field1 => value1,field2 => value2, ...) - - public $select = null; //fields that have to be selected in select queries - public $where = array(); //associative array containing all the where clauses ($field => $value) - //group by, order by and limit clauses - public $groupBy = null; - public $orderBy = null; - public $limit = null; - - public $from = null; //from clause of the select queries - public $on = array(); //on array - public $using = array(); //using array - public $join = array(); //join array - - public $toList = false; //if the result have to be given in a list format - public $listArray = array(); //array containing the $key and the $value to be used to extract a list from a resultSet - - //logic operator between statements in the where clause of select queries - public $logicalOperators = array('AND'); - - public $files = null; //reference to the Files_Upload class - - protected $_tables='itemTable,boxTable,item_boxTable'; - protected $_idFields='id_item,id_box'; - protected $_tablesArray=array(); - protected $_idFieldsArray=array(); - protected $_where = array(); - - //the name of the field that has to be used to order the rows of the main table of the model - protected $_idOrder = null; - - protected $_onDelete = 'check'; //can be 'nocheck' or 'check'. check: referential integrity check. nocheck: no referential integrity check - protected $_reference = null; //array containing the child table that have a reference to this table and the foreign key of the child table-> array($childTable,$foreignKey) - - protected $_popupItemNames = array(); //the fields to be used as names in the popupArray elements. Associative array ($itemNameField1 => $itemNameValue1, ...) - - //the labels of the pop-up menus - protected $_popupLabels = array(); - - //functions that have to be applied upon the label fields of the popup menu - protected $_popupFunctions = array(); - - protected $_popupWhere = array(); //where clause for the pupup menu - - protected $_resultString; //reference to the class containing all the result strings of the db queries - protected $_dbCondString; //reference to the class containing all the result strings of the database conditions - - protected $_backupFields = ''; //field saved after the delFields method has been applied - protected $_backupValues = array(); //values saved after the delFields method has been applied - protected $_allowedDbMethods = array('update','insert','del','moveup','movedown'); //methods that can be called by the updateTable method - - protected $submitNames = array( - 'update' => 'updateAction', - 'insert' => 'insertAction', - 'del' =>'delAction', - 'moveup' =>'moveupAction', - 'movedown' =>'movedownAction' - ); - - protected $identifierValue = null; //the value of the identifier ($_POST[$this->identifier]) - protected $arrayExt; //arrayExt object (see library/arrayExt.php) - - protected $_arrayStrongCheck; //Array_Validate_Strong object - protected $_arraySoftCheck; //Array_Validate_Soft object - - public $db; //reference to the database layer class - protected $_lang = null; //language of notices - - - public function __construct() { - $this->_tablesArray = explode(',',$this->_tables); - $this->_idFieldsArray = explode(',',$this->_idFields); - $this->_where[$this->_idFieldsArray[0]] = $this->_tablesArray[0]; - $this->arrayExt = new ArrayExt(); - - //initialize the validate objects - $this->_arrayStrongCheck = new Array_Validate_Strong($this->_lang); - $this->_arraySoftCheck = new Array_Validate_Soft($this->_lang); - - $this->identifierName = $this->_idFieldsArray[0]; - - //set the language of notices - $this->_lang = Params::$language; - - //create the $_resultString object (result strings of the db queries) - $modelStringClass = 'Lang_'.$this->_lang.'_ModelStrings'; - if (!class_exists($modelStringClass)) - { - $modelStringClass = 'Lang_En_ModelStrings'; - } - $this->_resultString = new $modelStringClass(); - - //create the $_dbCondString object (result strings of the database conditions) - $dbCondStringClass = 'Lang_'.$this->_lang.'_DbCondStrings'; - if (!class_exists($dbCondStringClass)) - { - $dbCondStringClass = 'Lang_En_DbCondStrings'; - } - $this->_dbCondString = new $dbCondStringClass(); - - //instantiate the database class - $this->db = Factory_Db::getInstance(DATABASE_TYPE); - - //instantiate the Files_Upload class - $params = array( - 'filesPermission' => 0777, - 'language' => $this->_lang, - 'allowedExtensions' => 'png,jpg,jpeg,gif', - 'maxFileSize' => 20000000, - 'fileUploadKey' => 'userfile' - ); - - $this->files = new Files_Upload(ROOT."/media/",$params); - } - - //sanitize all the $values property - public function sanitize() - { - $keys = implode(',',array_keys($this->values)); - $this->values = $this->arrayExt->subset($this->values,$keys,'sanitizeDb'); - } - - //change a resulting string from a db query - public function setString($key,$value) - { - $this->_resultString->string[$key] = $value; - } - - //set the submitNames property (array) - //$methodName : the method name, $submitName: the submit name of the submit action of the form - public function setSubmitNames($methodName,$submitName) - { - if (!in_array($methodName,$this->_allowedDbMethods)) - { - throw new Exception('query type "'.$methodName. '" not allowed in '. __METHOD__); - } - $this->submitNames[$methodName] = $submitName; - } - - //get the last query executed - public function getQuery() - { - return $this->db->query; - } - - //get the where clause of the select query - public function getWhereQueryClause() - { - return $this->where; - } - - //set the where clause of the select query - //whereArray = array ($table_field => $value) - public function setWhereQueryClause($whereArray) - { - $this->where = $whereArray; - } - - //append the whereArray clause to $this_->whereClause - //whereArray = array ($table_field => $value) - public function appendWhereQueryClause($whereArray) - { - $this->where = array_merge($this->where,$whereArray); - } - - //drop the char $char from the beginning of the string $string - public function dropStartChar($string,$char) - { - while(strcmp($string[0],$char) === 0) - { - $string = substr($string,1); - } - return $string; - } - - //get the table name from $this->_where. If the table is not present then return $this->_tablesArray[0] - public function getTableName($field) - { - return isset($this->_where[$field]) ? $this->_where[$field] : $this->_tablesArray[0]; - } - - //method to create the where clause of the select query from the $this->where array - //$level: level of the ricorsion - //$whereClauseLevel: array containing the field=>value statements of the where clause. If $whereClause = null than $this->where is considered - public function createWhereClause($level = 0, $whereClauseLevel = null, $operator = null) - { - $whereClause = null; - $whereClauseArray = array(); - - $whereClause = isset($whereClauseLevel) ? $whereClauseLevel : $this->where; - - foreach ($whereClause as $field => $value) - { - if (is_array($value)) - { - if (strstr($field,"OR")) - { - $op = " OR "; - } - else if (strstr($field,"AND")) - { - $op = " AND "; - } - else - { - $op = null; - } - $newValue = $this->createWhereClause($level+1, $value, $op); - if (isset($newValue)) $whereClauseArray[] = $newValue; - } - else - { - $flag = 0; //equal where clause - if (isset($field)) - { - //drop the 'n:' and '-' chars from $field - $fieldClean = str_replace('n!',null,$field); - $fieldClean = $this->dropStartChar($fieldClean,'-'); - if (strcmp($value,Params::$nullQueryValue) !== 0 or (Params::$nullQueryValue === false)) - { - foreach (params::$whereClauseSymbolArray as $symbol) - { - if (strstr($value,$symbol)) - { - //check if write or not the table name - $tableName = strstr($field,'n!') ? null : $this->getTableName($field).'.'; - $whereClauseArray[] = $tableName.$fieldClean.' '.$value; - $flag = 1; //not equal where clause - break; - } - } - if ($flag === 0) - { - $value = '"'.$value.'"'; - //check if write or not the table name - $tableName = strstr($field,'n!') ? null : $this->getTableName($field).'.'; - $whereClauseArray[] = $tableName.$fieldClean.'='.$value; - } - } - } - } - } - //get the logic operator at the current level - if (isset($operator)) - { - $logicOper = $operator; - } - else - { - $logicOper = isset($this->logicalOperators[$level]) ? ' '.$this->logicalOperators[$level].' ' : ' AND '; - } - $whereClause = !empty($whereClauseArray) ? implode($logicOper,$whereClauseArray) : null; - $whereClause = (isset($whereClause) and $level>0) ? '('.$whereClause.')' : $whereClause; - return $whereClause; - } - - - //get the submitName having its key (the method name) - public function getSubmitName($key) - { - if (!array_key_exists($key,$this->submitNames)) - { - return 'generalAction'; -// throw new Exception('query type "'.$key. '" not allowed in '.__METHOD__); - } - return $this->submitNames[$key]; - - } - - - //return the values, taken from the $_POST array, to be inserted inside the forms - //$queryType: insert or update - //$func: sanitize function to apply upon each value - //$id: if $queryType='update' that the values are taken from the record (of the main table of this model) having the primary key equal to $id - //$defaultValues = associative array of the form: array($entry=>$defaultValue) - //$functionsIfFromDb = associative array of the form: array($entry=>$function_to_be_applied) - public function getFormValues($queryType = 'insert', $func = 'sanitizeHtml',$id = null,$defaultValues = array(),$functionsIfFromDb = array()) - { - @session_start(); - if (is_array($func)) - { - $funcPost = $func[0]; - $funcDb = $func[1]; - } - else - { - $funcPost = $func; - $funcDb = 'none'; - } - - $arrayType = array('update','insert'); - $values = array(); - $idName = $this->identifierName; - if (in_array($queryType,$arrayType)) - { - $ident = null; - if (isset($id)) - { - $ident = (int)$id; - } - else if (isset($_POST[$idName])) - { - $ident = (int)$_POST[$idName]; - } - if ($this->result) - { - if ($queryType === 'update') - { - if (isset($ident)) - { - $recordArray = $this->selectId($ident); - - $fieldsArray = explode(',',$this->fields); - - $values = $this->arrayExt->subset($recordArray,$this->fields,$funcDb); - -// foreach ($fieldsArray as $field) -// { -// $values[$field] = array_key_exists($field,$recordArray) ? $recordArray[$field] : ''; -// } - - $values[$idName] = $ident; - - //apply the functions upon entries - foreach ($functionsIfFromDb as $entry => $funcUponEntry) - { - if (array_key_exists($entry,$values)) - { - if (!function_exists($funcUponEntry)) { - throw new Exception('Error in '.__METHOD__.': function '.$funcUponEntry. ' does not exist'); - } - - $values[$entry] = call_user_func($funcUponEntry,$values[$entry]); - } - } - - //set values of $_SESSION array - foreach ($values as $k => $v) - { - if (isset($this->formStruct['entries'][$k]['type'])) - { - if ($this->formStruct['entries'][$k]['type'] === 'File') - { - $_SESSION['form_'.$k] = $v; - } - } - } - } - } - else if ($queryType === 'insert') - { - - $tempArray = is_array($defaultValues) ? $defaultValues : array(); - - $values = $this->arrayExt->subset($tempArray,$this->fields,$funcPost); - - } - } - else - { - $values = $this->arrayExt->subset($_POST,$this->fields,$funcPost); - - if ($queryType === 'update') - { - $values[$idName] = $ident; - - //take values from $_SESSION array - $tempFieldArray = explode(',',$this->fields); - - for ($i = 0; $i < count($tempFieldArray); $i++) - { - if (isset($this->formStruct['entries'][$tempFieldArray[$i]]['type'])) - { - if ($this->formStruct['entries'][$tempFieldArray[$i]]['type'] === 'File') - { - if (isset($_SESSION['form_'.$tempFieldArray[$i]])) - { - $values[$tempFieldArray[$i]] = $_SESSION['form_'.$tempFieldArray[$i]]; - } - } - } - } - } - } - } - return $values; - } - - - //method to set the properties $this->fields and $this->values - public function setFields($fields,$func = 'sanitizeAll') - { - $this->values = $this->arrayExt->subset($_POST,$fields,$func); - $this->fields = $this->extractFields($fields); - - //set the backup variables - $this->_backupFields = $this->fields; - $this->_backupValues = $this->values; - } - - - //clear the fields list - public function clearFields() - { - $this->_backupFields = $this->fields; - $this->_backupValues = $this->values; - $this->fields = ''; - $this->values = array(); - } - - //del the fields written in the $list argument. The $list argument has to be of the type: field1,field2,... - public function delFields($list) - { - $this->_backupFields = $this->fields; - $this->_backupValues = $this->values; - $this->values = $this->arrayExt->subsetComplementary($this->values,$list); -// $this->fields = implode(',',array_keys($this->values)); - } - - //restore the fields and values saved in $_backupFields and $_backupValues - public function restoreFields() - { - $this->fields = $this->_backupFields; - $this->values = $this->_backupValues; - } - - //method to clean the $fields string deleting the colons (and the word after the colon) - public function extractFields($fields) { - $fieldsArray = explode(',',$fields); - $resultString = array(); - foreach ($fieldsArray as $field) { - if (strstr($field,':')) { - $temp = explode(':',$field); - $resultString[] = $temp[0]; - } else { - $resultString[] = $field; - } - } - return implode(',',$resultString); - } - - //add the supplementary value on insert and update queries - //$queryType: insert or update - public function setSupplValues($queryType) - { - if ($queryType === 'insert') - { - $supplValues = $this->supplInsertValues; - } - else if ($queryType === 'update') - { - $supplValues = $this->supplUpdateValues; - } - - $baseFields = implode(',',array_keys($this->values)); - - $supplFields = implode(',',array_keys($supplValues)); - $supplFields = (strcmp($supplFields,'') === 0) ? $supplFields : ',' . $supplFields; - - $fields = $baseFields . $supplFields; - $values = array_merge(array_values($this->values),array_values($supplValues)); - - return array($fields,$values); - } - - - //method to call the update query (overriding of the base_db del method) - //update the record with the primary key equal to $id (default) - //if $whereClause is set then use $whereClause as where clause of the update query - public function update($id = null, $whereClause = null) - { - if (!is_array($this->supplUpdateValues)) - { - throw new Exception('error in ' . __METHOD__ . ': the supplUpdateValues property has to be an array.'); - } - $el = $this->setSupplValues('update'); - $this->queryResult = false; - - if (isset($whereClause)) - { - $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$whereClause); - $this->setNotice($result); - return $result; - } - else - { - if (isset($id)) - { - $where = $this->_idFieldsArray[0].'='.(int)($id); - $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$where); - $this->setNotice($result); - return $result; - } - else - { - $this->notice = $this->_resultString->getString('no-id'); - $this->result = false; - $this->identifierValue = null; - return false; - } - } - } - - //method to call the insert query (overriding of the base_db del method) - public function insert() { - - $this->queryResult = false; - if (!is_array($this->supplInsertValues)) { - throw new Exception('error in ' . __METHOD__ . ': the supplInsertValues property has to be an array.'); - } - - if (isset($this->_idOrder)) - { - $maxValue = $this->db->getMax($this->_tablesArray[0],$this->_idOrder); - $this->supplInsertValues[$this->_idOrder] = (int)$maxValue + 1; - } - - $el = $this->setSupplValues('insert'); - - $result = $this->db->insert($this->_tablesArray[0],$el[0],$el[1]); - $this->setNotice($result); - return $result; - } - - //method to call the delete query (overriding of the base_db del method) - public function del($id = null, $whereClause = null) { - - $this->queryResult = false; - - if (isset($whereClause)) - { - $result = $this->db->del($this->_tablesArray[0],$whereClause); - $this->setNotice($result); - return $result; - } - else - { - if (isset($id)) { - $where = $this->_idFieldsArray[0].'='.(int)$id; - $result = $this->db->del($this->_tablesArray[0],$where); - $this->setNotice($result); - return $result; - } else { - $this->notice = $this->_resultString->getString('no-id'); - $this->result = false; - $this->identifierValue = null; - return false; - } - } - } - - //move to the top the record having $this->_idOrder = $id - //where clause - public function moveup($id) - { - return $this->move($id,'up'); - } - - //move to the top the record having $this->_idOrder = $id - //where clause - public function movedown($id) - { - return $this->move($id,'down'); - } - - //move the record having $this->_tablesArray[0] = $id - //$par: 'up' or 'down' - //where clause - public function move($id,$par = 'up') - { - $this->queryResult = false; - if (isset($id)) - { - $increm = ($par === 'up') ? 1 : -1; - - $backupLimit = $this->limit; - $this->limit = null; - - $data = $this->getFields($this->_tablesArray[0].'.'.$this->_idFieldsArray[0].','.$this->_tablesArray[0].'.'.$this->_idOrder); - - for($i = 0; $i < count($data); $i++) - { - if (strcmp($data[$i][$this->_tablesArray[0]][$this->_idFieldsArray[0]],$id) === 0) - { - if (($par === 'up' and $i !== 0) or ($par === 'down' and $i !== (count($data)-1))) - { - $prevOrder = $data[$i-$increm][$this->_tablesArray[0]][$this->_idOrder]; - $prevId = $data[$i-$increm][$this->_tablesArray[0]][$this->_idFieldsArray[0]]; - $currentOrder = $data[$i][$this->_tablesArray[0]][$this->_idOrder]; - $currentId = $data[$i][$this->_tablesArray[0]][$this->_idFieldsArray[0]]; - - //exchange the id_order of the two record - $res1 = $this->db->update($this->_tablesArray[0],$this->_idOrder,array($prevOrder),$this->_idFieldsArray[0]."='$currentId'"); - $res2 = $this->db->update($this->_tablesArray[0],$this->_idOrder,array($currentOrder),$this->_idFieldsArray[0]."='$prevId'"); - $result = ($res1 and $res2); - $this->setNotice($result); - return $result; - } - } - } - - $this->limit = $backupLimit; - } - else - { - $this->notice = $this->_resultString->getString('no-id'); - $this->result = false; - $this->identifierValue = null; - return false; - } - return false; - } - - public function setNotice($result) { - if ($result) { - $this->notice = $this->_resultString->getString('executed'); - $this->result = true; - $this->queryResult = true; - } else { - $this->notice = $this->_resultString->getString('error'); - $this->result = false; - $this->queryResult = false; - } - } - - //method used to verify that the value of a field is not duplicated - //$fieldsList: list of fields to check. Ex: field1,field2,... - //$where: the where clause - public function checkUnique($fieldsList,$where = null) - { - $errorString = null; - $numb = 0; - $fieldsArray = explode(',',$fieldsList); - $queryFieldsArray = explode(',',$this->fields); - foreach ($fieldsArray as $field) - { - if (in_array($field,$queryFieldsArray)) - { - if ($this->db->recordExists($this->_tablesArray[0],$field,$this->values[$field],$where)) - { - $errorString .= $this->_dbCondString->getNotUniqueString($field); - $numb++; - } - } - } - $this->notice = $errorString; - return $numb === 0 ? true : false; - } - - //like checkUnique: check all the records of the table apart from the record that has to be modified - public function checkUniqueCompl($fieldsList,$id = null) - { - if (isset($id)) - { - $where = $this->_idFieldsArray[0].'!='.(int)($id); - return $this->checkUnique($fieldsList,$where); - } else { - $this->notice = $this->_resultString->getString('no-id'); - return false; - } - } - - //method to apply the database conditions listed in the $this->databaseConditions associative array - //$queryType: indicates what set of validate conditions has to be considered (it's the key of the associative array) - public function applyDatabaseConditions($queryType,$id = null) - { - if (array_key_exists($queryType,$this->databaseConditions)) - { - if (!is_array($this->databaseConditions[$queryType])) - { - throw new Exception('error in method '.__METHOD__.' : databaseConditions['.$queryType.'] has to be an associative array'); - } - - foreach ($this->databaseConditions[$queryType] as $key => $values) - { - - //personalized error string - $altErrorString = null; - - //delete all the '+' chars - $key = $this->dropStartChar($key,'+'); - - if (strcmp($values,'all') === 0 or strstr($values,'all|')) - { - if (strstr($values,'all|')) - { - $values = str_replace('all|',$this->fields.'|',$values); - } - else - { - $values = $this->fields; - } - } - - if (strstr($values,'|')) - { - $temp = explode('|',$values); - $altErrorString = "
              ".$temp[1]."
              \n"; - $values = $temp[0]; - } - - $allowedMethod = array('checkUnique','checkUniqueCompl'); - if (!in_array($key,$allowedMethod)) - { - throw new Exception('error in method '.__METHOD__.' : method "'.$key. '" not allowed in the property named databaseConditions'); - } - if (!call_user_func_array(array($this,$key),array($values,$id))) - { - if (isset($altErrorString)) $this->notice = $altErrorString; - $this->result = false; - $this->queryResult = false; - return false; - } - } - return true; - } else { - return true; - } - } - - - //method to apply the validate conditions listed in the $this->strongConditions associative array - //$queryType: indicates what set of validate conditions has to be considered (it's the key of the associative array) - //$strength: 'strong' or 'soft' - public function applyValidateConditions($queryType,$strength = 'strong') - { - if ($strength === 'strong') - { - $validateObj = $this->_arrayStrongCheck; - $conditions = $this->strongConditions; - $errString = 'strongConditions'; - } - else - { - $validateObj = $this->_arraySoftCheck; - $conditions = $this->softConditions; - $errString = 'softConditions'; - - if (Params::$nullQueryValue !== false) - { - $conditions['insert']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all'; - $conditions['update']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all'; - } - } - - if (array_key_exists($queryType,$conditions)) - { - if (!is_array($conditions[$queryType])) - { - throw new Exception('error in method '.__METHOD__.' : '.$errString.'['.$queryType.'] has to be an associative array'); - } - - foreach ($conditions[$queryType] as $key => $values) - { - - //personalized error string - $altErrorString = null; - - //delete all the '+' chars - $key = $this->dropStartChar($key,'+'); - - if (strcmp($values,'all') === 0 or strstr($values,'all|')) - { - if (strstr($values,'all|')) - { - $values = str_replace('all|',$this->fields.'|',$values); - } - else - { - $values = $this->fields; - } - } - - if (strstr($values,'|')) - { - $temp = explode('|',$values); - $altErrorString = "
              ".$temp[1]."
              \n"; - $values = $temp[0]; - } - - $baseArgs = array($_POST,$values); - - if (strstr($key,'|')) - { - $funcArray = explode('|',$key); - $funcName = $funcArray[0]; - array_shift($funcArray); - $funcArgs = array_merge($baseArgs,$funcArray); - } - else - { - $funcName = $key; - $funcArgs = $baseArgs; - } - - if (!method_exists($validateObj,$funcName) or $funcName === 'checkGeneric') - { - throw new Exception('error in method '.__METHOD__.' :method "'.$funcName. '" not allowed in '.$errString); - } - if (!call_user_func_array(array($validateObj,$funcName),$funcArgs)) - { - $this->notice .= (isset($altErrorString)) ? $altErrorString : $validateObj->errorString; - $this->result = false; - $this->queryResult = false; - return false; - } - } - return true; - } else { - return true; - } - } - - - //apply, in sequence, the strong,soft and database conditions - //$methodName: insert,update - //$id: the id of the record. It is necessary for database conditions - public function checkConditions($methodName,$id = null) - { - if ($this->applyValidateConditions($methodName,'strong')) - { - if ($this->applyValidateConditions($methodName,'soft')) - { - if ($this->applyDatabaseConditions($methodName,$id)) - { - return true; - } - } - } - return false; - } - - //method that calls the function indicated in $this->submitNames. Ex: if $_POST['delAction'] is found, then the "del" method is called. - public function updateTable($methodsList = '',$id = null) { - - $allowedMethodsArray = explode(',',$methodsList); - $resultArray = array(); - $this->identifierValue = null; - if (isset($id)) - { - $this->identifierValue = (int)$id; - } - else if (isset($_POST[$this->identifierName])) - { - $this->identifierValue = (int)$_POST[$this->identifierName]; - } - foreach ($this->submitNames as $methodName => $submitName) - { - if (array_key_exists($submitName,$_POST)) - { - $this->submitName = $submitName; - if (method_exists($this,$methodName)) - { - //if the method is allowed - if (in_array($methodName,$allowedMethodsArray)) - { - if ($this->checkConditions($methodName,$this->identifierValue)) - { - $this->notice = null; - call_user_func_array(array($this,$methodName),array($this->identifierValue)); - } - } - } - else - { - throw new Exception('method '.$methodName.' not defined in class '.__CLASS__.'; error in method '.__METHOD__.''); - } - return; //only one cycle! - } - } - } - - //method to build the array of popup objects - public function popupBuild() - { - foreach ($this->_popupItemNames as $field => $itemName) - { -// if (array_key_exists($field,$this->_where)) -// { - $fieldClean = str_replace('n!',null,$field); - $itemNameClean = str_replace('n!',null,$itemName); - $fieldClean = $this->dropStartChar($fieldClean,'-'); - $itemNameClean = $this->dropStartChar($itemNameClean,'-'); - - //fields that have to be extracted - $queryFields = ($fieldClean === $itemNameClean) ? $fieldClean : $fieldClean.','.$itemNameClean; - - $table = $this->getTableName($field); - $this->popupArray[$field] = new Popup(); - - $popupWhereClause = array_key_exists($field,$this->_popupWhere) ? $this->_popupWhere[$field] : null; - - $result = $this->db->select($table,$queryFields,$popupWhereClause,$fieldClean); - - if ($result and $result !== false) - { - //get the label of the popup menu - $label = array_key_exists($field,$this->_popupLabels) ? $this->_popupLabels[$field] : $table.' : '.$itemNameClean; - $this->popupArray[$field]->name = $label; - - //get the table name - $fieldTable = isset($result[0][$table][$fieldClean]) ? $table : Params::$aggregateKey; - $itemNameTable = isset($result[0][$table][$itemNameClean]) ? $table : Params::$aggregateKey; - - foreach ($result as $row) - { - $this->popupArray[$field]->itemsValue[] = $row[$fieldTable][$fieldClean]; - - if (array_key_exists($field,$this->_popupFunctions)) - { - if (!function_exists($this->_popupFunctions[$field])) - { - throw new Exception('Error in '.__METHOD__.': function '.$this->_popupFunctions[$field]. ' does not exist'); - } - - $tempName = call_user_func($this->_popupFunctions[$field],$row[$itemNameTable][$itemNameClean]); - } - else - { - $tempName = $row[$itemNameTable][$itemNameClean]; - } - - $this->popupArray[$field]->itemsName[] = $tempName; - } - } -// } - } - } - - - //get the element before and after the current one - //$key: the key of the self::$where array that indicates the field to be used in order to find out the records before and after - //$fields: the fields that have to be extracted - public function getNeighbours($key,$fields = '') - { - //backup of the values - $tempWhere = $this->where; - $tempLimit = $this->limit; - $tempOrderBy = $this->orderBy; - $this->limit = 1; - //before - $this->where[$key] = '<'.$tempWhere[$key]; - $this->orderBy = $this->getTableName($key).'.'.$key.' DESC'; - $dataAfter = $this->getFields($fields); - //after - $this->where[$key] = '>'.$tempWhere[$key]; - $this->orderBy = $this->getTableName($key).'.'.$key; - $dataBefore = $this->getFields($fields); - //restore the previous values - $this->where = $tempWhere; - $this->limit = $tempLimit; - $this->orderBy = $tempOrderBy; - $result[0] = isset($dataBefore[0]) ? $dataBefore[0] : null; - $result[1] = isset($dataAfter[0]) ? $dataAfter[0] : null; - return $result; - } - - //set the $select property and return the current object - public function select($fields = null) - { - $this->select = $fields; - return $this; - } - - //set the $from property and return the current object - public function from($tables = null) - { - $this->from = isset($tables) ? $tables : $this->_tables; - return $this; - } - - //set the on property and return the current object - public function on($joinClause = '-') - { - $this->on[] = $joinClause; - $this->using[] = null; - return $this; - } - - //set the $using property and return the current object - public function using($using = null) - { - $this->using[] = $using; - $this->on[] = null; - return $this; - } - - //set the $join property and return the current object - public function left($string = null) - { - $this->join[] = "l:$string"; - return $this; - } - - //set the $join property and return the current object - public function right($string = null) - { - $this->join[] = "r:$string"; - return $this; - } - - //set the $join property and return the current object - public function inner($string = null) - { - $this->join[] = "i:$string"; - return $this; - } - - //set the $where property and return the current object - public function where($where = array()) - { - $this->where = $where; - return $this; - } - - //append the $where array to the ::where property and return the current object - public function aWhere($where = array()) - { - $this->appendWhereQueryClause($where); - return $this; - } - - //set the $groupBy property and return the current object - public function groupBy($groupBy = null) - { - $this->groupBy = $groupBy; - return $this; - } - - //set the $orderBy property and return the current object - public function orderBy($orderBy = null) - { - $this->orderBy = $orderBy; - return $this; - } - - //set the $limit property and return the current object - public function limit($limit = null) - { - $this->limit = $limit; - return $this; - } - - //set the $listArray property - public function toList($key, $value = null) - { - $this->listArray = array($key,$value); - $this->toList = true; - return $this; - } - - //reset all the clauses of the select query - public function clear() - { - $this->select = null; - $this->where = array(); - $this->groupBy = null; - $this->orderBy = null; - $this->limit = null; - $this->from = null; - $this->on = array(); - $this->using = array(); - $this->join = array(); - $this->toList = false; - return $this; - } - - //initialize and populate the ::form property (reference to a Form_Form object) - public function setForm($defAction = null, $defSubmit = array(), $defMethod = 'POST', $defEnctype = null) - { - if (isset($this->formStruct)) - { - $action = array_key_exists('action',$this->formStruct) ? $this->formStruct['action'] : $defAction; - $submit = array_key_exists('submit',$this->formStruct) ? $this->formStruct['submit'] : $defSubmit; - $entries = array_key_exists('entries',$this->formStruct) ? $this->formStruct['entries'] : null; - $method = array_key_exists('post',$this->formStruct) ? $this->formStruct['post'] : $defMethod; - $enctype = array_key_exists('enctype',$this->formStruct) ? $this->formStruct['enctype'] : $defEnctype; - - $this->form = new Form_Form($action,$submit,$method,$enctype); - - if (isset($entries)) - { - $this->form->setEntries($entries); - } - - $copy = $this->form->entry; - - foreach ($copy as $name => $entry) - { - if (strcmp($entry->type,'Select') === 0 and isset($entry->options)) - { - if (!is_array($entry->options)) - { - if (strstr($entry->options,'foreign::')) - { - $elements = explode('::',$entry->options); - - for ($i = 0; $i < count($elements); $i++) - { - if (strcmp($elements[$i],'--') === 0) $elements[$i] = null; - } - //send the query - array_shift($elements); - $resultSet = call_user_func_array(array($this->db,'select'),$elements); - - $single = true; - - if (strstr($elements[1],',')) - { - $args = explode(',',$elements[1]); - //add the table name - $args[0] = $elements[0].'.'.$args[0]; - $args[1] = $elements[0].'.'.$args[1]; - //associative array - $single = false; - } - else - { - $args[0] = $elements[0].'.'.$elements[1]; - $args[1] = null; - } - - $list = $this->getList($resultSet,$args[0],$args[1]); - - $this->form->entry[$name]->options = ($single) ? implode(',',array_values($list)) : $list; - } - } - } - } - - } - else - { - $this->form = new Form_Form($defAction,$defSubmit,$defMethod,$defEnctype); - } - } - - //get a list from a result set - //$resultSet: the result set coming from a select query - public function getList($resultSet, $key, $value = null) - { - $list = array(); - - if (strstr($key,'.')) - { - $arr = explode('.',$key); - $keyTable = $arr[0]; - $keyField = $arr[1]; - } - else - { - $keyTable = $this->_tablesArray[0]; - $keyField = $key; - } - - if (!isset($value)) - { - foreach ($resultSet as $row) - { - $list[] = $row[$keyTable][$keyField]; - } - } - else - { - if (strstr($value,'.')) - { - $arr = explode('.',$value); - $valueTable = $arr[0]; - $valueField = $arr[1]; - } - else - { - $valueTable = $this->_tablesArray[0]; - $valueField = $value; - } - - foreach ($resultSet as $row) - { - $list[$row[$keyTable][$keyField]] = $row[$valueTable][$valueField]; - } - - } - return $list; - } - - // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT). - public function lastId() - { - return $this->db->lastId(); - } - - //send a free query - public function query($query) - { - return $this->db->query($query); - } - - //the text of the error message from previous MySQL operation - public function getError() - { - return $this->db->getError(); - } - - //the numerical value of the error message from previous MySQL operation - public function getErrno() - { - return $this->db->getErrno(); - } - - //define the abstract method to get the value of the record $id of the main table - abstract public function selectId($id); - - //define the abstract method to get the fields from the tables - abstract public function getFields(); - -} \ No newline at end of file diff --git a/h-source/Library/Model/Map.php b/h-source/Library/Model/Map.php deleted file mode 100755 index 7a093e1..0000000 --- a/h-source/Library/Model/Map.php +++ /dev/null @@ -1,453 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Model_Map extends Model_Base { - -// //many to many model - - public $printAssError = 'yes'; //'yes': print association error if the association/dissociation is already present. 'no': doen't print association error - public $boxIdentifierName = 'boxIdentifier';//key of the value of the $_POST array that represent the id of the Box that we want to associate with the Item having the id $_POST[$this->identifierName] - protected $_boxIdentifierValue = null; //the id of the box that has to be associated with the item - - public function __construct() - { - //add some submit names (method => form_submit_value) - $this->submitNames['associate'] = 'associateAction'; - $this->submitNames['dissociate'] = 'dissociateAction'; - //add the allowed methods - $this->_allowedDbMethods[] = 'associate'; - $this->_allowedDbMethods[] = 'dissociate'; - parent::__construct(); - } - - public function createMapWhere($choice) - { //create the where join clause - //$choice=(first,last,all) - $first = $this->_tablesArray[0].'.'.$this->_idFieldsArray[0].'='.$this->_tablesArray[2].'.'.$this->_idFieldsArray[0]; - $last = $this->_tablesArray[1].'.'.$this->_idFieldsArray[1].'='.$this->_tablesArray[2].'.'.$this->_idFieldsArray[1]; - switch ($choice) { - case 'first': - return $first; - break; - case 'last': - return $last; - break; - case 'all': - return $first. ' and '.$last; - break; - } - } - - //check if a join query is necessary or not - //$val: 0 or 1 (items or boxes) - //$whereClauseLevel: array containing the field=>value statements of the where clause. If $whereClause = null than $this->where is considered - public function checkIfJoinNeeded($val, $whereClauseLevel = null) - { - $whereClause = isset($whereClauseLevel) ? $whereClauseLevel : $this->where; - - foreach ($whereClause as $field => $value) - { - if (is_array($value)) - { - if ($this->checkIfJoinNeeded($val, $value) === true) return true; - } - else - { - if (strcmp($this->getTableName($field),$this->_tablesArray[$val]) !== 0) - { - if (strcmp($value,Params::$nullQueryValue) !== 0 or (Params::$nullQueryValue === false)) return true; - } - } - } - //return false if no where clause has been defined - return false; - } - - //method to create the where clause and the list of tables of the select query - public function mapQueryElements($val) - { -// $val = $element === 'Items' ? 0 : 1; - $tables = $this->_tablesArray[$val]; - $where = null; - $fields = $this->_tablesArray[$val].'.*'; - - if ($this->checkIfJoinNeeded($val)) - { - $tables = $this->_tables; - $fields = $this->_tablesArray[$val].'.*'; - $wherePlus = $this->createWhereClause(); - $wherePlus = isset($wherePlus) ? ' AND ' . $wherePlus : null; - $where = $this->createMapWhere('all') . $wherePlus; - } - else - { - $where = $this->createWhereClause(); - } - - return array('tables' => $tables,'where' => $where,'fields' => $fields); - } - - //$element: Items or Boxes. - //get all Item or Boxes - public function getAll($element = 'Items') - { - return $this->getFields('',$element); - } - - //method to get the values of the selected fields - //$fields: the fields that have to be excracted from the tableName - public function getFields($fields = '',$element = 'Items') - { - //get all Item or Boxes - if ((strcmp($element,'Items') !== 0) and (strcmp($element,'Boxes') !== 0)) - { - throw new Exception('"'.$element. '" argument not allowed in '.__METHOD__.' method'); - } - $val = $element === 'Items' ? 0 : 1; - - $elements = $this->mapQueryElements($val); - - $queryFields = (strcmp($fields,'') === 0) ? $elements['fields'] : $fields; - - return $row = $this->db->select($elements['tables'],$queryFields,$elements['where'],$this->groupBy,$this->orderBy,$this->limit); - - } - - public function send($element = 'Items') - { - $table = $this->getFields($this->select, $element); - - if ($this->toList) - { - $key = $this->listArray[0]; - $value = isset($this->listArray[1]) ? $this->listArray[1] : null; - $this->toList = false; - return $this->getList($table, $key, $value); - } - else - { - return $table; - } - } - - //the fields that have to be extracted from the table - public function getTable($fields = null) - { - return isset($fields) ? $this->getFields($fields) : $this->getAll(); - } - - //select the values of a specified record - //$id: the id (primary key) of the record - //$fields: the comma separated list of fields that have to be extracted - public function selectId($id,$fields = null) - { - $id = (int)$id; - - $tempWhere = $this->where; - $this->setWhereQueryClause(array($this->_idFieldsArray[0] => $id)); - - if (isset($fields)) - { - $values = $this->getFields($fields,'Items'); - } - else - { - $values = $this->getAll('Items'); - } - - $this->where = $tempWhere; - - return (count($values) > 0) ? $values[0][$this->_tablesArray[0]] : array(); - } - - //get the number of records (items or boxes) - public function recordNumber($element) - { - $val = $element === 'Items' ? 0 : 1; - - $elements = $this->mapQueryElements($val); - return $this->db->get_num_rows($elements['tables'],$elements['where'],$this->groupBy); - } - - //get the number of records (only items) - public function rowNumber() - { - return $this->recordNumber('Items'); - } - - public function getMax($field) - { - $elements = $this->mapQueryElements(0); - return $this->db->getMax($elements['tables'],$field,$elements['where'],$this->groupBy); - } - - public function getMin($field) - { - $elements = $this->mapQueryElements(0); - return $this->db->getMin($elements['tables'],$field,$elements['where'],$this->groupBy); - } - - public function getSum($field) - { - $elements = $this->mapQueryElements(0); - return $this->db->getSum($elements['tables'],$field,$elements['where'],$this->groupBy); - } - - public function getAvg($field) - { - $elements = $this->mapQueryElements(0); - return $this->db->getAvg($elements['tables'],$field,$elements['where'],$this->groupBy); - } - - //check if the table has the field $field equal to $value - public function has($field,$value) - { - $elements = $this->mapQueryElements(0); - return $this->db->recordExists($elements['tables'],$field,$value,$elements['where'],$this->groupBy); - } - - //associate an item with a box - //$idItem : name of the field of the Items table, $idGroup : name of the field of the Boxes table - public function associate($idItem = null,$idGroup = null) - { - $this->queryResult = false; - if (isset($idItem) and isset($idGroup)) - { - $idItem = (int)$idItem; - $idGroup = (int)$idGroup; - $values = array($idItem,$idGroup); //values relative to the fields $this->_idFields - $var = $this->checkAssociation($idItem,$idGroup); - if (!$var) - { - $result = $this->db->insert($this->_tablesArray[2],$this->_idFields,$values); - $this->setNotice($result); - return $result; - } - else - { - if (strcmp($this->printAssError,'yes') === 0) $this->notice = $this->_resultString->getString('linked'); - $this->result = false; - } - } - else - { - $this->notice = $this->_resultString->getString('no-id'); - $this->result = false; - } - return false; - } - - //associate an item with a box - //$idItem : name of the field of the Items table, $idGroup : name of the field of the Boxes table - public function dissociate($idItem = null,$idGroup = null) - { - $this->queryResult = false; - if (isset($idItem) and isset($idGroup)) - { - $idItem = (int)$idItem; - $idGroup = (int)$idGroup; - $var = $this->checkAssociation($idItem,$idGroup); - if ($var) - { - $result = $this->db->del($this->_tablesArray[2],$this->_idFieldsArray[0].'='.$idItem.' and '.$this->_idFieldsArray[1].'='.$idGroup); - $this->setNotice($result); - return $result; - } - else - { - if (strcmp($this->printAssError,'yes') === 0) $this->notice = $this->_resultString->getString('not-linked'); - $this->result = false; - } - } - else - { - $this->notice = $this->_resultString->getString('no-id'); - $this->result = false; - } - return false; - } - - public function checkAssociation($idItem,$idGroup) - { - $idItem = (int)$idItem; - $idGroup = (int)$idGroup; - $numRow = $this->db->get_num_rows($this->_tablesArray[2],$this->_idFieldsArray[0].'='.$idItem.' and '.$this->_idFieldsArray[1].'='.$idGroup); - if ($numRow === 1) - { - return true; - } - else - { - return false; - } - } - - //check what items are associate to a box - //itemsArray:array of items to check - public function checkAssociationDeep($itemsArray) - { - $associatedItems = array(); - $itemsArray = is_array($itemsArray) ? array_values($itemsArray) : array($itemsArray); - foreach ($itemsArray as $item) { - if ($this->db->recordExists($this->_tablesArray[2],$this->_idFieldsArray[0],$item)) - { - $associatedItems[] = $item; - } - } - return $associatedItems; - } - - //method to call the delete query (overriding of the del method of Model.php) - //check the referential integrity - public function del($id = null, $whereClause = null) - { - $this->queryResult = false; - - if (isset($whereClause)) - { - return parent::del(null,$whereClause); - } - else - { - if ($this->_onDelete === 'check') - { - if ($this->db->recordExists($this->_tablesArray[2],$this->_idFieldsArray[0],(int)$id)) - { - $this->notice = $this->_resultString->getString('associate'); - $this->identifierValue = null; - $this->result = false; - } - else - { - return parent::del((int)$id); - } - } - else if ($this->_onDelete === 'nocheck') - { - return parent::del((int)$id); - } - } - return false; - } - - //override of the updateTable method of the parent class - //method that calls the function indicated in $this->submitNames. Ex: if $_POST['delAction'] is found, then the "del" method is called. - public function updateTable($methodsList = '',$id = null) - { - $allowedMethodsArray = explode(',',$methodsList); - $resultArray = array(); - $this->identifierValue = null; - if (isset($id)) - { - $this->identifierValue = (int)$id; - } - else if (isset($_POST[$this->identifierName])) - { - $this->identifierValue = (int)$_POST[$this->identifierName]; - } - foreach ($this->submitNames as $methodName => $submitName) { - if (array_key_exists($submitName,$_POST)) - { - $this->submitName = $submitName; - if (method_exists($this,$methodName)) - { - if (in_array($methodName,$allowedMethodsArray)) - { - if ($this->checkConditions($methodName,$this->identifierValue)) - { - $this->notice = null; - $methodArray = array('associate','dissociate'); - if (in_array($methodName,$methodArray)) - { - $this->_boxIdentifierValue = null; - if (isset($_POST[$this->boxIdentifierName])) - { - $this->_boxIdentifierValue = (int)$_POST[$this->boxIdentifierName]; - } - call_user_func_array(array($this,$methodName),array($this->identifierValue,$this->_boxIdentifierValue)); - } - else - { - call_user_func_array(array($this,$methodName),array($this->identifierValue)); - } - } - } - } - else - { - throw new Exception('method "'.$methodName. '" not defined in class '.__CLASS__.'; error in method '.__METHOD__); - } - return; //only one cycle! - } - } - } - - //method to obtain one columns from the tables $this->_tablesArray as an associative array - //$valueField: the column that have to be extracted (array_values of the resulting associative array), $keyField: the column that have to play the role of array_keys - //$valueField = field:table, $keyField = field:table - public function getFieldArray($valueField,$keyField = null, $groupBy = null, $orderBy = null, $limit = null) - { - - $keyField = isset($keyField) ? $keyField : $valueField; - $valueFieldArray = explode(':',$valueField); - $keyFieldArray = explode(':',$keyField); - - $keyFieldTable = $keyFieldArray[0]; - $valueFieldTable = $valueFieldArray[0]; - - $keyFieldName = $keyFieldArray[1]; - $valueFieldName = $valueFieldArray[1]; - - $fields = implode('.',$keyFieldArray) . ',' . implode('.',$valueFieldArray); - - $temp = $this->where; //save the $this->where array - $this->where = array(); - - $val = array_search($keyFieldTable,$this->_tablesArray); - - if (strcmp($keyFieldTable,$valueFieldTable) !== 0) - { - throw new Exception("the tables '$valueFieldTable' and '$keyFieldTable' do not match in ".__METHOD__); - } - - if ($val === false or !in_array($val,array(0,1))) - { - throw new Exception("the table '$keyFieldTable' is not allowed in ".__METHOD__); - } - - $elements = $this->mapQueryElements($val); - - $table = $this->db->select($elements['tables'],$fields,$elements['where'],$groupBy,$orderBy,$limit); - $this->where = $temp; - - $returnArray = array(); - foreach ($table as $record) { - $returnArray[$record[$keyFieldTable][$keyFieldName]] = $record[$valueFieldTable][$valueFieldName]; - } - - return $returnArray; - - } - -} \ No newline at end of file diff --git a/h-source/Library/Model/Tree.php b/h-source/Library/Model/Tree.php deleted file mode 100755 index f7f95ea..0000000 --- a/h-source/Library/Model/Tree.php +++ /dev/null @@ -1,307 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Model_Tree extends Model_Base { - - public function __construct() { - parent::__construct(); - } - - //method to create the first part of where clause - //$index: the index of $this->_tablesArray - public function createTreeWhere($index) { - if (!empty($this->on)) - { - return $this->on; - } - else - { - $whereArray = array(); - for ($i = $index; $i < (count($this->_tablesArray)-1); $i++) - { - $whereArray[] = $this->_tablesArray[$i].'.'.$this->_idFieldsArray[$i+1].'='.$this->_tablesArray[$i+1].'.'.$this->_idFieldsArray[$i+1]; - } - $whereString = !empty($whereArray) ? implode(' and ',$whereArray) : null; - return $whereString; - } - } - - //create the list of tables of the select query - //$index: the index of $this->_tablesArray - public function createTablesList($index) { - if (isset($this->from)) - { - return $this->from; - } - else - { - $tablesString = null; - for ($i = $index; $i < (count($this->_tablesArray)-1); $i++) - { - $tablesString .= $this->_tablesArray[$i] . ','; - } - $tablesString .= $this->_tablesArray[count($this->_tablesArray)-1]; - return $tablesString; - } - } - - //method to create the list of fields of the select query - public function createFieldsList($index) { - $fieldsString = null; - for ($i = $index; $i < (count($this->_tablesArray)-1); $i++) - { - $fieldsString .= $this->_tablesArray[$i] . '.*,'; - } - $fieldsString .= $this->_tablesArray[count($this->_tablesArray)-1].'.*'; - return $fieldsString; - } - - - //method to create the where clause and the list of tables and fields of the select query - //$tableName: the table name ($this->_tablesArray) - //$choice:all->all the tables in $this->_arrayTables, other value->only the table of $this->_arrayTables ad index $index - //return: $elements = array('tables'=>$tables,'where'=>$where,'fields'=>$fields) - public function treeQueryElements($tableName,$choice = 'all') - { - $index = array_search($tableName,$this->_tablesArray); - $subArray = ($choice === 'all') ? array_slice($this->_tablesArray,$index) : array($tableName); //this array is necessary to verify that the where clause makes sense - $tables = ($choice === 'all') ? $this->createTablesList($index) : $tableName; - $where = ($choice === 'all') ? $this->createTreeWhere($index) : null; - $fields = ($choice === 'all') ? $this->createFieldsList($index) : $tableName.'.*'; - - $wherePlus = $this->createWhereClause(); - - if (empty($this->on)) - { - $on = array(); - - if (isset($where) and isset($wherePlus)) - { - $where .= ' AND ' . $wherePlus; - } - else if (!isset($where) and isset($wherePlus)) - { - $where .= $wherePlus; - } - } - else - { - $on = $where; - $where = $wherePlus; - } - - return array('tables' => $tables,'where' => $where,'fields'=>$fields,'on'=>$on); - } - - - //method to obtain the values of the whole tree - //$choice:all->all the tables in $this->_arrayTables, other value->only the table of $this->_arrayTables ad index $index - public function getAll($choice = 'all') { - return $this->getFields('',$choice); - } - - //method to get the values of the selected fields - //it walks the tree by means of a join query - //$fields: the fields that have to be excracted from the tableName - public function getFields($fields = '',$choice = 'all') - { - $elements = $this->treeQueryElements($this->_tablesArray[0],$choice); - - $queryFields = (strcmp($fields,'') === 0) ? $elements['fields'] : $fields; - - return $row = $this->db->select($elements['tables'],$queryFields,$elements['where'],$this->groupBy,$this->orderBy,$this->limit,$elements['on'],$this->using,$this->join); - } - - public function send() - { - $table = $this->getFields($this->select); - - if ($this->toList) - { - $key = $this->listArray[0]; - $value = isset($this->listArray[1]) ? $this->listArray[1] : null; - $this->toList = false; - return $this->getList($table, $key, $value); - } - else - { - return $table; - } - } - - //call the getAll method with $tableName = $this->_tablesArray[0] - //the fields that have to be extracted from the table - public function getTable($fields = null) { - return isset($fields) ? $this->getFields($fields) : $this->getAll(); - } - - //select the values of a specified record - //$id: the id (primary key) of the record - //$fields: the comma separated list of fields that have to be extracted - public function selectId($id,$fields = null) { - $tempWhere = $this->where; - $this->setWhereQueryClause(array($this->_idFieldsArray[0] => (int)$id)); - - $this->using = null; - - if (isset($fields)) - { - $values = $this->getFields($fields,'other'); - } - else - { - $values = $this->getAll('other'); - } - - $this->where = $tempWhere; - - return (count($values) > 0) ? $values[0][$this->_tablesArray[0]] : array(); - - } - - //get the number of records () - //the number of records of the table $tableName is returned - public function rowNumber() { - $elements = $this->treeQueryElements($this->_tablesArray[0]); - return $this->db->get_num_rows($elements['tables'],$elements['where'],$this->groupBy,$elements['on'],$this->using,$this->join); - } - - public function getMax($field) - { - $elements = $this->treeQueryElements($this->_tablesArray[0]); - return $this->db->getMax($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using,$this->join); - } - - public function getMin($field) - { - $elements = $this->treeQueryElements($this->_tablesArray[0]); - return $this->db->getMin($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using,$this->join); - } - - public function getSum($field) - { - $elements = $this->treeQueryElements($this->_tablesArray[0]); - return $this->db->getSum($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using,$this->join); - } - - public function getAvg($field) - { - $elements = $this->treeQueryElements($this->_tablesArray[0]); - return $this->db->getAvg($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using,$this->join); - } - - //check if the table has the field $field equal to $value - public function has($field,$value) - { - $elements = $this->treeQueryElements($this->_tablesArray[0]); - return $this->db->recordExists($elements['tables'],$field,$value,$elements['where'],$this->groupBy,$elements['on'],$this->using,$this->join); - } - -// //get the number of records of the table $this->_tablesArray[0] -// public function rowNumber() { -// return $this->recordNumber($this->_tablesArray[0]); -// } - - //method to call the delete query (overriding of the del method of Model.php) - //check the referential integrity - public function del($id = null, $whereClause = null) - { - $this->queryResult = false; - - if (isset($whereClause)) - { - return parent::del(null,$whereClause); - } - else - { - if ($this->_onDelete === 'check' and isset($this->_reference)) - { - if (isset($this->_reference[0]) and isset($this->_reference[1])) - { - if ($this->db->recordExists($this->_reference[0],$this->_reference[1],(int)$id)) - { - $this->notice = $this->_resultString->getString('associate'); - $this->identifierValue = null; - $this->result = false; - } - else - { - return parent::del((int)$id); - } - } - else - { - throw new Exception('you have forgotten to set \'$this->_reference\' or you have forgotten to set $this->_onDelete = \'nocheck\''); - } - } - else - { - return parent::del((int)$id); - } - } - return false; - } - - //method to obtain one columns from the tables $this->_tablesArray as an associative array - //$valueField: the column that have to be extracted (array_values of the resulting associative array), $keyField: the column that have to play the role of array_keys - public function getFieldArray($valueField,$keyField = null, $groupBy = null, $orderBy = null, $limit = null) { - - $keyField = isset($keyField) ? $keyField : $valueField; - $valueFieldArray = explode(':',$valueField); - $keyFieldArray = explode(':',$keyField); - - $keyFieldTable = $keyFieldArray[0]; - $valueFieldTable = $valueFieldArray[0]; - - $keyFieldName = $keyFieldArray[1]; - $valueFieldName = $valueFieldArray[1]; - - $fields = implode('.',$keyFieldArray) . ',' . implode('.',$valueFieldArray); - - $temp = $this->where; //save the $this->where array - $this->where = array(); - - if (strcmp($keyFieldTable,$valueFieldTable) !== 0) { - throw new Exception("the tables '$valueFieldTable' and '$keyFieldTable' do not match in ".__METHOD__); - } - - if (!in_array($keyFieldTable,$this->_tablesArray)) { - throw new Exception("the table '$keyFieldTable' is not allowed in ".__METHOD__); - } - - $elements = $this->treeQueryElements($keyFieldTable,''); - - $table = $this->db->select($elements['tables'],$fields,$elements['where'],$groupBy,$orderBy,$limit,$elements['on'],$this->using); - $this->where = $temp; - - $returnArray = array(); - foreach ($table as $record) { - $returnArray[$record[$keyFieldTable][$keyFieldName]] = $record[$valueFieldTable][$valueFieldName]; - } - - return $returnArray; - - } - -} \ No newline at end of file diff --git a/h-source/Library/Model/index.html b/h-source/Library/Model/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Library/Model/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Library/Params.php b/h-source/Library/Params.php deleted file mode 100644 index e5f5ab7..0000000 --- a/h-source/Library/Params.php +++ /dev/null @@ -1,66 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class containing all the parameters necessary to EasyGiant to work properly -class Params -{ - - //allowed database type - public static $allowedDb = array('Mysql','Mysqli','None'); - - //allowed sanitize functions - public static $allowedSanitizeFunc = 'sanitizeAll,sanitizeDb,sanitizeHtml,forceInt,forceNat,none,md5,sha1'; - - //allowed hash functions - public static $allowedHashFunc = array('md5','sha1'); - - //conventional null value for the value of the field in the createWhereClause method of the Model class - public static $nullQueryValue = false; - - //use HTTPS for links or not - public static $useHttps = false; - - //class name of the div that contains the error strings - public static $errorStringClassName = 'alert'; - - //table name in the returning structure of the select queries in the case of an aggregate function. Ex count(*),sum(*) - public static $aggregateKey = 'aggregate'; - - //htmlentities function charset - //see http://php.net/manual/en/function.htmlentities.php for a complete list of the allowed values - public static $htmlentititiesCharset = DEFAULT_CHARSET; - - //list of symbols used in the statements of the where clause of the select queries - public static $whereClauseSymbolArray = array('<','>','!=','<=','>=','in(','not in(','like'); - - //is the mbstring extension enabled? - public static $mbStringLoaded = false; - - //subfolder of the View folder where to look for view files - public static $viewSubfolder = null; - - //global website language used by the models and by the helpers - public static $language = 'It'; - -} diff --git a/h-source/Library/Popup.php b/h-source/Library/Popup.php deleted file mode 100755 index 186e4b3..0000000 --- a/h-source/Library/Popup.php +++ /dev/null @@ -1,32 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to contain the values of the popup menù of the scaffold -class Popup { - - public $name; //the name of the popup - public $itemsName = array(); //array containing the names of the different items of the list (popup) - public $itemsValue = array(); //array containing the values of the different items of the list (popup) - -} diff --git a/h-source/Library/Request.php b/h-source/Library/Request.php deleted file mode 100644 index d99585d..0000000 --- a/h-source/Library/Request.php +++ /dev/null @@ -1,56 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//manage the associative arrays inside the request ($_GET,$_POST,$_COOKIE) -class Request -{ - - public function get($name, $default = null, $func = 'none') - { - if (!function_exists($func)) - { - throw new Exception('Error in '.__METHOD__.': function '.$func. ' does not exists'); - } - return isset($_GET[$name]) ? call_user_func($func,$_GET[$name]) : $default; - } - - public function post($name, $default = null, $func = 'none') - { - if (!function_exists($func)) - { - throw new Exception('Error in '.__METHOD__.': function '.$func. ' does not exists'); - } - return isset($_POST[$name]) ? call_user_func($func,$_POST[$name]) : $default; - } - - public function cookie($name, $default = null, $func = 'none') - { - if (!function_exists($func)) - { - throw new Exception('Error in '.__METHOD__.': function '.$func. ' does not exists'); - } - return isset($_COOKIE[$name]) ? call_user_func($func,$_COOKIE[$name]) : $default; - } - -} \ No newline at end of file diff --git a/h-source/Library/Scaffold.php b/h-source/Library/Scaffold.php deleted file mode 100755 index 7e43134..0000000 --- a/h-source/Library/Scaffold.php +++ /dev/null @@ -1,304 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -//class to manage the scaffold of the controller -class Scaffold -{ - - protected $_type = null; //the type of the scaffold. It can be 'main' or 'form' - protected $_queryType = null; //it can be insert or update - - protected $_primaryKey = null; //the primary key of the table - protected $_controller = null; //the name of the controller - - public $model = null; //the reference to the model associated with the controller - - public $viewArgs = array(); //the associative array representing the status args of the main action of the controller. - - public $params = array(); //associative array containing the parameters of the scaffold - public $html = array(); //associative array containing the HTML of the scaffold ('pageList'=>HTML,..) - - public $mainMenu = null; //the reference to the MenuHelper object - public $pageList = null; //the reference to the PageDivisionHelper object - public $itemList = null; //the reference to the ListHelper object - public $popupMenu = null; //the reference to the PopupHelper object - - public $form = null; //the reference to the form object - public $entries = null; //the entries of the form (string having entries separated by comma) - public $values = array(); //the values inserted in the form (taken from the table if $this->queryType === 'update' or if an error occured during the databse query, otherwise taken from the $_POST array) - - //the list of fields of the select query - public $fields = null; - - //instance of Lang_{language}_Generic - public $strings = null; - - public function __construct($type,$controller,$model,$viewArgs,$params = null) { - - $this->_type = $type; - $this->_controller = $controller; - $this->model = $model; - $this->viewArgs = $viewArgs; - - //get the generic language class - $this->strings = Factory_Strings::generic(Params::$language); - - $autoParams = array( - 'mainAction' => 'main', - 'modifyAction' => 'form/update', - 'associateAction' => 'associate', - 'panelController' => 'panel', - 'pageList' => true, - 'pageVariable' => 'page', - 'recordPerPage' => 10, - 'mainMenu' => 'panel,add', - 'formMenu' => 'panel,back', - 'postSubmitValue' => 'Save', - 'popup' => false, - 'popupType' => 'exclusive' - ); - - //set the $this->scaffold->params array - if (is_array($params)) { - foreach ($params as $key => $value) { - $autoParams[$key] = $value; - } - } - $this->params = $autoParams; - - } - - //ad some clauses to the select query - //whereArray = array ($table_field => $value) - public function appendWhereQueryClause($whereArray) - { - $this->model->appendWhereQueryClause($whereArray); - } - - //set clauses to the select query - //whereArray = array ($table_field => $value) - public function setWhereQueryClause($whereArray) - { - $this->model->setWhereQueryClause($whereArray); - } - - //initialize the main scaffold (ListHelper) - //$recordList: field of the table to show, $primaryKey: the key of the table - public function loadMain($recordList,$primaryKey,$theme = 'edit,del') - { - $this->_primaryKey = $primaryKey; - - if (strcmp($recordList,'') !== 0) - { - $recordListArray = explode(',',$recordList); - foreach ($recordListArray as $record) { - $this->itemList->addItem("simpleText",";$record;"); - } - } - - $themeArray = explode(',',$theme); - - if (strcmp($theme,'') !== 0) - { - foreach ($themeArray as $el) - { - switch ($el) - { - case 'moveup': - $this->itemList->addItem('moveupForm',$this->_controller.'/'.$this->params['mainAction'],";".$primaryKey.";"); - break; - case 'movedown': - $this->itemList->addItem('movedownForm',$this->_controller.'/'.$this->params['mainAction'],";".$primaryKey.";"); - break; - case 'link': - $this->itemList->addItem('associateForm',$this->_controller.'/'.$this->params['associateAction'],";".$primaryKey.";"); - break; - case 'edit': - $this->itemList->addItem('editForm',$this->_controller.'/'.$this->params['modifyAction'],";".$primaryKey.";"); - break; - case 'del': - $this->itemList->addItem('delForm',$this->_controller.'/'.$this->params['mainAction'],";".$primaryKey.";"); - break; - case 'ledit': - $this->itemList->addItem('ledit',$this->_controller.'/'.$this->params['mainAction'].'/;'.$primaryKey.';','Edit','Edit'); - break; - } - } - } - - } - - //initialize the form - //$queryType = insert/update - //$action: the action of the form (controller/action/queryString) - public function loadForm($queryType,$action,$method = 'POST',$enctype = null) - { - $this->queryType = $queryType; - $submitName = $this->model->getSubmitName($queryType); - $value = $this->params['postSubmitValue']; - $viewStatus = Url::createUrl(array_values($this->viewArgs)); - $this->model->setForm($action.$viewStatus,array($submitName => $value),$method,$enctype); - $this->form = $this->model->form; - } - - //function to obtain the values to use in the form - //$func = function to validate the values - //$id = the id of the record (used if $_POST[$this->m[$this->model]->identifierName] is not present) - public function getFormValues($func = 'sanitizeHtml',$id = null,$defaultValues = array(),$functionsIfFromDb = array()) - { - if ($this->_type === 'form') - { - $this->values = $this->model->getFormValues($this->queryType,$func,$id,$defaultValues,$functionsIfFromDb); - } - } - - //set the head of the table - //$columnsName: name of the columns. It has to be a comma-separated list of strings - public function setHead($columnsName) - { - $this->itemList->setHead($columnsName); - } - - //method to set the type of the entries of the form - //$entries: string containing the list of the entries where each entry is separated by comma: entry1,entry2,entry3 - //$entryType: associative array that describes the entries of the form. The key is the entry name while the value is the entry type (textarea,inputText,etc) - public function setFormEntries($entries = 'model',$entryType = array(),$optionsArray = array()) - { - if ($this->_type === 'form') - { - if ($entries === 'model') - { - $this->entries = $this->model->fields; - if ($this->queryType === 'update') - { - $this->entries .= ','. $this->model->identifierName; - } - } - else - { - $this->entries = null; - } - $entriesArray = explode(',',$this->entries); - if (isset($this->form)) - { - foreach ($entriesArray as $entry) - { - $type = isset($entryType[$entry]) ? $entryType[$entry] : 'InputText'; - $options = isset($optionsArray[$entry]) ? $optionsArray[$entry] : null; - $this->form->setEntry($entry,$type,$options); - } - if ($this->queryType === 'update') - { - $this->form->setEntry($this->model->identifierName,'Hidden'); - } - } - else - { - throw new Exception('form object has not been initialized. Call the scaffold->loadForm method before'); - } - } - } - - //add an item to the list of items - public function addItem($type, $action = '', $field = '', $name = '', $value = '', $title = '') { - if ($this->_type === 'main') { - $this->itemList->addItem($type, $action, $field, $name, $value, $title); - } - } - - //update the table - public function update($methodsList = '',$id = null) { - $this->model->updateTable($methodsList,$id); - } - - //method to create the HTML of the scaffold - //$values: the values to insert in the from entries - public function render($values = null,$subset = null) - { - - if ($this->_type === 'main') - { - - $recordNumber = $this->model->rowNumber(); - - if (isset($this->viewArgs[$this->params['pageVariable']])) - { - $page = $this->viewArgs[$this->params['pageVariable']]; - } - else - { - $this->params['pageList'] = false; - } - - $recordPerPage = $this->params['recordPerPage']; - - if ($this->params['pageList'] === true) - { - $this->model->limit = $this->pageList->getLimit($page,$recordNumber,$recordPerPage); - $this->html['pageList'] = $this->pageList->render((int)($page-2),5); - $position = array($page,$this->pageList->getNumbOfPages()); - } - else - { - $this->model->limit = null; - $this->html['pageList'] = null; - $position = array(1,1); - } - - $values = $this->model->getTable($this->fields); - - $primaryKey = $this->_primaryKey; - - //pass the variable position - $this->itemList->position = $position; - $this->html['main'] = $this->itemList->render($values); - - $this->html['menu'] = $this->mainMenu->render($this->params['mainMenu']); - - $popupHtml = null; - if ($this->params['popup'] === true) - { - $this->html['popup'] = $this->popupMenu->render(); - $popupHtml = "
              \n".$this->html['popup']."\n
              \n"; - } - - $this->html['all'] = "\n".$this->model->notice."\n $popupHtml \n
              \n".$this->html['main']."\n
              \n"."
              \n
              \n".$this->strings->gtext('pages').": ".$this->html['pageList']."
              \n
              \n\n"; - - } - else if ($this->_type === 'form') - { - - $subset = (!isset($subset)) ? $this->entries : $subset; - $values = (!isset($values)) ? $this->values : $values; - $this->html['menu'] = $this->mainMenu->render($this->params['formMenu']); - $this->html['main'] = $this->form->render($values,$subset); - $this->html['all'] = "\n".$this->model->notice."\n
              \n".$this->html['main']."
              \n"; - - } - - return $this->html['all']; - - } - -} \ No newline at end of file diff --git a/h-source/Library/Strings/Functions.php b/h-source/Library/Strings/Functions.php deleted file mode 100644 index 1ee17af..0000000 --- a/h-source/Library/Strings/Functions.php +++ /dev/null @@ -1,47 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - - -function eg_strlen($string) -{ - return Params::$mbStringLoaded === true ? mb_strlen($string,DEFAULT_CHARSET) : strlen($string); -} - - -function eg_strtoupper($string) -{ - return Params::$mbStringLoaded === true ? mb_strtoupper($string,DEFAULT_CHARSET) : strtoupper($string); -} - - -function eg_strtolower($string) -{ - return Params::$mbStringLoaded === true ? mb_strtolower($string,DEFAULT_CHARSET) : strtolower($string); -} - - -// function eg_substr($string, $start, $length) -// { -// return Params::$mbStringLoaded === true ? mb_strtolower($string,DEFAULT_CHARSET) : strtolower($string); -// } \ No newline at end of file diff --git a/h-source/Library/Theme.php b/h-source/Library/Theme.php deleted file mode 100755 index fe938ee..0000000 --- a/h-source/Library/Theme.php +++ /dev/null @@ -1,100 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Theme { - - protected $_data = array(); - protected $_viewFiles = array(); //view files to require - protected $_lastView = null; - - public $baseUrl = null; //the base url of the website: http://domainname - public $baseUrlSrc = null; //the base url of the website (http://domainname) in the case MOD_REWRITE_MODULE has been set to false - - public $viewArgs = array(); - public $viewStatus = ''; - public $controller = 'controller'; - public $action = ''; - public $currPage; //the URL of the current page - - function __construct($controller) { - - $this->controller = $controller; - $this->baseUrl = MOD_REWRITE_MODULE === true ? '': '/index.php'; - $this->baseUrlSrc = ''; - } - - - public function set($values) - { - $this->_data = $values; - } - - public function append($values) - { - $this->_data = array_merge($this->_data,$values); - } - - //clean the $this->viewFiles array - public function clean() { - $this->_viewFiles = array(); - $this->_lastView = null; - } - - public function load($fileName,$option = 'none') { - if ((strcmp($option,'last') !== 0) and (strcmp($option,'none') !== 0)) { - throw new Exception('"'.$option. '" argument not allowed in '.__METHOD__.' method'); - } - if ($option === 'last') { - $this->_lastView = $fileName; - } else { - $this->_viewFiles[] = $fileName; - } - } - - - public function render() { - extract($this->_data); - - //find the View subfolder where to look for view files - $subfolder = isset(Params::$viewSubfolder) ? Params::$viewSubfolder . DS : null; - - foreach ($this->_viewFiles as $file) { - if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $file . '.php')) { - include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $file . '.php'); - } else { - include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. $file . '.php'); - } - } - - if (isset($this->_lastView)) { - if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $this->_lastView . '.php')) { - include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. ucwords($this->controller) . DS . $this->_lastView . '.php'); - } else { - include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS .$subfolder. $this->_lastView . '.php'); - } - } - - } - -} diff --git a/h-source/Library/Url.php b/h-source/Library/Url.php deleted file mode 100755 index efb8e6e..0000000 --- a/h-source/Library/Url.php +++ /dev/null @@ -1,56 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Url { - - //get the url starting from the root folder - public static function getRoot($pathFromRootFolder = null) { - - $protocol = Params::$useHttps ? "https" : "http"; - - $url = MOD_REWRITE_MODULE === true ? "$protocol://" . DOMAIN_NAME . '/' . $pathFromRootFolder : "$protocol://" . DOMAIN_NAME . '/index.php/' . $pathFromRootFolder; - return $url; - } - - //create an url string (element1/element2/element4) from the values of the array $valuesArray considering only the elements indicated in the numeric string $numericString (in this case '1,2,4') - public static function createUrl($valuesArray,$numericString = null) { - $elementsArray = explode(',',$numericString); - $valuesArray = array_values($valuesArray); - $urlString = null; - for ($i = 0; $i < count($valuesArray); $i++) - { - if (isset($numericString)) { - if (isset($valuesArray[$i]) and in_array($i,$elementsArray)) { - $urlString .= "/".$valuesArray[$i]; - } - } else { - if (isset($valuesArray[$i])) { - $urlString .= "/".$valuesArray[$i]; - } - } - } - return $urlString; - } - -} diff --git a/h-source/Library/Users/CheckAdmin.php b/h-source/Library/Users/CheckAdmin.php deleted file mode 100755 index 54deb2a..0000000 --- a/h-source/Library/Users/CheckAdmin.php +++ /dev/null @@ -1,386 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Users_CheckAdmin { - - public $status = array(); - - protected $_sessionsTable; //table containing all the sessions - protected $_usersTable; //table containing all the users - protected $_groupsTable; //table containing all the groups - protected $_manyToManyTable; //table for many to many relationships - protected $_accessesTable; //table containing all the accesses to admin side - protected $uid = null; - protected $_token = null; //token used in order to defense against CSRF (cross sire request forgeries) - protected $_login; //login action - protected $_main; //main action - protected $_retype; //retype (the password) action - protected $_db; //reference to the database layer class - protected $_params = array(); //the parameters of the object - - public function __construct($params = null) { - $this->_params = $params; - - $this->_sessionsTable = $params['sessionsTable']; - $this->_usersTable = $params['usersTable']; - $this->_groupsTable = $params['groupsTable']; - $this->_manyToManyTable = $params['manyToManyTable']; - $this->_accessesTable = $params['accessesTable']; - $this->_login = Url::getRoot(null) . $params['users_controller'] . '/' . $params['users_login_action'] ; - $this->_main = Url::getRoot(null) . $params['panel_controller'] . '/' . $params['panel_main_action'] ; - $this->_retype = Url::getRoot(null) . $params['users_controller'] . '/' . $params['hijacking_action'] ; - $this->_db = Factory_Db::getInstance($params['database_type']); - } - - private function acquireCookie() { #obtain cookie - #cookie - $this->uid = NULL; - global $_COOKIE; - $this->uid = isset($_COOKIE[$this->_params['cookie_name']]) ? sanitizeAlnum($_COOKIE[$this->_params['cookie_name']]) : null; - } - - private function cleanSessions() - { - #cancello le sessioni scadute - $row = $this->_db->select($this->_sessionsTable,'creation_date',"uid='".$this->uid."'"); - if ($row) - { - if ($row[0][$this->_sessionsTable]['creation_date']) - { - if($row[0][$this->_sessionsTable]['creation_date'] + $this->_params['session_expire'] <= time()) - { - setcookie($this->_params['cookie_name'],'',time()-3600,$this->_params['cookie_path']); - } - } - } - $this->_db->del($this->_sessionsTable,"creation_date + " . $this->_params['session_expire'] . " <= ".time()); - } - - public function checkStatus() - { #controlla se l'utente è già loggato - $this->acquireCookie(); #ottengo il cookie - $this->cleanSessions(); #elimino le sessioni vecchie - $row=$this->_db->select($this->_usersTable.','.$this->_sessionsTable,$this->_usersTable.'.id_user,username,token,user_agent',$this->_usersTable.".id_user=".$this->_sessionsTable.".id_user and uid='".$this->uid."'"); - if (count($row) === 1 and $row !== false) - { - $this->status['user']=$row[0][$this->_usersTable]['username']; - $this->status['status']='logged'; - $this->status['id_user']=$row[0][$this->_usersTable]['id_user']; - $this->status['user_agent'] = $row[0][$this->_sessionsTable]['user_agent']; - $this->status['token'] = $row[0][$this->_sessionsTable]['token']; - $this->obtainGroups(); - } else { - $this->status['user']='sconosciuto'; - $this->status['status']='not-logged'; - $this->status['id_user']=''; - $this->status['user_agent']=''; - $this->status['token'] = ''; - $this->status['groups'] = array(); - } - } - - public function redirect($val,$time = 3) { #fa il redirect dell'utente - if ($val === 'logged') { - header('Refresh: '.$time.';url='.$this->_main); - if ($time !== 0) echo "You are already logged, ".$this->status['user'].".."; - } else if ($val === 'accepted') { - header('Refresh: '.$time.';url='.$this->_main); - if ($time !== 0) echo "Hi ".$this->status['user'].".."; - } else if ($val === 'login-error') { - header('Refresh: '.$time.';url='.$this->_login); - if ($time !== 0) echo "Wrong username or password..."; - } else if ($val === 'not-logged') { - header('Refresh: '.$time.';url='.$this->_login); - if ($time !== 0) echo "Limited access... sorry"; - } else if ($val === 'not-authorized') { - header('Refresh: '.$time.';url='.$this->_main); - if ($time !== 0) echo "Your account doesn't allow you to manage this page.. sorry!"; - } else if ($val === 'stolen') { - header('Refresh: '.$time.';url='.$this->_login); - if ($time !== 0) echo "Your session have been probably intercepted! Please login another time."; - } else if ($val === 'retype') { - header('Refresh: '.$time.';url='.$this->_retype); - if ($time !== 0) echo "Your session have been probably intercepted. Please type your password another time."; - } else if ($val === 'wait') { - header('Refresh: '.$time.';url='.$this->_login); - if ($time !== 0) echo "You have to wait ".$this->_params['time_after_failure']." seconds before you can try to login another time"; - } - exit; - } - - //obtain the group of the user - private function obtainGroups() - { - $tables = $this->_usersTable.','.$this->_groupsTable.','.$this->_manyToManyTable; - $fields = $this->_groupsTable.'.name'; - $where = $this->_usersTable.'.id_user='.$this->_manyToManyTable.'.id_user and '.$this->_groupsTable.'.id_group='.$this->_manyToManyTable.'.id_group and '.$this->_usersTable.'.id_user='.$this->status['id_user']; - $groups = $this->_db->select($tables,$fields,$where); - $this->status['groups'] = array(); - foreach ($groups as $group) - { - $this->status['groups'][] = $group[$this->_groupsTable]['name']; - } - } - - //$groups: string with name of groups separated by comma; ex: base,root,users - public function checkAccess($groups) - { - $groupsArray = explode (',',$groups); - foreach ($this->status['groups'] as $group) - { - if (in_array($group,$groupsArray)) return true; - } - return false; - } - - //check that the user is logged and, if present, check the group of the user (if loggeg) - //$groups: comma-separated list of groups whose users can access the page - //$time: time before the redirect is carried out - public function check($groups = null, $time = 3) - { - $this->checkStatus(); - if (strcmp($this->status['status'],'not-logged') === 0) - { - $this->redirect('not-logged',$time); - } - else if (strcmp($this->status['status'],'logged') === 0) - { - if ($this->_params['hijacking_check']) - { - if (!$this->checkHijacking()) - { - if ($this->_params['on_hijacking_event'] === 'forceout') - { - $this->logout(); - $this->redirect('stolen',$time); - } - else if ($this->_params['on_hijacking_event'] === 'redirect') - { - $this->redirect('retype',$time); - } - } - } -// $this->obtainGroups(); - if (isset($groups)) - { - $permission = $this->checkAccess($groups); - if (!$permission) $this->redirect('not-authorized',$time); - } - } - } - - //check if someone have stolen your uid - private function checkHijacking() - { - if (array_key_exists('user_agent',$this->status)) - { - if (strcmp($this->status['user_agent'],'') !== 0) - { - if (strcmp($this->status['user_agent'],getUserAgent()) === 0) - { - return true; - } - } - } - return false; - } - - //check CSRF - //$token: token to check - public function checkCSRF($token) - { - if (strcmp($this->status['token'],'') !== 0) - { - if (strcmp($this->status['token'],$token) === 0) - { - return true; - } - } - return false; - } - - //get an array containing all the users currently logged - public function getUsersLogged() - { - $usersLogged = array(); - $data=$this->_db->select($this->_usersTable.','.$this->_sessionsTable,'DISTINCT '.$this->_usersTable.'.username',$this->_usersTable.".id_user=".$this->_sessionsTable.".id_user"); - foreach ($data as $row) - { - $usersLogged[] = $row[$this->_usersTable]['username']; - } - return $usersLogged; - } - - //get the password of the current user - public function getPassword() - { - $row=$this->_db->select($this->_usersTable,'password',"id_user=".$this->status['id_user']); - if ($row !== false) - { - return $row[0][$this->_usersTable]['password']; - } - else - { - return false; - } - } - - private function checkPassword($user,$pwd) { #check username and password - - if (!in_array($this->_params['password_hash'],Params::$allowedHashFunc)) - { - throw new Exception('Error in '.__METHOD__.' : the hash func has to be '.implode(' or ',Params::$allowedHashFunc)); - } - //calculate the hash of the password - $pwd = call_user_func($this->_params['password_hash'],$pwd); - - $row=$this->_db->select($this->_usersTable,$this->_usersTable.'.id_user,username,password',"username=\"".$user."\" and password=\"".$pwd."\" and has_confirmed=0"); - if (count($row) === 1 and $row !== false) - { - $this->status['user'] = $row[0][$this->_usersTable]['username']; - $this->status['status'] = 'accepted'; - $this->status['id_user'] = $row[0][$this->_usersTable]['id_user']; - } - else - { - $this->status['user'] = 'unknown'; - $this->status['status'] = 'login-error'; - $this->status['id_user'] = ''; - if ($this->_db->recordExists($this->_usersTable,'username',$user)) - { - $this->_db->update($this->_usersTable,'last_failure',array(time()),'username="'.$user.'"'); - } - } - } - - //check that enough time is passed since the last failure of the user - private function checkLastFailure($user) - { - //current time - $now = time(); - //max time - $max = $now - $this->_params['time_after_failure']; - $data = $this->_db->select($this->_usersTable,'last_failure','username="'.$user.'"'); - if (count($data) === 1 and $data !== false) - { - if ($data[0][$this->_usersTable]['last_failure'] < $max) - { - return true; - } - return false; - } - else - { - return true; - } - } - - public function login($user,$pwd) - { - $user = sanitizeAll($user); - $this->checkStatus(); - //check if already logged - if ($this->status['status'] === 'logged') - { -// $this->redirect('logged'); - return 'logged'; - } - else - { - if ($this->checkLastFailure($user)) - { - $this->checkPassword($user,$pwd); - if ($this->status['status']==='accepted') - { - $this->uid = md5(randString(10).uniqid(mt_rand(),true)); - $this->_token = md5(randString(12)); - $userAgent = getUserAgent(); - $this->_db->insert($this->_sessionsTable,'id_user,uid,token,creation_date,user_agent',array($this->status['id_user'],$this->uid,$this->_token,time(),$userAgent)); - setcookie($this->_params['cookie_name'],$this->uid,0,$this->_params['cookie_path']); #magic cookie - $this->updateAccesses(); - - $this->_db->del($this->_sessionsTable,'id_user='.$this->status['id_user'].' AND uid != "'.$this->uid.'"'); - -// $this->redirect('accepted'); - return 'accepted'; - } - else if ($this->status['status']==='login-error') - { -// $this->redirect('login-error'); - return 'login-error'; - } - } - else - { -// $this->redirect('wait'); - return 'wait'; - } - } -// $this->redirect('login-error'); - return 'login-error'; - } - - private function updateAccesses() - { - $ip=getIp(); #ip - $date=date('d'). "-" . date('m') . "-" . date('Y'); #date - $ora=date('H') . ":" . date('i'); #time - $values=array($ip,$date,$ora,$this->status['user']); - $res=$this->_db->insert($this->_accessesTable,'ip,data,ora,username',$values); - } - - //force out an user - //$id: the id of the user - public function forceOut($id) - { - $id = (int)$id; - if ($this->_db->del($this->_sessionsTable,'id_user='.$id)) - { - return true; - } - return false; - } - - public function logout() - { - $this->checkStatus(); - if ($this->status['status'] === 'logged') - { - setcookie ($this->_params['cookie_name'], "", time() - 3600,$this->_params['cookie_path']); - if ($this->_db->del($this->_sessionsTable,'id_user='.$this->status['id_user'])) - { - return 'was-logged'; - } - else - { - return 'error'; - } - } - else - { - return 'not-logged'; - } - } - -} \ No newline at end of file diff --git a/h-source/Library/Users/index.html b/h-source/Library/Users/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Library/Users/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Library/index.html b/h-source/Library/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Library/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/License.txt b/h-source/License.txt deleted file mode 100755 index 404896a..0000000 --- a/h-source/License.txt +++ /dev/null @@ -1,201 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - -Version 3, 29 June 2007 - -Copyright © 2007 Free Software Foundation, Inc. - -Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - -Preamble - -The GNU General Public License is a free, copyleft license for software and other kinds of works. - -The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. - -To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. - -For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. - -Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. - -For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. - -Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. - -Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. - -The precise terms and conditions for copying, distribution and modification follow. - -TERMS AND CONDITIONS - -0. Definitions. - -“This License” refers to version 3 of the GNU General Public License. -“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. -“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. -To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. -A “covered work” means either the unmodified Program or a work based on the Program. -To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. -To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. -An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. - -1. Source Code. - -The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. -A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. -The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. -The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. -The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. -The Corresponding Source for a work in source code form is that same work. - -2. Basic Permissions. - -All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. -You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. -Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. - -3. Protecting Users' Legal Rights From Anti-Circumvention Law. - -No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. -When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. - -4. Conveying Verbatim Copies. - -You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. -You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. - -5. Conveying Modified Source Versions. - -You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: -a) The work must carry prominent notices stating that you modified it, and giving a relevant date. -b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. -c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. -d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. -A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. - -6. Conveying Non-Source Forms. - -You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: -a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. -b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. -c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. -d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. -e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. -A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. -A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. -“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. -If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). -The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. -Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. - -7. Additional Terms. - -“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. -When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. -Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: -a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or -b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or -c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or -d) Limiting the use for publicity purposes of names of licensors or authors of the material; or -e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or -f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. -All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. -If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. -Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. - -8. Termination. - -You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). -However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. -Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. -Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. - -9. Acceptance Not Required for Having Copies. - -You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. - -10. Automatic Licensing of Downstream Recipients. - -Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. -An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. -You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. - -11. Patents. - -A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. -A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. -Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. -In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. -If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. -If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. -A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. -Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. - -12. No Surrender of Others' Freedom. - -If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. - -13. Use with the GNU Affero General Public License. - -Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. - -14. Revised Versions of this License. - -The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. -Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. -If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. -Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. - -15. Disclaimer of Warranty. - -THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -16. Limitation of Liability. - -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -17. Interpretation of Sections 15 and 16. - -If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. - -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. -If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. - -You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . - -The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . - - diff --git a/h-source/Logs/index.html b/h-source/Logs/index.html deleted file mode 100755 index 8d1c8b6..0000000 --- a/h-source/Logs/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Public/Css/comune.css b/h-source/Public/Css/comune.css deleted file mode 100644 index b6ecdd3..0000000 --- a/h-source/Public/Css/comune.css +++ /dev/null @@ -1,130 +0,0 @@ -/*parte di login.css*/ - -/*controller:users*/ -/*action:login*/ -.login_box { - margin:10px 10px 20px 10px; -} -.login_box input { - border:1px solid orange; -} - -/*action:logout*/ -.logout_box { - margin:10px 10px 20px 10px; -} - -.logout_button a{ - margin:20px; - padding:10px; - background:orange; - border:1px solid black; -/* width:30px; */ -} - - -/*parte di scaffold.css*/ - -td { - font-size: 12px; -} - -td.editForm, td.delForm, td.associateForm, td.moveupForm, td.movedownForm { - width:3%; -} - -td.editForm input, td.delForm input, td.associateForm input, td.moveupForm input, td.movedownForm input -{ - height:30px; -} - -/*alert string*/ -.alert { - font:bold 12px/1.5 Verdana,arial; - padding:5px; - margin:5px 5px 15px 5px; - background:TOMATO; - border-top:2px solid MAROON; - border-bottom:2px solid MAROON; - color:MAROON; -} - -/*executed operation string*/ -.executed { - font:bold 12px/1.5 Verdana,arial; - padding:5px; - margin:5px 5px 15px 5px; - background:#E0FFFF; - border-top:2px solid #ADD8E6; - border-bottom:2px solid #ADD8E6; - color:#4169E1; -} - -/*action:main*/ -tr.listRow { - background:#E6E6FA; -} - -tr.listHead { - font-weight: bold; - background:#d1deed; - border:1px solid #4169E1; - border-bottom:1px solid #4169E1; -} - -tr.listHead td { -/* font-weight: bold; */ -/* background:#d1deed; */ - border-top:1px solid #4169E1; - border-bottom:1px solid #4169E1; -} - -.recordsBox { - margin:10px 0px; -} - -.recordsBox table { - width:100%; -} - -.listItemForm { - margin:0px; -} - -a.linkItem { -/* background:red; */ - font:bold 12px/1 Verdana,arial; -} - -/*controller:panel -/*action:main*/ -.main_box { - padding:50px 20px; - width:700px; - height:250px; -} -.top_color { - text-align:center; - width:160px; - height:35px; - margin:0; - padding:0; -} -.bottom_color { - background:lavender; - text-align:center; - width:160px; - margin:0; - padding:5px 0; -} - - - -/*box che dice dove ti trovi, in che controller*/ -.controller_info_header -{ - background:#E6E6FA; - padding:5px; - font: bold 16px/1.75em sans-serif; - border-bottom:1px solid #4169E1; -} \ No newline at end of file diff --git a/h-source/Public/Css/explorer6.css b/h-source/Public/Css/explorer6.css deleted file mode 100755 index 29b6456..0000000 --- a/h-source/Public/Css/explorer6.css +++ /dev/null @@ -1,112 +0,0 @@ -ul#menuBlock li { - height:24px; -} - -ul#menuBlock li ul { - top:25px; - margin-left:3px; -} - -ul#menuBlock li ul li { - margin-top:-1px; -} - -.view_page_top_box -{ - height:32px; -} - -.update_submit_class -{ - padding:7px; -} - -.view_page_update_button -{ - width:35px; -} - -/*div that contains the update form*/ -.view_page_update_button -{ - margin-top:2px; - margin-right:5px; -} -.update_submit_class -{ - padding:2px; - width:45px; -} -.notebooks_insert_form -{ - margin-right:-30px; -} - -.notebook_insert_link -{ - margin:0px 0px 0px 5px; - padding-right:0px; - width:245px; -} -.view_page_history_button -{ - margin-left:10px; -} -.top_left_images_help -{ - height:22px; - margin-bottom:-3px; -} -ul#menuBlock li { - height:26px; -} -ul#menuBlock li ul { - left:-6px; -} -.user_logged -{ - margin-left:62px; -} -.viewall_popup_menu_status_item -{ - padding-left:2px; -/* background:red; */ -} -.copyright_notice_box -{ - width:140px; -} -.language_links_box ul -{ - width:100%; - margin:-1px 5px 30px 5px; -} -.language_links_box ul li -{ - margin-bottom:5px; -} -.language_links_box ul li a -{ - height:30px; -} -.talk_numb_ext -{ - margin-top:-30px; -} -.talk_numb_ext a, .talk_numb_ext_wiki a -{ - margin-bottom:0px; -} -.talk_numb_ext_wiki -{ - width:130px; -} -.language_links_box a.current_lang -{ - background:#6495ED; -} - -.last_modifications ul -{ - margin-left:0px; -} \ No newline at end of file diff --git a/h-source/Public/Css/explorer7.css b/h-source/Public/Css/explorer7.css deleted file mode 100644 index f63bf5b..0000000 --- a/h-source/Public/Css/explorer7.css +++ /dev/null @@ -1,25 +0,0 @@ -.viewall_popup_menu_status_item -{ - width:129px; -} -.talk_numb_ext -{ - margin-top:-30px; -} -.language_links_box a.current_lang -{ - background:#6495ED; -} - -.last_modifications ul -{ - margin-left:0px; -} -.talk_numb_ext a, .talk_numb_ext_wiki a -{ - margin-bottom:0px; -} -.talk_numb_ext_wiki -{ - width:130px; -} \ No newline at end of file diff --git a/h-source/Public/Css/files.css b/h-source/Public/Css/files.css deleted file mode 100644 index e98e681..0000000 --- a/h-source/Public/Css/files.css +++ /dev/null @@ -1,113 +0,0 @@ -form -{ - padding:0px; - margin:0px; -} - -/*external box*/ -.EGexternalBox -{ - height:500px; - overflow:scroll; -} - -/*top box containing the forms: upload,create folder,got to folder*/ -.EGformBox -{ - padding-left:10px; - padding-right:10px; - height:35px; - margin:5px; - border-top:1px solid #DC143C; - border-bottom:1px solid #DC143C; - background:#FF7F50; -} - -/*item box: folder*/ -.EGfolderBox -{ - padding-left:10px; - padding-right:10px; - height:55px; - margin:5px; -/* border-top:1px solid black; */ - background:#E6E6FA; -} - -/*item box: file*/ -.EGfileBox -{ - padding-left:10px; - padding-right:10px; - height:55px; - margin:5px; -/* border-top:1px solid black; */ - background:#E0FFFF; -} - -/*back box*/ -.EGbackBox -{ - padding-left:10px; - padding-right:10px; - height:50px; - margin:5px; - border-top:1px solid #6495ED; - border-bottom:1px solid #6495ED; - background:#ADD8E6; -} - -/*folder image and back image*/ -.EGfolderImage, .EGbackImage, .EGfileImage -{ - margin:3px; -/* padding:2px; */ - width:55px; -/* background:red; */ - float:left; -} - -/*box containing the form to create a new folder*/ -.EGcreateFolderBox -{ - margin:5px; - width:300px; - float:left; -} - -/*box containing the form to upload a file*/ -.EGuploadFileBox -{ - margin:5px; - margin-left:50px; - width:400px; - float:left; -} - -.EGcreateFolderBox input:text -{ - width:150px; -} - -/*name of the folder*/ -.EGfolderName, .EGfileName, .EGcurrentDirectory -{ - width:500px; - float:left; - font:normal 12px/1 Verdana,arial; - margin:10px; -} - -/*del image*/ -.EGfolderDelImage, .EGfileDelImage -{ - float:right; - margin:2px; -} - -/*preview of the image in upload file*/ -#imagePreview -{ - margin:10px; - height:120px; -} diff --git a/h-source/Public/Css/form.css b/h-source/Public/Css/form.css deleted file mode 100755 index 911af19..0000000 --- a/h-source/Public/Css/form.css +++ /dev/null @@ -1,31 +0,0 @@ -.entryLabel { - display:block; - font:bold 12px/1em Verdana,arial; - padding:3px 0px; - margin-top:10px; - background:#E6E6FA; - width:500px; -} - -.formEntry textarea{ - width:500px; - height:300px; -} - -.formEntry input,.formEntry textarea { - width:500px; - padding:3px; - border: 1px solid #4169E1; -} - -.formClass { - margin:10px; -} - -.inputEntry { - margin:10px 0px; -} - -.formEntry #abstract { - height:100px; -} \ No newline at end of file diff --git a/h-source/Public/Css/index.html b/h-source/Public/Css/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Public/Css/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Public/Css/login.css b/h-source/Public/Css/login.css deleted file mode 100644 index 7c42964..0000000 --- a/h-source/Public/Css/login.css +++ /dev/null @@ -1,21 +0,0 @@ -/*controller:users*/ -/*action:login*/ -.login_box { - margin:10px 10px 20px 10px; -} -.login_box input { - border:1px solid orange; -} - -/*action:logout*/ -.logout_box { - margin:10px 10px 20px 10px; -} - -.logout_button a{ - margin:20px; - padding:10px; - background:orange; - border:1px solid black; -/* width:30px; */ -} \ No newline at end of file diff --git a/h-source/Public/Css/main.css b/h-source/Public/Css/main.css deleted file mode 100644 index 2314940..0000000 --- a/h-source/Public/Css/main.css +++ /dev/null @@ -1,2254 +0,0 @@ -/*stili per il layout fisso*/ -html, body -{ - margin: 0; - padding:0; -} - -body -{ - font:normal 15px/1.3 sans-serif,arial; - text-align: center; - background:#ffffff; -} - -img -{ - border:0px; -} - -.message_view_description li, .issues_view_description li, .talk_message_item_content li, .message_view_description_hidden li -{ - margin-left:1em; -} - - -div#container -{ - width: 950px; - margin: 0px auto; - text-align: left; - background:white; -} - - -/*stile header grande*/ -div#external_header { - background:#b7f18c; - text-align:center; - height:80px; -} -div#header { - background:#b7f18c; - width: 950px; - margin: 0px auto; - text-align:left; - height:80px; -} - -div#top_menu_external -{ - text-align:center; - background:#015512; - margin-bottom:50px; -/* border-top:1px solid #4169E1; */ -/* border-bottom:1px solid #4169E1; */ -} - -div#top_menu -{ - font:bold 15px sans-serif,arial; - text-align:left; - padding:0.4em 0px; - background:#015512; - width: 950px; - margin: 0px auto; -} -#top_menu .currentitem a -{ - background:#DC143C; - color:#FFF; -} - -div#top_menu a -{ - font:bold 16px sans-serif,arial; - padding:0.4em 10px; - text-decoration:none; - font-weight:bold; - color:#FFF; -/* border-left:1px solid #4169E1; */ -} -#top_menu a:hover, -#top_menu a:focus, -#top_menu a:active -{ - background:#61c418; -} - -div#top_menu ul -{ - list-style-type: none; - display:inline; - margin:0px; - padding:0px; -} - -div#top_menu li -{ - display:inline; -/* padding:10px; */ -} - - -div#left -{ - width:730px; - float:left; -} - -div#right -{ - width:198px; - float:right; -} - -.login_username_input,.login_password_input -{ - width:150px; -} - -.login_table_box -{ - clear:left; - margin:5px; - margin-bottom:35px; -/* border:1px solid #B7F18C; */ -/* padding:5px; */ -} -.statistics_ext_box -{ - margin:5px; - margin-bottom:30px; -} -.statistics_int_title -{ - margin:5px 0px 15px 0px; - padding:3px 0px; -/* background-color:#B7F18C; */ - border-bottom:2px solid #DC143C; - font-weight:bold; -} -.statistics_hard_title -{ - margin:5px 0px; - color:#808080; -} -.user_logged -{ - margin-left:55px; - color:black; - font-weight:bold; -} -.login_right_label -{ - font-weight:bold; -} -.login_right_form input -{ - border:1px solid #6495ED; - width:180px; - padding:2px; - margin:3px 0px; -} - -.login_input -{ - width:100px; -} - -.login_form_title -{ - color:black; - -/* padding:10px; */ -/* background:#5c98dc; */ -} - -.login_box -{ - margin-bottom:400px; -} - -.hardware_element -{ - width:335px; - float:left; - -moz-border-radius: 8px; - -webkit-border-radius: 8px; - border-radius: 8px; - margin:2px; - margin-left:5px; - margin-bottom:5px; - padding:10px; - background:#c7daef; -/* border-bottom:1px solid #6495ED; */ -} -.hardware_element_link -{ - display:block; - width:250px; - float:left; - margin:0px 10px; - margin-top:10px; -} -.notebook_view_title -{ - width:400px; - height:50px; - float:left; - overflow:hidden; -/* background:red; */ - margin:10px 0px 10px 10px; - font:normal 14px/1 sans-serif,arial; -} - -.notebook_insert_link -{ -/* border:1px solid black; */ -/* background-color:#c1e3ef; */ - width:200px; -/* background:orange; */ - float:right; - padding:3px 6px 1px 3px; - margin:0px 5px 30px 5px; - text-align:right; - overflow:hidden; - height:48px; -} - -.select_entry -{ -/* width:400px; */ - padding:2px; -/* border:1px solid #6495ED; */ -} -.input_entry, .talk_input_entry -{ - width:400px; - padding:2px; - border:1px solid #6495ED; -} -.textarea_entry, .talk_textarea_entry, .device_textarea_entry -{ - width:630px; - height:300px; - padding:2px; - border:1px solid #6495ED; -} -.device_textarea_entry -{ - width:400px; - height:50px; -} -/*.talk_input_entry -{ - border:1px solid #CECECE; -}*/ -.form_entry .talk_textarea_entry -{ - width:400px; - height:200px; - border:1px solid #6495ED; -} -.notebooks_insert_form -{ - width:710px; - margin-left:10px; -} -.notebooks_insert_form .entry_label -{ - display:block; - padding:3px 0px; -/* background:#E6E6FA; */ - width:600px; - font-weight:bold; -} -.form_entry -{ - margin:20px 0px; -} - - -div#footer{ - margin:0px; - color: #000; - height:40px; - background:#b7f18c; - clear:both; -} - -/*div#navigation li{background: url(immagini/tabella1.png) no-repeat left center;}*/ -a.link_menu -{ - font: bold 16px/1.75em sans-serif,arial; - text-decoration: none; - color:#4169E1; - margin-left:10px; -} - - -/*box contenente i link per tornare nel pannello utente e per sloggarsi*/ -.your_status_box -{ - background:#E6E6FA; - padding:5px; -} - -.login_note -{ - color:#8080a6; - margin:10px; - padding:5px 0px; - border-top:2px solid #8080a6; - border-bottom:2px solid #8080a6; - - font: normal 16px/1.3 sans-serif,arial; -} - -/*singolo box contentente un portatile in view all*/ -.notebooks_viewall -{ - clear:both; - clear:right; - margin:40px 0px; - padding:3px; -/* border:2px solid #7dafe7; */ - font: normal 14px/1.5 sans-serif,arial; - -} -.model_viewall -{ - margin:40px 10px; - margin-left:0px; -/* background-color:#F7F7F7; */ -/* border:1px solid #CECECE; */ -/* padding:10px; */ -} -.notebook_model -{ -/* background:orange; */ - padding:5px 0px; - margin:0px 5px; - overflow:hidden; - width:100%; -/* margin-bottom:10px; */ - font:normal 14px/1 sans-serif,arial; - border-bottom:1px solid #7e0000; -} -.notebook_vendor, .notebook_compatibility, .notebook_kernel, .model_tested_on -{ - margin:5px 0px; -/* background:#eaebec; */ - padding:5px; - width:654px; - overflow:hidden; -/* border-top:2px solid #a4c8f1; */ -} -.inner_label -{ - float:left; - width:320px; -} -.inner_value -{ - float:left; - width:280px; - color:#1f538e; - font-weight:bold; -} -.notebook_description_label -{ -/* background:#B7F18C; */ - padding:5px 0px; - margin:0px 5px; - margin-top:1.5em; -/* margin-bottom:10px; */ - font:bold 14px/1 sans-serif,arial; - border-bottom:1px solid #7e0000; -/* border-bottom:1px solid #228B22; */ -} -.notebook_description_value -{ -/* border-top:2px solid #a4c8f1; */ - margin:5px 0px; -/* background:#eaebec; */ - padding:5px 5px; - width:704px; - overflow:hidden; -} -.notebook_view_link -{ - margin-top:10px; - margin-left:5px; -} - - -/*alert string*/ -.alert { - clear:left; - clear:right; - font:bold 12px/1.5 sans-serif,arial; - padding:10px; - margin:5px 0px 15px 0px; -/* background:TOMATO; */ - border-top:2px solid MAROON; - border-bottom:2px solid MAROON; - color:MAROON; -} - -/*executed operation string*/ -.executed { - font:bold 12px/1.5 sans-serif,arial; - padding:5px; - margin:5px 5px 15px 5px; - background:#E0FFFF; - border-top:2px solid #ADD8E6; - border-bottom:2px solid #ADD8E6; - color:#4169E1; -} - -.view_page_top_box -{ - overflow:hidden; - width:664px; -} -/*div that contains the update form*/ -.view_page_update_button -{ - float:right; -} -/*.view_page_update_button input -{ - height:35px; -}*/ -.view_page_update_button form -{ - width:38px; - padding:0px; -} -.view_page_back_button -{ - float:left; - width:50px; -} -/*the update submit button*/ -.update_submit_class -{ - padding:2px; - width:45px; - font:normal 14px/1 sans-serif,arial; - cursor:pointer; -} -/*div that contains the link to the history page*/ -.view_page_history_button -{ - float:right; - width:30px; - padding:3px; - margin-left:17px; -/* border:1px solid #a4c8f1; */ -/* height:30px; */ -} -.view_page_history_button a -{ - text-decoration:none; - color:#000; -} - -.page_history -{ - margin:0px; - padding:0px; -} -.page_history_item -{ - list-style-type: none; - padding:5px; - margin:2px; - border-top:1px dashed #a4c8f1; -} -.page_history_current_item -{ - list-style-type: none; - padding:5px; - margin:5px 0px; -/* background:#ADD8E6; */ -} -.history_title -{ - font:normal 14px/1 sans-serif; - margin:10px; - padding:3px; -} - -.revision_alert -{ - background:#f1d8d8; - padding:8px; - margin:5px; - margin-bottom:20px; - border-bottom:1px solid #d26262; - border-top:1px solid #d26262; - clear:both; -} - -/*page list in history*/ -.history_page_list, .history_page_list_news { - text-align:left; - font:normal 14px/1 sans-serif,arial; - padding:10px; - margin-bottom:15px; -} -.history_page_list_news -{ - background:#C7DAEF; - margin:5px; -} -div.history_page_list a, div.history_page_list_news a { - padding:5px 10px; - border-left:1px outset #000; -/* border:1px outset #708090; */ -/* color:#B0E0E6; */ -/* background:#4169E1; */ -} - -div.history_page_list a.currentPage, div.history_page_list_news a.currentPage -{ - font-weight:bold; - background:#DCDCDC; -} -div.history_page_list_news a -{ - border-left:none; - color:#4169E1; - font-weight:bold; -} - -.viewall_no_items_found -{ - font:normal 14px/1 sans-serif,arial; - margin:20px 5px; - padding:5px; -/* color: #FF4500; */ - border-top:1px solid #FF4500; - border-bottom:1px solid #FF4500; -} - - - -.viewall_popup_menu_box { - width:725px; - height:30px; - margin-bottom:0px; - margin-top:10px; - margin-left:0px; - position:relative; - z-index:4; -} -.more_filters -{ - position:relative; - z-index:3; -} - -.viewall_popup_menu_status -{ - clear:left; - width:725px; -/* overflow:hidden; */ - margin-left:0px; - text-align:center; -} -.viewall_popup_menu_status_item -{ - width:139px; - float:left; - margin-left:3px; - color:#FF4500; - font-weight:bold; - font: bold 13px/1 sans-serif,arial; -} - -ul#menuBlock { -/* float:right; */ - float:left; - margin:0px; - padding:0px; - list-style:none; - height:25px; -} -ul#menuBlock li.innerItem -{ - height:22px; - padding-top:5px; - font-size:12px; -} -ul#menuBlock li { - position:relative; - display:block; - float:left; - margin-left:3px; - width:139px; -/* height:22px; */ - text-align:center; - background: url('../Img/popup_back.png') no-repeat top left; -/* background:#FFA500; */ -} - -ul#menuBlock li a { - color:#000000; - font: normal 12px/1 sans-serif,arial; -} - -ul#menuBlock li ul { - margin:0px; - padding:0px; - list-style:none; - position:absolute; - top:24px; - left:-3px; - display:none; -} -ul#menuBlock:hover li ul -{ - display:block; -} -ul#menuBlock li ul li { - background:#ffef84; - border-top:1px solid #ec8459; - padding:3px 0; -} - - -/*view files with differences*/ -.diff_ext_box -{ - margin:0px 5px 30px 5px; -} -.diff_item_label -{ -/* background:#ADD8E6; */ -/* padding:3px; */ - border-bottom:1px solid black; -} -.diff_item_text -{ - color:#7c7a7a; - background:#F0FFF0; - padding:3px; -} -del -{ - color:red; -} -ins -{ - color:green; -} - - - -/*tree navigation*/ -.position_tree_box -{ - margin:5px 5px 25px 5px; - padding:5px; - font:normal 14px/1 sans-serif,arial; - border-top:1px solid #DC143C; - border-bottom:1px solid #DC143C; -} -.position_tree_box a -{ - text-decoration:none; - color:#DC143C; -} -.last_tree_element -{ - font-weight:bold; -} - - - -.td_with_distribution_checkboxes -{ - position:relative; - display:block; -} -.dist_checkboxes_hidden_box -{ - display:none; - position:absolute; - background:#C1E3EF; - top:20px; - left:0px; - width:400px; - padding:3px; -} -.dist_checkboxes_hidden_box_inner -{ - height:150px; - overflow:auto; - z-index:400; -} -.hidden_box_item -{ - margin-bottom:10px; -} -.tables_of_contents -{ - margin:20px 0; - padding:5px; - background-color:#EAF2F4; - border:1px solid #C7DAEF; - -moz-border-radius: 15px; - -webkit-border-radius: 15px; - border-radius: 15px; -} -.tables_of_contents a -{ - font-size:14px; -} -.tables_of_contents_title -{ - margin:10px 25px; - font-weight:bold; -} -/*wiki code*/ -.code_pre -{ -/* width:650px; */ - max-height:300px; - overflow:auto; - background:#f9f4a7; - padding:5px 0 5px 5px; - font-size:12px; -/* color:#4169E1; */ - border:1px dashed #d4cb3b; -} - -.div_h1 -{ - font:bold 18px/1 sans-serif,arial; - border-bottom:1px solid gray; - padding:3px 0px; - margin:20px 0px 10px 0px; - color:gray; -} -.div_h2 -{ - font:bold 17px/1 sans-serif,arial; - color:gray; - padding:2px 0; -} -.div_h3 -{ - font:bold 16px/1 sans-serif,arial; - color:gray; - padding:2px 0; -} -.div_lang -{ - margin-top:4em; - padding:8px; - background:#cfe2ff; - /*border-top:1px solid #FFA500; - border-bottom:1px solid #FFA500;*/ -} -.div_lang a -{ - padding:0px 3px; -} -.talk_login_notice -{ - margin:5px 5px; - padding:5px; - font:bold 14px/1 sans-serif,arial; -/* border:1px solid #4169E1; */ -/* color:#4169E1; */ -/* background:#9acee3; */ -} -.talk_message_item -{ - margin:5px 0px 35px 5px; -} -.talk_message_item_title_date -{ - border-bottom:1px solid gray; - padding-bottom:5px; -/* width:300px; */ -} -.talk_message_item_title -{ - font:bold 14px/1 sans-serif,arial; - margin-bottom:5px; -} -.talk_message_item_date -{ - font:normal 12px/1 sans-serif,arial; - color:gray; -} -.talk_message_item_content -{ - padding:5px 0px; -} -.talk_form_external_box -{ - margin-bottom:20px; -} - -.model_id -{ - font:normal 12px/1 sans-serif,arial; -/* color:gray; */ - margin:5px 3px; - padding:3px; -} - -.top_left_images -{ - height:45px; - margin-top:2px; -} -.top_left_note_image -{ - height:45px; -} -.top_left_images_help -{ - height:30px; - margin-bottom:-10px; -} - -.who_you_are_and_logout, .your_panel_link -{ - margin:0px 0px 10px 0px; - padding:5px 10px; - background-color:#B7F18C; -/* font-weight:bold; */ -/* border-top:1px solid #015512; */ -/* border-bottom:1px solid #015512; */ -} -.your_panel_link -{ - background:#DC143C; - margin-bottom:0px; -/* color:#FFF; */ -} -.your_panel_link a -{ - font-weight:bold; - color:#FFF; -} - -/*form*/ -.entryLabel { - display:block; - font:bold 12px/1em sans-serif,arial; - padding:3px 0px; - margin-top:10px; -/* background:#E6E6FA; */ - width:450px; -} - -.formEntry { - margin:20px 0px; -} - -.formEntry input, .formEntry textarea { - width:450px; - padding:3px; - border: 1px solid #CECECE; -} - -.form_input_text input,.form_textarea textarea { - width:450px; - padding:3px; - border: 1px solid #CECECE; -} -.form_textarea textarea -{ - height:100px; -} -.formClass { - margin:10px; - margin-right:-40px; - width:450px; -} - -.inputEntry { - margin:10px 0px; - float:left; - width:80px; - height:30px; -} - -.panel_top_box -{ - background-color:#C1E3EF; - margin:5px 5px 35px 5px; - padding:10px; - font:bold 14px/1 sans-serif,arial; - border-bottom:1px solid #097fbc; -} -.panel_top_box a -{ - color:#097fbc; -} - -/*list of application in the panel main action*/ -.panelApplicationList -{ - padding:0px; - margin:0px; -} -.panelApplicationList li -{ - display:block; - width:450px; - height:30px; - margin:5px; - padding-top:9px; -} - -.panelApplicationList li a -{ - margin:5px; - font: bold 14px/1 sans-serif,arial; - color:#097fbc; -} - -.confirm_notice -{ - margin:10px; -/* padding:10px; */ - font:normal 14px/1.5 sans-serif,arial; -} - -.meet_item -{ - margin:20px 0px; -} -.meet_item_inner -{ - border-bottom:1px dashed #ed9f4a; - font-weight:bold; -/* color:#8f0754; */ -} -.meet_contrib_link, .contrib_explain_box -{ - margin:10px; -} -.users_contrib_item -{ - margin:10px; - padding:2px 0px; - border-bottom:1px dashed #ed9f4a; -/* color:#8f0754; */ -} -.external_users_contrib -{ - margin-bottom:40px; -} -.contrib_explain_box -{ - font-weight:bold; - margin-bottom:30px; -} -.users_meet_box -{ - margin:25px 30px; - padding:5px 20px; - background:#f6ea99; - border-bottom:1px solid #ed9f4a; - border-top:1px solid #ed9f4a; -} -.delete_account_notice_box -{ - margin:25px 10px; -} -.climb_form_ext_box -{ - margin:25px 10px; -} - -.new_account_title -{ - margin:10px; -} - -.viewall_popup_menu_box_external, .edit_form -{ - clear:left; - clear:right; - margin-bottom:30px; -/* background:#E0FFFF; */ - padding:0px 10px 10px 0px; -} - -.manage_account_link_box -{ - margin-top:5px; -} -.manage_account_link_box a -{ - color:#000; -} -.login_right_box -{ - margin-bottom:15px; -} - -.mandatory_fields_notice -{ - margin:10px 0px; -} - -.help_tables_of_contents -{ - margin:10px; - padding:10px; -} - -.bottom_licence_notice -{ - clear:left; - clear:right; - font:normal 12px/1.2 sans-serif,arial; - padding:10px; - background:#E0FFFF; - margin:25px 0px 5px 0px; -} -.top_licence_notice -{ - clear:left; - clear:right; - font:normal 12px/1.2 sans-serif,arial; - padding:10px; - background:#E0FFFF; - margin:25px 0px 5px 0px; - text-align:left; -} - -/*.copyright_notice_box -{ - text-align:right; - font: normal 12px/1 sans-serif,arial; - padding:14px; -}*/ - -.copyright_notice_box, .footer_credits_box -{ - text-align:center; - width:120px; - float:right; - font: normal 12px/1 sans-serif,arial; - padding:14px; - border-left:3px solid #FFF; -} -.footer_credits_box -{ - width:60px; - border-left:3px solid #FFF; -} -.home_objectives_description -{ - margin:5px; - overflow:hidden; - width:100%; -} -.home_objectives_description img -{ - float:left; - margin-right:5px; -} -.home_objectives_title -{ - margin:15px 5px 5px 5px; -/* background:#90EE90; */ - font-weight:bold; - padding:5px 0px; - border-bottom:1px solid #228B22; -} - -.credits_item_title -{ - margin:15px 5px 5px 5px; -/* background:#90EE90; */ - padding:5px; - border-bottom:1px solid #228B22; - font-weight:bold; -} -.credits_item_description -{ - padding:5px; - margin:5px; - overflow:hidden; - width:100%; -} - -.home_container -{ - margin:20px 0px; -} - -.issues_external_box -{ - margin:40px 5px; -} -.issues_viewall_title -{ - margin:10px 2px; - font-weight:bold; -} -.issues_viewall_table -{ - font:normal 13px/1 sans-serif,arial; -} - -.issues_viewall_table td -{ -/* background:#F0FFFF; */ - padding:5px; -/* border-bottom:1px solid #E6E6FA; */ -} -.issues_viewall_table td a -{ - color:#3E3E3E; -} -.issue_deleted_yes td -{ - background-color:#E6E6FA; -} - -.issue_deleted_yes span -{ - color:red; - padding-left:5px; - font-size:10px; -} - -.issue_deleted_no span -{ - display:none; -} - -.issue_deleted_yes, -.issue_deleted_yes td a -{ - color:#808080; -} - -.issues_viewall_table th -{ - background:#ADD8E6; -/* font-weight:normal; */ -/* border-top:1px solid #4169E1; */ -/* border-left:4px solid #4169E1; */ -/* border-bottom:1px solid #4169E1; */ - padding:5px; -} - -.issues_view_title, .issues_view_description_title -{ - font:bold 14px/1 sans-serif,arial; - padding:5px 0px; - border-bottom:1px solid black; -} -.issues_view_status_and_priority -{ - margin:20px 0px; - font:normal 12px/1 sans-serif,arial; -} -.issues_view_description -{ - margin:20px 0px; -} - -.add_issue_form_title -{ - margin:30px 5px; - font-weight:bold; -} -.add_issue_form -{ - margin:30px 5px; -} - -.contact_div -{ - margin:10px; -} - -.help_external_box -{ - margin:5px; -} -.help_wiki_table thead -{ - text-align:left; -} - -.hardware_element_image -{ - height:50px; - float:left; -} -.markItUpContainer -{ - z-index:0; -} - -.search_form -{ - clear:both; - margin:5px 5px 50px 5px; -} -.search_form_pciid -{ - clear:both; - margin:5px 5px 50px 5px; -} -.search_form_label -{ - overflow:hidden; - height:22px; - margin:15px 5px 20px 5px; -/* background:#90EE90; */ - padding:5px 0px; - border-bottom:1px solid #228B22; - font-weight:bold; -} -.input_entry_search -{ - width:250px; - border: 1px solid #CECECE; - padding:2px; -} - -.search_result_item -{ - margin:5px 5px 15px 5px; - border-top:1px solid #CECECE; - padding:5px 0px; -} -.search_result_item .first_level -{ - overflow:hidden; -} - -.search_result_item_left -{ - width:300px; - float:left; -} -.search_result_item_right -{ - width:400px; - float:left; -} -.diff_color_notice -{ - background:#f1d8d8; - padding:8px; - margin:5px; - margin-bottom:20px; - border-bottom:1px solid #d26262; - border-top:1px solid #d26262; -} - -.gray_text_notice -{ - color:#7c7a7a; -} -.credits_external_box -{ - margin-bottom:40px; -} -.notebook_model img -{ - float:left; -} -.span_model_name -{ - float:left; - margin-left:10px; - padding-top:5px; -} - -/*dialog*/ -#dialog-form, #delete_dialog -{ - display:none; -} -#suggest_dialog -{ - display:none; -} -#dialog-form table -{ - text-align:left; -} -#dialog-form input -{ - width:300px; - border:1px solid #CECECE; -} -#dialog-form textarea, #delete_dialog textarea -{ - width:300px; - height:100px; - border:1px solid #CECECE; -} -.ask_for_removal_class -{ - float:right; - padding-top:5px; -} -.deletion_motivations_title -{ - margin:15px 5px; - border-bottom:1px solid #D26262; -} - -.deletion_motivations_iternal -{ - margin:15px 5px; - padding:5px; - border:1px dashed #D26262; -} -.deletion_motivations_iternal_message -{ - -} - -.news_external_box -{ - margin:5px; - margin-bottom:40px; -} -.news_item -{ -/* background:#f8f1b2; */ -/* padding:5px; */ - margin:30px 0px; -/* border:1px solid #f99f4f; */ -} -.news_item_title -{ - font-weight:bold; - margin:0px 0px 4px 0px; - padding-bottom:5px; - border-bottom:1px solid #9d1d04; - color:#9d1d04; -} -.news_item_date -{ - font: normal 13px/1 sans-serif,arial; -/* color:#e86a17; */ - color:gray; - margin:0px 0px 10px 0px; -} - -.discover_hardware, .download_database -{ - text-align:center; - margin-bottom:5px; -} -.download_database -{ - margin-bottom:30px; -} - -.download_table -{ - margin:10px 0px; - padding:5px; -} -.download_table td -{ - padding:5px 5px; - background:#E0FFFF; -} - -.help_external_box h1 -{ - background:#FFD700; - padding:5px 10px; - color:#800000; - border-top:1px solid #800000; - border-bottom:1px solid #800000; - font:normal 20px/1 sans-serif,arial; -} - -.right_box_ext_box -{ - margin:5px; - margin-bottom:300px; -} - -.add_message_form_title -{ - margin:15px 0px; - font-weight:bold; - padding:5px 0px; - color:#4169E1; -} - -.issues_message_item, .issues_message_item_preview, .issues_message_item_hidden, .talk_message_item_hidden -{ - -moz-border-radius: 12px; - -webkit-border-radius: 12px; - border-radius: 12px; - padding:10px; - margin:20px 0px; - background:#eaf2f4; -/* border-top:1px solid #4169E1; */ -/* border-bottom:1px solid #4169E1; */ -} -.issues_message_item_hidden, .talk_message_item_hidden -{ - background:#FFF; -/* background:#b5d6e0; */ - border-top:1px dashed #bcbcbc; - border-bottom:1px dashed #bcbcbc; -} -.issues_message_item_preview -{ - margin:5px 0px 20px 0px; - background:#FFF; - border:1px dashed #f9a92b; -} -.description_preview -{ - padding:10px; - margin:0px 0px; - border:2px dashed #f9a92b; -} -.description_preview_title -{ - padding:5px 0px; - margin:0px 0px; - font-style:italic; - color:#f9a92b; - font-weight:bold; -} -.talk_message_item_hidden -{ - margin-bottom:40px; -/* background:#f1f1f1; */ -} -.message_view_description -{ - clear:both; - margin-bottom:5px; -} -.message_view_description_hidden -{ - margin-top:5px; -} -.message_preview_notice -{ - color:#f9a92b; - margin:3px 3px; - font:italic 14px/1 sans-serif,arial; -} -.useful_links_ext div -{ - margin:3px 0px; - padding:1px; - padding-left:20px; - background: url(../Img/link.png) no-repeat left center; -} -.useful_links_ext div a -{ - color:#000; - text-decoration:none; - font:normal 14px/1 sans-serif,arial; -} -.issues_message_item_user -{ - overflow:hidden; - font-weight:bold; - margin-bottom:1em; -} -.issues_message_item_user_inner -{ - float:left; - width:500px; -} - -.hide_general, .block_general -{ - clear:right; - float:right; - margin-left:10px; - font-weight:bold; - text-decoration:none; - color:#000; - font-size:13px; - padding-bottom:4px; -} -.hide_general img -{ - margin-right:5px; - margin-bottom:-2px; -} -.block_general img -{ - margin-right:5px; - margin-bottom:-5px; -} -.language_links_box ul -{ - overflow:hidden; - margin:4px 5px 20px 5px; - padding:0px; - list-style-type:none; -} -.language_links_box ul li -{ - float:left; - width:92px; -/* background:red; */ - margin-bottom:10px; -/* margin-right:10px; */ - margin-top:5px; -} -.language_links_box ul li a -{ - padding:5px; - text-decoration:none; - color:black; -} -.language_links_box ul li a span -{ - margin-left:3px; -} -.language_links_box a.current_lang -{ - border-top:1px dashed #6495ED; - border-bottom:1px dashed #6495ED; -} - -.talk_numb_ext -{ - clear:both; - text-align:left; - margin-left:10px; -} -.talk_numb_ext a, .talk_numb_ext_wiki a -{ - display:block; - width:150px; - text-align:center; - padding:10px 0px; - text-decoration:none; - color:black; - background: url(../Img/talk_messages.png) no-repeat left center; - margin-bottom:10px; - float:right; - overflow:hidden; -} - -.details_of_hidden_message -{ - display:none; -} -.details_of_hidden_message_inner, .details_of_actions_inner, .details_of_actions_inner_user -{ - margin:10px 0px; - background:#fbfbfb; - padding:5px; - border:1px solid #BCBCBC; -} -.details_of_actions_inner -{ - background:#ecfffe; - border:1px solid #7ed0cb; -} -.details_of_actions_inner_user -{ -/* background:#F6EA99; */ -/* border:1px solid #F65637; */ -} -.md_type -{ - display:none; -} -.hidden_message_view_details, .hidden_message_view_page -{ - font:normal 12px/1 sans-serif,arial; -} -.deleted_message_show -{ - margin:8px 0px 0px 0px; - font:normal 13px/1 sans-serif,arial; -} - -.noscript_dist_alert -{ - margin-bottom:5px; -} -.noscript_dist_alert span -{ - color:#6495ED; -} - -.isp_notice -{ - background:#dff1f8; - border:1px solid #6495ED; - padding:5px; - font:normal 14px/1.5 sans-serif,arial; -} - -.user_hardware_pages -{ - margin:10px 5px; - padding:10px; - background:#F1D8D8; - /*border-bottom:1px solid #DC143C; - border-top:1px solid #DC143C;*/ -} - -.moderator_box, .moderator_box_deleted -{ - -moz-border-radius: 10px; - -webkit-border-radius: 10px; - border-radius: 10px; - overflow:hidden; - padding:10px; - margin:5px 5px 25px 5px; - background:#fbd59a; -/* border:1px solid #f65637; */ -} -.moderator_box_deleted -{ - background:#C7DAEF; -/* border:1px solid #ADD8E6; */ -} - -.listTable -{ - margin:20px 5px; - width:100%; -} - -/*MODERATORS' PAGE*/ -tr.listRow td -{ - font: normal 13px/1 sans-serif,arial; - padding:5px 5px; -} -tr.listRow td.type_column -{ - width:15%; -} -tr.listHead { - font: bold 13px/1 sans-serif,arial; -} - -tr.listHead td { - padding:8px 4px; - background:#ADD8E6; -/* border-top:1px solid #4169E1; */ -/* border-bottom:1px solid #4169E1; */ -} - -.recordsBox { - margin:10px 5px; -} - -.recordsBox table { - width:100%; -} - -a.linkItem { -/* background:red; */ - font:bold 12px/1 sans-serif,arial; -} - -td.text_item_date -{ - width:25%; -} -.moderator_panel_link, .admin_panel_link -{ - margin:5px; - padding:10px; -/* border:1px solid #ED9F4A; */ -/* background:#F6EA99; */ -} -.admin_panel_link -{ -/* border:1px solid #DA70D6; */ -/* background:#F6EA99; */ -} -.noscript_notice -{ - margin:10px 5px; - padding:5px 10px; - background:#B0E0E6; - border:1px solid #4169E1; - color:#4169E1; -} -.search_img -{ - float:left; -} -.span_search_desc -{ - float:left; - margin-left:10px; - padding-top:0px; -} -.textarea_entry_search -{ - width:430px; - height:200px; - padding:3px; - border: 1px solid #CECECE; -} -.lspci_notice -{ - margin:10px 0px; - padding:5px 10px; - background:#B7F18C; - font-weight:bold; -/* border: 1px solid #CECECE; */ -} - -.lspci_item_found, .lspci_item_not_found -{ - margin:20px 5px; - background: url('../Img/search_back.png') no-repeat top left; -/* background: #C7DAEF; */ - padding:12px 15px; - border-bottom:3px solid #8eb5df; - border-right:1px solid #8eb5df; -} -.lspci_item_found_compat -{ - padding-left:37px; -} - -.search_result_model_name -{ - padding-left:10px; -} - -.search_item_found -{ - margin:5px; -} - -.lspci_item_not_found -{ - background: #ffe170; - border-bottom:3px solid #e8c224; - border-right:1px solid #e8c224; -} -.lspci_item_found_compat ul li -{ - list-style-type:none; -} -.lspci_item_found_compat ul -{ - margin:10px 20px; - padding:0px; -} -.found_ext -{ - margin-bottom:2em; -} - -.lspci_item_found_compat a -{ - text-decoration:none; - font:normal 16px/1 sans-serif; -} - -.last_modifications, .wiki_control_box -{ - margin:5px; - width:190px; - margin-bottom:2em; - background: url(../Img/back_last.png) no-repeat top left; -} -.wiki_control_box -{ - background: url(../Img/back_wiki.png) no-repeat top left; -} -.last_modifications ul, .wiki_control_box ul -{ - padding:8px; - padding-top:0px; -} -.wiki_control_box ul -{ - background: url(../Img/back_wiki.png) no-repeat bottom left; -} -.last_modifications li, .wiki_control_box li -{ - list-style-type:none; - margin:10px 5px; -} -.last_modifications_title -{ - padding-top:10px; - padding-left:14px; - font:bold 15px/1 sans-serif; -} -.last_modifications a -{ - -} -.last_modifications_model -{ - color:#3e3e3e; - text-decoration:none; -} -.last_modifications_all -{ - background: url(../Img/back_last.png) no-repeat bottom left; - padding-bottom:10px; -} -.last_modifications_all span -{ - margin-left:10px; - font:normal 14px/1 sans-serif; -} - -.wiki_external_box -{ - margin:4em 5px; - clear:both; - clear:right; -} -.wiki_page_title -{ - font:bold 18px/1 sans-serif,arial; - color:gray; - margin:20px 0px; - padding-bottom:4px; - border-bottom:1px solid #000; -} -.wiki_page_content -{ - margin:2em 0px; -} - -.talk_numb_ext_wiki -{ - float:left; - text-align:left; - margin-left:10px; -} -.blocked_notice -{ - float:right; - font:normal 12px/1 sans-serif; - color:#000; -} -.entry_label_small -{ - font-weight:normal; - font-size:12px; - color:#808080; -} - -.clear_right -{ - clear:right; -} -#admin_box, #moderator_box -{ - margin:20px 10px; -/* border-bottom:1px solid #DC143C; */ -/* border-top:1px solid #DC143C; */ - border-left:10px solid #DC143C; -/* background-color:#F0FFFF; */ - padding:10px; -} -#moderator_box -{ -/* background-color:#fffc8e; */ -/* border-bottom:1px solid #FFA500; */ - border-left:10px solid #FFA500; -} -.admin_box_title, .moderator_box_title -{ - margin-bottom:10px; - font-size:12px; - font-weight:bold; -/* color:#FFF; */ -} -#admin_box ul, #moderator_box ul -{ - margin:0px; - padding:0px; - margin-left:15px; -} -#admin_box ul li, #moderator_box ul li -{ - list-style-type:none; - padding:5px 0px; -} -#admin_box ul li a, #moderator_box ul li a -{ - color:#DC143C; - font-weight:bold; -} -#admin_box ul li a.not_bold -{ - color:#000; - font-weight:normal; -} -#moderator_box ul li a -{ - color:#FF4500; -} -.display_none -{ - display:none; -} - -.moderation_details_box -{ - clear:right; - margin-top:5px; -} - -.not_logged_license -{ - padding:10px; - background-color:#F1D8D8; - font-size:12px; -} -.rss_right_box -{ - text-align:center; - padding:5px; - margin-bottom:15px; -/* margin-bottom:25px; - padding:5px; - overflow:hidden; - height:32px; - background-color:#C7DAEF; - color:#FFF;*/ -} - -/*.rss_right_box img -{ - float:left; -} -.rss_right_box_text -{ - float:left; - margin:5px 10px; - font-weight:bold; -} -.rss_right_box_text a -{ - color:#000; -/* text-decoration:none; */ - font-weight:normal; -}*/ - -/*tabs*/ -.description_tabs -{ - margin-top:10px; -} -div#description_tabs_content -{ - clear:left; -/* width:707px; */ -/* padding-left:5px; */ - border:1px solid #DCDCDC; - position:relative; - z-index:1; -} -.description_tabs_page -{ - margin:10px; -} -.description_tabs ul.desc_menu -{ - width:700px; -/* border-bottom:1px solid #DCDCDC; */ -/* overflow:hidden; */ - margin:0px; -/* height:34px; */ - padding:0px; - position:relative; - z-index:4; -/* background-color:red; */ - top:1px; -/* padding-left:10px; */ -} -.description_tabs li.desc_tabs -{ - display:block; - float:left; - width:70px; - text-align:center; - padding:6px 8px; - border:1px solid #DCDCDC; - background-color:#E6E6FA; - position:relative; - margin-right:8px; - margin-left:0px; - z-index:5; -} -.description_tabs li.current_tab -{ - background-color:#FFF; - border-bottom:1px solid #FFF; -} -.description_tabs li.desc_tabs a -{ -/* text-decoration:none; */ - color:#000; -/* font-weight:bold; */ -} -.separation_line -{ - background-color:#DCDCDC; - padding:6px 8px; - margin:20px 0; -} -.lspci_item_not_found_inner -{ - margin:10px 0 5px 0; - font-weight:bold; -} -.insert_suggestion_list -{ - list-style-type:none; -} -.insert_suggestion_list li -{ - margin:10px 0; -} - -.issue_hidden_notice, .wiki_hidden_notice -{ - width:450px; - float:left; - margin-bottom:10px; - color:red; -} -.wiki_hidden_notice -{ - color:#000; -} -.show_hidden_box_ext -{ - clear:left; -} -.box_module_how_to_compile -{ -/* height:30px; */ - background-color:#F0E68C; -/* clear:left; */ - margin-top:5px; - padding:10px; - font-size:12px; -} -.box_module_label a -{ - color:#FF4500; - font-size:12px; -} - -.track_alert -{ - border:10px solid red; - padding:5px; -} - -.catalogue_top_notice -{ - clear:right; - margin:0 5px; -} - -.version_div -{ - margin-bottom:30px; - text-align:center; -} - -.model_string_search_form -{ - margin:5px; - padding:8px; - background-color:#C7DAEF; - border: 1px solid #6495ED; - width:685px; -} - -.model_string_search_form img -{ - vertical-align:-3px; -} - -.user_action_filter -{ - width:190px; -} -.user_action_filter img, .user_action_filter_submit -{ - vertical-align:middle; -} -.user_action_filter_text -{ - width:130px; -} - -.no_bold -{ - font-weight:normal; -} - -.languages_link_box -{ - font-size:12px; -} - -/*.version_div a -{ - display:block; - background-color: #C7DAEF; - margin: 5px 5px; - margin-bottom:20px; - padding: 5px 10px; - padding-left:5px; - color:#000; - text-decoration:none; - font-weight:bold; -} -.version_div a img -{ - vertical-align:middle; -}*/ -/*.version_div a div -{ - padding-top:14px; -}*/ -/* -Start - temporarily added due to transformation of help pages -2011-05-29 joeko -*/ -.help_external_box ul { - line-height: 1.5em; - list-style-type: square; - margin: .3em 0 0 1.5em; - padding: 0; -} -.help_external_box ol { - line-height: 1.5em; - margin: .3em 0 0 3.2em; - padding: 0; - list-style-image: none; -} -.help_external_box li { - margin-bottom: .1em; -} -.help_external_box dt { - font-weight: bold; - margin-top: .5em; - margin-bottom: .3em; - color: #3D6300; -} -.help_external_box dl { - margin-top: .4em; - margin-bottom: .2em; -} -.help_external_box dd { - line-height: 1.5em; - margin-top: .5em; - margin-left: 2em; - margin-top: .5em; - margin-bottom: .5em; -} -.help_external_box p, .help_external_box dd { - margin-top: .5em; - margin-bottom: .5em; -} -.help_external_box p.attention { - /* taken from home page */ - padding: 0.5em; - background: none repeat scroll 0% 0% rgb(255, 160, 122); - margin: 0.5em; - border-top: 1px solid rgb(220, 20, 60); - border-bottom: 1px solid rgb(220, 20, 60); - font-size: 16px; -} -.help_external_box p.example, dd.example { - border-bottom: 0; - color: #3d6300; -} -.help_external_box p.note dd.note { - margin-left: 2em; - margin-right: 0; - font-weight: bolder; - color: #3d6300; /* background: #CFC bottom right no-repeat;*/; - font-style: normal; - font-style: italic; -} -.help_external_box p.opt, dd.opt { - color: #3d6300; - font-weight: bold; - font-style: italic; -} - -.help_external_box h2,.help_external_box h3,.help_external_box h4 -{ - margin: 0 4px 0 0; - padding: 0.2em 0 0.3em 1.25em; - font-size: 1.4em; - color: #353535; - background: #D8FF9E; -} -.help_external_box h2 -{ - font-size: 1.3em; - color: #3D6300; -} -.help_external_box h3 -{ - font-size: 1.2em; - color: #3D6300; - background-color: White; -} -.help_external_box h4 -{ - font-size: 1.1em; - color: #3D6300; - background-color: White; -} -.help_external_box p.terminal,.help_external_box pre.terminal -{ - font-family: monospace; - padding: .5em 1em; - background-color: rgb(50,50,50); - border-left: 2px solid rgb(97,97,97); - color: white; -} - -/* -End -*/ diff --git a/h-source/Public/Css/mainmenu.css b/h-source/Public/Css/mainmenu.css deleted file mode 100755 index 615c8bf..0000000 --- a/h-source/Public/Css/mainmenu.css +++ /dev/null @@ -1,78 +0,0 @@ -/*stile header di ogni view*/ -.mainMenu { - height:50px; -/* border-top:1px solid #ADD8E6; */ - border-bottom:1px solid #4169E1; - padding-top:6px; - margin-bottom:10px; - background:#d1deed; -} -.mainMenuItem { - float:left; - width:60px; - height:40px; - margin-left:5px; - border:1px outset #708090; - background:#4169E1; - text-align:center; -} - -.mainMenuItem a { -/* margin:8px 5px 1px 10px; */ - display:block; - margin-top:12px; - color:#B0E0E6; - font:bold 14px/1 Verdana,arial; -} - -.verticalMenu { - margin-bottom:30px; - margin-left:10px; -/* text-align:right;*/ -} - -ul#menuBlock { -/* float:right; */ - float:left; - margin:0px; - padding:0px; - list-style:none; - height:24px; -} - -ul#menuBlock li { - position:relative; - display:block; - float:left; - width:100px; - border:1px outset #D3D3D3; - height:21px; -# height:24px; - text-align:center; - background:#E6E6FA; - padding-top:3px; -} - -ul#menuBlock li a { - color:#696969; - font: bold 12px/1 Verdana,arial; -} - -ul#menuBlock li ul { - margin:0px; - padding:0px; - list-style:none; - position:absolute; - top:24px; -# top:25px; - left:-1px; - display:none; -} - -ul#menuBlock li ul li { -# margin-top:-3px; -} - -/*ul#menuBlock li:hover ul{ - display:block; -}*/ \ No newline at end of file diff --git a/h-source/Public/Css/mobile.css b/h-source/Public/Css/mobile.css deleted file mode 100644 index 4fa4c83..0000000 --- a/h-source/Public/Css/mobile.css +++ /dev/null @@ -1,271 +0,0 @@ -/*stili per il layout fisso*/ -html, body -{ - margin: 0; - padding:0; -} - -body -{ - font:normal 15px/1.3 sans-serif,arial; - text-align: left; - background:#ffffff; -} - -img -{ - border:0px; -} - -#footer -{ - /*padding-bottom:5px; - padding-top:5px;*/ -} -#footer div -{ - text-align:center; -} -#footer a -{ -/* color: #DC143C; */ -} - -.navigation-bar -{ - background-color: #015512; - height:35px; - padding-top:5px; - padding-right:5px; -} - -/*tree navigation*/ -.position_tree_box -{ - margin:5px 0px 25px 0px; - padding:5px; - font:normal 14px/1 sans-serif,arial; - border-top:1px solid #DC143C; - border-bottom:1px solid #DC143C; -} -.position_tree_box a, .position_tree_box a.ui-link:visited, .position_tree_box .ui-link -{ - text-decoration:none; - color:#DC143C; -} -/*.ui-body-d .ui-link { - color:#DC143C; - font-weight: bold; -}*/ -.last_tree_element -{ - font-weight:bold; -} - -.credits_item_title -{ - margin:15px 5px 5px 5px; - padding:5px; - padding-left:0px; - border-bottom:1px solid #228B22; - font-weight:bold; -} -.credits_item_description -{ - padding:5px; - padding-left:0px; - margin:5px; - overflow:hidden; - width:100%; -} - -#hardware_list -{ -/* padding:0 15px; */ - margin-top:20px; - margin-bottom:20px; -} -.bottom_licence_notice -{ - clear:left; - clear:right; - font:normal 12px/1.2 sans-serif,arial; - padding:10px; - background:#E0FFFF; - margin:25px 0px 5px 0px; -} -.page_list -{ - margin-top:28px; -} - -.notebook_view_title -{ - margin-bottom:28px; -} -/*jquery mobile*/ -.ui-header { - background: #B7F18C; -} - -.ui-li-thumb { - left: 5px; - max-height: 70px; - max-width: 70px; - position: absolute; - top: 5px; -} - -.ui-content .ui-listview { - margin: 15px -15px; -} - -#language-dialog .ui-header .ui-title -{ - display: block; - font-size: 16px; - margin: 0.7em 0; - margin-left:30px; - margin-top:0.8em; - text-align: left; -} -.main_content_element -{ - padding:5px 0; - border-top:1px dashed #000; -} - -.track_alert -{ - border:10px solid red; - padding:5px; -} - -.device_description -{ - background-color:#E6E6FA; - padding:5px; -} - -.viewall_no_items_found -{ - font:normal 14px/1 sans-serif,arial; - margin:20px 5px; - padding:5px; -/* color: #FF4500; */ - border-top:1px solid #FF4500; - border-bottom:1px solid #FF4500; -} - -.home_objectives_description -{ - margin:5px; - overflow:hidden; - width:100%; -} -.home_objectives_description img -{ - float:left; - margin-right:5px; -} -.home_objectives_title -{ - margin:15px 5px 5px 5px; -/* background:#90EE90; */ - font-weight:bold; - padding:5px 0px; - border-bottom:1px solid #228B22; -} - -.home_container -{ - margin:20px 0px; -} - -.tables_of_contents -{ - margin:20px 0; - padding:5px; - background-color:#EAF2F4; - border:1px solid #C7DAEF; - -moz-border-radius: 15px; - -webkit-border-radius: 15px; -} -.tables_of_contents a -{ - font-size:14px; -} -.tables_of_contents_title -{ - margin:10px 25px; - font-weight:bold; -} -/*wiki code*/ -.code_pre -{ -/* width:650px; */ - max-height:300px; - overflow:scroll; - background:#f9f4a7; - padding:5px 0 5px 5px; - font-size:12px; -/* color:#4169E1; */ - border:1px dashed #d4cb3b; -} - -.div_h1 -{ - font:bold 18px/1 sans-serif,arial; - border-bottom:1px solid gray; - padding:3px 0px; - margin:20px 0px 10px 0px; - color:gray; -} -.div_h2 -{ - font:bold 17px/1 sans-serif,arial; - color:gray; - padding:2px 0; -} -.div_h3 -{ - font:bold 16px/1 sans-serif,arial; - color:gray; - padding:2px 0; -} -.div_lang -{ - margin-top:4em; - padding:8px; - background:#cfe2ff; - /*border-top:1px solid #FFA500; - border-bottom:1px solid #FFA500;*/ -} -.div_lang a -{ - padding:0px 3px; -} - -.ui-body { - padding-top: 0.8em; - margin-top:10px; -} - -.ui-li-desc { white-space: normal; } -.ui-li-heading { white-space: normal; } -.ui-li .ui-btn-text a.ui-link-inherit { white-space: normal; } - -.devices_list .ui-li-desc -{ -/* border-bottom:1px dashed #A9A9A9; */ -} - -.ui-listview .ui-li-icon { - top: 1.3em; -} - -/*.ui-icon, .ui-icon-searchfield:after { - -moz-border-radius: 0px; - -webkit-border-radius: 0px; - background: url("images/icons-18-white.png") no-repeat scroll 0 0 rgba(0, 0, 0, 0.4); -}*/ diff --git a/h-source/Public/Css/pagelist.css b/h-source/Public/Css/pagelist.css deleted file mode 100644 index 93c8454..0000000 --- a/h-source/Public/Css/pagelist.css +++ /dev/null @@ -1,29 +0,0 @@ -/*page division*/ -.pageList { - text-align:left; - font:normal 14px/1 Verdana,arial; - padding:10px; -} - -div.pageList a { - padding:5px 10px; - border:1px outset #708090; - color:#B0E0E6; - background:#4169E1; - margin-right:5px; -} - -/*view footer*/ -.viewFooter { - height:50px; - border-top:1px solid #4169E1; - padding-top:6px; - margin-bottom:10px; - background:#d1deed; -} - -div.pageList a.currentPage -{ - font-weight:bold; - background:#0000CD; -} \ No newline at end of file diff --git a/h-source/Public/Css/panel.css b/h-source/Public/Css/panel.css deleted file mode 100644 index 8b9f9a9..0000000 --- a/h-source/Public/Css/panel.css +++ /dev/null @@ -1,74 +0,0 @@ -ul { - list-style-type: none; -} - -div.mainPanel { - -} - -/*logout button*/ -.logoutButton -{ - float:left; - width:70px; - height:40px; - margin-left:5px; - border:1px outset #708090; - background:#4169E1; - text-align:center; -} -.logoutButton a -{ - display:block; - margin-top:13px; - color:#B0E0E6; - font:bold 12px/1 Verdana,arial; -} - -/*list of application in the panel main action*/ -.panelApplicationList -{ - padding:0px; -} -.panelApplicationList li -{ - display:block; - width:200px; - height:30px; - border:1px outset #708090; - margin:5px; - background:#4169E1; - padding-top:9px; -} - -.panelApplicationList li a -{ - margin:5px; - font: bold 14px/1 Verdana,arial; - color:#B0E0E6; -} - -/*list of groups an user is inserted within*/ -.groupsList -{ - margin:20px 5px 5px 5px; - font:normal 14px/1 Verdana,arial; -} -.groupsList li -{ - margin:5px 0px; - padding:0px; - font:bold 14px/1 Verdana,arial; -} -.groupsList ul -{ - padding:10px; -} - -/*list of logged users in panel*/ -.usersLoggedList -{ - margin:5px; - text-align:right; - font:normal 14px/1 Verdana,arial; -} \ No newline at end of file diff --git a/h-source/Public/Css/popupmenu.css b/h-source/Public/Css/popupmenu.css deleted file mode 100755 index 66a202e..0000000 --- a/h-source/Public/Css/popupmenu.css +++ /dev/null @@ -1,49 +0,0 @@ -.verticalMenu { - margin-bottom:50px; - margin-left:10px; -/* text-align:right;*/ -} - -ul#menuBlock { -/* float:right; */ - float:left; - margin:0px; - padding:0px; - list-style:none; - height:24px; -} - -ul#menuBlock li { - position:relative; - display:block; - float:left; - width:150px; - border:1px outset #D3D3D3; - height:21px; - text-align:center; - background:#E6E6FA; - padding-top:5px; - padding-bottom:-2px; -} - -ul#menuBlock li a { - color:#696969; - font: bold 12px/1 Verdana,arial; -} - -ul#menuBlock li ul { - margin:0px; - padding:0px; - list-style:none; - position:absolute; - top:24px; - left:-1px; - display:none; -} - -ul#menuBlock li ul li { -} - -/*ul#menuBlock li:hover ul{ - display:block; -}*/ \ No newline at end of file diff --git a/h-source/Public/Css/scaffold.css b/h-source/Public/Css/scaffold.css deleted file mode 100755 index 8cc7529..0000000 --- a/h-source/Public/Css/scaffold.css +++ /dev/null @@ -1,105 +0,0 @@ -html, body{margin: 0;padding:0} - -body{ - font-family: Verdana,arial,sans-serif; - font-size: 11px; - text-align: center; -/* background: #93045a; */ -} - -td { - font-size: 12px; -} - -img { - border:none; -} - -td.editForm, td.delForm, td.associateForm, td.moveupForm, td.movedownForm { - width:3%; -} - -td.editForm input, td.delForm input, td.associateForm input, td.moveupForm input, td.movedownForm input -{ - height:30px; -} - -/*alert string*/ -.alert { - font:bold 12px/1.5 Verdana,arial; - padding:5px; - margin:5px 5px 15px 5px; - background:TOMATO; - border-top:2px solid MAROON; - border-bottom:2px solid MAROON; - color:MAROON; -} - -/*executed operation string*/ -.executed { - font:bold 12px/1.5 Verdana,arial; - padding:5px; - margin:5px 5px 15px 5px; - background:#E0FFFF; - border-top:2px solid #ADD8E6; - border-bottom:2px solid #ADD8E6; - color:#4169E1; -} - -/*action:main*/ -tr.listRow { - background:#E6E6FA; -} - -tr.listHead { - font-weight: bold; - background:#d1deed; - border:1px solid #4169E1; - border-bottom:1px solid #4169E1; -} - -tr.listHead td { -/* font-weight: bold; */ -/* background:#d1deed; */ - border-top:1px solid #4169E1; - border-bottom:1px solid #4169E1; -} - -.recordsBox { - margin:10px 0px; -} - -.recordsBox table { - width:100%; -} - -.listItemForm { - margin:0px; -} - -a.linkItem { -/* background:red; */ - font:bold 12px/1 Verdana,arial; -} - -/*controller:panel -/*action:main*/ -.main_box { - padding:50px 20px; - width:700px; - height:250px; -} -.top_color { - text-align:center; - width:160px; - height:35px; - margin:0; - padding:0; -} -.bottom_color { - background:lavender; - text-align:center; - width:160px; - margin:0; - padding:5px 0; -} \ No newline at end of file diff --git a/h-source/Public/Img/Acun/book.png b/h-source/Public/Img/Acun/book.png deleted file mode 100755 index 0245944..0000000 Binary files a/h-source/Public/Img/Acun/book.png and /dev/null differ diff --git a/h-source/Public/Img/Acun/document_properties.png b/h-source/Public/Img/Acun/document_properties.png deleted file mode 100755 index bf4686f..0000000 Binary files a/h-source/Public/Img/Acun/document_properties.png and /dev/null differ diff --git a/h-source/Public/Img/Acun/filenew.png b/h-source/Public/Img/Acun/filenew.png deleted file mode 100755 index 66d34b3..0000000 Binary files a/h-source/Public/Img/Acun/filenew.png and /dev/null differ diff --git a/h-source/Public/Img/Acun/go_previous.png b/h-source/Public/Img/Acun/go_previous.png deleted file mode 100755 index 39685ad..0000000 Binary files a/h-source/Public/Img/Acun/go_previous.png and /dev/null differ diff --git a/h-source/Public/Img/Acun/help_hint.png b/h-source/Public/Img/Acun/help_hint.png deleted file mode 100644 index aed2f70..0000000 Binary files a/h-source/Public/Img/Acun/help_hint.png and /dev/null differ diff --git a/h-source/Public/Img/Acun/note.png b/h-source/Public/Img/Acun/note.png deleted file mode 100755 index 5b4b248..0000000 Binary files a/h-source/Public/Img/Acun/note.png and /dev/null differ diff --git a/h-source/Public/Img/Crystal/1282042718_hardware.png b/h-source/Public/Img/Crystal/1282042718_hardware.png deleted file mode 100644 index b971732..0000000 Binary files a/h-source/Public/Img/Crystal/1282042718_hardware.png and /dev/null differ diff --git a/h-source/Public/Img/Crystal/1282042976_hardware.png b/h-source/Public/Img/Crystal/1282042976_hardware.png deleted file mode 100644 index efffd46..0000000 Binary files a/h-source/Public/Img/Crystal/1282042976_hardware.png and /dev/null differ diff --git a/h-source/Public/Img/Crystal/agt_forward.png b/h-source/Public/Img/Crystal/agt_forward.png deleted file mode 100755 index 13a59ad..0000000 Binary files a/h-source/Public/Img/Crystal/agt_forward.png and /dev/null differ diff --git a/h-source/Public/Img/Crystal/button_cancel.png b/h-source/Public/Img/Crystal/button_cancel.png deleted file mode 100755 index e2db55f..0000000 Binary files a/h-source/Public/Img/Crystal/button_cancel.png and /dev/null differ diff --git a/h-source/Public/Img/Crystal/button_ok.png b/h-source/Public/Img/Crystal/button_ok.png deleted file mode 100755 index 2f86f0a..0000000 Binary files a/h-source/Public/Img/Crystal/button_ok.png and /dev/null differ diff --git a/h-source/Public/Img/Crystal/cam_mount-22.png b/h-source/Public/Img/Crystal/cam_mount-22.png deleted file mode 100755 index d4d2595..0000000 Binary files a/h-source/Public/Img/Crystal/cam_mount-22.png and /dev/null differ diff --git a/h-source/Public/Img/Crystal/cam_mount.png b/h-source/Public/Img/Crystal/cam_mount.png deleted file mode 100755 index 2da5732..0000000 Binary files a/h-source/Public/Img/Crystal/cam_mount.png and /dev/null differ diff --git a/h-source/Public/Img/Crystal/clear.png b/h-source/Public/Img/Crystal/clear.png deleted file mode 100755 index 4ad6a58..0000000 Binary files a/h-source/Public/Img/Crystal/clear.png and /dev/null differ diff --git a/h-source/Public/Img/Crystal/hardware.png b/h-source/Public/Img/Crystal/hardware.png deleted file mode 100755 index 7e90419..0000000 Binary files a/h-source/Public/Img/Crystal/hardware.png and /dev/null differ diff --git a/h-source/Public/Img/Crystal/home.png b/h-source/Public/Img/Crystal/home.png deleted file mode 100755 index 816a0c3..0000000 Binary files a/h-source/Public/Img/Crystal/home.png and /dev/null differ diff --git a/h-source/Public/Img/Crystal/lock.png b/h-source/Public/Img/Crystal/lock.png deleted file mode 100755 index d1d0706..0000000 Binary files a/h-source/Public/Img/Crystal/lock.png and /dev/null differ diff --git a/h-source/Public/Img/Crystal/modem.png b/h-source/Public/Img/Crystal/modem.png deleted file mode 100755 index f2f9c5b..0000000 Binary files a/h-source/Public/Img/Crystal/modem.png and /dev/null differ diff --git a/h-source/Public/Img/Crystal/modem_22.png b/h-source/Public/Img/Crystal/modem_22.png deleted file mode 100755 index da7e61d..0000000 Binary files a/h-source/Public/Img/Crystal/modem_22.png and /dev/null differ diff --git a/h-source/Public/Img/Crystal/rss.png b/h-source/Public/Img/Crystal/rss.png deleted file mode 100755 index 3214cb6..0000000 Binary files a/h-source/Public/Img/Crystal/rss.png and /dev/null differ diff --git a/h-source/Public/Img/Crystal/unlock.png b/h-source/Public/Img/Crystal/unlock.png deleted file mode 100755 index 13b1090..0000000 Binary files a/h-source/Public/Img/Crystal/unlock.png and /dev/null differ diff --git a/h-source/Public/Img/Crystal/usb.png b/h-source/Public/Img/Crystal/usb.png deleted file mode 100755 index 88c7c80..0000000 Binary files a/h-source/Public/Img/Crystal/usb.png and /dev/null differ diff --git a/h-source/Public/Img/Crystal/usb_22.png b/h-source/Public/Img/Crystal/usb_22.png deleted file mode 100755 index 97da84a..0000000 Binary files a/h-source/Public/Img/Crystal/usb_22.png and /dev/null differ diff --git a/h-source/Public/Img/Famfamfam/de.png b/h-source/Public/Img/Famfamfam/de.png deleted file mode 100755 index ac4a977..0000000 Binary files a/h-source/Public/Img/Famfamfam/de.png and /dev/null differ diff --git a/h-source/Public/Img/Famfamfam/es.png b/h-source/Public/Img/Famfamfam/es.png deleted file mode 100755 index c2de2d7..0000000 Binary files a/h-source/Public/Img/Famfamfam/es.png and /dev/null differ diff --git a/h-source/Public/Img/Famfamfam/fr.png b/h-source/Public/Img/Famfamfam/fr.png deleted file mode 100755 index 8332c4e..0000000 Binary files a/h-source/Public/Img/Famfamfam/fr.png and /dev/null differ diff --git a/h-source/Public/Img/Famfamfam/gb.png b/h-source/Public/Img/Famfamfam/gb.png deleted file mode 100644 index ff701e1..0000000 Binary files a/h-source/Public/Img/Famfamfam/gb.png and /dev/null differ diff --git a/h-source/Public/Img/Famfamfam/gr.png b/h-source/Public/Img/Famfamfam/gr.png deleted file mode 100755 index 8651ade..0000000 Binary files a/h-source/Public/Img/Famfamfam/gr.png and /dev/null differ diff --git a/h-source/Public/Img/Famfamfam/it.png b/h-source/Public/Img/Famfamfam/it.png deleted file mode 100755 index 89692f7..0000000 Binary files a/h-source/Public/Img/Famfamfam/it.png and /dev/null differ diff --git a/h-source/Public/Img/Famfamfam/pt.png b/h-source/Public/Img/Famfamfam/pt.png deleted file mode 100644 index ece7980..0000000 Binary files a/h-source/Public/Img/Famfamfam/pt.png and /dev/null differ diff --git a/h-source/Public/Img/Glaze/folder_blue.png b/h-source/Public/Img/Glaze/folder_blue.png deleted file mode 100755 index 98eadea..0000000 Binary files a/h-source/Public/Img/Glaze/folder_blue.png and /dev/null differ diff --git a/h-source/Public/Img/Glaze/folder_blue_open.png b/h-source/Public/Img/Glaze/folder_blue_open.png deleted file mode 100755 index 4938afc..0000000 Binary files a/h-source/Public/Img/Glaze/folder_blue_open.png and /dev/null differ diff --git a/h-source/Public/Img/Glaze/viewmag.png b/h-source/Public/Img/Glaze/viewmag.png deleted file mode 100755 index c3976ee..0000000 Binary files a/h-source/Public/Img/Glaze/viewmag.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/applications-internet.png b/h-source/Public/Img/H2O/applications-internet.png deleted file mode 100755 index 193c46f..0000000 Binary files a/h-source/Public/Img/H2O/applications-internet.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/audio-card.png b/h-source/Public/Img/H2O/audio-card.png deleted file mode 100755 index bf7445d..0000000 Binary files a/h-source/Public/Img/H2O/audio-card.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/audio-card_22.png b/h-source/Public/Img/H2O/audio-card_22.png deleted file mode 100755 index d5a7ad4..0000000 Binary files a/h-source/Public/Img/H2O/audio-card_22.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/camera-web.png b/h-source/Public/Img/H2O/camera-web.png deleted file mode 100755 index c95f65c..0000000 Binary files a/h-source/Public/Img/H2O/camera-web.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/camera-web_22.png b/h-source/Public/Img/H2O/camera-web_22.png deleted file mode 100755 index 8a0b339..0000000 Binary files a/h-source/Public/Img/H2O/camera-web_22.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/computer-laptop.png b/h-source/Public/Img/H2O/computer-laptop.png deleted file mode 100755 index b5d8bde..0000000 Binary files a/h-source/Public/Img/H2O/computer-laptop.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/computer-laptop_22.png b/h-source/Public/Img/H2O/computer-laptop_22.png deleted file mode 100755 index f33ca30..0000000 Binary files a/h-source/Public/Img/H2O/computer-laptop_22.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/download.png b/h-source/Public/Img/H2O/download.png deleted file mode 100755 index ec888b8..0000000 Binary files a/h-source/Public/Img/H2O/download.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/download_48.png b/h-source/Public/Img/H2O/download_48.png deleted file mode 100755 index e81619b..0000000 Binary files a/h-source/Public/Img/H2O/download_48.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/im-ban-user.png b/h-source/Public/Img/H2O/im-ban-user.png deleted file mode 100755 index 3771291..0000000 Binary files a/h-source/Public/Img/H2O/im-ban-user.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/im-user.png b/h-source/Public/Img/H2O/im-user.png deleted file mode 100755 index 69de2e4..0000000 Binary files a/h-source/Public/Img/H2O/im-user.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/media-flash-sd-mmc.png b/h-source/Public/Img/H2O/media-flash-sd-mmc.png deleted file mode 100755 index ff41fd8..0000000 Binary files a/h-source/Public/Img/H2O/media-flash-sd-mmc.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/media-flash-sd-mmc_22.png b/h-source/Public/Img/H2O/media-flash-sd-mmc_22.png deleted file mode 100755 index cd97b66..0000000 Binary files a/h-source/Public/Img/H2O/media-flash-sd-mmc_22.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/network-wired.png b/h-source/Public/Img/H2O/network-wired.png deleted file mode 100755 index 2981c5b..0000000 Binary files a/h-source/Public/Img/H2O/network-wired.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/network-wired_22.png b/h-source/Public/Img/H2O/network-wired_22.png deleted file mode 100755 index 7e22be7..0000000 Binary files a/h-source/Public/Img/H2O/network-wired_22.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/network-wireless.png b/h-source/Public/Img/H2O/network-wireless.png deleted file mode 100755 index 747edc9..0000000 Binary files a/h-source/Public/Img/H2O/network-wireless.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/network-wireless_22.png b/h-source/Public/Img/H2O/network-wireless_22.png deleted file mode 100755 index 94c4058..0000000 Binary files a/h-source/Public/Img/H2O/network-wireless_22.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/preferences-system-bluetooth-22.png b/h-source/Public/Img/H2O/preferences-system-bluetooth-22.png deleted file mode 100755 index c0b3f06..0000000 Binary files a/h-source/Public/Img/H2O/preferences-system-bluetooth-22.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/preferences-system-bluetooth.png b/h-source/Public/Img/H2O/preferences-system-bluetooth.png deleted file mode 100755 index f64ecb0..0000000 Binary files a/h-source/Public/Img/H2O/preferences-system-bluetooth.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/printer.png b/h-source/Public/Img/H2O/printer.png deleted file mode 100755 index fd48f9f..0000000 Binary files a/h-source/Public/Img/H2O/printer.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/printer_22.png b/h-source/Public/Img/H2O/printer_22.png deleted file mode 100755 index 6e110de..0000000 Binary files a/h-source/Public/Img/H2O/printer_22.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/scanner.png b/h-source/Public/Img/H2O/scanner.png deleted file mode 100755 index 7a50365..0000000 Binary files a/h-source/Public/Img/H2O/scanner.png and /dev/null differ diff --git a/h-source/Public/Img/H2O/scanner_22.png b/h-source/Public/Img/H2O/scanner_22.png deleted file mode 100755 index d7b57e0..0000000 Binary files a/h-source/Public/Img/H2O/scanner_22.png and /dev/null differ diff --git a/h-source/Public/Img/Icons/back.png b/h-source/Public/Img/Icons/back.png deleted file mode 100644 index 6ceb852..0000000 Binary files a/h-source/Public/Img/Icons/back.png and /dev/null differ diff --git a/h-source/Public/Img/Icons/delete.png b/h-source/Public/Img/Icons/delete.png deleted file mode 100644 index 9b192fe..0000000 Binary files a/h-source/Public/Img/Icons/delete.png and /dev/null differ diff --git a/h-source/Public/Img/Icons/elementary_2_5/AUTHORS b/h-source/Public/Img/Icons/elementary_2_5/AUTHORS deleted file mode 100755 index dd652c4..0000000 --- a/h-source/Public/Img/Icons/elementary_2_5/AUTHORS +++ /dev/null @@ -1,28 +0,0 @@ -#################### -ABOUT: # -#################### -These icons are taken from the elementary theme. The delete.png file has been modified by Antonio Gallo (tonicucoz@yahoo.com) - -elementary is designed and developed by Daniel Foré - -GNOME icons, Humanity icons, and elementary icons are all licensed under the GPL. - -This package is licensed under GNU General Public License version 2. - -Icons based on GNOME and other GNOME projects are licensed GPL. - You can visit the GNOME website here: - http://www.gnome.org/ - -Icons based on Tango sources or taken from the Tango project are public domain. - You can visit the Tango project website here: - http://tango.freedesktop.org/Tango_Desktop_Project - -Icons based on Humanity sources or taken from the elementary project are licensed GPL. - You can visit the Humanity website here: - http://launchpad.net/humanity - -#################### -Special Thanks: # -#################### - -The awesome Humanity team for their hard work! diff --git a/h-source/Public/Img/Icons/elementary_2_5/CONTRIBUTORS b/h-source/Public/Img/Icons/elementary_2_5/CONTRIBUTORS deleted file mode 100755 index 801c4cc..0000000 --- a/h-source/Public/Img/Icons/elementary_2_5/CONTRIBUTORS +++ /dev/null @@ -1,3 +0,0 @@ -Sebastian Porta -Oliver Scholtz -Dennis Fisher, for his amazing work with emblems to make them look beautiful. diff --git a/h-source/Public/Img/Icons/elementary_2_5/COPYING b/h-source/Public/Img/Icons/elementary_2_5/COPYING deleted file mode 100755 index d60c31a..0000000 --- a/h-source/Public/Img/Icons/elementary_2_5/COPYING +++ /dev/null @@ -1,340 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc. - 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Library General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Library General -Public License instead of this License. diff --git a/h-source/Public/Img/Icons/elementary_2_5/ChangeLog b/h-source/Public/Img/Icons/elementary_2_5/ChangeLog deleted file mode 100755 index 2ba7169..0000000 --- a/h-source/Public/Img/Icons/elementary_2_5/ChangeLog +++ /dev/null @@ -1,6 +0,0 @@ -Elementary icons 2.5 kde port - by jetpack, changelog: - -0.1 -=== -* Initial Version. -* Elementary icons by Dan Rabbit v2.5 \ No newline at end of file diff --git a/h-source/Public/Img/Icons/elementary_2_5/add.png b/h-source/Public/Img/Icons/elementary_2_5/add.png deleted file mode 100755 index e6c9c9c..0000000 Binary files a/h-source/Public/Img/Icons/elementary_2_5/add.png and /dev/null differ diff --git a/h-source/Public/Img/Icons/elementary_2_5/clear_filter.png b/h-source/Public/Img/Icons/elementary_2_5/clear_filter.png deleted file mode 100755 index c4b47db..0000000 Binary files a/h-source/Public/Img/Icons/elementary_2_5/clear_filter.png and /dev/null differ diff --git a/h-source/Public/Img/Icons/elementary_2_5/delete.png b/h-source/Public/Img/Icons/elementary_2_5/delete.png deleted file mode 100755 index c4b47db..0000000 Binary files a/h-source/Public/Img/Icons/elementary_2_5/delete.png and /dev/null differ diff --git a/h-source/Public/Img/Icons/elementary_2_5/down.png b/h-source/Public/Img/Icons/elementary_2_5/down.png deleted file mode 100755 index 21c6d58..0000000 Binary files a/h-source/Public/Img/Icons/elementary_2_5/down.png and /dev/null differ diff --git a/h-source/Public/Img/Icons/elementary_2_5/edit.png b/h-source/Public/Img/Icons/elementary_2_5/edit.png deleted file mode 100755 index ed0d0ef..0000000 Binary files a/h-source/Public/Img/Icons/elementary_2_5/edit.png and /dev/null differ diff --git a/h-source/Public/Img/Icons/elementary_2_5/find.png b/h-source/Public/Img/Icons/elementary_2_5/find.png deleted file mode 100755 index 382cc98..0000000 Binary files a/h-source/Public/Img/Icons/elementary_2_5/find.png and /dev/null differ diff --git a/h-source/Public/Img/Icons/elementary_2_5/left.png b/h-source/Public/Img/Icons/elementary_2_5/left.png deleted file mode 100755 index 316d4c1..0000000 Binary files a/h-source/Public/Img/Icons/elementary_2_5/left.png and /dev/null differ diff --git a/h-source/Public/Img/Icons/elementary_2_5/link.png b/h-source/Public/Img/Icons/elementary_2_5/link.png deleted file mode 100755 index 625a1fb..0000000 Binary files a/h-source/Public/Img/Icons/elementary_2_5/link.png and /dev/null differ diff --git a/h-source/Public/Img/Icons/elementary_2_5/panel.png b/h-source/Public/Img/Icons/elementary_2_5/panel.png deleted file mode 100755 index 464149f..0000000 Binary files a/h-source/Public/Img/Icons/elementary_2_5/panel.png and /dev/null differ diff --git a/h-source/Public/Img/Icons/elementary_2_5/up.png b/h-source/Public/Img/Icons/elementary_2_5/up.png deleted file mode 100755 index 14d3603..0000000 Binary files a/h-source/Public/Img/Icons/elementary_2_5/up.png and /dev/null differ diff --git a/h-source/Public/Img/Icons/file.png b/h-source/Public/Img/Icons/file.png deleted file mode 100644 index 443765f..0000000 Binary files a/h-source/Public/Img/Icons/file.png and /dev/null differ diff --git a/h-source/Public/Img/Icons/folder.png b/h-source/Public/Img/Icons/folder.png deleted file mode 100644 index 89fb6d5..0000000 Binary files a/h-source/Public/Img/Icons/folder.png and /dev/null differ diff --git a/h-source/Public/Img/Icons/image.png b/h-source/Public/Img/Icons/image.png deleted file mode 100644 index bbc8c82..0000000 Binary files a/h-source/Public/Img/Icons/image.png and /dev/null differ diff --git a/h-source/Public/Img/Icons/index.html b/h-source/Public/Img/Icons/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Public/Img/Icons/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Public/Img/back-60.png b/h-source/Public/Img/back-60.png deleted file mode 100644 index 225df8e..0000000 Binary files a/h-source/Public/Img/back-60.png and /dev/null differ diff --git a/h-source/Public/Img/back_last.png b/h-source/Public/Img/back_last.png deleted file mode 100644 index 6411e49..0000000 Binary files a/h-source/Public/Img/back_last.png and /dev/null differ diff --git a/h-source/Public/Img/back_wiki.png b/h-source/Public/Img/back_wiki.png deleted file mode 100644 index b34a9b9..0000000 Binary files a/h-source/Public/Img/back_wiki.png and /dev/null differ diff --git a/h-source/Public/Img/discover.png b/h-source/Public/Img/discover.png deleted file mode 100644 index 28c799a..0000000 Binary files a/h-source/Public/Img/discover.png and /dev/null differ diff --git a/h-source/Public/Img/download.png b/h-source/Public/Img/download.png deleted file mode 100644 index d2f81dc..0000000 Binary files a/h-source/Public/Img/download.png and /dev/null differ diff --git a/h-source/Public/Img/download_code.png b/h-source/Public/Img/download_code.png deleted file mode 100755 index f40fc74..0000000 Binary files a/h-source/Public/Img/download_code.png and /dev/null differ diff --git a/h-source/Public/Img/download_code_gpl3.png b/h-source/Public/Img/download_code_gpl3.png deleted file mode 100644 index 7349d11..0000000 Binary files a/h-source/Public/Img/download_code_gpl3.png and /dev/null differ diff --git a/h-source/Public/Img/edit-60.png b/h-source/Public/Img/edit-60.png deleted file mode 100644 index 254ce23..0000000 Binary files a/h-source/Public/Img/edit-60.png and /dev/null differ diff --git a/h-source/Public/Img/fingerprint_icon-22.png b/h-source/Public/Img/fingerprint_icon-22.png deleted file mode 100644 index 5593419..0000000 Binary files a/h-source/Public/Img/fingerprint_icon-22.png and /dev/null differ diff --git a/h-source/Public/Img/fingerprint_icon.png b/h-source/Public/Img/fingerprint_icon.png deleted file mode 100644 index 989ba28..0000000 Binary files a/h-source/Public/Img/fingerprint_icon.png and /dev/null differ diff --git a/h-source/Public/Img/fsf_logo.png b/h-source/Public/Img/fsf_logo.png deleted file mode 100755 index 90ac03d..0000000 Binary files a/h-source/Public/Img/fsf_logo.png and /dev/null differ diff --git a/h-source/Public/Img/history-60.png b/h-source/Public/Img/history-60.png deleted file mode 100644 index c726964..0000000 Binary files a/h-source/Public/Img/history-60.png and /dev/null differ diff --git a/h-source/Public/Img/link.png b/h-source/Public/Img/link.png deleted file mode 100644 index 12f9bce..0000000 Binary files a/h-source/Public/Img/link.png and /dev/null differ diff --git a/h-source/Public/Img/mailing.png b/h-source/Public/Img/mailing.png deleted file mode 100644 index dbb2207..0000000 Binary files a/h-source/Public/Img/mailing.png and /dev/null differ diff --git a/h-source/Public/Img/mobile.png b/h-source/Public/Img/mobile.png deleted file mode 100644 index 4fbf1de..0000000 Binary files a/h-source/Public/Img/mobile.png and /dev/null differ diff --git a/h-source/Public/Img/new-60.png b/h-source/Public/Img/new-60.png deleted file mode 100644 index d484867..0000000 Binary files a/h-source/Public/Img/new-60.png and /dev/null differ diff --git a/h-source/Public/Img/popup_back.png b/h-source/Public/Img/popup_back.png deleted file mode 100644 index 4cb7139..0000000 Binary files a/h-source/Public/Img/popup_back.png and /dev/null differ diff --git a/h-source/Public/Img/rss.png b/h-source/Public/Img/rss.png deleted file mode 100644 index f744669..0000000 Binary files a/h-source/Public/Img/rss.png and /dev/null differ diff --git a/h-source/Public/Img/search_back.png b/h-source/Public/Img/search_back.png deleted file mode 100644 index 6fd3b01..0000000 Binary files a/h-source/Public/Img/search_back.png and /dev/null differ diff --git a/h-source/Public/Img/tab_icon_2.ico b/h-source/Public/Img/tab_icon_2.ico deleted file mode 100644 index 1adece3..0000000 Binary files a/h-source/Public/Img/tab_icon_2.ico and /dev/null differ diff --git a/h-source/Public/Img/talk-60.png b/h-source/Public/Img/talk-60.png deleted file mode 100644 index d892a8d..0000000 Binary files a/h-source/Public/Img/talk-60.png and /dev/null differ diff --git a/h-source/Public/Img/talk_messages.png b/h-source/Public/Img/talk_messages.png deleted file mode 100644 index 6a753d5..0000000 Binary files a/h-source/Public/Img/talk_messages.png and /dev/null differ diff --git a/h-source/Public/Img/title.png b/h-source/Public/Img/title.png deleted file mode 100644 index 4a912bd..0000000 Binary files a/h-source/Public/Img/title.png and /dev/null differ diff --git a/h-source/Public/Js/DisplayTag.js b/h-source/Public/Js/DisplayTag.js deleted file mode 100755 index 1ba1fb7..0000000 --- a/h-source/Public/Js/DisplayTag.js +++ /dev/null @@ -1,10 +0,0 @@ - \ No newline at end of file diff --git a/h-source/Public/Js/TinyMCE.js b/h-source/Public/Js/TinyMCE.js deleted file mode 100755 index b0f994e..0000000 --- a/h-source/Public/Js/TinyMCE.js +++ /dev/null @@ -1,34 +0,0 @@ -tinyMCE.init({ - // General options - mode : "textareas", - theme : "advanced", - editor_selector : "contentArea", -// editor_deselector : "mceNoEditor", - plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template", - - // Theme options - theme_advanced_buttons1 : "justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect", - theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,code", - theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media", - theme_advanced_buttons4 : "styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,template,|,forecolor,backcolor,bold,italic,underline,strikethrough,|,insertdate,inserttime,preview", - theme_advanced_toolbar_location : "top", - theme_advanced_toolbar_align : "left", - theme_advanced_statusbar_location : "bottom", - theme_advanced_resizing : true, - - // Example content CSS (should be your site CSS) - content_css : "../stili_editor.css", - - // Drop lists for link/image/media/template dialogs - template_external_list_url : "lists/template_list.js", - external_link_list_url : "lists/link_list.js", - external_image_list_url : "lists/image_list.js", - media_external_list_url : "lists/media_list.js", - - // Replace values for the template plugin - template_replace_values : { - username : "Some User", - staffid : "991234" - } - }); - diff --git a/h-source/Public/Js/functions.js b/h-source/Public/Js/functions.js deleted file mode 100644 index 5b426d2..0000000 --- a/h-source/Public/Js/functions.js +++ /dev/null @@ -1,189 +0,0 @@ - \ No newline at end of file diff --git a/h-source/Public/Js/index.html b/h-source/Public/Js/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Public/Js/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png b/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png deleted file mode 100755 index 82524ab..0000000 Binary files a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png and /dev/null differ diff --git a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png b/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png deleted file mode 100755 index 6aed97a..0000000 Binary files a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png and /dev/null differ diff --git a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png b/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png deleted file mode 100755 index f11ca67..0000000 Binary files a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png and /dev/null differ diff --git a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png b/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png deleted file mode 100755 index 68306d1..0000000 Binary files a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png and /dev/null differ diff --git a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png b/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png deleted file mode 100755 index f567c28..0000000 Binary files a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png and /dev/null differ diff --git a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png b/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png deleted file mode 100755 index 29e9965..0000000 Binary files a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png and /dev/null differ diff --git a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png b/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png deleted file mode 100755 index 9a46d19..0000000 Binary files a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png and /dev/null differ diff --git a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png b/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png deleted file mode 100755 index f811f30..0000000 Binary files a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png and /dev/null differ diff --git a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png b/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png deleted file mode 100755 index 755fe99..0000000 Binary files a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png and /dev/null differ diff --git a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png b/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png deleted file mode 100755 index 98705f9..0000000 Binary files a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png and /dev/null differ diff --git a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png b/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png deleted file mode 100755 index 2179078..0000000 Binary files a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png and /dev/null differ diff --git a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png b/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png deleted file mode 100755 index de76ce2..0000000 Binary files a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png and /dev/null differ diff --git a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png b/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png deleted file mode 100755 index 42f8f99..0000000 Binary files a/h-source/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png and /dev/null differ diff --git a/h-source/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css b/h-source/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css deleted file mode 100755 index c4ed3ea..0000000 --- a/h-source/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css +++ /dev/null @@ -1,315 +0,0 @@ -/* - * jQuery UI CSS Framework @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { display: none; } -.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } -.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } -.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } -.ui-helper-clearfix { display: inline-block; } -/* required comment for clearfix to work in Opera \*/ -* html .ui-helper-clearfix { height:1%; } -.ui-helper-clearfix { display:block; } -/* end clearfix */ -.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { cursor: default !important; } - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } - - -/* - * jQuery UI CSS Framework @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - * - * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=segoe%20ui,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=3px&bgColorHeader=f9f9f9&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=100&borderColorHeader=cccccc&fcHeader=e69700&iconColorHeader=5fa5e3&bgColorContent=eeeeee&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=0a82eb&bgColorDefault=1484e6&bgTextureDefault=08_diagonals_thick.png&bgImgOpacityDefault=22&borderColorDefault=ffffff&fcDefault=ffffff&iconColorDefault=fcdd4a&bgColorHover=2293f7&bgTextureHover=08_diagonals_thick.png&bgImgOpacityHover=26&borderColorHover=2293f7&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=e69700&bgTextureActive=08_diagonals_thick.png&bgImgOpacityActive=20&borderColorActive=e69700&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=c5ddfc&bgTextureHighlight=07_diagonals_small.png&bgImgOpacityHighlight=25&borderColorHighlight=ffffff&fcHighlight=333333&iconColorHighlight=0b54d5&bgColorError=e69700&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=20&borderColorError=e69700&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=e6b900&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=e69700&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=20&thicknessShadow=0px&offsetTopShadow=6px&offsetLeftShadow=6px&cornerRadiusShadow=3px - */ - - -/* Component containers -----------------------------------*/ -.ui-widget { font-family: segoe ui, Arial, sans-serif; font-size: 1.1em; } -.ui-widget .ui-widget { font-size: 1em; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: segoe ui, Arial, sans-serif; font-size: 1em; } -.ui-widget-content { border: 1px solid #aaaaaa; background: #eeeeee url(images/ui-bg_inset-hard_100_eeeeee_1x100.png) 50% bottom repeat-x; color: #222222; } -.ui-widget-content a { color: #222222; } -.ui-widget-header { border: 1px solid #cccccc; background: #f9f9f9 url(images/ui-bg_highlight-soft_100_f9f9f9_1x100.png) 50% 50% repeat-x; color: #e69700; font-weight: bold; } -.ui-widget-header a { color: #e69700; } - -/* Interaction states -----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #ffffff; background: #1484e6 url(images/ui-bg_diagonals-thick_22_1484e6_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #ffffff; text-decoration: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #2293f7; background: #2293f7 url(images/ui-bg_diagonals-thick_26_2293f7_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } -.ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; } -.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #e69700; background: #e69700 url(images/ui-bg_diagonals-thick_20_e69700_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; } -.ui-widget :active { outline: none; } - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #ffffff; background: #c5ddfc url(images/ui-bg_diagonals-small_25_c5ddfc_40x40.png) 50% 50% repeat; color: #333333; } -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #333333; } -.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #e69700; background: #e69700 url(images/ui-bg_diagonals-thick_20_e69700_40x40.png) 50% 50% repeat; color: #ffffff; } -.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } -.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } -.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_0a82eb_256x240.png); } -.ui-widget-content .ui-icon {background-image: url(images/ui-icons_0a82eb_256x240.png); } -.ui-widget-header .ui-icon {background-image: url(images/ui-icons_5fa5e3_256x240.png); } -.ui-state-default .ui-icon { background-image: url(images/ui-icons_fcdd4a_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } -.ui-state-active .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_0b54d5_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } - -/* positioning */ -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-off { background-position: -96px -144px; } -.ui-icon-radio-on { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-tl { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; } -.ui-corner-tr { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; } -.ui-corner-bl { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; } -.ui-corner-br { -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } -.ui-corner-top { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; } -.ui-corner-bottom { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } -.ui-corner-right { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } -.ui-corner-left { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; } -.ui-corner-all { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } - -/* Overlays */ -.ui-widget-overlay { background: #e6b900 url(images/ui-bg_flat_0_e6b900_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } -.ui-widget-shadow { margin: 6px 0 0 6px; padding: 0px; background: #e69700 url(images/ui-bg_flat_0_e69700_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; }/* - * jQuery UI Dialog @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Dialog#theming - */ -.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } -.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } -.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } -.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } -.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } -.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } -.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } -.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } -.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } -.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } -.ui-draggable .ui-dialog-titlebar { cursor: move; } diff --git a/h-source/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js b/h-source/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js deleted file mode 100755 index 7469ef3..0000000 --- a/h-source/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js +++ /dev/null @@ -1,87 +0,0 @@ -/*! - * jQuery UI 1.8.4 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI - */ -(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.4",plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=0)&&c(a).is(":focusable")}})}})(jQuery); -;/*! - * jQuery UI Widget 1.8.4 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Widget - */ -(function(b,j){var k=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return k.call(b(this),a,c)})};b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options); -b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}): -this.each(function(){var g=b.data(this,a);if(g){d&&g.option(d);g._init()}else b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}); -this._create();this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}b.each(d,function(f, -h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a= -b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery); -;/* - * jQuery UI Position 1.8.4 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Position - */ -(function(c){c.ui=c.ui||{};var m=/left|center|right/,n=/top|center|bottom/,p=c.fn.position,q=c.fn.offset;c.fn.position=function(a){if(!a||!a.of)return p.apply(this,arguments);a=c.extend({},a);var b=c(a.of),d=(a.collision||"flip").split(" "),e=a.offset?a.offset.split(" "):[0,0],g,h,i;if(a.of.nodeType===9){g=b.width();h=b.height();i={top:0,left:0}}else if(a.of.scrollTo&&a.of.document){g=b.width();h=b.height();i={top:b.scrollTop(),left:b.scrollLeft()}}else if(a.of.preventDefault){a.at="left top";g=h= -0;i={top:a.of.pageY,left:a.of.pageX}}else{g=b.outerWidth();h=b.outerHeight();i=b.offset()}c.each(["my","at"],function(){var f=(a[this]||"").split(" ");if(f.length===1)f=m.test(f[0])?f.concat(["center"]):n.test(f[0])?["center"].concat(f):["center","center"];f[0]=m.test(f[0])?f[0]:"center";f[1]=n.test(f[1])?f[1]:"center";a[this]=f});if(d.length===1)d[1]=d[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(a.at[0]==="right")i.left+=g;else if(a.at[0]==="center")i.left+= -g/2;if(a.at[1]==="bottom")i.top+=h;else if(a.at[1]==="center")i.top+=h/2;i.left+=e[0];i.top+=e[1];return this.each(function(){var f=c(this),k=f.outerWidth(),l=f.outerHeight(),j=c.extend({},i);if(a.my[0]==="right")j.left-=k;else if(a.my[0]==="center")j.left-=k/2;if(a.my[1]==="bottom")j.top-=l;else if(a.my[1]==="center")j.top-=l/2;j.left=parseInt(j.left);j.top=parseInt(j.top);c.each(["left","top"],function(o,r){c.ui.position[d[o]]&&c.ui.position[d[o]][r](j,{targetWidth:g,targetHeight:h,elemWidth:k, -elemHeight:l,offset:e,my:a.my,at:a.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(j,{using:a.using}))})};c.ui.position={fit:{left:function(a,b){var d=c(window);b=a.left+b.elemWidth-d.width()-d.scrollLeft();a.left=b>0?a.left-b:Math.max(0,a.left)},top:function(a,b){var d=c(window);b=a.top+b.elemHeight-d.height()-d.scrollTop();a.top=b>0?a.top-b:Math.max(0,a.top)}},flip:{left:function(a,b){if(b.at[0]!=="center"){var d=c(window);d=a.left+b.elemWidth-d.width()-d.scrollLeft();var e=b.my[0]==="left"? --b.elemWidth:b.my[0]==="right"?b.elemWidth:0,g=-2*b.offset[0];a.left+=a.left<0?e+b.targetWidth+g:d>0?e-b.targetWidth+g:0}},top:function(a,b){if(b.at[1]!=="center"){var d=c(window);d=a.top+b.elemHeight-d.height()-d.scrollTop();var e=b.my[1]==="top"?-b.elemHeight:b.my[1]==="bottom"?b.elemHeight:0,g=b.at[1]==="top"?b.targetHeight:-b.targetHeight,h=-2*b.offset[1];a.top+=a.top<0?e+b.targetHeight+h:d>0?e+g+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(a,b){if(/static/.test(c.curCSS(a,"position")))a.style.position= -"relative";var d=c(a),e=d.offset(),g=parseInt(c.curCSS(a,"top",true),10)||0,h=parseInt(c.curCSS(a,"left",true),10)||0;e={top:b.top-e.top+g,left:b.left-e.left+h};"using"in b?b.using.call(a,e):d.css(e)};c.fn.offset=function(a){var b=this[0];if(!b||!b.ownerDocument)return null;if(a)return this.each(function(){c.offset.setOffset(this,a)});return q.call(this)}}})(jQuery); -;/* - * jQuery UI Dialog 1.8.4 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Dialog - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.button.js - * jquery.ui.draggable.js - * jquery.ui.mouse.js - * jquery.ui.position.js - * jquery.ui.resizable.js - */ -(function(c,j){c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",of:window,collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title"); -if(typeof this.originalTitle!=="string")this.originalTitle="";var a=this,b=a.options,d=b.title||a.originalTitle||" ",f=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
              ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(i){a.moveToTop(false, -i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var e=(a.uiDialogTitlebar=c("
              ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i); -return false}).appendTo(e);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id",f).html(d).prependTo(e);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;e.find("*").add(e).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&& -g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog"); -b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,f=d.options;if(f.modal&&!a||!f.stack&&!f.modal)return d._trigger("focus",b);if(f.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ= -f.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show); -a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(f){if(f.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),e=g.filter(":first");g=g.filter(":last");if(f.target===g[0]&&!f.shiftKey){e.focus(1);return false}else if(f.target===e[0]&&f.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._trigger("open");a._isOpen=true;return a}},_createButtons:function(a){var b=this,d=false, -f=c("
              ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("
              ").addClass("ui-dialog-buttonset").appendTo(f);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(e,h){e=c('').text(e).click(function(){h.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&e.button()});f.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(e){return{position:e.position, -offset:e.offset}}var b=this,d=b.options,f=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(e,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",e,a(h))},drag:function(e,h){b._trigger("drag",e,a(h))},stop:function(e,h){d.position=[h.position.left-f.scrollLeft(),h.position.top-f.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g); -b._trigger("dragStop",e,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}a=a===j?this.options.resizable:a;var d=this,f=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:d._minHeight(), -handles:a,start:function(e,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",e,b(h))},resize:function(e,h){d._trigger("resize",e,b(h))},stop:function(e,h){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();d._trigger("resizeStop",e,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight, -a.height)},_position:function(a){var b=[],d=[0,0],f;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,e){if(+b[g]===b[g]){d[g]=b[g];b[g]=e}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a); -f||this.uiDialog.hide()},_setOption:function(a,b){var d=this,f=d.uiDialog,g=f.is(":data(resizable)"),e=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);e=true;break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":f.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case "draggable":b? -d._makeDraggable():f.draggable("destroy");break;case "height":e=true;break;case "maxHeight":g&&f.resizable("option","maxHeight",b);e=true;break;case "maxWidth":g&&f.resizable("option","maxWidth",b);e=true;break;case "minHeight":g&&f.resizable("option","minHeight",b);e=true;break;case "minWidth":g&&f.resizable("option","minWidth",b);e=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&f.resizable("destroy");g&&typeof b==="string"&&f.resizable("option","handles",b);!g&&b!==false&& -d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break;case "width":e=true;break}c.Widget.prototype._setOption.apply(d,arguments);e&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:"auto"}:{minHeight:0,height:Math.max(a.height- -b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.4",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "), -create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){return c(d.target).zIndex()>=c.ui.dialog.overlay.maxZ})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("
              ").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(), -height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight); -b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){cl||(cl=c.createElement("iframe"),cl.frameBorder=cl.width=cl.height=0),b.appendChild(cl);if(!cm||!cl.createElement)cm=(cl.contentWindow||cl.contentDocument).document,cm.write((c.compatMode==="CSS1Compat"?"":"")+""),cm.close();d=cm.createElement(a),cm.body.appendChild(d),e=f.css(d,"display"),b.removeChild(cl)}ck[a]=e}return ck[a]}function cu(a,b){var c={};f.each(cq.concat.apply([],cq.slice(0,b)),function(){c[this]=a});return c}function ct(){cr=b}function cs(){setTimeout(ct,0);return cr=f.now()}function cj(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ci(){try{return new a.XMLHttpRequest}catch(b){}}function cc(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g0){if(c!=="border")for(;g=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?parseFloat(d):j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c
              a",d=q.getElementsByTagName("*"),e=q.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=q.getElementsByTagName("input")[0],b={leadingWhitespace:q.firstChild.nodeType===3,tbody:!q.getElementsByTagName("tbody").length,htmlSerialize:!!q.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:q.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete q.test}catch(s){b.deleteExpando=!1}!q.addEventListener&&q.attachEvent&&q.fireEvent&&(q.attachEvent("onclick",function(){b.noCloneEvent=!1}),q.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),q.appendChild(i),k=c.createDocumentFragment(),k.appendChild(q.lastChild),b.checkClone=k.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,k.removeChild(i),k.appendChild(q),q.innerHTML="",a.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",q.style.width="2px",q.appendChild(j),b.reliableMarginRight=(parseInt((a.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0);if(q.attachEvent)for(o in{submit:1,change:1,focusin:1})n="on"+o,p=n in q,p||(q.setAttribute(n,"return;"),p=typeof q[n]=="function"),b[o+"Bubbles"]=p;k.removeChild(q),k=g=h=j=q=i=null,f(function(){var a,d,e,g,h,i,j,k,m,n,o,r=c.getElementsByTagName("body")[0];!r||(j=1,k="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;",m="visibility:hidden;border:0;",n="style='"+k+"border:5px solid #000;padding:0;'",o="
              "+""+"
              ",a=c.createElement("div"),a.style.cssText=m+"width:0;height:0;position:static;top:0;margin-top:"+j+"px",r.insertBefore(a,r.firstChild),q=c.createElement("div"),a.appendChild(q),q.innerHTML="
              t
              ",l=q.getElementsByTagName("td"),p=l[0].offsetHeight===0,l[0].style.display="",l[1].style.display="none",b.reliableHiddenOffsets=p&&l[0].offsetHeight===0,q.innerHTML="",q.style.width=q.style.paddingLeft="1px",f.boxModel=b.boxModel=q.offsetWidth===2,typeof q.style.zoom!="undefined"&&(q.style.display="inline",q.style.zoom=1,b.inlineBlockNeedsLayout=q.offsetWidth===2,q.style.display="",q.innerHTML="
              ",b.shrinkWrapBlocks=q.offsetWidth!==2),q.style.cssText=k+m,q.innerHTML=o,d=q.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,i={doesNotAddBorder:e.offsetTop!==5,doesAddBorderForTableAndCells:h.offsetTop===5},e.style.position="fixed",e.style.top="20px",i.fixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",i.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,i.doesNotIncludeMarginInBodyOffset=r.offsetTop!==j,r.removeChild(a),q=a=null,f.extend(b,i))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.nodeName.toLowerCase()]||f.valHooks[g.type];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;h=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/\bhover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function(a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")}; -f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;le&&i.push({elem:this,matches:d.slice(e)});for(j=0;j0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return bc[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="

              ";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="
              ";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h0)for(h=g;h=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/",""],legend:[1,"
              ","
              "],thead:[1,"","
              "],tr:[2,"","
              "],td:[3,"","
              "],col:[2,"","
              "],area:[1,"",""],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div
              ","
              "]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function() -{for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1>");try{for(var c=0,d=this.length;c1&&l0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||!bc.test("<"+a.nodeName)?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=bg[l]||bg._default,n=m[0],o=b.createElement("div");b===c?bh.appendChild(o):U(b).appendChild(o),o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]===""&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return br.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bq,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bq.test(g)?g.replace(bq,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bz(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bA=function(a,b){var c,d,e;b=b.replace(bs,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b)));return c}),c.documentElement.currentStyle&&(bB=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f===null&&g&&(e=g[b])&&(f=e),!bt.test(f)&&bu.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f||0,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),bz=bA||bB,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bD=/%20/g,bE=/\[\]$/,bF=/\r?\n/g,bG=/#.*$/,bH=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bI=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bJ=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bK=/^(?:GET|HEAD)$/,bL=/^\/\//,bM=/\?/,bN=/)<[^<]*)*<\/script>/gi,bO=/^(?:select|textarea)/i,bP=/\s+/,bQ=/([?&])_=[^&]*/,bR=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bS=f.fn.load,bT={},bU={},bV,bW,bX=["*/"]+["*"];try{bV=e.href}catch(bY){bV=c.createElement("a"),bV.href="",bV=bV.href}bW=bR.exec(bV.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bS)return bS.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("
              ").append(c.replace(bN,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bO.test(this.nodeName)||bI.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bF,"\r\n")}}):{name:b.name,value:c.replace(bF,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b_(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b_(a,b);return a},ajaxSettings:{url:bV,isLocal:bJ.test(bW[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bX},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bZ(bT),ajaxTransport:bZ(bU),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?cb(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cc(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bH.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bG,"").replace(bL,bW[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bP),d.crossDomain==null&&(r=bR.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bW[1]&&r[2]==bW[2]&&(r[3]||(r[1]==="http:"?80:443))==(bW[3]||(bW[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),b$(bT,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bK.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bM.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bQ,"$1_="+x);d.url=y+(y===d.url?(bM.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bX+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=b$(bU,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)ca(g,a[g],c,e);return d.join("&").replace(bD,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cd=f.now(),ce=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cd++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ce.test(b.url)||e&&ce.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ce,l),b.url===j&&(e&&(k=k.replace(ce,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cf=a.ActiveXObject?function(){for(var a in ch)ch[a](0,1)}:!1,cg=0,ch;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ci()||cj()}:ci,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cf&&delete ch[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cg,cf&&(ch||(ch={},f(a).unload(cf)),ch[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var ck={},cl,cm,cn=/^(?:toggle|show|hide)$/,co=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cp,cq=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cr;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cu("show",3),a,b,c);for(var g=0,h=this.length;g=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cy(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cy(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,d,"padding")):this[d]():null},f.fn["outer"+c]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,d,a?"margin":"border")):this[d]():null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNumeric(j)?j:i}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/h-source/Public/Js/jquery/jquery.mobile-1.1.0.css b/h-source/Public/Js/jquery/jquery.mobile-1.1.0.css deleted file mode 100644 index 06dbf8f..0000000 --- a/h-source/Public/Js/jquery/jquery.mobile-1.1.0.css +++ /dev/null @@ -1,2053 +0,0 @@ -/* -* jQuery Mobile Framework 1.1.0 db342b1f315c282692791aa870455901fdb46a55 -* http://jquerymobile.com -* -* Copyright 2011 (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -* -*/ -/* Swatches */ -/* A ------------------------------------------------------------------------------------------------------------*/ -.ui-bar-a { - border: 1px solid #333 /*{a-bar-border}*/; - background: #111111 /*{a-bar-background-color}*/; - color: #ffffff /*{a-bar-color}*/; - font-weight: bold; - text-shadow: 0 /*{a-bar-shadow-x}*/ -1px /*{a-bar-shadow-y}*/ 1px /*{a-bar-shadow-radius}*/ #000000 /*{a-bar-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #3c3c3c /*{a-bar-background-start}*/), to( #111 /*{a-bar-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #3c3c3c /*{a-bar-background-start}*/, #111 /*{a-bar-background-end}*/); -} -.ui-bar-a, -.ui-bar-a input, -.ui-bar-a select, -.ui-bar-a textarea, -.ui-bar-a button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-bar-a .ui-link-inherit { - color: #fff /*{a-bar-color}*/; -} -.ui-bar-a .ui-link { - color: #7cc4e7 /*{a-bar-link-color}*/; - font-weight: bold; -} -.ui-bar-a .ui-link:hover { - color: #2489CE /*{a-bar-link-hover}*/; -} -.ui-bar-a .ui-link:active { - color: #2489CE /*{a-bar-link-active}*/; -} -.ui-bar-a .ui-link:visited { - color: #2489CE /*{a-bar-link-visited}*/; -} -.ui-body-a, -.ui-overlay-a { - border: 1px solid #444 /*{a-body-border}*/; - background: #222 /*{a-body-background-color}*/; - color: #fff /*{a-body-color}*/; - text-shadow: 0 /*{a-body-shadow-x}*/ 1px /*{a-body-shadow-y}*/ 1px /*{a-body-shadow-radius}*/ #111 /*{a-body-shadow-color}*/; - font-weight: normal; - background-image: -webkit-gradient(linear, left top, left bottom, from( #444 /*{a-body-background-start}*/), to( #222 /*{a-body-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #444 /*{a-body-background-start}*/, #222 /*{a-body-background-end}*/); -} -.ui-overlay-a { - background-image: none; - border-width: 0; -} -.ui-body-a, -.ui-body-a input, -.ui-body-a select, -.ui-body-a textarea, -.ui-body-a button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-body-a .ui-link-inherit { - color: #fff /*{a-body-color}*/; -} -.ui-body-a .ui-link { - color: #2489CE /*{a-body-link-color}*/; - font-weight: bold; -} -.ui-body-a .ui-link:hover { - color: #2489CE /*{a-body-link-hover}*/; -} -.ui-body-a .ui-link:active { - color: #2489CE /*{a-body-link-active}*/; -} -.ui-body-a .ui-link:visited { - color: #2489CE /*{a-body-link-visited}*/; -} -.ui-btn-up-a { - border: 1px solid #111 /*{a-bup-border}*/; - background: #333 /*{a-bup-background-color}*/; - font-weight: bold; - color: #fff /*{a-bup-color}*/; - text-shadow: 0 /*{a-bup-shadow-x}*/ 1px /*{a-bup-shadow-y}*/ 1px /*{a-bup-shadow-radius}*/ #111 /*{a-bup-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #444444 /*{a-bup-background-start}*/), to( #2d2d2d /*{a-bup-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #444444 /*{a-bup-background-start}*/, #2d2d2d /*{a-bup-background-end}*/); -} -.ui-btn-up-a a.ui-link-inherit { - color: #fff /*{a-bup-color}*/; -} -.ui-btn-hover-a { - border: 1px solid #000 /*{a-bhover-border}*/; - background: #444444 /*{a-bhover-background-color}*/; - font-weight: bold; - color: #fff /*{a-bhover-color}*/; - text-shadow: 0 /*{a-bhover-shadow-x}*/ 1px /*{a-bhover-shadow-y}*/ 1px /*{a-bhover-shadow-radius}*/ #111 /*{a-bhover-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #555555 /*{a-bhover-background-start}*/), to( #383838 /*{a-bhover-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #555555 /*{a-bhover-background-start}*/, #383838 /*{a-bhover-background-end}*/); -} -.ui-btn-hover-a a.ui-link-inherit { - color: #fff /*{a-bhover-color}*/; -} -.ui-btn-down-a { - border: 1px solid #000 /*{a-bdown-border}*/; - background: #222 /*{a-bdown-background-color}*/; - font-weight: bold; - color: #fff /*{a-bdown-color}*/; - text-shadow: 0 /*{a-bdown-shadow-x}*/ 1px /*{a-bdown-shadow-y}*/ 1px /*{a-bdown-shadow-radius}*/ #111 /*{a-bdown-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #202020 /*{a-bdown-background-start}*/), to( #2c2c2c /*{a-bdown-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #202020 /*{a-bdown-background-start}*/, #2c2c2c /*{a-bdown-background-end}*/); -} -.ui-btn-down-a a.ui-link-inherit { - color: #fff /*{a-bdown-color}*/; -} -.ui-btn-up-a, -.ui-btn-hover-a, -.ui-btn-down-a { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; - text-decoration: none; -} -/* B ------------------------------------------------------------------------------------------------------------*/ -.ui-bar-b { - border: 1px solid #456f9a /*{b-bar-border}*/; - background: #5e87b0 /*{b-bar-background-color}*/; - color: #fff /*{b-bar-color}*/; - font-weight: bold; - text-shadow: 0 /*{b-bar-shadow-x}*/ 1px /*{b-bar-shadow-y}*/ 1px /*{b-bar-shadow-radius}*/ #3e6790 /*{b-bar-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bar-background-start}*/), to( #497bae /*{b-bar-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #6facd5 /*{b-bar-background-start}*/, #497bae /*{b-bar-background-end}*/); -} -.ui-bar-b, -.ui-bar-b input, -.ui-bar-b select, -.ui-bar-b textarea, -.ui-bar-b button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-bar-b .ui-link-inherit { - color: #fff /*{b-bar-color}*/; -} -.ui-bar-b .ui-link { - color: #ddf0f8 /*{b-bar-link-color}*/; - font-weight: bold; -} -.ui-bar-b .ui-link:hover { - color: #ddf0f8 /*{b-bar-link-hover}*/; -} -.ui-bar-b .ui-link:active { - color: #ddf0f8 /*{b-bar-link-active}*/; -} -.ui-bar-b .ui-link:visited { - color: #ddf0f8 /*{b-bar-link-visited}*/; -} -.ui-body-b, -.ui-overlay-b { - border: 1px solid #999 /*{b-body-border}*/; - background: #f3f3f3 /*{b-body-background-color}*/; - color: #222222 /*{b-body-color}*/; - text-shadow: 0 /*{b-body-shadow-x}*/ 1px /*{b-body-shadow-y}*/ 0 /*{b-body-shadow-radius}*/ #fff /*{b-body-shadow-color}*/; - font-weight: normal; - background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{b-body-background-start}*/), to( #ccc /*{b-body-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #ddd /*{b-body-background-start}*/, #ccc /*{b-body-background-end}*/); -} -.ui-overlay-b { - background-image: none; - border-width: 0; -} -.ui-body-b, -.ui-body-b input, -.ui-body-b select, -.ui-body-b textarea, -.ui-body-b button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-body-b .ui-link-inherit { - color: #333333 /*{b-body-color}*/; -} -.ui-body-b .ui-link { - color: #2489CE /*{b-body-link-color}*/; - font-weight: bold; -} -.ui-body-b .ui-link:hover { - color: #2489CE /*{b-body-link-hover}*/; -} -.ui-body-b .ui-link:active { - color: #2489CE /*{b-body-link-active}*/; -} -.ui-body-b .ui-link:visited { - color: #2489CE /*{b-body-link-visited}*/; -} -.ui-btn-up-b { - border: 1px solid #044062 /*{b-bup-border}*/; - background: #396b9e /*{b-bup-background-color}*/; - font-weight: bold; - color: #fff /*{b-bup-color}*/; - text-shadow: 0 /*{b-bup-shadow-x}*/ 1px /*{b-bup-shadow-y}*/ 1px /*{b-bup-shadow-radius}*/ #194b7e /*{b-bup-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #5f9cc5 /*{b-bup-background-start}*/), to( #396b9e /*{b-bup-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #5f9cc5 /*{b-bup-background-start}*/, #396b9e /*{b-bup-background-end}*/); -} -.ui-btn-up-b a.ui-link-inherit { - color: #fff /*{b-bup-color}*/; -} -.ui-btn-hover-b { - border: 1px solid #00415e /*{b-bhover-border}*/; - background: #4b88b6 /*{b-bhover-background-color}*/; - font-weight: bold; - color: #fff /*{b-bhover-color}*/; - text-shadow: 0 /*{b-bhover-shadow-x}*/ 1px /*{b-bhover-shadow-y}*/ 1px /*{b-bhover-shadow-radius}*/ #194b7e /*{b-bhover-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #6facd5 /*{b-bhover-background-start}*/), to( #4272a4 /*{b-bhover-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #6facd5 /*{b-bhover-background-start}*/, #4272a4 /*{b-bhover-background-end}*/); -} -.ui-btn-hover-b a.ui-link-inherit { - color: #fff /*{b-bhover-color}*/; -} -.ui-btn-down-b { - border: 1px solid #225377 /*{b-bdown-border}*/; - background: #4e89c5 /*{b-bdown-background-color}*/; - font-weight: bold; - color: #fff /*{b-bdown-color}*/; - text-shadow: 0 /*{b-bdown-shadow-x}*/ 1px /*{b-bdown-shadow-y}*/ 1px /*{b-bdown-shadow-radius}*/ #194b7e /*{b-bdown-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #295b8e /*{b-bdown-background-start}*/), to( #3e79b5 /*{b-bdown-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #295b8e /*{b-bdown-background-start}*/, #3e79b5 /*{b-bdown-background-end}*/); -} -.ui-btn-down-b a.ui-link-inherit { - color: #fff /*{b-bdown-color}*/; -} -.ui-btn-up-b, -.ui-btn-hover-b, -.ui-btn-down-b { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; - text-decoration: none; -} -/* C ------------------------------------------------------------------------------------------------------------*/ -.ui-bar-c { - border: 1px solid #B3B3B3 /*{c-bar-border}*/; - background: #eeeeee /*{c-bar-background-color}*/; - color: #3E3E3E /*{c-bar-color}*/; - font-weight: bold; - text-shadow: 0 /*{c-bar-shadow-x}*/ 1px /*{c-bar-shadow-y}*/ 1px /*{c-bar-shadow-radius}*/ #fff /*{c-bar-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #f0f0f0 /*{c-bar-background-start}*/), to( #ddd /*{c-bar-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #f0f0f0 /*{c-bar-background-start}*/, #ddd /*{c-bar-background-end}*/); -} -.ui-bar-c .ui-link-inherit { - color: #3E3E3E /*{c-bar-color}*/; -} -.ui-bar-c .ui-link { - color: #7cc4e7 /*{c-bar-link-color}*/; - font-weight: bold; -} -.ui-bar-c .ui-link:hover { - color: #2489CE /*{c-bar-link-hover}*/; -} -.ui-bar-c .ui-link:active { - color: #2489CE /*{c-bar-link-active}*/; -} -.ui-bar-c .ui-link:visited { - color: #2489CE /*{c-bar-link-visited}*/; -} -.ui-bar-c, -.ui-bar-c input, -.ui-bar-c select, -.ui-bar-c textarea, -.ui-bar-c button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-body-c, -.ui-overlay-c { - border: 1px solid #aaa /*{c-body-border}*/; - color: #333333 /*{c-body-color}*/; - text-shadow: 0 /*{c-body-shadow-x}*/ 1px /*{c-body-shadow-y}*/ 0 /*{c-body-shadow-radius}*/ #fff /*{c-body-shadow-color}*/; - background: #f9f9f9 /*{c-body-background-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #f9f9f9 /*{c-body-background-start}*/), to( #eeeeee /*{c-body-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #f9f9f9 /*{c-body-background-start}*/, #eeeeee /*{c-body-background-end}*/); -} -.ui-overlay-c { - background-image: none; - border-width: 0; -} -.ui-body-c, -.ui-body-c input, -.ui-body-c select, -.ui-body-c textarea, -.ui-body-c button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-body-c .ui-link-inherit { - color: #333333 /*{c-body-color}*/; -} -.ui-body-c .ui-link { - color: #2489CE /*{c-body-link-color}*/; - font-weight: bold; -} -.ui-body-c .ui-link:hover { - color: #2489CE /*{c-body-link-hover}*/; -} -.ui-body-c .ui-link:active { - color: #2489CE /*{c-body-link-active}*/; -} -.ui-body-c .ui-link:visited { - color: #2489CE /*{c-body-link-visited}*/; -} -.ui-btn-up-c { - border: 1px solid #ccc /*{c-bup-border}*/; - background: #eee /*{c-bup-background-color}*/; - font-weight: bold; - color: #222 /*{c-bup-color}*/; - text-shadow: 0 /*{c-bup-shadow-x}*/ 1px /*{c-bup-shadow-y}*/ 0 /*{c-bup-shadow-radius}*/ #ffffff /*{c-bup-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #ffffff /*{c-bup-background-start}*/), to( #f1f1f1 /*{c-bup-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #ffffff /*{c-bup-background-start}*/, #f1f1f1 /*{c-bup-background-end}*/); -} -.ui-btn-up-c a.ui-link-inherit { - color: #2F3E46 /*{c-bup-color}*/; -} -.ui-btn-hover-c { - border: 1px solid #bbb /*{c-bhover-border}*/; - background: #dfdfdf /*{c-bhover-background-color}*/; - font-weight: bold; - color: #222 /*{c-bhover-color}*/; - text-shadow: 0 /*{c-bhover-shadow-x}*/ 1px /*{c-bhover-shadow-y}*/ 0 /*{c-bhover-shadow-radius}*/ #ffffff /*{c-bhover-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #f6f6f6 /*{c-bhover-background-start}*/), to( #e0e0e0 /*{c-bhover-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #f9f9f9 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #f6f6f6 /*{c-bhover-background-start}*/, #e0e0e0 /*{c-bhover-background-end}*/); -} -.ui-btn-hover-c a.ui-link-inherit { - color: #2F3E46 /*{c-bhover-color}*/; -} -.ui-btn-down-c { - border: 1px solid #bbb /*{c-bdown-border}*/; - background: #d6d6d6 /*{c-bdown-background-color}*/; - font-weight: bold; - color: #222 /*{c-bdown-color}*/; - text-shadow: 0 /*{c-bdown-shadow-x}*/ 1px /*{c-bdown-shadow-y}*/ 0 /*{c-bdown-shadow-radius}*/ #ffffff /*{c-bdown-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #d0d0d0 /*{c-bdown-background-start}*/), to( #dfdfdf /*{c-bdown-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #d0d0d0 /*{c-bdown-background-start}*/, #dfdfdf /*{c-bdown-background-end}*/); -} -.ui-btn-down-c a.ui-link-inherit { - color: #2F3E46 /*{c-bdown-color}*/; -} -.ui-btn-up-c, -.ui-btn-hover-c, -.ui-btn-down-c { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; - text-decoration: none; -} -/* D ------------------------------------------------------------------------------------------------------------*/ -.ui-bar-d { - border: 1px solid #bbb /*{d-bar-border}*/; - background: #bbb /*{d-bar-background-color}*/; - color: #333 /*{d-bar-color}*/; - text-shadow: 0 /*{d-bar-shadow-x}*/ 1px /*{d-bar-shadow-y}*/ 0 /*{d-bar-shadow-radius}*/ #eee /*{d-bar-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #ddd /*{d-bar-background-start}*/), to( #bbb /*{d-bar-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #ddd /*{d-bar-background-start}*/, #bbb /*{d-bar-background-end}*/); -} -.ui-bar-d, -.ui-bar-d input, -.ui-bar-d select, -.ui-bar-d textarea, -.ui-bar-d button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-bar-d .ui-link-inherit { - color: #333333 /*{d-bar-color}*/; -} -.ui-bar-d .ui-link { - color: #2489CE /*{d-bar-link-color}*/; - font-weight: bold; -} -.ui-bar-d .ui-link:hover { - color: #2489CE /*{d-bar-link-hover}*/; -} -.ui-bar-d .ui-link:active { - color: #2489CE /*{d-bar-link-active}*/; -} -.ui-bar-d .ui-link:visited { - color: #2489CE /*{d-bar-link-visited}*/; -} -.ui-body-d, -.ui-overlay-d { - border: 1px solid #bbb /*{d-body-border}*/; - color: #333333 /*{d-body-color}*/; - text-shadow: 0 /*{d-body-shadow-x}*/ 1px /*{d-body-shadow-y}*/ 0 /*{d-body-shadow-radius}*/ #fff /*{d-body-shadow-color}*/; - background: #ffffff /*{d-body-background-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #fff), to( #fff /*{d-body-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #fff /*{d-body-background-start}*/, #fff /*{d-body-background-end}*/); -} -.ui-overlay-d { - background-image: none; - border-width: 0; -} -.ui-body-d, -.ui-body-d input, -.ui-body-d select, -.ui-body-d textarea, -.ui-body-d button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-body-d .ui-link-inherit { - color: #333333 /*{d-body-color}*/; -} -.ui-body-d .ui-link { - color: #2489CE /*{d-body-link-color}*/; - font-weight: bold; -} -.ui-body-d .ui-link:hover { - color: #2489CE /*{d-body-link-hover}*/; -} -.ui-body-d .ui-link:active { - color: #2489CE /*{d-body-link-active}*/; -} -.ui-body-d .ui-link:visited { - color: #2489CE /*{d-body-link-visited}*/; -} -.ui-btn-up-d { - border: 1px solid #bbb /*{d-bup-border}*/; - background: #fff /*{d-bup-background-color}*/; - font-weight: bold; - color: #333 /*{d-bup-color}*/; - text-shadow: 0 /*{d-bup-shadow-x}*/ 1px /*{d-bup-shadow-y}*/ 0 /*{d-bup-shadow-radius}*/ #fff /*{d-bup-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #fafafa), to( #f6f6f6 /*{d-bup-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #fafafa /*{d-bup-background-start}*/, #f6f6f6 /*{d-bup-background-end}*/); -} -.ui-btn-up-d a.ui-link-inherit { - color: #333 /*{d-bup-color}*/; -} -.ui-btn-hover-d { - border: 1px solid #aaa /*{d-bhover-border}*/; - background: #eeeeee /*{d-bhover-background-color}*/; - font-weight: bold; - color: #333 /*{d-bhover-color}*/; - cursor: pointer; - text-shadow: 0 /*{d-bhover-shadow-x}*/ 1px /*{d-bhover-shadow-y}*/ 0 /*{d-bhover-shadow-radius}*/ #fff /*{d-bhover-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #eee), to( #fff /*{d-bhover-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #eee /*{d-bhover-background-start}*/, #fff /*{d-bhover-background-end}*/); -} -.ui-btn-hover-d a.ui-link-inherit { - color: #333 /*{d-bhover-color}*/; -} -.ui-btn-down-d { - border: 1px solid #aaa /*{d-bdown-border}*/; - background: #eee /*{d-bdown-background-color}*/; - font-weight: bold; - color: #333 /*{d-bdown-color}*/; - text-shadow: 0 /*{d-bdown-shadow-x}*/ 1px /*{d-bdown-shadow-y}*/ 0 /*{d-bdown-shadow-radius}*/ #ffffff /*{d-bdown-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #e5e5e5 /*{d-bdown-background-start}*/), to( #f2f2f2 /*{d-bdown-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #e5e5e5 /*{d-bdown-background-start}*/, #f2f2f2 /*{d-bdown-background-end}*/); -} -.ui-btn-down-d a.ui-link-inherit { - color: #333 /*{d-bdown-color}*/; -} -.ui-btn-up-d, -.ui-btn-hover-d, -.ui-btn-down-d { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; - text-decoration: none; -} -/* E ------------------------------------------------------------------------------------------------------------*/ -.ui-bar-e { - border: 1px solid #F7C942 /*{e-bar-border}*/; - background: #fadb4e /*{e-bar-background-color}*/; - color: #333 /*{e-bar-color}*/; - text-shadow: 0 /*{e-bar-shadow-x}*/ 1px /*{e-bar-shadow-y}*/ 0 /*{e-bar-shadow-radius}*/ #fff /*{e-bar-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #fceda7 /*{e-bar-background-start}*/), to( #fbef7e /*{e-bar-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #fceda7 /*{e-bar-background-start}*/, #fbef7e /*{e-bar-background-end}*/); -} -.ui-bar-e, -.ui-bar-e input, -.ui-bar-e select, -.ui-bar-e textarea, -.ui-bar-e button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-bar-e .ui-link-inherit { - color: #333333 /*{e-bar-color}*/; -} -.ui-bar-e .ui-link { - color: #2489CE /*{e-bar-link-color}*/; - font-weight: bold; -} -.ui-bar-e .ui-link:hover { - color: #2489CE /*{e-bar-link-hover}*/; -} -.ui-bar-e .ui-link:active { - color: #2489CE /*{e-bar-link-active}*/; -} -.ui-bar-e .ui-link:visited { - color: #2489CE /*{e-bar-link-visited}*/; -} -.ui-body-e, -.ui-overlay-e { - border: 1px solid #F7C942 /*{e-body-border}*/; - color: #222222 /*{e-body-color}*/; - text-shadow: 0 /*{e-body-shadow-x}*/ 1px /*{e-body-shadow-y}*/ 0 /*{e-body-shadow-radius}*/ #fff /*{e-body-shadow-color}*/; - background: #fff9df /*{e-body-background-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #fffadf /*{e-body-background-start}*/), to( #fff3a5 /*{e-body-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #fffadf /*{e-body-background-start}*/, #fff3a5 /*{e-body-background-end}*/); -} -.ui-overlay-e { - background-image: none; - border-width: 0; -} -.ui-body-e, -.ui-body-e input, -.ui-body-e select, -.ui-body-e textarea, -.ui-body-e button { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-body-e .ui-link-inherit { - color: #333333 /*{e-body-color}*/; -} -.ui-body-e .ui-link { - color: #2489CE /*{e-body-link-color}*/; - font-weight: bold; -} -.ui-body-e .ui-link:hover { - color: #2489CE /*{e-body-link-hover}*/; -} -.ui-body-e .ui-link:active { - color: #2489CE /*{e-body-link-active}*/; -} -.ui-body-e .ui-link:visited { - color: #2489CE /*{e-body-link-visited}*/; -} -.ui-btn-up-e { - border: 1px solid #F4C63f /*{e-bup-border}*/; - background: #fadb4e /*{e-bup-background-color}*/; - font-weight: bold; - color: #222 /*{e-bup-color}*/; - text-shadow: 0 /*{e-bup-shadow-x}*/ 1px /*{e-bup-shadow-y}*/ 0 /*{e-bup-shadow-radius}*/ #fff /*{e-bup-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #ffefaa /*{e-bup-background-start}*/), to( #ffe155 /*{e-bup-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #ffefaa /*{e-bup-background-start}*/, #ffe155 /*{e-bup-background-end}*/); -} -.ui-btn-up-e a.ui-link-inherit { - color: #222 /*{e-bup-color}*/; -} -.ui-btn-hover-e { - border: 1px solid #F2C43d /*{e-bhover-border}*/; - background: #fbe26f /*{e-bhover-background-color}*/; - font-weight: bold; - color: #111 /*{e-bhover-color}*/; - text-shadow: 0 /*{e-bhover-shadow-x}*/ 1px /*{e-bhover-shadow-y}*/ 0 /*{e-bhover-shadow-radius}*/ #fff /*{e-bhover-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #fff5ba /*{e-bhover-background-start}*/), to( #fbdd52 /*{e-bhover-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #fff5ba /*{e-bhover-background-start}*/, #fbdd52 /*{e-bhover-background-end}*/); -} -.ui-btn-hover-e a.ui-link-inherit { - color: #333 /*{e-bhover-color}*/; -} -.ui-btn-down-e { - border: 1px solid #F2C43d /*{e-bdown-border}*/; - background: #fceda7 /*{e-bdown-background-color}*/; - font-weight: bold; - color: #111 /*{e-bdown-color}*/; - text-shadow: 0 /*{e-bdown-shadow-x}*/ 1px /*{e-bdown-shadow-y}*/ 0 /*{e-bdown-shadow-radius}*/ #ffffff /*{e-bdown-shadow-color}*/; - background-image: -webkit-gradient(linear, left top, left bottom, from( #f8d94c /*{e-bdown-background-start}*/), to( #fadb4e /*{e-bdown-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #f8d94c /*{e-bdown-background-start}*/, #fadb4e /*{e-bdown-background-end}*/); -} -.ui-btn-down-e a.ui-link-inherit { - color: #333 /*{e-bdown-color}*/; -} -.ui-btn-up-e, -.ui-btn-hover-e, -.ui-btn-down-e { - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; - text-decoration: none; -} -/* Structure */ -/* links within "buttons" ------------------------------------------------------------------------------------------------------------*/ -a.ui-link-inherit { - text-decoration: none !important; -} -/* Active class used as the "on" state across all themes ------------------------------------------------------------------------------------------------------------*/ -.ui-btn-active { - border: 1px solid #2373a5 /*{global-active-border}*/; - background: #5393c5 /*{global-active-background-color}*/; - font-weight: bold; - color: #fff /*{global-active-color}*/; - cursor: pointer; - text-shadow: 0 /*{global-active-shadow-x}*/ 1px /*{global-active-shadow-y}*/ 1px /*{global-active-shadow-radius}*/ #3373a5 /*{global-active-shadow-color}*/; - text-decoration: none; - background-image: -webkit-gradient(linear, left top, left bottom, from( #5393c5 /*{global-active-background-start}*/), to( #6facd5 /*{global-active-background-end}*/)); /* Saf4+, Chrome */ - background-image: -webkit-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Chrome 10+, Saf5.1+ */ - background-image: -moz-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* FF3.6 */ - background-image: -ms-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* IE10 */ - background-image: -o-linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); /* Opera 11.10+ */ - background-image: linear-gradient( #5393c5 /*{global-active-background-start}*/, #6facd5 /*{global-active-background-end}*/); - font-family: Helvetica, Arial, sans-serif /*{global-font-family}*/; -} -.ui-btn-active a.ui-link-inherit { - color: #fff /*{global-active-color}*/; -} -/* button inner top highlight ------------------------------------------------------------------------------------------------------------*/ -.ui-btn-inner { - border-top: 1px solid #fff; - border-color: rgba(255,255,255,.3); -} -/* corner rounding classes ------------------------------------------------------------------------------------------------------------*/ -.ui-corner-tl { - -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; - -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; - border-top-left-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-tr { - -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; - -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; - border-top-right-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-bl { - -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; - -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; - border-bottom-left-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-br { - -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; - -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; - border-bottom-right-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-top { - -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; - -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; - border-top-left-radius: .6em /*{global-radii-blocks}*/; - -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; - -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; - border-top-right-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-bottom { - -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; - -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; - border-bottom-left-radius: .6em /*{global-radii-blocks}*/; - -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; - -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; - border-bottom-right-radius: .6em /*{global-radii-blocks}*/; - } -.ui-corner-right { - -moz-border-radius-topright: .6em /*{global-radii-blocks}*/; - -webkit-border-top-right-radius: .6em /*{global-radii-blocks}*/; - border-top-right-radius: .6em /*{global-radii-blocks}*/; - -moz-border-radius-bottomright: .6em /*{global-radii-blocks}*/; - -webkit-border-bottom-right-radius: .6em /*{global-radii-blocks}*/; - border-bottom-right-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-left { - -moz-border-radius-topleft: .6em /*{global-radii-blocks}*/; - -webkit-border-top-left-radius: .6em /*{global-radii-blocks}*/; - border-top-left-radius: .6em /*{global-radii-blocks}*/; - -moz-border-radius-bottomleft: .6em /*{global-radii-blocks}*/; - -webkit-border-bottom-left-radius: .6em /*{global-radii-blocks}*/; - border-bottom-left-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-all { - -moz-border-radius: .6em /*{global-radii-blocks}*/; - -webkit-border-radius: .6em /*{global-radii-blocks}*/; - border-radius: .6em /*{global-radii-blocks}*/; -} -.ui-corner-none { - -moz-border-radius: 0; - -webkit-border-radius: 0; - border-radius: 0; -} -/* Form field separator ------------------------------------------------------------------------------------------------------------*/ -.ui-br { - border-bottom: rgb(130,130,130); - border-bottom: rgba(130,130,130,.3); - border-bottom-width: 1px; - border-bottom-style: solid; -} -/* Interaction cues ------------------------------------------------------------------------------------------------------------*/ -.ui-disabled { - opacity: .3; -} -.ui-disabled, -.ui-disabled a { - cursor: default !important; - pointer-events: none; -} -.ui-disabled .ui-btn-text { - -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(opacity=30)"; - filter: alpha(opacity=30); - zoom: 1; -} -/* Icons ------------------------------------------------------------------------------------------------------------*/ -.ui-icon, -.ui-icon-searchfield:after { - background: #666 /*{global-icon-color}*/; - background: rgba(0,0,0,.4) /*{global-icon-disc}*/; - background-image: url(images/icons-18-white.png) /*{global-icon-set}*/; - background-repeat: no-repeat; - -moz-border-radius: 9px; - -webkit-border-radius: 9px; - border-radius: 9px; -} -/* Alt icon color ------------------------------------------------------------------------------------------------------------*/ -.ui-icon-alt { - background: #fff; - background: rgba(255,255,255,.3); - background-image: url(images/icons-18-black.png); - background-repeat: no-repeat; -} -/* HD/"retina" sprite ------------------------------------------------------------------------------------------------------------*/ -@media only screen and (-webkit-min-device-pixel-ratio: 1.5), - only screen and (min--moz-device-pixel-ratio: 1.5), - only screen and (min-resolution: 240dpi) { - - .ui-icon-plus, .ui-icon-minus, .ui-icon-delete, .ui-icon-arrow-r, - .ui-icon-arrow-l, .ui-icon-arrow-u, .ui-icon-arrow-d, .ui-icon-check, - .ui-icon-gear, .ui-icon-refresh, .ui-icon-forward, .ui-icon-back, - .ui-icon-grid, .ui-icon-star, .ui-icon-alert, .ui-icon-info, .ui-icon-home, .ui-icon-search, .ui-icon-searchfield:after, - .ui-icon-checkbox-off, .ui-icon-checkbox-on, .ui-icon-radio-off, .ui-icon-radio-on { - background-image: url(images/icons-36-white.png); - -moz-background-size: 776px 18px; - -o-background-size: 776px 18px; - -webkit-background-size: 776px 18px; - background-size: 776px 18px; - } - .ui-icon-alt { - background-image: url(images/icons-36-black.png); - } -} -/* plus minus */ -.ui-icon-plus { - background-position: -0 50%; -} -.ui-icon-minus { - background-position: -36px 50%; -} -/* delete/close */ -.ui-icon-delete { - background-position: -72px 50%; -} -/* arrows */ -.ui-icon-arrow-r { - background-position: -108px 50%; -} -.ui-icon-arrow-l { - background-position: -144px 50%; -} -.ui-icon-arrow-u { - background-position: -180px 50%; -} -.ui-icon-arrow-d { - background-position: -216px 50%; -} -/* misc */ -.ui-icon-check { - background-position: -252px 50%; -} -.ui-icon-gear { - background-position: -288px 50%; -} -.ui-icon-refresh { - background-position: -324px 50%; -} -.ui-icon-forward { - background-position: -360px 50%; -} -.ui-icon-back { - background-position: -396px 50%; -} -.ui-icon-grid { - background-position: -432px 50%; -} -.ui-icon-star { - background-position: -468px 50%; -} -.ui-icon-alert { - background-position: -504px 50%; -} -.ui-icon-info { - background-position: -540px 50%; -} -.ui-icon-home { - background-position: -576px 50%; -} -.ui-icon-search, -.ui-icon-searchfield:after { - background-position: -612px 50%; -} -.ui-icon-checkbox-off { - background-position: -684px 50%; -} -.ui-icon-checkbox-on { - background-position: -648px 50%; -} -.ui-icon-radio-off { - background-position: -756px 50%; -} -.ui-icon-radio-on { - background-position: -720px 50%; -} -/* checks,radios */ -.ui-checkbox .ui-icon { - -moz-border-radius: 3px; - -webkit-border-radius: 3px; - border-radius: 3px; -} -.ui-icon-checkbox-off, -.ui-icon-radio-off { - background-color: transparent; -} -.ui-checkbox-on .ui-icon, -.ui-radio-on .ui-icon { - background-color: #4596ce /*{global-active-background-color}*/; /* NOTE: this hex should match the active state color. It's repeated here for cascade */ -} -/* loading icon */ -.ui-icon-loading { - background: url(images/ajax-loader.gif); - background-size: 46px 46px; -} -/* Button corner classes ------------------------------------------------------------------------------------------------------------*/ -.ui-btn-corner-tl { - -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; - -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; - border-top-left-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-tr { - -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; - -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; - border-top-right-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-bl { - -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; - -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; - border-bottom-left-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-br { - -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; - -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; - border-bottom-right-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-top { - -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; - -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; - border-top-left-radius: 1em /*{global-radii-buttons}*/; - -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; - -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; - border-top-right-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-bottom { - -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; - -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; - border-bottom-left-radius: 1em /*{global-radii-buttons}*/; - -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; - -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; - border-bottom-right-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-right { - -moz-border-radius-topright: 1em /*{global-radii-buttons}*/; - -webkit-border-top-right-radius: 1em /*{global-radii-buttons}*/; - border-top-right-radius: 1em /*{global-radii-buttons}*/; - -moz-border-radius-bottomright: 1em /*{global-radii-buttons}*/; - -webkit-border-bottom-right-radius: 1em /*{global-radii-buttons}*/; - border-bottom-right-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-left { - -moz-border-radius-topleft: 1em /*{global-radii-buttons}*/; - -webkit-border-top-left-radius: 1em /*{global-radii-buttons}*/; - border-top-left-radius: 1em /*{global-radii-buttons}*/; - -moz-border-radius-bottomleft: 1em /*{global-radii-buttons}*/; - -webkit-border-bottom-left-radius: 1em /*{global-radii-buttons}*/; - border-bottom-left-radius: 1em /*{global-radii-buttons}*/; -} -.ui-btn-corner-all { - -moz-border-radius: 1em /*{global-radii-buttons}*/; - -webkit-border-radius: 1em /*{global-radii-buttons}*/; - border-radius: 1em /*{global-radii-buttons}*/; -} -/* radius clip workaround for cleaning up corner trapping */ -.ui-corner-tl, -.ui-corner-tr, -.ui-corner-bl, -.ui-corner-br, -.ui-corner-top, -.ui-corner-bottom, -.ui-corner-right, -.ui-corner-left, -.ui-corner-all, -.ui-btn-corner-tl, -.ui-btn-corner-tr, -.ui-btn-corner-bl, -.ui-btn-corner-br, -.ui-btn-corner-top, -.ui-btn-corner-bottom, -.ui-btn-corner-right, -.ui-btn-corner-left, -.ui-btn-corner-all { - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; -} -/* Overlay / modal ------------------------------------------------------------------------------------------------------------*/ -.ui-overlay { - background: #666; - opacity: .5; - filter: Alpha(Opacity=50); - position: absolute; - width: 100%; - height: 100%; -} -.ui-overlay-shadow { - -moz-box-shadow: 0px 0px 12px rgba(0,0,0,.6); - -webkit-box-shadow: 0px 0px 12px rgba(0,0,0,.6); - box-shadow: 0px 0px 12px rgba(0,0,0,.6); -} -.ui-shadow { - -moz-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; - -webkit-box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; - box-shadow: 0px 1px 4px /*{global-box-shadow-size}*/ rgba(0,0,0,.3) /*{global-box-shadow-color}*/; -} -.ui-bar-a .ui-shadow, -.ui-bar-b .ui-shadow , -.ui-bar-c .ui-shadow { - -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.3); - -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.3); - box-shadow: 0px 1px 0 rgba(255,255,255,.3); -} -.ui-shadow-inset { - -moz-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); - -webkit-box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); - box-shadow: inset 0px 1px 4px rgba(0,0,0,.2); -} -.ui-icon-shadow { - -moz-box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; - -webkit-box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; - box-shadow: 0px 1px 0 rgba(255,255,255,.4) /*{global-icon-shadow}*/; -} -/* Focus state - set here for specificity (note: these classes are added by JavaScript) ------------------------------------------------------------------------------------------------------------*/ -.ui-btn:focus { - outline: 0; -} -.ui-focus, -.ui-btn:focus { - -moz-box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; - -webkit-box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; - box-shadow: 0px 0px 12px #387bbe /*{global-active-background-color}*/; -} -/* unset box shadow in browsers that don't do it right ------------------------------------------------------------------------------------------------------------*/ -.ui-mobile-nosupport-boxshadow * { - -moz-box-shadow: none !important; - -webkit-box-shadow: none !important; - box-shadow: none !important; -} -/* ...and bring back focus */ -.ui-mobile-nosupport-boxshadow .ui-focus, -.ui-mobile-nosupport-boxshadow .ui-btn:focus { - outline-width: 1px; - outline-style: dotted; -} -/* some unsets - more probably needed */ -.ui-mobile, .ui-mobile body { height: 99.9%; } -.ui-mobile fieldset, .ui-page { padding: 0; margin: 0; } -.ui-mobile a img, .ui-mobile fieldset { border-width: 0; } -/* responsive page widths */ -.ui-mobile-viewport { margin: 0; overflow-x: visible; -webkit-text-size-adjust: none; -ms-text-size-adjust:none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); } -/* Issue #2066 */ -body.ui-mobile-viewport, -div.ui-mobile-viewport { overflow-x: hidden; } -/* "page" containers - full-screen views, one should always be in view post-pageload */ -.ui-mobile [data-role=page], .ui-mobile [data-role=dialog], .ui-page { top: 0; left: 0; width: 100%; min-height: 100%; position: absolute; display: none; border: 0; } -.ui-mobile .ui-page-active { display: block; overflow: visible; } -/* on ios4, setting focus on the page element causes flashing during transitions when there is an outline, so we turn off outlines */ -.ui-page { outline: none; } -/*orientations from js are available */ -@media screen and (orientation: portrait){ -.ui-mobile, .ui-mobile .ui-page { min-height: 420px; } -} -@media screen and (orientation: landscape){ -.ui-mobile, .ui-mobile .ui-page { min-height: 300px; } -} -/* loading screen */ -.ui-loading .ui-loader { display: block; } -.ui-loader { display: none; z-index: 9999999; position: fixed; top: 50%; box-shadow: 0 1px 1px -1px #fff; left: 50%; border:0; } -.ui-loader-default { background: none; opacity: .18; width: 46px; height: 46px; margin-left: -23px; margin-top: -23px; } -.ui-loader-verbose { width: 200px; opacity: .88; height: auto; margin-left: -110px; margin-top: -43px; padding: 10px; } -.ui-loader-default h1 { font-size: 0; width: 0; height: 0; overflow: hidden; } -.ui-loader-verbose h1 { font-size: 16px; margin: 0; text-align: center; } -.ui-loader .ui-icon { background-color: #000; display: block; margin: 0; width: 44px; height: 44px; padding: 1px; -webkit-border-radius: 36px; -moz-border-radius: 36px; border-radius: 36px; } -.ui-loader-verbose .ui-icon { margin: 0 auto 10px; opacity: .75; } -.ui-loader-textonly { padding: 15px; margin-left: -115px; } -.ui-loader-textonly .ui-icon { display: none; } -.ui-loader-fakefix { position: absolute; } -/*fouc*/ -.ui-mobile-rendering > * { visibility: hidden; } -/*headers, content panels*/ -.ui-bar, .ui-body { position: relative; padding: .4em 15px; overflow: hidden; display: block; clear:both; } -.ui-bar { font-size: 16px; margin: 0; } -.ui-bar h1, .ui-bar h2, .ui-bar h3, .ui-bar h4, .ui-bar h5, .ui-bar h6 { margin: 0; padding: 0; font-size: 16px; display: inline-block; } -.ui-header, .ui-footer { position: relative; border-left-width: 0; border-right-width: 0; } -.ui-header .ui-btn-left, -.ui-header .ui-btn-right, -.ui-footer .ui-btn-left, -.ui-footer .ui-btn-right { position: absolute; top: 3px; } -.ui-header .ui-btn-left, -.ui-footer .ui-btn-left { left: 5px; } -.ui-header .ui-btn-right, -.ui-footer .ui-btn-right { right: 5px; } -.ui-footer .ui-btn-icon-notext, -.ui-header .ui-btn-icon-notext { top: 6px; } -.ui-header .ui-title, .ui-footer .ui-title { min-height: 1.1em; text-align: center; font-size: 16px; display: block; margin: .6em 30% .8em; padding: 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; outline: 0 !important; } -.ui-footer .ui-title { margin: .6em 15px .8em; } -/*content area*/ -.ui-content { border-width: 0; overflow: visible; overflow-x: hidden; padding: 15px; } -/* icons sizing */ -.ui-icon { width: 18px; height: 18px; } -/* non-js content hiding */ -.ui-nojs { position: absolute; left: -9999px; } -/* accessible content hiding */ -.ui-hide-label label, -.ui-hidden-accessible { position: absolute !important; left: -9999px; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } -/* Transitions originally inspired by those from jQtouch, nice work, folks */ -.ui-mobile-viewport-transitioning, -.ui-mobile-viewport-transitioning .ui-page { - width: 100%; - height: 100%; - overflow: hidden; -} -.in { - -webkit-animation-timing-function: ease-out; - -webkit-animation-duration: 350ms; - -moz-animation-timing-function: ease-out; - -moz-animation-duration: 350ms; -} -.out { - -webkit-animation-timing-function: ease-in; - -webkit-animation-duration: 225ms; - -moz-animation-timing-function: ease-in; - -moz-animation-duration: 225; -} -@-webkit-keyframes fadein { - from { opacity: 0; } - to { opacity: 1; } -} -@-moz-keyframes fadein { - from { opacity: 0; } - to { opacity: 1; } -} -@-webkit-keyframes fadeout { - from { opacity: 1; } - to { opacity: 0; } -} -@-moz-keyframes fadeout { - from { opacity: 1; } - to { opacity: 0; } -} -.fade.out { - opacity: 0; - -webkit-animation-duration: 125ms; - -webkit-animation-name: fadeout; - -moz-animation-duration: 125ms; - -moz-animation-name: fadeout; -} -.fade.in { - opacity: 1; - -webkit-animation-duration: 225ms; - -webkit-animation-name: fadein; - -moz-animation-duration: 225ms; - -moz-animation-name: fadein; -} -.pop { - -webkit-transform-origin: 50% 50%; - -moz-transform-origin: 50% 50%; -} -.pop.in { - -webkit-transform: scale(1); - -moz-transform: scale(1); - opacity: 1; - -webkit-animation-name: popin; - -moz-animation-name: popin; - -webkit-animation-duration: 350ms; - -moz-animation-duration: 350ms; -} -.pop.out { - -webkit-animation-name: fadeout; - -moz-animation-name: fadeout; - opacity: 0; - -webkit-animation-duration: 100ms; - -moz-animation-duration: 100ms; -} -.pop.in.reverse { - -webkit-animation-name: fadein; - -moz-animation-name: fadein; -} -.pop.out.reverse { - -webkit-transform: scale(.8); - -moz-transform: scale(.8); - -webkit-animation-name: popout; - -moz-animation-name: popout; -} -@-webkit-keyframes popin { - from { - -webkit-transform: scale(.8); - opacity: 0; - } - to { - -webkit-transform: scale(1); - opacity: 1; - } -} -@-moz-keyframes popin { - from { - -moz-transform: scale(.8); - opacity: 0; - } - to { - -moz-transform: scale(1); - opacity: 1; - } -} -@-webkit-keyframes popout { - from { - -webkit-transform: scale(1); - opacity: 1; - } - to { - -webkit-transform: scale(.8); - opacity: 0; - } -} -@-moz-keyframes popout { - from { - -moz-transform: scale(1); - opacity: 1; - } - to { - -moz-transform: scale(.8); - opacity: 0; - } -} -/* keyframes for slidein from sides */ -@-webkit-keyframes slideinfromright { - from { -webkit-transform: translateX(100%); } - to { -webkit-transform: translateX(0); } -} -@-moz-keyframes slideinfromright { - from { -moz-transform: translateX(100%); } - to { -moz-transform: translateX(0); } -} -@-webkit-keyframes slideinfromleft { - from { -webkit-transform: translateX(-100%); } - to { -webkit-transform: translateX(0); } -} -@-moz-keyframes slideinfromleft { - from { -moz-transform: translateX(-100%); } - to { -moz-transform: translateX(0); } -} -/* keyframes for slideout to sides */ -@-webkit-keyframes slideouttoleft { - from { -webkit-transform: translateX(0); } - to { -webkit-transform: translateX(-100%); } -} -@-moz-keyframes slideouttoleft { - from { -moz-transform: translateX(0); } - to { -moz-transform: translateX(-100%); } -} -@-webkit-keyframes slideouttoright { - from { -webkit-transform: translateX(0); } - to { -webkit-transform: translateX(100%); } -} -@-moz-keyframes slideouttoright { - from { -moz-transform: translateX(0); } - to { -moz-transform: translateX(100%); } -} -.slide.out, .slide.in { - -webkit-animation-timing-function: ease-out; - -webkit-animation-duration: 350ms; - -moz-animation-timing-function: ease-out; - -moz-animation-duration: 350ms; -} -.slide.out { - -webkit-transform: translateX(-100%); - -webkit-animation-name: slideouttoleft; - -moz-transform: translateX(-100%); - -moz-animation-name: slideouttoleft; -} -.slide.in { - -webkit-transform: translateX(0); - -webkit-animation-name: slideinfromright; - -moz-transform: translateX(0); - -moz-animation-name: slideinfromright; -} -.slide.out.reverse { - -webkit-transform: translateX(100%); - -webkit-animation-name: slideouttoright; - -moz-transform: translateX(100%); - -moz-animation-name: slideouttoright; -} -.slide.in.reverse { - -webkit-transform: translateX(0); - -webkit-animation-name: slideinfromleft; - -moz-transform: translateX(0); - -moz-animation-name: slideinfromleft; -} -.slidefade.out { - -webkit-transform: translateX(-100%); - -webkit-animation-name: slideouttoleft; - -moz-transform: translateX(-100%); - -moz-animation-name: slideouttoleft; - -webkit-animation-duration: 225ms; - -moz-animation-duration: 225ms; -} -.slidefade.in { - -webkit-transform: translateX(0); - -webkit-animation-name: fadein; - -moz-transform: translateX(0); - -moz-animation-name: fadein; - -webkit-animation-duration: 200ms; - -moz-animation-duration: 200ms; -} -.slidefade.out.reverse { - -webkit-transform: translateX(100%); - -webkit-animation-name: slideouttoright; - -moz-transform: translateX(100%); - -moz-animation-name: slideouttoright; - -webkit-animation-duration: 200ms; - -moz-animation-duration: 200ms; -} -.slidefade.in.reverse { - -webkit-transform: translateX(0); - -webkit-animation-name: fadein; - -moz-transform: translateX(0); - -moz-animation-name: fadein; - -webkit-animation-duration: 200ms; - -moz-animation-duration: 200ms; -} -/* slide down */ -.slidedown.out { - -webkit-animation-name: fadeout; - -moz-animation-name: fadeout; - -webkit-animation-duration: 100ms; - -moz-animation-duration: 100ms; -} -.slidedown.in { - -webkit-transform: translateY(0); - -webkit-animation-name: slideinfromtop; - -moz-transform: translateY(0); - -moz-animation-name: slideinfromtop; - -webkit-animation-duration: 250ms; - -moz-animation-duration: 250ms; -} -.slidedown.in.reverse { - -webkit-animation-name: fadein; - -moz-animation-name: fadein; - -webkit-animation-duration: 150ms; - -moz-animation-duration: 150ms; -} -.slidedown.out.reverse { - -webkit-transform: translateY(-100%); - -moz-transform: translateY(-100%); - -webkit-animation-name: slideouttotop; - -moz-animation-name: slideouttotop; - -webkit-animation-duration: 200ms; - -moz-animation-duration: 200ms; -} -@-webkit-keyframes slideinfromtop { - from { -webkit-transform: translateY(-100%); } - to { -webkit-transform: translateY(0); } -} -@-moz-keyframes slideinfromtop { - from { -moz-transform: translateY(-100%); } - to { -moz-transform: translateY(0); } -} -@-webkit-keyframes slideouttotop { - from { -webkit-transform: translateY(0); } - to { -webkit-transform: translateY(-100%); } -} -@-moz-keyframes slideouttotop { - from { -moz-transform: translateY(0); } - to { -moz-transform: translateY(-100%); } -} -/* slide up */ -.slideup.out { - -webkit-animation-name: fadeout; - -moz-animation-name: fadeout; - -webkit-animation-duration: 100ms; - -moz-animation-duration: 100ms; -} -.slideup.in { - -webkit-transform: translateY(0); - -webkit-animation-name: slideinfrombottom; - -moz-transform: translateY(0); - -moz-animation-name: slideinfrombottom; - -webkit-animation-duration: 250ms; - -moz-animation-duration: 250ms; -} -.slideup.in.reverse { - -webkit-animation-name: fadein; - -moz-animation-name: fadein; - -webkit-animation-duration: 150ms; - -moz-animation-duration: 150ms; -} -.slideup.out.reverse { - -webkit-transform: translateY(100%); - -moz-transform: translateY(100%); - -webkit-animation-name: slideouttobottom; - -moz-animation-name: slideouttobottom; - -webkit-animation-duration: 200ms; - -moz-animation-duration: 200ms; -} -@-webkit-keyframes slideinfrombottom { - from { -webkit-transform: translateY(100%); } - to { -webkit-transform: translateY(0); } -} -@-moz-keyframes slideinfrombottom { - from { -moz-transform: translateY(100%); } - to { -moz-transform: translateY(0); } -} -@-webkit-keyframes slideouttobottom { - from { -webkit-transform: translateY(0); } - to { -webkit-transform: translateY(100%); } -} -@-moz-keyframes slideouttobottom { - from { -moz-transform: translateY(0); } - to { -moz-transform: translateY(100%); } -} -/* The properties in this rule are only necessary for the 'flip' transition. - * We need specify the perspective to create a projection matrix. This will add - * some depth as the element flips. The depth number represents the distance of - * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate - * value. - */ -.viewport-flip { - -webkit-perspective: 1000; - -moz-perspective: 1000; - position: absolute; -} -.flip { - -webkit-backface-visibility:hidden; - -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ - -moz-backface-visibility:hidden; - -moz-transform:translateX(0); -} -.flip.out { - -webkit-transform: rotateY(-90deg) scale(.9); - -webkit-animation-name: flipouttoleft; - -webkit-animation-duration: 175ms; - -moz-transform: rotateY(-90deg) scale(.9); - -moz-animation-name: flipouttoleft; - -moz-animation-duration: 175ms; -} -.flip.in { - -webkit-animation-name: flipintoright; - -webkit-animation-duration: 225ms; - -moz-animation-name: flipintoright; - -moz-animation-duration: 225ms; -} -.flip.out.reverse { - -webkit-transform: rotateY(90deg) scale(.9); - -webkit-animation-name: flipouttoright; - -moz-transform: rotateY(90deg) scale(.9); - -moz-animation-name: flipouttoright; -} -.flip.in.reverse { - -webkit-animation-name: flipintoleft; - -moz-animation-name: flipintoleft; -} -@-webkit-keyframes flipouttoleft { - from { -webkit-transform: rotateY(0); } - to { -webkit-transform: rotateY(-90deg) scale(.9); } -} -@-moz-keyframes flipouttoleft { - from { -moz-transform: rotateY(0); } - to { -moz-transform: rotateY(-90deg) scale(.9); } -} -@-webkit-keyframes flipouttoright { - from { -webkit-transform: rotateY(0) ; } - to { -webkit-transform: rotateY(90deg) scale(.9); } -} -@-moz-keyframes flipouttoright { - from { -moz-transform: rotateY(0); } - to { -moz-transform: rotateY(90deg) scale(.9); } -} -@-webkit-keyframes flipintoleft { - from { -webkit-transform: rotateY(-90deg) scale(.9); } - to { -webkit-transform: rotateY(0); } -} -@-moz-keyframes flipintoleft { - from { -moz-transform: rotateY(-90deg) scale(.9); } - to { -moz-transform: rotateY(0); } -} -@-webkit-keyframes flipintoright { - from { -webkit-transform: rotateY(90deg) scale(.9); } - to { -webkit-transform: rotateY(0); } -} -@-moz-keyframes flipintoright { - from { -moz-transform: rotateY(90deg) scale(.9); } - to { -moz-transform: rotateY(0); } -} -/* The properties in this rule are only necessary for the 'flip' transition. - * We need specify the perspective to create a projection matrix. This will add - * some depth as the element flips. The depth number represents the distance of - * the viewer from the z-plane. According to the CSS3 spec, 1000 is a moderate - * value. - */ -.viewport-turn { - -webkit-perspective: 1000; - -moz-perspective: 1000; - position: absolute; -} -.turn { - -webkit-backface-visibility:hidden; - -webkit-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ - -webkit-transform-origin: 0; - - -moz-backface-visibility:hidden; - -moz-transform:translateX(0); /* Needed to work around an iOS 3.1 bug that causes listview thumbs to disappear when -webkit-visibility:hidden is used. */ - -moz-transform-origin: 0; -} -.turn.out { - -webkit-transform: rotateY(-90deg) scale(.9); - -webkit-animation-name: flipouttoleft; - -moz-transform: rotateY(-90deg) scale(.9); - -moz-animation-name: flipouttoleft; - -webkit-animation-duration: 125ms; - -moz-animation-duration: 125ms; -} -.turn.in { - -webkit-animation-name: flipintoright; - -moz-animation-name: flipintoright; - -webkit-animation-duration: 250ms; - -moz-animation-duration: 250ms; - -} -.turn.out.reverse { - -webkit-transform: rotateY(90deg) scale(.9); - -webkit-animation-name: flipouttoright; - -moz-transform: rotateY(90deg) scale(.9); - -moz-animation-name: flipouttoright; -} -.turn.in.reverse { - -webkit-animation-name: flipintoleft; - -moz-animation-name: flipintoleft; -} -@-webkit-keyframes flipouttoleft { - from { -webkit-transform: rotateY(0); } - to { -webkit-transform: rotateY(-90deg) scale(.9); } -} -@-moz-keyframes flipouttoleft { - from { -moz-transform: rotateY(0); } - to { -moz-transform: rotateY(-90deg) scale(.9); } -} -@-webkit-keyframes flipouttoright { - from { -webkit-transform: rotateY(0) ; } - to { -webkit-transform: rotateY(90deg) scale(.9); } -} -@-moz-keyframes flipouttoright { - from { -moz-transform: rotateY(0); } - to { -moz-transform: rotateY(90deg) scale(.9); } -} -@-webkit-keyframes flipintoleft { - from { -webkit-transform: rotateY(-90deg) scale(.9); } - to { -webkit-transform: rotateY(0); } -} -@-moz-keyframes flipintoleft { - from { -moz-transform: rotateY(-90deg) scale(.9); } - to { -moz-transform: rotateY(0); } -} -@-webkit-keyframes flipintoright { - from { -webkit-transform: rotateY(90deg) scale(.9); } - to { -webkit-transform: rotateY(0); } -} -@-moz-keyframes flipintoright { - from { -moz-transform: rotateY(90deg) scale(.9); } - to { -moz-transform: rotateY(0); } -} -/* flow transition */ -.flow { - -webkit-transform-origin: 50% 30%; - -moz-transform-origin: 50% 30%; - -webkit-box-shadow: 0 0 20px rgba(0,0,0,.4); - -moz-box-shadow: 0 0 20px rgba(0,0,0,.4); -} -.ui-dialog.flow { - -webkit-transform-origin: none; - -moz-transform-origin: none; - -webkit-box-shadow: none; - -moz-box-shadow: none; -} -.flow.out { - -webkit-transform: translateX(-100%) scale(.7); - -webkit-animation-name: flowouttoleft; - -webkit-animation-timing-function: ease; - -webkit-animation-duration: 350ms; - -moz-transform: translateX(-100%) scale(.7); - -moz-animation-name: flowouttoleft; - -moz-animation-timing-function: ease; - -moz-animation-duration: 350ms; -} -.flow.in { - -webkit-transform: translateX(0) scale(1); - -webkit-animation-name: flowinfromright; - -webkit-animation-timing-function: ease; - -webkit-animation-duration: 350ms; - -moz-transform: translateX(0) scale(1); - -moz-animation-name: flowinfromright; - -moz-animation-timing-function: ease; - -moz-animation-duration: 350ms; -} -.flow.out.reverse { - -webkit-transform: translateX(100%); - -webkit-animation-name: flowouttoright; - -moz-transform: translateX(100%); - -moz-animation-name: flowouttoright; -} -.flow.in.reverse { - -webkit-animation-name: flowinfromleft; - -moz-animation-name: flowinfromleft; -} -@-webkit-keyframes flowouttoleft { - 0% { -webkit-transform: translateX(0) scale(1); } - 60%, 70% { -webkit-transform: translateX(0) scale(.7); } - 100% { -webkit-transform: translateX(-100%) scale(.7); } -} -@-moz-keyframes flowouttoleft { - 0% { -moz-transform: translateX(0) scale(1); } - 60%, 70% { -moz-transform: translateX(0) scale(.7); } - 100% { -moz-transform: translateX(-100%) scale(.7); } -} -@-webkit-keyframes flowouttoright { - 0% { -webkit-transform: translateX(0) scale(1); } - 60%, 70% { -webkit-transform: translateX(0) scale(.7); } - 100% { -webkit-transform: translateX(100%) scale(.7); } -} -@-moz-keyframes flowouttoright { - 0% { -moz-transform: translateX(0) scale(1); } - 60%, 70% { -moz-transform: translateX(0) scale(.7); } - 100% { -moz-transform: translateX(100%) scale(.7); } -} -@-webkit-keyframes flowinfromleft { - 0% { -webkit-transform: translateX(-100%) scale(.7); } - 30%, 40% { -webkit-transform: translateX(0) scale(.7); } - 100% { -webkit-transform: translateX(0) scale(1); } -} -@-moz-keyframes flowinfromleft { - 0% { -moz-transform: translateX(-100%) scale(.7); } - 30%, 40% { -moz-transform: translateX(0) scale(.7); } - 100% { -moz-transform: translateX(0) scale(1); } -} -@-webkit-keyframes flowinfromright { - 0% { -webkit-transform: translateX(100%) scale(.7); } - 30%, 40% { -webkit-transform: translateX(0) scale(.7); } - 100% { -webkit-transform: translateX(0) scale(1); } -} -@-moz-keyframes flowinfromright { - 0% { -moz-transform: translateX(100%) scale(.7); } - 30%, 40% { -moz-transform: translateX(0) scale(.7); } - 100% { -moz-transform: translateX(0) scale(1); } -} -/* content configurations. */ -.ui-grid-a, .ui-grid-b, .ui-grid-c, .ui-grid-d { overflow: hidden; } -.ui-block-a, .ui-block-b, .ui-block-c, .ui-block-d, .ui-block-e { margin: 0; padding: 0; border: 0; float: left; min-height:1px;} -/* grid solo: 100 - single item fallback */ -.ui-grid-solo .ui-block-a { width: 100%; float: none; } -/* grid a: 50/50 */ -.ui-grid-a .ui-block-a, .ui-grid-a .ui-block-b { width: 50%; } -.ui-grid-a .ui-block-a { clear: left; } -/* grid b: 33/33/33 */ -.ui-grid-b .ui-block-a, .ui-grid-b .ui-block-b, .ui-grid-b .ui-block-c { width: 33.333%; } -.ui-grid-b .ui-block-a { clear: left; } -/* grid c: 25/25/25/25 */ -.ui-grid-c .ui-block-a, .ui-grid-c .ui-block-b, .ui-grid-c .ui-block-c, .ui-grid-c .ui-block-d { width: 25%; } -.ui-grid-c .ui-block-a { clear: left; } -/* grid d: 20/20/20/20/20 */ -.ui-grid-d .ui-block-a, .ui-grid-d .ui-block-b, .ui-grid-d .ui-block-c, .ui-grid-d .ui-block-d, .ui-grid-d .ui-block-e { width: 20%; } -.ui-grid-d .ui-block-a { clear: left; } -/* fixed page header & footer configuration */ -.ui-header-fixed, -.ui-footer-fixed { - left: 0; - right: 0; - width: 100%; - position: fixed; - z-index: 1000; -} -.ui-header-fixed { - top: 0; -} -.ui-footer-fixed { - bottom: 0; -} -.ui-header-fullscreen, -.ui-footer-fullscreen { - opacity: .9; -} -.ui-page-header-fixed { - padding-top: 2.5em; -} -.ui-page-footer-fixed { - padding-bottom: 3em; -} -.ui-page-header-fullscreen .ui-content, -.ui-page-footer-fullscreen .ui-content { - padding: 0; -} -.ui-fixed-hidden { - position: absolute; -} -.ui-page-header-fullscreen .ui-fixed-hidden, -.ui-page-footer-fullscreen .ui-fixed-hidden { - left: -99999em; -} -.ui-header-fixed .ui-btn, -.ui-footer-fixed .ui-btn { - z-index: 10; -} -.ui-navbar { overflow: hidden; } -.ui-navbar ul, .ui-navbar-expanded ul { list-style:none; padding: 0; margin: 0; position: relative; display: block; border: 0;} -.ui-navbar-collapsed ul { float: left; width: 75%; margin-right: -2px; } -.ui-navbar-collapsed .ui-navbar-toggle { float: left; width: 25%; } -.ui-navbar li.ui-navbar-truncate { position: absolute; left: -9999px; top: -9999px; } -.ui-navbar li .ui-btn, .ui-navbar .ui-navbar-toggle .ui-btn { display: block; font-size: 12px; text-align: center; margin: 0; border-right-width: 0; max-width: 100%; } -.ui-navbar li .ui-btn { margin-right: -1px; } -.ui-navbar li .ui-btn:last-child { margin-right: 0; } -.ui-header .ui-navbar li .ui-btn, .ui-header .ui-navbar .ui-navbar-toggle .ui-btn, -.ui-footer .ui-navbar li .ui-btn, .ui-footer .ui-navbar .ui-navbar-toggle .ui-btn { border-top-width: 0; border-bottom-width: 0; } -.ui-navbar .ui-btn-inner { padding-left: 2px; padding-right: 2px; } -.ui-navbar-noicons li .ui-btn .ui-btn-inner, .ui-navbar-noicons .ui-navbar-toggle .ui-btn-inner { padding-top: .8em; padding-bottom: .9em; } -/*expanded page styles*/ -.ui-navbar-expanded .ui-btn { margin: 0; font-size: 14px; } -.ui-navbar-expanded .ui-btn-inner { padding-left: 5px; padding-right: 5px; } -.ui-navbar-expanded .ui-btn-icon-top .ui-btn-inner { padding: 45px 5px 15px; text-align: center; } -.ui-navbar-expanded .ui-btn-icon-top .ui-icon { top: 15px; } -.ui-navbar-expanded .ui-btn-icon-bottom .ui-btn-inner { padding: 15px 5px 45px; text-align: center; } -.ui-navbar-expanded .ui-btn-icon-bottom .ui-icon { bottom: 15px; } -.ui-navbar-expanded li .ui-btn .ui-btn-inner { min-height: 2.5em; } -.ui-navbar-expanded .ui-navbar-noicons .ui-btn .ui-btn-inner { padding-top: 1.8em; padding-bottom: 1.9em; } -.ui-btn { display: block; text-align: center; cursor:pointer; position: relative; margin: .5em 5px; padding: 0; } -.ui-mini { margin: .25em 5px; } -.ui-btn-inner { padding: .6em 20px; min-width: .75em; display: block; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; position: relative; zoom: 1; } -.ui-btn input, .ui-btn button { z-index: 2; } -.ui-btn-left, .ui-btn-right, .ui-btn-inline { display: inline-block; } -.ui-btn-block { display: block; } -.ui-header .ui-btn, -.ui-footer .ui-btn { display: inline-block; margin: 0; } -.ui-header .ui-btn-inner, -.ui-footer .ui-btn-inner, -.ui-mini .ui-btn-inner { font-size: 12.5px; padding: .55em 11px .5em; } -.ui-header .ui-fullsize .ui-btn-inner, -.ui-footer .ui-fullsize .ui-btn-inner { font-size: 16px; padding: .6em 25px; } -.ui-btn-icon-notext { width: 24px; height: 24px; } -.ui-btn-icon-notext .ui-btn-inner { padding: 0; height: 100%; } -.ui-btn-icon-notext .ui-btn-inner .ui-icon { margin: 2px 1px 2px 3px; } -.ui-btn-text { position: relative; z-index: 1; width: 100%; } -.ui-btn-icon-notext .ui-btn-text { position: absolute; left: -9999px; } -.ui-btn-icon-left .ui-btn-inner { padding-left: 40px; } -.ui-btn-icon-right .ui-btn-inner { padding-right: 40px; } -.ui-btn-icon-top .ui-btn-inner { padding-top: 40px; } -.ui-btn-icon-bottom .ui-btn-inner { padding-bottom: 40px; } -.ui-header .ui-btn-icon-left .ui-btn-inner, -.ui-footer .ui-btn-icon-left .ui-btn-inner, -.ui-mini .ui-btn-icon-left .ui-btn-inner { padding-left: 30px; } -.ui-header .ui-btn-icon-right .ui-btn-inner, -.ui-footer .ui-btn-icon-right .ui-btn-inner, -.ui-mini .ui-btn-icon-right .ui-btn-inner { padding-right: 30px; } -.ui-header .ui-btn-icon-top .ui-btn-inner, -.ui-footer .ui-btn-icon-top .ui-btn-inner, -.ui-mini .ui-btn-icon-top .ui-btn-inner { padding: 30px 3px .5em 3px; } -.ui-header .ui-btn-icon-bottom .ui-btn-inner, -.ui-footer .ui-btn-icon-bottom .ui-btn-inner, -.ui-mini .ui-btn-icon-bottom .ui-btn-inner { padding: .55em 3px 30px 3px; } -/*btn icon positioning*/ -.ui-btn-icon-notext .ui-icon { display: block; z-index: 0;} -.ui-btn-icon-left .ui-btn-inner .ui-icon, .ui-btn-icon-right .ui-btn-inner .ui-icon { position: absolute; top: 50%; margin-top: -9px; } -.ui-btn-icon-top .ui-btn-inner .ui-icon, .ui-btn-icon-bottom .ui-btn-inner .ui-icon { position: absolute; left: 50%; margin-left: -9px; } -.ui-btn-icon-left .ui-icon { left: 10px; } -.ui-btn-icon-right .ui-icon { right: 10px; } -.ui-btn-icon-top .ui-icon { top: 10px; } -.ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; } -.ui-header .ui-btn-icon-left .ui-icon, -.ui-footer .ui-btn-icon-left .ui-icon, -.ui-mini.ui-btn-icon-left .ui-icon, -.ui-mini .ui-btn-icon-left .ui-icon { left: 5px; } -.ui-header .ui-btn-icon-right .ui-icon, -.ui-footer .ui-btn-icon-right .ui-icon, -.ui-mini.ui-btn-icon-right .ui-icon, -.ui-mini .ui-btn-icon-right .ui-icon { right: 5px; } -.ui-header .ui-btn-icon-top .ui-icon, -.ui-footer .ui-btn-icon-top .ui-icon, -.ui-mini.ui-btn-icon-top .ui-icon, -.ui-mini .ui-btn-icon-top .ui-icon { top: 5px; } -.ui-header .ui-btn-icon-bottom .ui-icon, -.ui-footer .ui-btn-icon-bottom .ui-icon, -.ui-mini.ui-btn-icon-bottom .ui-icon, -.ui-mini .ui-btn-icon-bottom .ui-icon { bottom: 5px; } -/*hiding native button,inputs */ -.ui-btn-hidden { position: absolute; top: 0; left: 0; width: 100%; height: 100%; -webkit-appearance: button; opacity: .1; cursor: pointer; background: #fff; background: rgba(255,255,255,0); filter: Alpha(Opacity=.0001); font-size: 1px; border: none; text-indent: -9999px; } -.ui-collapsible { margin: .5em 0; } -.ui-collapsible-heading { font-size: 16px; display: block; margin: 0 -8px; padding: 0; border-width: 0 0 1px 0; position: relative; } -.ui-collapsible-heading a { text-align: left; margin: 0; } -.ui-collapsible-heading .ui-btn-inner, -.ui-collapsible-heading .ui-btn-icon-left .ui-btn-inner { padding-left: 40px; } -.ui-collapsible-heading .ui-btn-icon-right .ui-btn-inner { padding-left: 12px; padding-right: 40px; } -.ui-collapsible-heading .ui-btn-icon-top .ui-btn-inner, -.ui-collapsible-heading .ui-btn-icon-bottom .ui-btn-inner { padding-right: 40px; text-align: center; } -.ui-collapsible-heading a span.ui-btn { position: absolute; left: 6px; top: 50%; margin: -12px 0 0 0; width: 20px; height: 20px; padding: 1px 0px 1px 2px; text-indent: -9999px; } -.ui-collapsible-heading a span.ui-btn .ui-btn-inner { padding: 10px 0; } -.ui-collapsible-heading a span.ui-btn .ui-icon { left: 0; margin-top: -10px; } -.ui-collapsible-heading-status { position: absolute; top: -9999px; left:0px; } -.ui-collapsible-content { - display: block; - margin: 0 -8px; - padding: 10px 16px; - border-top: none; /* Overrides ui-btn-up-* */ - background-image: none; /* Overrides ui-btn-up-* */ - font-weight: normal; /* Overrides ui-btn-up-* */ -} -.ui-collapsible-content-collapsed { display: none; } -.ui-collapsible-set { margin: .5em 0; } -.ui-collapsible-set .ui-collapsible { margin: -1px 0 0; } -.ui-controlgroup, fieldset.ui-controlgroup { padding: 0; margin: 0em 0 .5em; zoom: 1; } -.ui-bar .ui-controlgroup { margin: 0 .3em; } -.ui-controlgroup-label { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .4em; } -.ui-controlgroup-controls { display: block; width: 100%;} -.ui-controlgroup li { list-style: none; } -.ui-controlgroup-vertical .ui-btn, -.ui-controlgroup-vertical .ui-checkbox, .ui-controlgroup-vertical .ui-radio { margin: 0; border-bottom-width: 0; } -.ui-controlgroup-controls label.ui-select { position: absolute; left: -9999px; } -.ui-controlgroup-vertical .ui-controlgroup-last { border-bottom-width: 1px; } -.ui-controlgroup-horizontal { padding: 0; } -.ui-controlgroup-horizontal .ui-btn-inner { text-align:center; } -.ui-controlgroup-horizontal .ui-btn, .ui-controlgroup-horizontal .ui-select { display: inline-block; margin: 0 -6px 0 0; } -.ui-controlgroup-horizontal .ui-checkbox, .ui-controlgroup-horizontal .ui-radio { float: left; clear: none; margin: 0 -1px 0 0; } -.ui-controlgroup-horizontal .ui-checkbox .ui-btn, .ui-controlgroup-horizontal .ui-radio .ui-btn, -.ui-controlgroup-horizontal .ui-checkbox:last-child, .ui-controlgroup-horizontal .ui-radio:last-child { margin-right: 0; } -.ui-controlgroup-horizontal .ui-controlgroup-last { margin-right: 0; } -.ui-controlgroup .ui-checkbox label, .ui-controlgroup .ui-radio label { font-size: 16px; } -/* conflicts with listview.. -.ui-controlgroup .ui-btn-icon-notext { width: 30px; height: 30px; text-indent: -9999px; } -.ui-controlgroup .ui-btn-icon-notext .ui-btn-inner { padding: 5px 6px 5px 5px; } -*/ -@media all and (min-width: 450px){ - .ui-field-contain .ui-controlgroup-label { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } - .ui-field-contain .ui-controlgroup-controls { width: 60%; display: inline-block; } - .ui-field-contain .ui-controlgroup .ui-select { width: 100%; } - .ui-field-contain .ui-controlgroup-horizontal .ui-select { width: auto; } -} -.ui-dialog { - background: none !important; /* this is to ensure that dialog theming does not apply (by default at least) on the page div */ -} -.ui-dialog-contain { width: 92.5%; max-width: 500px; margin: 10% auto 15px auto; padding: 0; } -.ui-dialog .ui-header { - margin-top: 15%; - border: none; - overflow: hidden; -} -.ui-dialog .ui-header, -.ui-dialog .ui-content, -.ui-dialog .ui-footer { - display: block; - position: relative; - width: auto; -} -.ui-dialog .ui-header, -.ui-dialog .ui-footer { - z-index: 10; - padding: 0; -} -.ui-dialog .ui-footer { - padding: 0 15px; -} -.ui-dialog .ui-content { - padding: 15px; -} -.ui-dialog { - margin-top: -15px; -} -.ui-checkbox, .ui-radio { position: relative; clear: both; margin: .2em 0 .5em; z-index: 1; } -.ui-checkbox .ui-btn, .ui-radio .ui-btn { margin: 0; text-align: left; z-index: 2; } -.ui-checkbox .ui-btn-inner, .ui-radio .ui-btn-inner { white-space: normal; } -.ui-checkbox .ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-btn-icon-left .ui-btn-inner { padding-left: 45px; } -.ui-checkbox .ui-mini.ui-btn-icon-left .ui-btn-inner,.ui-radio .ui-mini.ui-btn-icon-left .ui-btn-inner { padding-left: 36px; } -.ui-checkbox .ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; } -.ui-checkbox .ui-mini.ui-btn-icon-right .ui-btn-inner, .ui-radio .ui-mini.ui-btn-icon-right .ui-btn-inner { padding-right: 36px; } -.ui-checkbox .ui-btn-icon-top .ui-btn-inner,.ui-radio .ui-btn-icon-top .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; } -.ui-checkbox .ui-btn-icon-bottom .ui-btn-inner, .ui-radio .ui-btn-icon-bottom .ui-btn-inner { padding-right: 0; padding-left: 0; text-align: center; } -.ui-checkbox .ui-icon, .ui-radio .ui-icon { top: 1.1em; } -.ui-checkbox .ui-btn-icon-left .ui-icon, .ui-radio .ui-btn-icon-left .ui-icon { left: 15px; } -.ui-checkbox .ui-mini.ui-btn-icon-left .ui-icon, .ui-radio .ui-mini.ui-btn-icon-left .ui-icon { left: 9px; } -.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; } -.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; } -.ui-checkbox .ui-btn-icon-top .ui-icon, .ui-radio .ui-btn-icon-top .ui-icon { top: 10px; } -.ui-checkbox .ui-btn-icon-bottom .ui-icon, .ui-radio .ui-btn-icon-bottom .ui-icon { top: auto; bottom: 10px; } -.ui-checkbox .ui-btn-icon-right .ui-icon, .ui-radio .ui-btn-icon-right .ui-icon { right: 15px; } -.ui-checkbox .ui-mini.ui-btn-icon-right .ui-icon, .ui-radio .ui-mini.ui-btn-icon-right .ui-icon { right: 9px; } -/* input, label positioning */ -.ui-checkbox input,.ui-radio input { position:absolute; left:20px; top:50%; width: 10px; height: 10px; margin:-5px 0 0 0; outline: 0 !important; z-index: 1; } -.ui-field-contain, fieldset.ui-field-contain { padding: .8em 0; margin: 0; border-width: 0 0 1px 0; overflow: visible; } -.ui-field-contain:first-child { border-top-width: 0; } -.ui-header .ui-field-contain-left, -.ui-header .ui-field-contain-right { - position: absolute; - top: 0; - width: 25%; -} -.ui-header .ui-field-contain-left { - left: 1em; -} -.ui-header .ui-field-contain-right { - right: 1em; -} -@media all and (min-width: 450px){ - .ui-field-contain, .ui-mobile fieldset.ui-field-contain { border-width: 0; padding: 0; margin: 1em 0; } -} -.ui-select { display: block; position: relative; } -.ui-select select { position: absolute; left: -9999px; top: -9999px; } -.ui-select .ui-btn { overflow: hidden; opacity: 1; margin: 0; } -/* Fixes #2588 — When Windows Phone 7.5 (Mango) tries to calculate a numeric opacity for a select—including “inherit”—without explicitly specifying an opacity on the parent to give it context, a bug appears where clicking elsewhere on the page after opening the select will open the select again. */ -.ui-select .ui-btn select { cursor: pointer; -webkit-appearance: button; left: 0; top:0; width: 100%; min-height: 1.5em; min-height: 100%; height: 3em; max-height: 100%; opacity: 0; -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; filter: alpha(opacity=0); z-index: 2; } -.ui-select .ui-disabled { opacity: .3; } -@-moz-document url-prefix() {.ui-select .ui-btn select { opacity: 0.0001; }} -.ui-select .ui-btn select.ui-select-nativeonly { opacity: 1; text-indent: 0; } -.ui-select .ui-btn-icon-right .ui-btn-inner { padding-right: 45px; } -.ui-select .ui-btn-icon-right .ui-icon { right: 15px; } -.ui-select .ui-mini.ui-btn-icon-right .ui-icon { right: 7px; } -/* labels */ -label.ui-select { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; } -/*listbox*/ -.ui-select .ui-btn-text, .ui-selectmenu .ui-btn-text { display: block; min-height: 1em; overflow: hidden !important; -/* This !important is required for iPad Safari specifically. See https://github.com/jquery/jquery-mobile/issues/2647 */ } -.ui-select .ui-btn-text { text-overflow: ellipsis; } -.ui-selectmenu { position: absolute; padding: 0; z-index: 1100 !important; width: 80%; max-width: 350px; padding: 6px; } -.ui-selectmenu .ui-listview { margin: 0; } -.ui-selectmenu .ui-btn.ui-li-divider { cursor: default; } -.ui-selectmenu-hidden { top: -9999px; left: -9999px; } -.ui-selectmenu-screen { position: absolute; top: 0; left: 0; width: 100%; height: 100%; z-index: 99; } -.ui-screen-hidden, .ui-selectmenu-list .ui-li .ui-icon { display: none; } -.ui-selectmenu-list .ui-li .ui-icon { display: block; } -.ui-li.ui-selectmenu-placeholder { display: none; } -.ui-selectmenu .ui-header .ui-title { margin: 0.6em 46px 0.8em; } -@media all and (min-width: 450px){ - .ui-field-contain label.ui-select { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } - .ui-field-contain .ui-select { width: 60%; display: inline-block; } -} -/* when no placeholder is defined in a multiple select, the header height doesn't even extend past the close button. this shim's content in there */ -.ui-selectmenu .ui-header h1:after { content: '.'; visibility: hidden; } -label.ui-input-text { font-size: 16px; line-height: 1.4; display: block; font-weight: normal; margin: 0 0 .3em; } -input.ui-input-text, textarea.ui-input-text { background-image: none; padding: .4em; line-height: 1.4; font-size: 16px; display: block; width: 97%; outline: 0; } -.ui-header input.ui-input-text, -.ui-footer input.ui-input-text { margin-left: 1.25%; padding: .4em 1%; width: 95.5% } /* Note that padding left/right on text inputs is factored into how the element is displayed in Firefox, but does not actually pad the text inside it. */ - input.ui-input-text { -webkit-appearance: none; } -textarea.ui-input-text { height: 50px; -webkit-transition: height 200ms linear; -moz-transition: height 200ms linear; -o-transition: height 200ms linear; transition: height 200ms linear; } -.ui-input-search { padding: 0 30px; background-image: none; position: relative; } -.ui-icon-searchfield:after { position: absolute; left: 7px; top: 50%; margin-top: -9px; content: ""; width: 18px; height: 18px; opacity: .5; } -.ui-input-search input.ui-input-text { border: none; width: 98%; padding: .4em 0; margin: 0; display: block; background: transparent none; outline: 0 !important; } -.ui-input-search .ui-input-clear { position: absolute; right: 0; top: 50%; margin-top: -13px; } -.ui-mini .ui-input-clear { right: -3px; } -.ui-input-search .ui-input-clear-hidden { display: none; } -input.ui-mini, .ui-mini input, textarea.ui-mini { font-size: 14px; } -textarea.ui-mini { height: 45px; } -/* orientation adjustments - incomplete!*/ -@media all and (min-width: 450px){ - .ui-field-contain label.ui-input-text { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0 } - .ui-field-contain input.ui-input-text, - .ui-field-contain textarea.ui-input-text, - .ui-field-contain .ui-input-search { width: 60%; display: inline-block; } - .ui-field-contain .ui-input-search { width: 50%; } - .ui-hide-label input.ui-input-text, - .ui-hide-label textarea.ui-input-text, - .ui-hide-label .ui-input-search { padding: .4em; width: 97%; } - .ui-input-search input.ui-input-text { width: 98%; /*echos rule from above*/ } -} -.ui-listview { margin: 0; counter-reset: listnumbering; } -.ui-content .ui-listview { margin: -15px; } -.ui-content .ui-listview-inset { margin: 1em 0; } -.ui-listview, .ui-li { list-style:none; padding:0; } -.ui-li, .ui-li.ui-field-contain { display: block; margin:0; position: relative; overflow: visible; text-align: left; border-width: 0; border-top-width: 1px; } -.ui-li .ui-btn-text a.ui-link-inherit { text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } -.ui-li-divider, .ui-li-static { padding: .5em 15px; font-size: 14px; font-weight: bold; } -.ui-li-divider { counter-reset: listnumbering; } -ol.ui-listview .ui-link-inherit:before, ol.ui-listview .ui-li-static:before, .ui-li-dec { font-size: .8em; display: inline-block; padding-right: .3em; font-weight: normal;counter-increment: listnumbering; content: counter(listnumbering) ". "; } -ol.ui-listview .ui-li-jsnumbering:before { content: "" !important; } /* to avoid chance of duplication */ -.ui-listview-inset .ui-li { border-right-width: 1px; border-left-width: 1px; } -.ui-li:last-child, .ui-li.ui-field-contain:last-child { border-bottom-width: 1px; } -.ui-li>.ui-btn-inner { display: block; position: relative; padding: 0; } -.ui-li .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li { padding: .7em 15px .7em 15px; display: block; } -.ui-li-has-thumb .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-thumb { min-height: 60px; padding-left: 100px; } -.ui-li-has-icon .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-icon { min-height: 20px; padding-left: 40px; } -.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-count { padding-right: 45px; } -.ui-li-has-arrow .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow { padding-right: 30px; } -.ui-li-has-arrow.ui-li-has-count .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-arrow.ui-li-has-count { padding-right: 75px; } -.ui-li-has-count .ui-btn-text { padding-right: 15px; } -.ui-li-heading { font-size: 16px; font-weight: bold; display: block; margin: .6em 0; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } -.ui-li-desc { font-size: 12px; font-weight: normal; display: block; margin: -.5em 0 .6em; text-overflow: ellipsis; overflow: hidden; white-space: nowrap; } -.ui-li-thumb, .ui-listview .ui-li-icon { position: absolute; left: 1px; top: 0; max-height: 80px; max-width: 80px; } -.ui-listview .ui-li-icon { max-height: 40px; max-width: 40px; left: 10px; top: .9em; } -.ui-li-thumb, .ui-listview .ui-li-icon, .ui-li-content { float: left; margin-right: 10px; } -.ui-li-aside { float: right; width: 50%; text-align: right; margin: .3em 0; } -@media all and (min-width: 480px){ - .ui-li-aside { width: 45%; } -} -.ui-li-divider { cursor: default; } -.ui-li-has-alt .ui-btn-inner a.ui-link-inherit, .ui-li-static.ui-li-has-alt { padding-right: 95px; } -.ui-li-has-count .ui-li-count { position: absolute; font-size: 11px; font-weight: bold; padding: .2em .5em; top: 50%; margin-top: -.9em; right: 48px; } -.ui-li-divider .ui-li-count, .ui-li-static .ui-li-count { right: 10px; } -.ui-li-has-alt .ui-li-count { right: 55px; } -.ui-li-link-alt { position: absolute; width: 40px; height: 100%; border-width: 0; border-left-width: 1px; top: 0; right: 0; margin: 0; padding: 0; z-index: 2; } -.ui-li-link-alt .ui-btn { overflow: hidden; position: absolute; right: 8px; top: 50%; margin: -11px 0 0 0; border-bottom-width: 1px; z-index: -1;} -.ui-li-link-alt .ui-btn-inner { padding: 0; height: 100%; position: absolute; width: 100%; top: 0; left: 0;} -.ui-li-link-alt .ui-btn .ui-icon { right: 50%; margin-right: -9px; } -.ui-listview * .ui-btn-inner > .ui-btn > .ui-btn-inner { border-top: 0px; } -.ui-listview-filter { border-width: 0; overflow: hidden; margin: -15px -15px 15px -15px } -.ui-listview-filter .ui-input-search { margin: 5px; width: auto; display: block; } -.ui-listview-filter-inset { margin: -15px -5px -15px -5px; background: transparent; } -.ui-li.ui-screen-hidden{display:none;} -/* Odd iPad positioning issue. */ -@media only screen and (min-device-width: 768px) and (max-device-width: 1024px) { - .ui-li .ui-btn-text { overflow: visible; } -} -label.ui-slider { font-size: 16px; line-height: 1.4; font-weight: normal; margin: 0 0 .3em; display: block; } -input.ui-slider-input, -.ui-field-contain input.ui-slider-input { display: inline-block; width: 50px; } -select.ui-slider-switch { display: none; } -div.ui-slider { position: relative; display: inline-block; overflow: visible; height: 15px; padding: 0; margin: 0 2% 0 20px; top: 4px; width: 65%; } -div.ui-slider-mini { height: 12px; margin-left: 10px; } -div.ui-slider-bg { border: none; height: 100%; padding-right: 8px; } -.ui-controlgroup a.ui-slider-handle, a.ui-slider-handle { position: absolute; z-index: 1; top: 50%; width: 28px; height: 28px; margin-top: -15px; margin-left: -15px; outline: 0; } -a.ui-slider-handle .ui-btn-inner { padding: 0; height: 100%; } -div.ui-slider-mini a.ui-slider-handle { height: 14px; width: 14px; margin: -8px 0 0 -7px; } -div.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: -9px 0 0 -9px; } -@media all and (min-width: 450px){ - .ui-field-contain label.ui-slider { vertical-align: top; display: inline-block; width: 20%; margin: 0 2% 0 0; } - .ui-field-contain div.ui-slider { width: 43%; } - .ui-field-contain div.ui-slider-switch { width: 5.5em; } -} -div.ui-slider-switch { height: 32px; margin-left: 0; width: 5.8em; } -a.ui-slider-handle-snapping { -webkit-transition: left 70ms linear; -moz-transition: left 70ms linear; } -div.ui-slider-switch .ui-slider-handle { margin-top: 1px; } -.ui-slider-inneroffset { margin: 0 16px; position: relative; z-index: 1; } -div.ui-slider-switch.ui-slider-mini { width: 5em; height: 29px; } -div.ui-slider-switch.ui-slider-mini .ui-slider-inneroffset { margin: 0 15px 0 14px; } -div.ui-slider-switch.ui-slider-mini .ui-slider-handle { width: 25px; height: 25px; margin: 1px 0 0 -13px; } -div.ui-slider-switch.ui-slider-mini a.ui-slider-handle .ui-btn-inner { height: 30px; width: 30px; padding: 0; margin: 0; } -span.ui-slider-label { position: absolute; text-align: center; width: 100%; overflow: hidden; font-size: 16px; top: 0; line-height: 2; min-height: 100%; border-width: 0; white-space: nowrap; } -.ui-slider-mini span.ui-slider-label { font-size: 14px; } -span.ui-slider-label-a { z-index: 1; left: 0; text-indent: -1.5em; } -span.ui-slider-label-b { z-index: 0; right: 0; text-indent: 1.5em;} -.ui-slider-inline { width: 120px; display: inline-block; } diff --git a/h-source/Public/Js/jquery/jquery.mobile-1.1.0.js b/h-source/Public/Js/jquery/jquery.mobile-1.1.0.js deleted file mode 100644 index c12426c..0000000 --- a/h-source/Public/Js/jquery/jquery.mobile-1.1.0.js +++ /dev/null @@ -1,7551 +0,0 @@ -/* -* jQuery Mobile Framework 1.1.0 db342b1f315c282692791aa870455901fdb46a55 -* http://jquerymobile.com -* -* Copyright 2011 (c) jQuery Project -* Dual licensed under the MIT or GPL Version 2 licenses. -* http://jquery.org/license -* -*/ -(function ( root, doc, factory ) { - if ( typeof define === "function" && define.amd ) { - // AMD. Register as an anonymous module. - define( [ "jquery" ], function ( $ ) { - factory( $, root, doc ); - return $.mobile; - }); - } else { - // Browser globals - factory( root.jQuery, root, doc ); - } -}( this, document, function ( $, window, document, undefined ) { - - -// This plugin is an experiment for abstracting away the touch and mouse -// events so that developers don't have to worry about which method of input -// the device their document is loaded on supports. -// -// The idea here is to allow the developer to register listeners for the -// basic mouse events, such as mousedown, mousemove, mouseup, and click, -// and the plugin will take care of registering the correct listeners -// behind the scenes to invoke the listener at the fastest possible time -// for that device, while still retaining the order of event firing in -// the traditional mouse environment, should multiple handlers be registered -// on the same element for different events. -// -// The current version exposes the following virtual events to jQuery bind methods: -// "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel" - -(function( $, window, document, undefined ) { - -var dataPropertyName = "virtualMouseBindings", - touchTargetPropertyName = "virtualTouchID", - virtualEventNames = "vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split( " " ), - touchEventProps = "clientX clientY pageX pageY screenX screenY".split( " " ), - mouseHookProps = $.event.mouseHooks ? $.event.mouseHooks.props : [], - mouseEventProps = $.event.props.concat( mouseHookProps ), - activeDocHandlers = {}, - resetTimerID = 0, - startX = 0, - startY = 0, - didScroll = false, - clickBlockList = [], - blockMouseTriggers = false, - blockTouchTriggers = false, - eventCaptureSupported = "addEventListener" in document, - $document = $( document ), - nextTouchID = 1, - lastTouchID = 0; - -$.vmouse = { - moveDistanceThreshold: 10, - clickDistanceThreshold: 10, - resetTimerDuration: 1500 -}; - -function getNativeEvent( event ) { - - while ( event && typeof event.originalEvent !== "undefined" ) { - event = event.originalEvent; - } - return event; -} - -function createVirtualEvent( event, eventType ) { - - var t = event.type, - oe, props, ne, prop, ct, touch, i, j; - - event = $.Event(event); - event.type = eventType; - - oe = event.originalEvent; - props = $.event.props; - - // addresses separation of $.event.props in to $.event.mouseHook.props and Issue 3280 - // https://github.com/jquery/jquery-mobile/issues/3280 - if ( t.search( /^(mouse|click)/ ) > -1 ) { - props = mouseEventProps; - } - - // copy original event properties over to the new event - // this would happen if we could call $.event.fix instead of $.Event - // but we don't have a way to force an event to be fixed multiple times - if ( oe ) { - for ( i = props.length, prop; i; ) { - prop = props[ --i ]; - event[ prop ] = oe[ prop ]; - } - } - - // make sure that if the mouse and click virtual events are generated - // without a .which one is defined - if ( t.search(/mouse(down|up)|click/) > -1 && !event.which ){ - event.which = 1; - } - - if ( t.search(/^touch/) !== -1 ) { - ne = getNativeEvent( oe ); - t = ne.touches; - ct = ne.changedTouches; - touch = ( t && t.length ) ? t[0] : ( (ct && ct.length) ? ct[ 0 ] : undefined ); - - if ( touch ) { - for ( j = 0, len = touchEventProps.length; j < len; j++){ - prop = touchEventProps[ j ]; - event[ prop ] = touch[ prop ]; - } - } - } - - return event; -} - -function getVirtualBindingFlags( element ) { - - var flags = {}, - b, k; - - while ( element ) { - - b = $.data( element, dataPropertyName ); - - for ( k in b ) { - if ( b[ k ] ) { - flags[ k ] = flags.hasVirtualBinding = true; - } - } - element = element.parentNode; - } - return flags; -} - -function getClosestElementWithVirtualBinding( element, eventType ) { - var b; - while ( element ) { - - b = $.data( element, dataPropertyName ); - - if ( b && ( !eventType || b[ eventType ] ) ) { - return element; - } - element = element.parentNode; - } - return null; -} - -function enableTouchBindings() { - blockTouchTriggers = false; -} - -function disableTouchBindings() { - blockTouchTriggers = true; -} - -function enableMouseBindings() { - lastTouchID = 0; - clickBlockList.length = 0; - blockMouseTriggers = false; - - // When mouse bindings are enabled, our - // touch bindings are disabled. - disableTouchBindings(); -} - -function disableMouseBindings() { - // When mouse bindings are disabled, our - // touch bindings are enabled. - enableTouchBindings(); -} - -function startResetTimer() { - clearResetTimer(); - resetTimerID = setTimeout(function(){ - resetTimerID = 0; - enableMouseBindings(); - }, $.vmouse.resetTimerDuration ); -} - -function clearResetTimer() { - if ( resetTimerID ){ - clearTimeout( resetTimerID ); - resetTimerID = 0; - } -} - -function triggerVirtualEvent( eventType, event, flags ) { - var ve; - - if ( ( flags && flags[ eventType ] ) || - ( !flags && getClosestElementWithVirtualBinding( event.target, eventType ) ) ) { - - ve = createVirtualEvent( event, eventType ); - - $( event.target).trigger( ve ); - } - - return ve; -} - -function mouseEventCallback( event ) { - var touchID = $.data(event.target, touchTargetPropertyName); - - if ( !blockMouseTriggers && ( !lastTouchID || lastTouchID !== touchID ) ){ - var ve = triggerVirtualEvent( "v" + event.type, event ); - if ( ve ) { - if ( ve.isDefaultPrevented() ) { - event.preventDefault(); - } - if ( ve.isPropagationStopped() ) { - event.stopPropagation(); - } - if ( ve.isImmediatePropagationStopped() ) { - event.stopImmediatePropagation(); - } - } - } -} - -function handleTouchStart( event ) { - - var touches = getNativeEvent( event ).touches, - target, flags; - - if ( touches && touches.length === 1 ) { - - target = event.target; - flags = getVirtualBindingFlags( target ); - - if ( flags.hasVirtualBinding ) { - - lastTouchID = nextTouchID++; - $.data( target, touchTargetPropertyName, lastTouchID ); - - clearResetTimer(); - - disableMouseBindings(); - didScroll = false; - - var t = getNativeEvent( event ).touches[ 0 ]; - startX = t.pageX; - startY = t.pageY; - - triggerVirtualEvent( "vmouseover", event, flags ); - triggerVirtualEvent( "vmousedown", event, flags ); - } - } -} - -function handleScroll( event ) { - if ( blockTouchTriggers ) { - return; - } - - if ( !didScroll ) { - triggerVirtualEvent( "vmousecancel", event, getVirtualBindingFlags( event.target ) ); - } - - didScroll = true; - startResetTimer(); -} - -function handleTouchMove( event ) { - if ( blockTouchTriggers ) { - return; - } - - var t = getNativeEvent( event ).touches[ 0 ], - didCancel = didScroll, - moveThreshold = $.vmouse.moveDistanceThreshold; - didScroll = didScroll || - ( Math.abs(t.pageX - startX) > moveThreshold || - Math.abs(t.pageY - startY) > moveThreshold ), - flags = getVirtualBindingFlags( event.target ); - - if ( didScroll && !didCancel ) { - triggerVirtualEvent( "vmousecancel", event, flags ); - } - - triggerVirtualEvent( "vmousemove", event, flags ); - startResetTimer(); -} - -function handleTouchEnd( event ) { - if ( blockTouchTriggers ) { - return; - } - - disableTouchBindings(); - - var flags = getVirtualBindingFlags( event.target ), - t; - triggerVirtualEvent( "vmouseup", event, flags ); - - if ( !didScroll ) { - var ve = triggerVirtualEvent( "vclick", event, flags ); - if ( ve && ve.isDefaultPrevented() ) { - // The target of the mouse events that follow the touchend - // event don't necessarily match the target used during the - // touch. This means we need to rely on coordinates for blocking - // any click that is generated. - t = getNativeEvent( event ).changedTouches[ 0 ]; - clickBlockList.push({ - touchID: lastTouchID, - x: t.clientX, - y: t.clientY - }); - - // Prevent any mouse events that follow from triggering - // virtual event notifications. - blockMouseTriggers = true; - } - } - triggerVirtualEvent( "vmouseout", event, flags); - didScroll = false; - - startResetTimer(); -} - -function hasVirtualBindings( ele ) { - var bindings = $.data( ele, dataPropertyName ), - k; - - if ( bindings ) { - for ( k in bindings ) { - if ( bindings[ k ] ) { - return true; - } - } - } - return false; -} - -function dummyMouseHandler(){} - -function getSpecialEventObject( eventType ) { - var realType = eventType.substr( 1 ); - - return { - setup: function( data, namespace ) { - // If this is the first virtual mouse binding for this element, - // add a bindings object to its data. - - if ( !hasVirtualBindings( this ) ) { - $.data( this, dataPropertyName, {}); - } - - // If setup is called, we know it is the first binding for this - // eventType, so initialize the count for the eventType to zero. - var bindings = $.data( this, dataPropertyName ); - bindings[ eventType ] = true; - - // If this is the first virtual mouse event for this type, - // register a global handler on the document. - - activeDocHandlers[ eventType ] = ( activeDocHandlers[ eventType ] || 0 ) + 1; - - if ( activeDocHandlers[ eventType ] === 1 ) { - $document.bind( realType, mouseEventCallback ); - } - - // Some browsers, like Opera Mini, won't dispatch mouse/click events - // for elements unless they actually have handlers registered on them. - // To get around this, we register dummy handlers on the elements. - - $( this ).bind( realType, dummyMouseHandler ); - - // For now, if event capture is not supported, we rely on mouse handlers. - if ( eventCaptureSupported ) { - // If this is the first virtual mouse binding for the document, - // register our touchstart handler on the document. - - activeDocHandlers[ "touchstart" ] = ( activeDocHandlers[ "touchstart" ] || 0) + 1; - - if (activeDocHandlers[ "touchstart" ] === 1) { - $document.bind( "touchstart", handleTouchStart ) - .bind( "touchend", handleTouchEnd ) - - // On touch platforms, touching the screen and then dragging your finger - // causes the window content to scroll after some distance threshold is - // exceeded. On these platforms, a scroll prevents a click event from being - // dispatched, and on some platforms, even the touchend is suppressed. To - // mimic the suppression of the click event, we need to watch for a scroll - // event. Unfortunately, some platforms like iOS don't dispatch scroll - // events until *AFTER* the user lifts their finger (touchend). This means - // we need to watch both scroll and touchmove events to figure out whether - // or not a scroll happenens before the touchend event is fired. - - .bind( "touchmove", handleTouchMove ) - .bind( "scroll", handleScroll ); - } - } - }, - - teardown: function( data, namespace ) { - // If this is the last virtual binding for this eventType, - // remove its global handler from the document. - - --activeDocHandlers[ eventType ]; - - if ( !activeDocHandlers[ eventType ] ) { - $document.unbind( realType, mouseEventCallback ); - } - - if ( eventCaptureSupported ) { - // If this is the last virtual mouse binding in existence, - // remove our document touchstart listener. - - --activeDocHandlers[ "touchstart" ]; - - if ( !activeDocHandlers[ "touchstart" ] ) { - $document.unbind( "touchstart", handleTouchStart ) - .unbind( "touchmove", handleTouchMove ) - .unbind( "touchend", handleTouchEnd ) - .unbind( "scroll", handleScroll ); - } - } - - var $this = $( this ), - bindings = $.data( this, dataPropertyName ); - - // teardown may be called when an element was - // removed from the DOM. If this is the case, - // jQuery core may have already stripped the element - // of any data bindings so we need to check it before - // using it. - if ( bindings ) { - bindings[ eventType ] = false; - } - - // Unregister the dummy event handler. - - $this.unbind( realType, dummyMouseHandler ); - - // If this is the last virtual mouse binding on the - // element, remove the binding data from the element. - - if ( !hasVirtualBindings( this ) ) { - $this.removeData( dataPropertyName ); - } - } - }; -} - -// Expose our custom events to the jQuery bind/unbind mechanism. - -for ( var i = 0; i < virtualEventNames.length; i++ ){ - $.event.special[ virtualEventNames[ i ] ] = getSpecialEventObject( virtualEventNames[ i ] ); -} - -// Add a capture click handler to block clicks. -// Note that we require event capture support for this so if the device -// doesn't support it, we punt for now and rely solely on mouse events. -if ( eventCaptureSupported ) { - document.addEventListener( "click", function( e ){ - var cnt = clickBlockList.length, - target = e.target, - x, y, ele, i, o, touchID; - - if ( cnt ) { - x = e.clientX; - y = e.clientY; - threshold = $.vmouse.clickDistanceThreshold; - - // The idea here is to run through the clickBlockList to see if - // the current click event is in the proximity of one of our - // vclick events that had preventDefault() called on it. If we find - // one, then we block the click. - // - // Why do we have to rely on proximity? - // - // Because the target of the touch event that triggered the vclick - // can be different from the target of the click event synthesized - // by the browser. The target of a mouse/click event that is syntehsized - // from a touch event seems to be implementation specific. For example, - // some browsers will fire mouse/click events for a link that is near - // a touch event, even though the target of the touchstart/touchend event - // says the user touched outside the link. Also, it seems that with most - // browsers, the target of the mouse/click event is not calculated until the - // time it is dispatched, so if you replace an element that you touched - // with another element, the target of the mouse/click will be the new - // element underneath that point. - // - // Aside from proximity, we also check to see if the target and any - // of its ancestors were the ones that blocked a click. This is necessary - // because of the strange mouse/click target calculation done in the - // Android 2.1 browser, where if you click on an element, and there is a - // mouse/click handler on one of its ancestors, the target will be the - // innermost child of the touched element, even if that child is no where - // near the point of touch. - - ele = target; - - while ( ele ) { - for ( i = 0; i < cnt; i++ ) { - o = clickBlockList[ i ]; - touchID = 0; - - if ( ( ele === target && Math.abs( o.x - x ) < threshold && Math.abs( o.y - y ) < threshold ) || - $.data( ele, touchTargetPropertyName ) === o.touchID ) { - // XXX: We may want to consider removing matches from the block list - // instead of waiting for the reset timer to fire. - e.preventDefault(); - e.stopPropagation(); - return; - } - } - ele = ele.parentNode; - } - } - }, true); -} -})( jQuery, window, document ); - - - -// Script: jQuery hashchange event -// -// *Version: 1.3, Last updated: 7/21/2010* -// -// Project Home - http://benalman.com/projects/jquery-hashchange-plugin/ -// GitHub - http://github.com/cowboy/jquery-hashchange/ -// Source - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.js -// (Minified) - http://github.com/cowboy/jquery-hashchange/raw/master/jquery.ba-hashchange.min.js (0.8kb gzipped) -// -// About: License -// -// Copyright (c) 2010 "Cowboy" Ben Alman, -// Dual licensed under the MIT and GPL licenses. -// http://benalman.com/about/license/ -// -// About: Examples -// -// These working examples, complete with fully commented code, illustrate a few -// ways in which this plugin can be used. -// -// hashchange event - http://benalman.com/code/projects/jquery-hashchange/examples/hashchange/ -// document.domain - http://benalman.com/code/projects/jquery-hashchange/examples/document_domain/ -// -// About: Support and Testing -// -// Information about what version or versions of jQuery this plugin has been -// tested with, what browsers it has been tested in, and where the unit tests -// reside (so you can test it yourself). -// -// jQuery Versions - 1.2.6, 1.3.2, 1.4.1, 1.4.2 -// Browsers Tested - Internet Explorer 6-8, Firefox 2-4, Chrome 5-6, Safari 3.2-5, -// Opera 9.6-10.60, iPhone 3.1, Android 1.6-2.2, BlackBerry 4.6-5. -// Unit Tests - http://benalman.com/code/projects/jquery-hashchange/unit/ -// -// About: Known issues -// -// While this jQuery hashchange event implementation is quite stable and -// robust, there are a few unfortunate browser bugs surrounding expected -// hashchange event-based behaviors, independent of any JavaScript -// window.onhashchange abstraction. See the following examples for more -// information: -// -// Chrome: Back Button - http://benalman.com/code/projects/jquery-hashchange/examples/bug-chrome-back-button/ -// Firefox: Remote XMLHttpRequest - http://benalman.com/code/projects/jquery-hashchange/examples/bug-firefox-remote-xhr/ -// WebKit: Back Button in an Iframe - http://benalman.com/code/projects/jquery-hashchange/examples/bug-webkit-hash-iframe/ -// Safari: Back Button from a different domain - http://benalman.com/code/projects/jquery-hashchange/examples/bug-safari-back-from-diff-domain/ -// -// Also note that should a browser natively support the window.onhashchange -// event, but not report that it does, the fallback polling loop will be used. -// -// About: Release History -// -// 1.3 - (7/21/2010) Reorganized IE6/7 Iframe code to make it more -// "removable" for mobile-only development. Added IE6/7 document.title -// support. Attempted to make Iframe as hidden as possible by using -// techniques from http://www.paciellogroup.com/blog/?p=604. Added -// support for the "shortcut" format $(window).hashchange( fn ) and -// $(window).hashchange() like jQuery provides for built-in events. -// Renamed jQuery.hashchangeDelay to and -// lowered its default value to 50. Added -// and properties plus document-domain.html -// file to address access denied issues when setting document.domain in -// IE6/7. -// 1.2 - (2/11/2010) Fixed a bug where coming back to a page using this plugin -// from a page on another domain would cause an error in Safari 4. Also, -// IE6/7 Iframe is now inserted after the body (this actually works), -// which prevents the page from scrolling when the event is first bound. -// Event can also now be bound before DOM ready, but it won't be usable -// before then in IE6/7. -// 1.1 - (1/21/2010) Incorporated document.documentMode test to fix IE8 bug -// where browser version is incorrectly reported as 8.0, despite -// inclusion of the X-UA-Compatible IE=EmulateIE7 meta tag. -// 1.0 - (1/9/2010) Initial Release. Broke out the jQuery BBQ event.special -// window.onhashchange functionality into a separate plugin for users -// who want just the basic event & back button support, without all the -// extra awesomeness that BBQ provides. This plugin will be included as -// part of jQuery BBQ, but also be available separately. - -(function($,window,undefined){ - // Reused string. - var str_hashchange = 'hashchange', - - // Method / object references. - doc = document, - fake_onhashchange, - special = $.event.special, - - // Does the browser support window.onhashchange? Note that IE8 running in - // IE7 compatibility mode reports true for 'onhashchange' in window, even - // though the event isn't supported, so also test document.documentMode. - doc_mode = doc.documentMode, - supports_onhashchange = 'on' + str_hashchange in window && ( doc_mode === undefined || doc_mode > 7 ); - - // Get location.hash (or what you'd expect location.hash to be) sans any - // leading #. Thanks for making this necessary, Firefox! - function get_fragment( url ) { - url = url || location.href; - return '#' + url.replace( /^[^#]*#?(.*)$/, '$1' ); - }; - - // Method: jQuery.fn.hashchange - // - // Bind a handler to the window.onhashchange event or trigger all bound - // window.onhashchange event handlers. This behavior is consistent with - // jQuery's built-in event handlers. - // - // Usage: - // - // > jQuery(window).hashchange( [ handler ] ); - // - // Arguments: - // - // handler - (Function) Optional handler to be bound to the hashchange - // event. This is a "shortcut" for the more verbose form: - // jQuery(window).bind( 'hashchange', handler ). If handler is omitted, - // all bound window.onhashchange event handlers will be triggered. This - // is a shortcut for the more verbose - // jQuery(window).trigger( 'hashchange' ). These forms are described in - // the section. - // - // Returns: - // - // (jQuery) The initial jQuery collection of elements. - - // Allow the "shortcut" format $(elem).hashchange( fn ) for binding and - // $(elem).hashchange() for triggering, like jQuery does for built-in events. - $.fn[ str_hashchange ] = function( fn ) { - return fn ? this.bind( str_hashchange, fn ) : this.trigger( str_hashchange ); - }; - - // Property: jQuery.fn.hashchange.delay - // - // The numeric interval (in milliseconds) at which the - // polling loop executes. Defaults to 50. - - // Property: jQuery.fn.hashchange.domain - // - // If you're setting document.domain in your JavaScript, and you want hash - // history to work in IE6/7, not only must this property be set, but you must - // also set document.domain BEFORE jQuery is loaded into the page. This - // property is only applicable if you are supporting IE6/7 (or IE8 operating - // in "IE7 compatibility" mode). - // - // In addition, the property must be set to the - // path of the included "document-domain.html" file, which can be renamed or - // modified if necessary (note that the document.domain specified must be the - // same in both your main JavaScript as well as in this file). - // - // Usage: - // - // jQuery.fn.hashchange.domain = document.domain; - - // Property: jQuery.fn.hashchange.src - // - // If, for some reason, you need to specify an Iframe src file (for example, - // when setting document.domain as in ), you can - // do so using this property. Note that when using this property, history - // won't be recorded in IE6/7 until the Iframe src file loads. This property - // is only applicable if you are supporting IE6/7 (or IE8 operating in "IE7 - // compatibility" mode). - // - // Usage: - // - // jQuery.fn.hashchange.src = 'path/to/file.html'; - - $.fn[ str_hashchange ].delay = 50; - /* - $.fn[ str_hashchange ].domain = null; - $.fn[ str_hashchange ].src = null; - */ - - // Event: hashchange event - // - // Fired when location.hash changes. In browsers that support it, the native - // HTML5 window.onhashchange event is used, otherwise a polling loop is - // initialized, running every milliseconds to - // see if the hash has changed. In IE6/7 (and IE8 operating in "IE7 - // compatibility" mode), a hidden Iframe is created to allow the back button - // and hash-based history to work. - // - // Usage as described in : - // - // > // Bind an event handler. - // > jQuery(window).hashchange( function(e) { - // > var hash = location.hash; - // > ... - // > }); - // > - // > // Manually trigger the event handler. - // > jQuery(window).hashchange(); - // - // A more verbose usage that allows for event namespacing: - // - // > // Bind an event handler. - // > jQuery(window).bind( 'hashchange', function(e) { - // > var hash = location.hash; - // > ... - // > }); - // > - // > // Manually trigger the event handler. - // > jQuery(window).trigger( 'hashchange' ); - // - // Additional Notes: - // - // * The polling loop and Iframe are not created until at least one handler - // is actually bound to the 'hashchange' event. - // * If you need the bound handler(s) to execute immediately, in cases where - // a location.hash exists on page load, via bookmark or page refresh for - // example, use jQuery(window).hashchange() or the more verbose - // jQuery(window).trigger( 'hashchange' ). - // * The event can be bound before DOM ready, but since it won't be usable - // before then in IE6/7 (due to the necessary Iframe), recommended usage is - // to bind it inside a DOM ready handler. - - // Override existing $.event.special.hashchange methods (allowing this plugin - // to be defined after jQuery BBQ in BBQ's source code). - special[ str_hashchange ] = $.extend( special[ str_hashchange ], { - - // Called only when the first 'hashchange' event is bound to window. - setup: function() { - // If window.onhashchange is supported natively, there's nothing to do.. - if ( supports_onhashchange ) { return false; } - - // Otherwise, we need to create our own. And we don't want to call this - // until the user binds to the event, just in case they never do, since it - // will create a polling loop and possibly even a hidden Iframe. - $( fake_onhashchange.start ); - }, - - // Called only when the last 'hashchange' event is unbound from window. - teardown: function() { - // If window.onhashchange is supported natively, there's nothing to do.. - if ( supports_onhashchange ) { return false; } - - // Otherwise, we need to stop ours (if possible). - $( fake_onhashchange.stop ); - } - - }); - - // fake_onhashchange does all the work of triggering the window.onhashchange - // event for browsers that don't natively support it, including creating a - // polling loop to watch for hash changes and in IE 6/7 creating a hidden - // Iframe to enable back and forward. - fake_onhashchange = (function(){ - var self = {}, - timeout_id, - - // Remember the initial hash so it doesn't get triggered immediately. - last_hash = get_fragment(), - - fn_retval = function(val){ return val; }, - history_set = fn_retval, - history_get = fn_retval; - - // Start the polling loop. - self.start = function() { - timeout_id || poll(); - }; - - // Stop the polling loop. - self.stop = function() { - timeout_id && clearTimeout( timeout_id ); - timeout_id = undefined; - }; - - // This polling loop checks every $.fn.hashchange.delay milliseconds to see - // if location.hash has changed, and triggers the 'hashchange' event on - // window when necessary. - function poll() { - var hash = get_fragment(), - history_hash = history_get( last_hash ); - - if ( hash !== last_hash ) { - history_set( last_hash = hash, history_hash ); - - $(window).trigger( str_hashchange ); - - } else if ( history_hash !== last_hash ) { - location.href = location.href.replace( /#.*/, '' ) + history_hash; - } - - timeout_id = setTimeout( poll, $.fn[ str_hashchange ].delay ); - }; - - // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv - // vvvvvvvvvvvvvvvvvvv REMOVE IF NOT SUPPORTING IE6/7/8 vvvvvvvvvvvvvvvvvvv - // vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv - $.browser.msie && !supports_onhashchange && (function(){ - // Not only do IE6/7 need the "magical" Iframe treatment, but so does IE8 - // when running in "IE7 compatibility" mode. - - var iframe, - iframe_src; - - // When the event is bound and polling starts in IE 6/7, create a hidden - // Iframe for history handling. - self.start = function(){ - if ( !iframe ) { - iframe_src = $.fn[ str_hashchange ].src; - iframe_src = iframe_src && iframe_src + get_fragment(); - - // Create hidden Iframe. Attempt to make Iframe as hidden as possible - // by using techniques from http://www.paciellogroup.com/blog/?p=604. - iframe = $(''); - if (options.previewPosition == 'after') { - iFrame.insertAfter(footer); - } else { - iFrame.insertBefore(header); - } - previewWindow = iFrame[iFrame.length - 1].contentWindow || frame[iFrame.length - 1]; - } - } else if (altKey === true) { - // Thx Stephen M. Redd for the IE8 fix - if (iFrame) { - iFrame.remove(); - } else { - previewWindow.close(); - } - previewWindow = iFrame = false; - } - if (!options.previewAutoRefresh) { - refreshPreview(); - } - } - - // refresh Preview window - function refreshPreview() { - renderPreview(); - } - - function renderPreview() { - var phtml; - if (options.previewParserPath !== '') { - $.ajax( { - type: 'POST', - url: options.previewParserPath, - data: options.previewParserVar+'='+encodeURIComponent($$.val()), - success: function(data) { - writeInPreview( localize(data, 1) ); - } - } ); - } else { - if (!template) { - $.ajax( { - url: options.previewTemplatePath, - success: function(data) { - writeInPreview( localize(data, 1).replace(//g, $$.val()) ); - } - } ); - } - } - return false; - } - - function writeInPreview(data) { - if (previewWindow.document) { - try { - sp = previewWindow.document.documentElement.scrollTop - } catch(e) { - sp = 0; - } - previewWindow.document.open(); - previewWindow.document.write(data); - previewWindow.document.close(); - previewWindow.document.documentElement.scrollTop = sp; - } - if (options.previewInWindow) { - previewWindow.focus(); - } - } - - // set keys pressed - function keyPressed(e) { - shiftKey = e.shiftKey; - altKey = e.altKey; - ctrlKey = (!(e.altKey && e.ctrlKey)) ? e.ctrlKey : false; - - if (e.type === 'keydown') { - if (ctrlKey === true) { - li = $("a[accesskey="+String.fromCharCode(e.keyCode)+"]", header).parent('li'); - if (li.length !== 0) { - ctrlKey = false; - setTimeout(function() { - li.triggerHandler('mousedown'); - },1); - return false; - } - } - if (e.keyCode === 13 || e.keyCode === 10) { // Enter key - if (ctrlKey === true) { // Enter + Ctrl - ctrlKey = false; - markup(options.onCtrlEnter); - return options.onCtrlEnter.keepDefault; - } else if (shiftKey === true) { // Enter + Shift - shiftKey = false; - markup(options.onShiftEnter); - return options.onShiftEnter.keepDefault; - } else { // only Enter - markup(options.onEnter); - return options.onEnter.keepDefault; - } - } - if (e.keyCode === 9) { // Tab key - if (shiftKey == true || ctrlKey == true || altKey == true) { // Thx Dr Floob. - return false; - } - if (caretOffset !== -1) { - get(); - caretOffset = $$.val().length - caretOffset; - set(caretOffset, 0); - caretOffset = -1; - return false; - } else { - markup(options.onTab); - return options.onTab.keepDefault; - } - } - } - } - - init(); - }); - }; - - $.fn.markItUpRemove = function() { - return this.each(function() { - var $$ = $(this).unbind().removeClass('markItUpEditor'); - $$.parent('div').parent('div.markItUp').parent('div').replaceWith($$); - } - ); - }; - - $.markItUp = function(settings) { - var options = { target:false }; - $.extend(options, settings); - if (options.target) { - return $(options.target).each(function() { - $(this).focus(); - $(this).trigger('insertion', [options]); - }); - } else { - $('textarea').trigger('insertion', [options]); - } - }; -})(jQuery); diff --git a/h-source/Public/Js/markitup/sets/bbcode/images/bold.png b/h-source/Public/Js/markitup/sets/bbcode/images/bold.png deleted file mode 100644 index 889ae80..0000000 Binary files a/h-source/Public/Js/markitup/sets/bbcode/images/bold.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/sets/bbcode/images/clean.png b/h-source/Public/Js/markitup/sets/bbcode/images/clean.png deleted file mode 100644 index 7e7cefb..0000000 Binary files a/h-source/Public/Js/markitup/sets/bbcode/images/clean.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/sets/bbcode/images/code.png b/h-source/Public/Js/markitup/sets/bbcode/images/code.png deleted file mode 100644 index 63fe6ce..0000000 Binary files a/h-source/Public/Js/markitup/sets/bbcode/images/code.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/sets/bbcode/images/fonts.png b/h-source/Public/Js/markitup/sets/bbcode/images/fonts.png deleted file mode 100644 index b7960db..0000000 Binary files a/h-source/Public/Js/markitup/sets/bbcode/images/fonts.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/sets/bbcode/images/h1.png b/h-source/Public/Js/markitup/sets/bbcode/images/h1.png deleted file mode 100644 index 9c122e9..0000000 Binary files a/h-source/Public/Js/markitup/sets/bbcode/images/h1.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/sets/bbcode/images/h2.png b/h-source/Public/Js/markitup/sets/bbcode/images/h2.png deleted file mode 100644 index fbd8765..0000000 Binary files a/h-source/Public/Js/markitup/sets/bbcode/images/h2.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/sets/bbcode/images/h3.png b/h-source/Public/Js/markitup/sets/bbcode/images/h3.png deleted file mode 100644 index c7836cf..0000000 Binary files a/h-source/Public/Js/markitup/sets/bbcode/images/h3.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/sets/bbcode/images/italic.png b/h-source/Public/Js/markitup/sets/bbcode/images/italic.png deleted file mode 100644 index 8482ac8..0000000 Binary files a/h-source/Public/Js/markitup/sets/bbcode/images/italic.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/sets/bbcode/images/link.png b/h-source/Public/Js/markitup/sets/bbcode/images/link.png deleted file mode 100644 index 25eacb7..0000000 Binary files a/h-source/Public/Js/markitup/sets/bbcode/images/link.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/sets/bbcode/images/list-bullet.png b/h-source/Public/Js/markitup/sets/bbcode/images/list-bullet.png deleted file mode 100644 index 4a8672b..0000000 Binary files a/h-source/Public/Js/markitup/sets/bbcode/images/list-bullet.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/sets/bbcode/images/list-item.png b/h-source/Public/Js/markitup/sets/bbcode/images/list-item.png deleted file mode 100644 index 8cb4d69..0000000 Binary files a/h-source/Public/Js/markitup/sets/bbcode/images/list-item.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/sets/bbcode/images/list-numeric.png b/h-source/Public/Js/markitup/sets/bbcode/images/list-numeric.png deleted file mode 100644 index 33b0b8d..0000000 Binary files a/h-source/Public/Js/markitup/sets/bbcode/images/list-numeric.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/sets/bbcode/images/paragraph.png b/h-source/Public/Js/markitup/sets/bbcode/images/paragraph.png deleted file mode 100644 index 95704fb..0000000 Binary files a/h-source/Public/Js/markitup/sets/bbcode/images/paragraph.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/sets/bbcode/images/picture.png b/h-source/Public/Js/markitup/sets/bbcode/images/picture.png deleted file mode 100644 index 4a158fe..0000000 Binary files a/h-source/Public/Js/markitup/sets/bbcode/images/picture.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/sets/bbcode/images/preview.png b/h-source/Public/Js/markitup/sets/bbcode/images/preview.png deleted file mode 100644 index a9925a0..0000000 Binary files a/h-source/Public/Js/markitup/sets/bbcode/images/preview.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/sets/bbcode/images/quotes.png b/h-source/Public/Js/markitup/sets/bbcode/images/quotes.png deleted file mode 100644 index e54ebeb..0000000 Binary files a/h-source/Public/Js/markitup/sets/bbcode/images/quotes.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/sets/bbcode/images/stroke.png b/h-source/Public/Js/markitup/sets/bbcode/images/stroke.png deleted file mode 100644 index 612058a..0000000 Binary files a/h-source/Public/Js/markitup/sets/bbcode/images/stroke.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/sets/bbcode/images/underline.png b/h-source/Public/Js/markitup/sets/bbcode/images/underline.png deleted file mode 100644 index 90d0df2..0000000 Binary files a/h-source/Public/Js/markitup/sets/bbcode/images/underline.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/sets/bbcode/readme.txt b/h-source/Public/Js/markitup/sets/bbcode/readme.txt deleted file mode 100644 index 745d5dd..0000000 --- a/h-source/Public/Js/markitup/sets/bbcode/readme.txt +++ /dev/null @@ -1,11 +0,0 @@ -Markup language: -BBCode - -Description: -A basic BBCode markup set with Bold, Italic, Underline, Picture, Link, Size, List, Quotes, Code, Clean button, Preview button. - -Install: -- Download the zip file -- Unzip it in your markItUp! sets folder -- Modify your JS link to point at this set.js -- Modify your CSS link to point at this style.css \ No newline at end of file diff --git a/h-source/Public/Js/markitup/sets/bbcode/set.js b/h-source/Public/Js/markitup/sets/bbcode/set.js deleted file mode 100644 index 3d16ea5..0000000 --- a/h-source/Public/Js/markitup/sets/bbcode/set.js +++ /dev/null @@ -1,32 +0,0 @@ -// ---------------------------------------------------------------------------- -// markItUp! -// ---------------------------------------------------------------------------- -// Copyright (C) 2008 Jay Salvat -// http://markitup.jaysalvat.com/ -// ---------------------------------------------------------------------------- -// BBCode tags example -// http://en.wikipedia.org/wiki/Bbcode -// ---------------------------------------------------------------------------- -// Feel free to add more tags -// ---------------------------------------------------------------------------- -mySettings = { - previewParserPath: '', // path to your BBCode parser - markupSet: [ - {name:'Heading 1', key:'1', openWith:'[h1]', closeWith:'[/h1]' }, - {name:'Heading 2', key:'2', openWith:'[h2]', closeWith:'[/h2]' }, - {name:'Heading 3', key:'3', openWith:'[h3]', closeWith:'[/h3]' }, - {name:'Paragraph', openWith:'[p]', closeWith:'[/p]' }, - {separator:'---------------' }, - {name:'Bold', key:'B', openWith:'[b]', closeWith:'[/b]'}, - {name:'Italic', key:'I', openWith:'[i]', closeWith:'[/i]'}, - {name:'Underline', key:'U', openWith:'[u]', closeWith:'[/u]'}, - {name:'Stroke through', key:'S', openWith:'[del]', closeWith:'[/del]' }, - {separator:'---------------' }, - {name:'Bulleted list', openWith:'[list]\n', closeWith:'\n[/list]'}, - {name:'Numeric list', openWith:'[enum]\n', closeWith:'\n[/enum]'}, - {name:'List item', openWith:'[*] ', closeWith:'[/*]'}, - {separator:'---------------' }, - {name:'Code', openWith:'[code]', closeWith:'[/code]'}, - {name:'Link', key: 'L', openWith:'[a]', closeWith:'[/a]',placeHolder:'http://the_url | the_text'}, - ] -} \ No newline at end of file diff --git a/h-source/Public/Js/markitup/sets/bbcode/style.css b/h-source/Public/Js/markitup/sets/bbcode/style.css deleted file mode 100644 index 4ab6031..0000000 --- a/h-source/Public/Js/markitup/sets/bbcode/style.css +++ /dev/null @@ -1,72 +0,0 @@ -/* ------------------------------------------------------------------- -// markItUp! -// By Jay Salvat - http://markitup.jaysalvat.com/ -// ------------------------------------------------------------------*/ -.markItUp .markItUpButton1 a { - background-image:url(images/h1.png); -} -.markItUp .markItUpButton2 a { - background-image:url(images/h2.png); -} -.markItUp .markItUpButton3 a { - background-image:url(images/h3.png); -} -.markItUp .markItUpButton4 a { - background-image:url(images/paragraph.png); -} -.markItUp .markItUpButton5 a { - background-image:url(images/bold.png); -} -.markItUp .markItUpButton6 a { - background-image:url(images/italic.png); -} -.markItUp .markItUpButton7 a { - background-image:url(images/underline.png); -} -.markItUp .markItUpButton8 a { - background-image:url(images/stroke.png); -} -.markItUp .markItUpButton9 a { - background-image:url(images/list-bullet.png); -} -.markItUp .markItUpButton10 a { - background-image:url(images/list-numeric.png); -} -.markItUp .markItUpButton11 a { - background-image:url(images/list-item.png); -} -.markItUp .markItUpButton12 a { - background-image:url(images/code.png); -} -.markItUp .markItUpButton13 a { - background-image:url(images/link.png); -} -/*.markItUp .markItUpButton4 a { - background-image:url(images/stroke.png); -}*/ - -/*.markItUp .markItUpButton4 a { - background-image:url(images/picture.png); -}*/ -/*.markItUp .markItUpButton5 a { - background-image:url(images/link.png); -} - -.markItUp .markItUpButton6 a { - background-image:url(images/fonts.png); -} - - -.markItUp .markItUpButton10 a { - background-image:url(images/quotes.png); -} -.markItUp .markItUpButton11 a { - background-image:url(images/code.png); -} - -.markItUp .clean a { - background-image:url(images/clean.png); -} -.markItUp .preview a { - background-image:url(images/preview.png); -}*/ \ No newline at end of file diff --git a/h-source/Public/Js/markitup/skins/simple/images/handle.png b/h-source/Public/Js/markitup/skins/simple/images/handle.png deleted file mode 100644 index 3993b20..0000000 Binary files a/h-source/Public/Js/markitup/skins/simple/images/handle.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/skins/simple/images/menu.png b/h-source/Public/Js/markitup/skins/simple/images/menu.png deleted file mode 100644 index 44a07af..0000000 Binary files a/h-source/Public/Js/markitup/skins/simple/images/menu.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/skins/simple/images/submenu.png b/h-source/Public/Js/markitup/skins/simple/images/submenu.png deleted file mode 100644 index 03d1977..0000000 Binary files a/h-source/Public/Js/markitup/skins/simple/images/submenu.png and /dev/null differ diff --git a/h-source/Public/Js/markitup/skins/simple/style.css b/h-source/Public/Js/markitup/skins/simple/style.css deleted file mode 100644 index 4ff830f..0000000 --- a/h-source/Public/Js/markitup/skins/simple/style.css +++ /dev/null @@ -1,118 +0,0 @@ -/* ------------------------------------------------------------------- -// markItUp! Universal MarkUp Engine, JQuery plugin -// By Jay Salvat - http://markitup.jaysalvat.com/ -// ------------------------------------------------------------------*/ -.markItUp * { - margin:0px; padding:0px; - outline:none; -} -.markItUp a:link, -.markItUp a:visited { - color:#000; - text-decoration:none; -} -.markItUp { - width:700px; - margin:5px 0 5px 0; -} -.markItUpContainer { - font:11px Verdana, Arial, Helvetica, sans-serif; -} -.markItUpEditor { - font:12px 'Courier New', Courier, monospace; - padding:5px; - width:640px; - height:300px; - clear:both; display:block; - line-height:18px; - overflow:auto; -} -.markItUpPreviewFrame { - overflow:auto; - background-color:#FFF; - width:99.9%; - height:300px; - margin:5px 0; -} -.markItUpFooter { - width:100%; -} -.markItUpResizeHandle { - overflow:hidden; - width:22px; height:5px; - margin-left:auto; - margin-right:auto; - background-image:url(images/handle.png); - cursor:n-resize; -} -/***************************************************************************************/ -/* first row of buttons */ -.markItUpHeader ul li { - list-style:none; - float:left; - position:relative; -} -.markItUpHeader ul li:hover > ul{ - display:block; -} -.markItUpHeader ul .markItUpDropMenu { - background:transparent url(images/menu.png) no-repeat 115% 50%; - margin-right:5px; -} -.markItUpHeader ul .markItUpDropMenu li { - margin-right:0px; -} -/* next rows of buttons */ -.markItUpHeader ul ul { - display:none; - position:absolute; - top:18px; left:0px; - background:#FFF; - border:1px solid #000; -} -.markItUpHeader ul ul li { - float:none; - border-bottom:1px solid #000; -} -.markItUpHeader ul ul .markItUpDropMenu { - background:#FFF url(images/submenu.png) no-repeat 100% 50%; -} -.markItUpHeader ul .markItUpSeparator { - margin:0 10px; - width:1px; - height:16px; - overflow:hidden; - background-color:#CCC; -} -.markItUpHeader ul ul .markItUpSeparator { - width:auto; height:1px; - margin:0px; -} -/* next rows of buttons */ -.markItUpHeader ul ul ul { - position:absolute; - top:-1px; left:150px; -} -.markItUpHeader ul ul ul li { - float:none; -} -.markItUpHeader ul a { - display:block; - width:16px; height:16px; - text-indent:-10000px; - background-repeat:no-repeat; - padding:3px; - margin:0px; -} -.markItUpHeader ul ul a { - display:block; - padding-left:0px; - text-indent:0; - width:120px; - padding:5px 5px 5px 25px; - background-position:2px 50%; -} -.markItUpHeader ul ul a:hover { - color:#FFF; - background-color:#000; -} diff --git a/h-source/Public/Js/stats.js b/h-source/Public/Js/stats.js deleted file mode 100644 index 7d6be08..0000000 --- a/h-source/Public/Js/stats.js +++ /dev/null @@ -1,35 +0,0 @@ - -/*************************************************************************** - phpTrafficA @soft.ZoneO.net - Copyright (C) 2004-2008 ZoneO-soft, Butchu (email: "butchu" with the domain "zoneo.net") - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - More Info About The Licence At http://www.gnu.org/copyleft/gpl.html -****************************************************************************/ - -function encode64(inp){ -var key="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; -var chr1,chr2,chr3,enc3,enc4,i=0,out=""; -while(i127) chr1=88; -chr2=inp.charCodeAt(i++);if(chr2>127) chr2=88; -chr3=inp.charCodeAt(i++);if(chr3>127) chr3=88; -if(isNaN(chr3)) {enc4=64;chr3=0;} else enc4=chr3&63; -if(isNaN(chr2)) {enc3=64;chr2=0;} else enc3=((chr2<<2)|(chr3>>6))&63; -out+=key.charAt((chr1>>2)&63)+key.charAt(((chr1<<4)|(chr2>>4))&63)+key.charAt(enc3)+key.charAt(enc4); -} -return encodeURIComponent(out); -} - -function stats(sid){ -var referer=encode64(document.referrer); -var thispage=encode64(window.location.pathname+location.search); -var date=new Date(); -var time=date.getTime(); -var resolution= screen.width + "x" + screen.height; -document.writeln("\"\"\n"); -} diff --git a/h-source/Public/index.html b/h-source/Public/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/Public/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/README.org b/h-source/README.org deleted file mode 100644 index d3b2821..0000000 --- a/h-source/README.org +++ /dev/null @@ -1,18 +0,0 @@ -* Php module dependencies - -It is not clear what are the exact php modules required for the site to run. On a Trisquel 9 VM typically it is sufficient to have the following extra modules installed on top of a standard php 7 installation: - -- php-gd -- php-mbstring -- php-mysql -- php-xml - -Help with formalizing the module dependencies is appreciated. - -* Staging deployment patch - -When deploying to staging, run - -#+begin_src sh - patch -p2 -# Options +FollowSymlinks - RewriteEngine on - RewriteCond %{REQUEST_FILENAME} !-f - RewriteCond %{REQUEST_FILENAME} !-d - RewriteRule ^(.*)$ index.php?url=$1 [QSA,L] -# - - diff --git a/h-source/admin/Application/Controllers/AdminboxesController.php b/h-source/admin/Application/Controllers/AdminboxesController.php deleted file mode 100644 index 65ba18c..0000000 --- a/h-source/admin/Application/Controllers/AdminboxesController.php +++ /dev/null @@ -1,78 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class AdminboxesController extends Controller { - - function __construct($model, $controller, $queryString) { - parent::__construct($model, $controller, $queryString); - - $this->load('header_back'); - $this->load('footer_back','last'); - - $this->session('admin'); - $this->model('BoxesModel'); - - $this->modelName = 'BoxesModel'; - - $this->m['BoxesModel']->setFields('title,message','sanitizeAll'); - - $this->setArgKeys(array('page:forceNat'=>1,'token:sanitizeAll'=>'token')); - } - - public function main() - { - $this->shift(); - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $this->loadScaffold('main'); - - $this->scaffold->loadMain('boxes:id_box,boxes:title,smartDate|boxes:creation_date','boxes:id_box','edit,del'); - $this->scaffold->setHead('NEWS ID,TITLE,DATE'); - $this->scaffold->update('del'); - $data['scaffold'] = $this->scaffold->render(); - $this->append($data); - $this->load('main'); - } - - public function form($queryType = 'insert') - { - $this->shift(1); - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $this->m['BoxesModel']->updateTable('insert,update'); - - $this->loadScaffold('form'); - $this->scaffold->loadForm($queryType,"adminboxes/form/$queryType"); - $this->scaffold->getFormValues('sanitizeHtml'); - $data['scaffold'] = $this->scaffold->render(); - - $this->append($data); - $this->load('main'); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Controllers/AdmindeletionController.php b/h-source/admin/Application/Controllers/AdmindeletionController.php deleted file mode 100644 index d5ee6fc..0000000 --- a/h-source/admin/Application/Controllers/AdmindeletionController.php +++ /dev/null @@ -1,66 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class AdmindeletionController extends Controller { - - function __construct($model, $controller, $queryString) { - parent::__construct($model, $controller, $queryString); - - $this->load('header_back'); - $this->load('footer_back','last'); - - $this->session('admin'); - $this->model('DeletionModel'); - - $this->modelName = 'DeletionModel'; - -// $this->m['DeletionModel']->setFields('object,topic,status,priority,message,notice','sanitizeAll'); - - $this->setArgKeys(array('page:forceNat'=>1,'object:sanitizeAll'=>'undef','token:sanitizeAll'=>'token')); - } - - public function main() - { - $this->shift(); - - Params::$nullQueryValue = 'undef'; - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive','mainMenu'=>'panel','recordPerPage'=>30)); - - $whereClauseArray = array( - 'object' => $this->viewArgs['object'], - ); - $this->scaffold->setWhereQueryClause($whereClauseArray); - - $this->scaffold->loadMain('deletion:id_del,deletion:object,deletion:id_duplicate,deletion:id_hard,getUserName|deletion:created_by,smartDate|deletion:creation_date','deletion:id_del',''); - $this->scaffold->setHead('DEL ID,OBJECT,DUPLICATED,HARDWARE ID,CREATED BY,DATE'); - $this->scaffold->update('del'); - $data['scaffold'] = $this->scaffold->render(); - $this->append($data); - $this->load('main'); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Controllers/AdminhardwareController.php b/h-source/admin/Application/Controllers/AdminhardwareController.php deleted file mode 100644 index c02a4c2..0000000 --- a/h-source/admin/Application/Controllers/AdminhardwareController.php +++ /dev/null @@ -1,121 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class AdminhardwareController extends Controller -{ - - function __construct($model, $controller, $queryString) - { - parent::__construct($model, $controller, $queryString); - - $this->load('header_back'); - $this->load('footer_back','last'); - - $this->session('admin'); - $this->model('HardwareModel'); - $this->model('DeletionModel'); - - $this->modelName = 'HardwareModel'; - - $this->m['HardwareModel']->setFields('deleted','sanitizeAll'); - - $this->setArgKeys(array('page:forceNat'=>1,'type:sanitizeAll'=>'undef','ask_for_del:sanitizeAll'=>'undef','-deleted:sanitizeAll'=>'undef','token:sanitizeAll'=>'token')); - } - - public function main() - { - $this->shift(); - - Params::$nullQueryValue = 'undef'; - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive','mainMenu'=>'panel','recordPerPage'=>30)); - - $whereClauseArray = array( - 'type' => $this->viewArgs['type'], - 'ask_for_del' => $this->viewArgs['ask_for_del'], - '-deleted' => $this->viewArgs['-deleted'], - ); - $this->scaffold->setWhereQueryClause($whereClauseArray); - - $this->scaffold->loadMain('hardware:id_hard,hardware:model,hardware:type,getUserName|hardware:created_by,getUserName|hardware:updated_by,smartDate|hardware:creation_date,smartDate|hardware:update_date,hardware:ask_for_del,hardware:deleted','hardware:id_hard','edit'); - - $this->scaffold->addItem('simpleLink','adminhardware/ask/;hardware:id_hard;',null,'who asked for deletion'); - $this->scaffold->setHead('HARD ID,MODEL,TYPE,CREATED BY,UPDATED BY,CREATION DATE,UPDATE DATE,ASK FOR DEL?,DELETED?,EDIT,VIEW'); - $data['scaffold'] = $this->scaffold->render(); - $this->append($data); - $this->load('main'); - } - - public function ask($id_hard = 0) - { - $this->shift(1); - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $clean['id_hard'] = (int)$id_hard; - - $this->helper('Menu','adminhardware','panel'); - $this->h['Menu']->links['back']['text'] = 'Back'; - $this->h['Menu']->links['back']['url'] = 'main'; - - $data["table"] = $this->m['DeletionModel']->select()->where(array("id_hard"=>$clean['id_hard']))->orderBy("id_del desc")->send(); - - $data['menu'] = $this->h['Menu']->render('panel,back'); - - $this->append($data); - $this->load('ask'); - - } - - public function form($queryType = 'update') - { - $this->shift(1); - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - if (isset($_POST['updateAction'])) - { - $clean['id_hard'] = $this->request->post('id_hard',0,'forceInt'); - $clean['deleted'] = $this->request->post('deleted',0,'sanitizeAll'); - - $this->m['HardwareModel']->db->update('hardware','deleted',array($clean['deleted']),'id_hard='.$clean['id_hard']); - - } - - $this->loadScaffold('form'); - $this->scaffold->loadForm($queryType,"adminhardware/form/$queryType"); - $this->scaffold->getFormValues('sanitizeHtml'); - $data['scaffold'] = $this->scaffold->render(); - - $this->append($data); - $this->load('main'); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Controllers/AdminhistoryController.php b/h-source/admin/Application/Controllers/AdminhistoryController.php deleted file mode 100644 index 849e432..0000000 --- a/h-source/admin/Application/Controllers/AdminhistoryController.php +++ /dev/null @@ -1,68 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class AdminhistoryController extends Controller -{ - - function __construct($model, $controller, $queryString) - { - parent::__construct($model, $controller, $queryString); - - $this->load('header_back'); - $this->load('footer_back','last'); - - $this->session('admin'); - $this->model('HistoryModel'); - - $this->modelName = 'HistoryModel'; - - $this->setArgKeys(array('page:forceNat'=>1,'type:sanitizeAll'=>'undef','action:sanitizeAll'=>'undef','created_by:sanitizeAll'=>'undef','token:sanitizeAll'=>'token')); - } - - public function main() - { - $this->shift(); - - Params::$nullQueryValue = 'undef'; - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive','mainMenu'=>'panel','recordPerPage'=>30)); - - $whereClauseArray = array( - 'type' => $this->viewArgs['type'], - 'action' => $this->viewArgs['action'], - 'created_by'=> $this->viewArgs['created_by'], - 'gr' => '!="registered"', - ); - $this->scaffold->setWhereQueryClause($whereClauseArray); - $this->scaffold->model->orderBy('id_history desc'); - $this->scaffold->loadMain('history:id_history,history:type,history:action,getUserName|history:created_by,history:id,smartDate|history:creation_date,history:gr,history:message','history:id_history',''); - $this->scaffold->setHead('HISTORY ID,TYPE,ACTION,CREATED BY,OBJECT ID,CREATION DATE,GROUP,MESSAGE'); - $data['scaffold'] = $this->scaffold->render(); - $this->append($data); - $this->load('main'); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Controllers/AdminissuesController.php b/h-source/admin/Application/Controllers/AdminissuesController.php deleted file mode 100644 index 476b69c..0000000 --- a/h-source/admin/Application/Controllers/AdminissuesController.php +++ /dev/null @@ -1,88 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class AdminissuesController extends Controller { - - function __construct($model, $controller, $queryString) { - parent::__construct($model, $controller, $queryString); - - $this->load('header_back'); - $this->load('footer_back','last'); - - $this->session('admin'); - $this->model('IssuesModel'); - - $this->modelName = 'IssuesModel'; - - $this->m['IssuesModel']->setFields('deleted,status','sanitizeAll'); - - $this->setArgKeys(array('page:forceNat'=>1,'priority:sanitizeAll'=>'undef','status:sanitizeAll'=>'undef','topic:sanitizeAll'=>'undef','deleted:sanitizeAll'=>'undef','token:sanitizeAll'=>'token')); - } - - public function main() - { - $this->shift(); - - Params::$nullQueryValue = 'undef'; - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive')); - - $whereClauseArray = array( - 'priority' => $this->viewArgs['priority'], - 'status' => $this->viewArgs['status'], - 'topic' => $this->viewArgs['topic'], - 'deleted' => $this->viewArgs['deleted'], - ); - $this->scaffold->setWhereQueryClause($whereClauseArray); - - $this->scaffold->loadMain('issues:id_issue,issues:title,issues:topic,getUserName|issues:created_by,issues:priority,issues:status,smartDate|issues:creation_date,issues:deleted','issues:id_issue','edit,del'); - $this->scaffold->setHead('ISSUE ID,TITLE,TOPIC,CREATED BY,PRIORITY,STATUS,DATE'); - $this->scaffold->update('del'); - $data['scaffold'] = $this->scaffold->render(); - $this->append($data); - $this->load('main'); - } - - public function form($queryType = 'insert') - { - $this->shift(1); - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $this->m['IssuesModel']->updateTable('insert,update'); - - $this->loadScaffold('form'); - $this->scaffold->loadForm($queryType,"adminissues/form/$queryType"); - $this->scaffold->getFormValues('sanitizeHtml'); - $data['scaffold'] = $this->scaffold->render(); - - $this->append($data); - $this->load('main'); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Controllers/AdminmessagesController.php b/h-source/admin/Application/Controllers/AdminmessagesController.php deleted file mode 100644 index 5a979c4..0000000 --- a/h-source/admin/Application/Controllers/AdminmessagesController.php +++ /dev/null @@ -1,86 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class AdminmessagesController extends Controller { - - function __construct($model, $controller, $queryString) { - parent::__construct($model, $controller, $queryString); - - $this->load('header_back'); - $this->load('footer_back','last'); - - $this->session('admin'); - $this->model('MessagesModel'); - - $this->modelName = 'MessagesModel'; - - $this->m['MessagesModel']->setFields('deleted,has_read','sanitizeAll'); - - $this->setArgKeys(array('page:forceNat'=>1,'deleted:sanitizeAll'=>'undef','has_read:sanitizeAll'=>'undef','token:sanitizeAll'=>'token')); - } - - public function main() - { - $this->shift(); - - Params::$nullQueryValue = 'undef'; - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive','recordPerPage'=>20)); - - $whereClauseArray = array( - 'deleted' => $this->viewArgs['deleted'], - 'has_read' => $this->viewArgs['has_read'], - ); - $this->scaffold->setWhereQueryClause($whereClauseArray); - $this->scaffold->model->orderBy = "id_mes desc"; - - $this->scaffold->loadMain('messages:id_mes,messages:id_issue,getUserName|messages:created_by,smartDate|messages:creation_date,messages:deleted,messages:has_read','messages:id_mes','edit'); - $this->scaffold->setHead('MESSAGE ID,ISSUE ID,CREATED BY,DATE,DELETED?,ALREADY READ?'); - $data['scaffold'] = $this->scaffold->render(); - $this->append($data); - $this->load('main'); - } - - public function form($queryType = 'insert') - { - $this->shift(1); - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $this->m['MessagesModel']->updateTable('insert,update'); - - $this->loadScaffold('form'); - $this->scaffold->loadForm($queryType,"adminmessages/form/$queryType"); - $this->scaffold->getFormValues('sanitizeHtml'); - $data['scaffold'] = $this->scaffold->render(); - - $this->append($data); - $this->load('main'); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Controllers/AdminnewsController.php b/h-source/admin/Application/Controllers/AdminnewsController.php deleted file mode 100644 index d722ffe..0000000 --- a/h-source/admin/Application/Controllers/AdminnewsController.php +++ /dev/null @@ -1,78 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class AdminnewsController extends Controller { - - function __construct($model, $controller, $queryString) { - parent::__construct($model, $controller, $queryString); - - $this->load('header_back'); - $this->load('footer_back','last'); - - $this->session('admin'); - $this->model('NewsModel'); - - $this->modelName = 'NewsModel'; - - $this->m['NewsModel']->setFields('title,message','sanitizeAll'); - - $this->setArgKeys(array('page:forceNat'=>1,'token:sanitizeAll'=>'token')); - } - - public function main() - { - $this->shift(); - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $this->loadScaffold('main'); - - $this->scaffold->loadMain('news:id_news,news:title,smartDate|news:creation_date','news:id_news','edit,del'); - $this->scaffold->setHead('NEWS ID,TITLE,DATE'); - $this->scaffold->update('del'); - $data['scaffold'] = $this->scaffold->render(); - $this->append($data); - $this->load('main'); - } - - public function form($queryType = 'insert') - { - $this->shift(1); - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $this->m['NewsModel']->updateTable('insert,update'); - - $this->loadScaffold('form'); - $this->scaffold->loadForm($queryType,"adminnews/form/$queryType"); - $this->scaffold->getFormValues('sanitizeHtml'); - $data['scaffold'] = $this->scaffold->render(); - - $this->append($data); - $this->load('main'); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Controllers/AdminparamsController.php b/h-source/admin/Application/Controllers/AdminparamsController.php deleted file mode 100644 index 62e58b6..0000000 --- a/h-source/admin/Application/Controllers/AdminparamsController.php +++ /dev/null @@ -1,68 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class AdminparamsController extends Controller { - - function __construct($model, $controller, $queryString) { - parent::__construct($model, $controller, $queryString); - - $this->load('header_back'); - $this->load('footer_back','last'); - - $this->session('admin'); - $this->model('ParamsModel'); - - $this->modelName = 'ParamsModel'; - - $this->m['ParamsModel']->setFields('updating,boxes_xml','sanitizeAll'); - - $this->setArgKeys(array('token:sanitizeAll'=>'token')); - } - - public function form() - { - $this->shift(); - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $this->m['ParamsModel']->updateTable('update',1); - if ($this->m['ParamsModel']->queryResult) - { - if (strcmp($this->m['ParamsModel']->values['updating'],'yes') === 0) - { - $this->m['ParamsModel']->query("delete from regsessions;"); - } - } -// echo $this->m['ParamsModel']->getQuery(); - - $this->loadScaffold('form',array('formMenu'=>'panel')); - $this->scaffold->loadForm('update',"adminparams/form"); - $this->scaffold->getFormValues('sanitizeHtml',1); - $data['scaffold'] = $this->scaffold->render(); - - $this->append($data); - $this->load('form'); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Controllers/AdminpasswordController.php b/h-source/admin/Application/Controllers/AdminpasswordController.php deleted file mode 100644 index bcaca95..0000000 --- a/h-source/admin/Application/Controllers/AdminpasswordController.php +++ /dev/null @@ -1,88 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class AdminpasswordController extends Controller -{ - - function __construct($model, $controller, $queryString) - { - parent::__construct($model, $controller, $queryString); - - $this->load('header_back'); - $this->load('footer_back','last'); - - $this->helper('Menu','users','panel/main'); - $this->helper('Array'); - - $this->session('admin'); - $this->model('AdminusersModel'); - - $this->m['AdminusersModel']->setFields('password:sha1','none'); - - $this->m['AdminusersModel']->strongConditions['update'] = array('checkEqual'=>'password,confirmation'); - $this->m['AdminusersModel']->strongConditions['insert'] = array('checkEqual'=>'password,confirmation'); - - $this->m['AdminusersModel']->identifierName = 'id_user'; - - $this->setArgKeys(array('token:sanitizeAll'=>'token')); - } - - public function form() - { - $this->shift(0); - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $data['notice'] = null; - - $id = (int)$this->s['admin']->status['id_user']; - if (isset($_POST['updateAction'])) { - $pass = $this->s['admin']->getPassword(); - if (sha1($_POST['old']) === $pass) - { - $this->m['AdminusersModel']->updateTable('update',$id); - $data['notice'] = $this->m['AdminusersModel']->notice; - } - else - { - $data['notice'] = "
              Vecchia password sbagliata
              \n"; - } - } - $data['menù'] = $this->h['Menu']->render('panel'); - - $values = $this->m['AdminusersModel']->selectId($id); - - $action = array('updateAction'=>'save'); - $form = new Form_Form('adminpassword/form'.$this->viewStatus,$action); - $form->setEntry('old','Password'); - $form->entry['old']->labelString = 'old password:'; - $form->setEntry('password','Password'); - $form->setEntry('confirmation','Password'); - $data['form'] = $form->render($values,'old,password,confirmation'); - - $this->append($data); - $this->load('form'); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Controllers/AdminregusersController.php b/h-source/admin/Application/Controllers/AdminregusersController.php deleted file mode 100644 index b4ed6ed..0000000 --- a/h-source/admin/Application/Controllers/AdminregusersController.php +++ /dev/null @@ -1,101 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class AdminregusersController extends Controller { - - function __construct($model, $controller, $queryString) { - parent::__construct($model, $controller, $queryString); - - $this->load('header_back'); - $this->load('footer_back','last'); - - $this->session('admin'); - $this->model('UsersModel'); - - $this->modelName = 'UsersModel'; - - $this->helper('Menu','adminregusers','panel/main'); - -// $this->m['UsersModel']->setFields('username,e_mail,has_confirmed,deleted,creation_date','sanitizeAll'); - - $this->setArgKeys(array('page:forceNat'=>1,'has_confirmed:sanitizeAll'=>'undef','deleted:sanitizeAll'=>'undef','id_group:sanitizeAll'=>'undef','token:sanitizeAll'=>'token')); - } - - public function main() - { - $this->shift(); - - Params::$nullQueryValue = 'undef'; - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $this->loadScaffold('main',array('popup'=>true,'popupType'=>'inclusive','mainMenu'=>'panel','recordPerPage'=>30)); - - $whereClauseArray = array( - 'has_confirmed' => $this->viewArgs['has_confirmed'], - 'deleted' => $this->viewArgs['deleted'], - 'id_group' => $this->viewArgs['id_group'], - ); - $this->scaffold->setWhereQueryClause($whereClauseArray); - - $this->scaffold->loadMain('regusers:id_user,regusers:username,regusers:e_mail,regusers:has_confirmed,regusers:deleted,smartDate|regusers:creation_date','regusers:id_user','link'); - $this->scaffold->setHead('USER ID,USERNAME,E-MAIL,HAS CONFIRMED?,DELETED?,DATE'); - $data['scaffold'] = $this->scaffold->render(); - $this->append($data); - $this->load('main'); - } - - public function associate() - { - $this->shift(0); - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $this->m['UsersModel']->printAssError = 'yes'; - $this->m['UsersModel']->updateTable('associate,dissociate'); - - $data['notice'] = $this->m['UsersModel']->notice; - - $data['menu'] = $this->h['Menu']->render('back'); - - $data['action'] = $this->baseUrl.'/adminregusers/associate'.$this->viewStatus; - - $data['groups'] = $this->m['UsersModel']->getFieldArray('reggroups:id_group','reggroups:name'); - - //get the name of the user whose id is $_POST['id_user'] - $users = $this->m['UsersModel']->db->select('regusers','username','id_user='.(int)$_POST['id_user']); - $data['user'] = $users[0]['regusers']['username']; - - //get the groups inside which the user is inserted - $this->m['UsersModel']->setWhereQueryClause(array('id_user'=>(int)$_POST['id_user'])); - $this->m['UsersModel']->orderBy = 'reggroups.id_group desc'; - $data['groupsUser'] = $this->m['UsersModel']->getAll('Boxes'); -// echo $this->m['UsersModel']->getQuery(); - - $this->set($data); - $this->load('associate'); - } -} \ No newline at end of file diff --git a/h-source/admin/Application/Controllers/AdmintalkController.php b/h-source/admin/Application/Controllers/AdmintalkController.php deleted file mode 100644 index b91912a..0000000 --- a/h-source/admin/Application/Controllers/AdmintalkController.php +++ /dev/null @@ -1,59 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class AdmintalkController extends Controller { - - function __construct($model, $controller, $queryString) { - parent::__construct($model, $controller, $queryString); - - $this->load('header_back'); - $this->load('footer_back','last'); - - $this->session('admin'); - $this->model('TalkModel'); - - $this->modelName = 'TalkModel'; - - $this->m['TalkModel']->setFields('title,message','sanitizeAll'); - - $this->setArgKeys(array('page:forceNat'=>1,'token:sanitizeAll'=>'token')); - } - - public function main() - { - $this->shift(); - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $this->loadScaffold('main',array('mainMenu'=>'panel')); - - $this->scaffold->loadMain('talk:id_talk,talk:id_hard,talk:title,getUserName|talk:created_by,smartDate|talk:creation_date','talk:id_talk','del'); - $this->scaffold->setHead('TALK ID,HARDWARE ID,TITLE,CREATED BY,DATE'); - $this->scaffold->update('del'); - $data['scaffold'] = $this->scaffold->render(); - $this->append($data); - $this->load('main'); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Controllers/AdminusersController.php b/h-source/admin/Application/Controllers/AdminusersController.php deleted file mode 100644 index 0154c0c..0000000 --- a/h-source/admin/Application/Controllers/AdminusersController.php +++ /dev/null @@ -1,200 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class AdminusersController extends Controller -{ - - function __construct($model, $controller, $queryString) - { - parent::__construct($model, $controller, $queryString); - - $this->load('header_back'); - $this->load('footer_back','last'); - - $this->helper('Menu','adminusers','panel/main'); - $this->helper('Array'); - - $this->session('admin'); - $this->model(); - - $this->m['AdminusersModel']->setFields('username:sanitizeAll,password:sha1','none'); - - $this->m['AdminusersModel']->strongConditions['update'] = array('checkAlphaNum'=>'username','checkEqual'=>'password,confirmation'); - $this->m['AdminusersModel']->strongConditions['insert'] = array('checkAlphaNum'=>'username','checkEqual'=>'password,confirmation'); - - $this->m['AdminusersModel']->databaseConditions['insert'] = array('checkUnique'=>'username'); - $this->m['AdminusersModel']->databaseConditions['update'] = array('checkUniqueCompl'=>'username'); - - $this->setArgKeys(array('page:forceNat'=>1,'id_group:forceInt'=>'0','token:sanitizeAll'=>'token')); - Params::$nullQueryValue = '0'; - } - - public function login() - { - $data['action'] = Url::getRoot('adminusers/login'); - $data['notice'] = null; - - $this->s['admin']->checkStatus(); - if ($this->s['admin']->status['status']=='logged') - { - $this->s['admin']->redirect('logged'); - } - if (isset($_POST['username']) and isset($_POST['password'])) - { - $username = ctype_alnum($_POST['username']) ? sanitizeAll($_POST['username']) : ''; - $choice = $this->s['admin']->login($username,$_POST['password']); - - switch($choice) - { - case 'logged': - $this->redirect('panel/main',3,'You are already logged...'); - break; - case 'accepted': - $this->redirect('panel/main',3,'Hi '.$this->s['admin']->status['user'].'...'); - break; - case 'login-error': - $data['notice'] = '
              Wrong username or password
              '; - break; - case 'wait': - $data['notice'] = '
              You have to wait 5 seconds before you can try to login another time
              '; - break; - } - } - $this->set($data); - $this->load('login'); - } - - public function logout() - { - $res = $this->s['admin']->logout(); - if ($res == 'not-logged') { - $data['notice'] = "
              You can't logout because you are not logged..
              \n"; - - } else if ($res == 'was-logged') { - $data['notice'] = "
              Logout executed successfully!
              \n"; - - } else if ($res == 'error') { - - } - - $data['login'] = Url::getRoot('adminusers/login'); - $this->set($data); - $this->load('logout'); - } - - public function forceout($id) - { - $this->shift(1); - - $this->s['admin']->check(); - $data['menù'] = $this->h['Menu']->render('back'); - $data['notice'] = null; - $id = (int)$id; - if (strcmp($this->s['admin']->status['id_user'],$id) !== 0) - { - if ($this->s['admin']->forceOut($id)) - { - $data['notice'] = "
              User has been forced out..
              \n"; - } - else - { - $data['notice'] = "
              Error..
              \n"; - } - } - - $this->set($data); - $this->load('forceout'); - } - - public function main() - { - $this->shift(); - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $this->loadScaffold('main',array('popup'=>false)); - $this->scaffold->setWhereQueryClause(array('id_group'=>$this->viewArgs['id_group'])); - $this->scaffold->loadMain('adminusers:id_user,adminusers:username','adminusers:id_user','edit,del'); - $this->scaffold->addItem('simpleLink','adminusers/forceout/;adminusers:id_user;',null,'ForceOut'); - $this->scaffold->update('del'); - $data['scaffold'] = $this->scaffold->render(); - $this->set($data); - $this->load('main'); - } - - public function form($queryType = 'insert') - { - $this->shift(1); - - $this->s['admin']->check(); - - if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); - - $this->m['AdminusersModel']->updateTable('insert,update'); - - $this->loadScaffold('form'); - $this->scaffold->loadForm($queryType,"adminusers/form/$queryType"); - $this->scaffold->getFormValues('sanitizeHtml'); - $this->scaffold->setFormEntries('model',array('password'=>'Password')); - $this->scaffold->form->setEntry('confirmation','Password'); - $data['scaffold'] = $this->scaffold->render(null,'username,password,confirmation,id_user'); - - $this->set($data); - $this->load('main'); - } - -// public function associate() -// { -// $this->shift(0); -// -// $this->s['admin']->check(); -// -// if (!$this->s['admin']->checkCsrf($this->viewArgs['token'])) $this->redirect('panel/main/',2,'wrong token..'); -// -// $this->m['AdminusersModel']->printAssError = 'yes'; -// $this->m['AdminusersModel']->updateTable('associate,dissociate'); -// -// $data['notice'] = $this->m['AdminusersModel']->notice; -// -// $data['menu'] = $this->h['Menu']->render('back'); -// -// $data['action'] = $this->baseUrl.'/adminusers/associate'.$this->viewStatus; -// -// $data['groups'] = $this->m['AdminusersModel']->getFieldArray('admingroups:id_group','admingroups:name'); -// -// //get the name of the user whose id is $_POST['id_user'] -// $users = $this->m['AdminusersModel']->db->select('adminusers','username','id_user='.(int)$_POST['id_user']); -// $data['user'] = $users[0]['adminusers']['username']; -// -// //get the groups inside which the user is inserted -// $this->m['AdminusersModel']->setWhereQueryClause(array('id_user'=>(int)$_POST['id_user'])); -// $this->m['AdminusersModel']->orderBy = 'admingroups.id_group desc'; -// $data['groupsUser'] = $this->m['AdminusersModel']->getAll('Boxes'); -// // echo $this->m['AdminusersModel']->getQuery(); -// -// $this->set($data); -// $this->load('associate'); -// } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Controllers/PanelController.php b/h-source/admin/Application/Controllers/PanelController.php deleted file mode 100755 index 27eeacf..0000000 --- a/h-source/admin/Application/Controllers/PanelController.php +++ /dev/null @@ -1,43 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class PanelController extends Controller { - - public function __construct($model, $controller, $queryString) { - parent::__construct($model, $controller, $queryString); - $this->session('admin'); - $this->load('header_back'); - $this->load('footer_back','last'); - } - - public function main() - { - $this->s['admin']->check(); - $data['logged'] = $this->s['admin']->getUsersLogged(); - - $data['token'] = $this->s['admin']->status['token']; - - $this->set($data); - $this->load('panel'); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Hooks/AfterInitialization.php b/h-source/admin/Application/Hooks/AfterInitialization.php deleted file mode 100644 index a369309..0000000 --- a/h-source/admin/Application/Hooks/AfterInitialization.php +++ /dev/null @@ -1,10 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Distributions -{ - - public static $allowed = array( - 'blag_90001' => 'BLAG 90001', - 'blag_120000' => 'BLAG 120000', - 'dragora_1_1' => 'Dragora 1.1', - 'dynebolic_2_5_2' => 'Dynebolic 2.5.2 DHORUBA', - 'gnewsense_2_3' => 'gNewSense 2.3 Deltah', - 'gnewsense_3_0' => 'gNewSense 3.0 Metad', - 'musix_2_0' => 'Musix GNU+Linux 2.0 R0', - 'trisquel_3_5' => 'Trisquel 3.5 Awen', - 'trisquel_4_0' => 'Trisquel 4.0 Taranis', - 'ututo_xs_2009' => 'UTUTO XS 2009', - 'ututo_xs_2010' => 'UTUTO XS 2010', - 'venenux_0_8' => 'VENENUX 0.8', - ); - - public static function getName($distList = '') - { - $returnString = null; - $returnArray = array(); - $distArray = explode(',',$distList); - foreach ($distArray as $dist) - { - $dist = trim($dist); - if (array_key_exists($dist,self::$allowed)) - { - $returnArray[] = self::$allowed[$dist]; - } - } - return implode("
              ",$returnArray); - } - - public static function check($distString) - { - $distArray = explode(',',$distString); - - $allowedArray = array_keys(self::$allowed); - - foreach ($distArray as $dist) - { - $dist = trim($dist); - if (!in_array($dist,$allowedArray)) return false; - } - - return true; - } - - public static function getFormHtml() - { - $str = "
              "; - $str .= "
              "; - foreach (self::$allowed as $value => $label) - { - $str .= "
              $label
              "; - } - $str .= "
              "; - $str .= ""; - $str .= ""; - $str .= "
              "; - - return $str; - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Include/hardware.php b/h-source/admin/Application/Include/hardware.php deleted file mode 100644 index 62dfa37..0000000 --- a/h-source/admin/Application/Include/hardware.php +++ /dev/null @@ -1,216 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - - -class Hardware -{ - - public static $controllers = array('notebooks','wifi','videocards','printers','scanners'); //used by UsersController::login() - - public static $commYear = 'not-specified,2010,2009,2008,2007,2006,2005,2004,2003,2002,2001,2000,1999,1998,1997,1996,1995,1994,1993,1992'; - -} - -class Printer extends hardware -{ - public static $vendors = array( - "brother" => "brother", - "Canon" => "Canon", - "EPSON" => "EPSON", - "Lexmark" => "Lexmark", - "KONICA-MINOLTA" => "KONICA-MINOLTA", - "Hewlett-Packard" => "Hewlett-Packard", - "Panasonic" => "Panasonic", - "RICOH" => "RICOH", - "SAMSUNG" => "SAMSUNG", - "SHARP" => "SHARP", - "TOSHIBA" => "TOSHIBA", - "XEROX" => "XEROX", - ); - - public static $compatibility = array( - "A Full" => "A-Full", - "B Partial" => "B-Partial", - "C None" => "C-None", - ); - - public static $interface = "not-specified,USB,Serial,Parallel,Firewire,SCSI,Ethernet"; - - public static function vendorsList() - { - return implode(',',array_values(self::$vendors)); - } - - public static function compatibilityList() - { - return implode(',',array_values(self::$compatibility)); - } - -} - -class Wifi extends hardware -{ - public static $vendors = array( - "A-LINK" => "A-LINK", - "Airlink101" => "Airlink101", - "Belkin" => "Belkin", - "Broadcom" => "Broadcom", - "CANYON" => "CANYON", - "D-Link" => "D-Link", - "Hawking" => "Hawking", - "LevelOne" => "LevelOne", - "Linksys" => "Linksys", - "NEC" => "NEC", - "Netgear" => "Netgear", - "Ralink" => "Ralink", - "TOSHIBA" => "TOSHIBA", - "TP-LINK" => "TP-LINK", - ); - - public static $interface = "not-specified,USB,PCI,PCI-E,mini-PCI,mini-PCI-E,ExpressCard,PC-Card"; - - public static $wifiSelect = 'yes,no'; - - public static function vendorsList() - { - return implode(',',array_values(self::$vendors)); - } -} - -class Videocard extends hardware -{ - public static $vendors = array( - "ATI" => "ATI", - "NVIDIA" => "NVIDIA", - "Intel" => "Intel", - ); - - public static $videoSelect = array( - "works with 3D acceleration" => "works_with_3D", - "works, but without 3D acceleration" => "works_without_3D", - ); - - public static $videoReverse = array( - "works_with_3D" => "works with 3D acceleration", - "works_without_3D" => "works, but without 3D acceleration", - ); - - public static $interface = "not-specified,PCI,AGP,PCI-E,ISA"; - - public static function vendorsList() - { - return implode(',',array_values(self::$vendors)); - } - - public static function videoList() - { - return implode(',',array_values(self::$videoSelect)); - } -} - - -class Notebooks extends Hardware -{ - - public static $vendors = array( - "Acer" => "Acer", - "Apple" => "Apple", - "Asus" => "Asus", - "Compal Electronics" => "Compal-Electronics", - "COMPAQ" => "COMPAQ", - "Dell" => "Dell", - "emachines" => "emachines", - "FUJITSU" => "FUJITSU", - "Gateway" => "Gateway", - "Hewlett Packard" => "Hewlett-Packard", - "IBM" => "IBM", - "Lenovo" => "Lenovo", - "LG" => "LG", - "Philips" => "Philips", - "Panasonic" => "Panasonic", - "Sony" => "Sony", - "SAMSUNG" => "SAMSUNG", - "Thomson" => "Thomson", - "TOSHIBA" => "TOSHIBA", - ); - - public static $compatibility = array( - "A Platinum" => "A-platinum", - "B Gold" => "B-gold", - "C Silver" => "C-silver", - "D Bronze" => "D-bronze", - "E Garbage" => "E-garbage" - ); - - public static $subtypeSelect = 'notebook,netbook,not-specified'; - - public static $videoSelect = array( - "not specified" => 'not-specified', - "yes, with 3D acceleration" => "yes_with_3D", - "yes, but without 3D acceleration" => "yes_without_3D", - "it does not work" => "no", - ); - - public static $videoReverse = array( - "yes_with_3D" => "works with 3D acceleration", - "yes_without_3D" => "works but without 3D acceleration", - "no" => "it does not work", - 'not-specified' => "not specified how it works", - "" => "" - ); - - public static $wifiSelect = array( - "not specified" => 'not-specified', - 'yes' => 'yes', - 'no' => 'no', - 'there is no wifi card' => 'no-wifi-card', - ); - - public static $wifiReverse = array( - "yes" => "it works", - "no" => "it does not work", - 'not-specified' => "not specified how it works", - 'no-wifi-card' => 'there is no wifi card', - "" => "" - ); - - public static function videoList() - { - return implode(',',array_values(self::$videoSelect)); - } - - public static function wifiList() - { - return implode(',',array_values(self::$wifiSelect)); - } - - public static function vendorsList() - { - return implode(',',array_values(self::$vendors)); - } - - public static function compatibilityList() - { - return implode(',',array_values(self::$compatibility)); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Include/languages.php b/h-source/admin/Application/Include/languages.php deleted file mode 100644 index 6262c3e..0000000 --- a/h-source/admin/Application/Include/languages.php +++ /dev/null @@ -1,192 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Lang -{ - public static $allowed = array('en','es','it'); - public static $current = 'en'; - - public static $complete = array( - 'en' => 'gb.png,English', - 'es' => 'es.png,Spanish', - 'it' => 'it.png,Italian', - ); - - public static function sanitize($lang = 'en') - { - return (in_array($lang,self::$allowed)) ? sanitizeAll($lang) : 'en'; - } -} - -class MyStrings -{ - - public static $view = array( - - 'en' => array( - - 'notebooks' => array( - - 'element' => 'notebook' - - ), - - 'wifi' => array( - - 'element' => 'wifi card' - - ), - - 'videocards'=> array( - - 'element' => 'video card' - - ), - - 'printers'=> array( - - 'element' => 'printer' - - ), - - 'scanners'=> array( - - 'element' => 'scanner' - - ), - ), - - 'fr' => array( - - 'notebooks' => array( - - 'element' => 'notebook' - - ), - - 'wifi' => array( - - 'element' => 'wifi card' - - ), - - 'videocards'=> array( - - 'element' => 'video card' - - ), - - 'printers'=> array( - - 'element' => 'printer' - - ), - - 'scanners'=> array( - - 'element' => 'scanner' - - ), - ), - - 'it' => array( - - 'notebooks' => array( - - 'element' => 'notebook' - - ), - - 'wifi' => array( - - 'element' => 'wifi card' - - ), - - 'videocards'=> array( - - 'element' => 'video card' - - ), - - 'printers'=> array( - - 'element' => 'printer' - - ), - - 'scanners'=> array( - - 'element' => 'scanner' - - ), - ), - - 'es' => array( - - 'notebooks' => array( - - 'element' => 'notebook' - - ), - - 'wifi' => array( - - 'element' => 'wifi card' - - ), - - 'videocards'=> array( - - 'element' => 'video card' - - ), - - 'printers'=> array( - - 'element' => 'printer' - - ), - - 'scanners'=> array( - - 'element' => 'scanner' - - ), - ), - ); - - //type => controller - public static $reverse = array( - 'notebook' => 'notebooks', - 'wifi' => 'wifi', - 'videocard' => 'videocards', - 'printer' => 'printers', - 'scanner' => 'scanners', - ); - - public static function getTypes() - { - return implode(',',array_keys(self::$reverse)); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Include/myFunctions.php b/h-source/admin/Application/Include/myFunctions.php deleted file mode 100644 index 355c181..0000000 --- a/h-source/admin/Application/Include/myFunctions.php +++ /dev/null @@ -1,318 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -function encodeUrl($url) -{ - $url = str_replace(' ','-',$url); - $url = urlencode($url); -// $url = html_entity_decode($url, ENT_QUOTES); -// $url = xml_encode($url); - return $url; -} - - -function smartDate($uglyDate = null, $lang = 'en') -{ - switch ($lang) - { - case 'en': - $smDate = date('H:i, d F Y',strtotime($uglyDate)); - break; - default: - $smDate = date('H:i, d F Y',strtotime($uglyDate)); - } - return $smDate; -} - -function sanitizeString($string) -{ - $string = preg_match('/^[a-zA-Z0-9\-\_\.\+\s]+$/',$string) ? sanitizeAll($string) : 'undef'; - return $string; -} - -function sanitizeAlphanum($string) -{ - $string = ctype_alnum($string) ? sanitizeAll($string) : 'undef'; - return $string; -} - - -function getOrderByClause($string) -{ - switch ($string) - { - case 'last-inserted': - $orderBy = 'hardware.id_hard desc'; - break; - case 'alphabetically': - $orderBy = 'model'; - break; - case 'alphabetically-desc': - $orderBy = 'model desc'; - break; - case 'compatibility': - $orderBy = 'compatibility'; - break; - case 'undef': - $orderBy = 'hardware.id_hard desc'; - break; - default: - $orderBy = 'hardware.id_hard desc'; - } - - return $orderBy; -} - - -// function isEqual($str1, $str2) -// { -// // $str1 = str_replace("\n",'',$str1); -// // $str1 = str_replace("\r",null,$str1); -// // $str2 = str_replace("\n",'',$str1); -// // $str2 = str_replace("\r",null,$str1); -// -// return (strcmp($str1,$str2) === 0) ? true : false; -// } -// -// function getNewKeys($array,$ovalue) -// { -// $res = array(); -// for ($i = 0; $i < count($array); $i++) -// { -// if (isEqual($array[$i],$ovalue)) $res[] = $i; -// // if (strcmp($keys[$i],$ovalue) === 0) $res[] = $i; -// } -// return $res; -// } - -function diff($old, $new){ - $maxlen = 0; - foreach($old as $oindex => $ovalue){ -// $nkeys = getNewKeys($new,$ovalue); - $nkeys = array_keys($new, $ovalue); - foreach($nkeys as $nindex){ - $matrix[$oindex][$nindex] = isset($matrix[$oindex - 1][$nindex - 1]) ? - $matrix[$oindex - 1][$nindex - 1] + 1 : 1; - if($matrix[$oindex][$nindex] > $maxlen){ - $maxlen = $matrix[$oindex][$nindex]; - $omax = $oindex + 1 - $maxlen; - $nmax = $nindex + 1 - $maxlen; - } - } - } - if($maxlen == 0) return array(array('d'=>$old, 'i'=>$new)); - return array_merge( - diff(array_slice($old, 0, $omax), array_slice($new, 0, $nmax)), - array_slice($new, $nmax, $maxlen), - diff(array_slice($old, $omax + $maxlen), array_slice($new, $nmax + $maxlen))); -} - -function htmlDiff($old, $new){ - $old = str_replace("\r\n"," \r\n ",$old); - $new = str_replace("\r\n"," \r\n ",$new); - - $ret = null; - $diff = diff(explode(' ', $old), explode(' ', $new)); - foreach($diff as $k){ - if(is_array($k)) - $ret .= (!empty($k['d'])?"".implode(' ',$k['d'])." ":''). - (!empty($k['i'])?"".implode(' ',$k['i'])." ":''); - else $ret .= $k . ' '; - } - return $ret; -} - - -//a cosa serve? -function applyBreaks($values,$fields) -{ - $fieldsArray = explode(',',$fields); - - foreach ($fieldsArray as $field) - { - if (array_key_exists($field,$values)) - { - $values[$field] = nl2br($values[$field]); - } - } - return $values; -} - - -function getLinkToUser($user) -{ - if (strstr($user,'__')) - { - return str_replace('__',null,$user); - } - else - { - return "$user"; - } -} - - - -//decode the text of the wiki -function decodeWikiText($string) -{ - - $string = preg_replace('/(\[hr\])/', '
              ',$string); - - $string = preg_replace_callback('/(\[a\])(.*?)(\[\/a\])/', 'linkTo',$string); - - $string = preg_replace_callback('/(\[a\])(.*?)\|(.*?)(\[\/a\])/', 'linkToWithText',$string); - - $string = preg_replace_callback('/(\[notebook\])([0-9]*?)(\[\/notebook\])/s', 'linkToNotebook',$string); - - $string = preg_replace_callback('/(\[wifi\])([0-9]*?)(\[\/wifi\])/s', 'linkToWifi',$string); - - $string = preg_replace_callback('/(\[videocard\])([0-9]*?)(\[\/videocard\])/s', 'linkToVideocard',$string); - - $string = preg_replace('/(\[b\])(.*?)(\[\/b\])/s', '${2}',$string); - - $string = preg_replace('/(\[u\])(.*?)(\[\/u\])/s', '${2}',$string); - - $string = preg_replace('/(\[i\])(.*?)(\[\/i\])/s', '${2}',$string); - - $string = preg_replace('/(\[del\])(.*?)(\[\/del\])/s', '${2}',$string); - - $string = preg_replace('/(\[\*\])(.*?)(\[\/\*\])/s', '
            3. ${2}
            4. ',$string); - - $string = preg_replace('/(\[list\])(.*?)(\[\/list\])/s', '
                ${2}
              ',$string); - - $string = preg_replace('/(\[enum\])(.*?)(\[\/enum\])/s', '
                ${2}
              ',$string); - - $string = preg_replace('/(\[code\])(.*?)(\[\/code\])/s', '
              ${2}
              ',$string); - - $string = preg_replace('/(\[p\])(.*?)(\[\/p\])/s', '

              ${2}

              ',$string); - - $string = preg_replace('/(\[h1\])(.*?)(\[\/h1\])/s', '
              ${2}
              ',$string); - - $string = preg_replace('/(\[h2\])(.*?)(\[\/h2\])/s', '
              ${2}
              ',$string); - - $string = preg_replace('/(\[h3\])(.*?)(\[\/h3\])/s', '
              ${2}
              ',$string); - - return $string; -} - -function checkUrl($url) -{ -// $match = '/^http\:\/\/(www\.)?[a-zA-Z0-9\-\_]+(\.[a-zA-Z0-9\-\_]+)?\.(com|net|it|info|org|eu|uk)((\/[a-zA-Z0-9\_\-\+]+)+[\/]?)?(\?([a-zA-Z0-9\_\-\+\s]+\=[a-zA-Z0-9\_\-\s\+\&]+)+)?(#[a-zA-Z0-9\_\-\+\s]+)?([\s]*)?$/'; - - $match = '/^http\:\/\/(www\.)?[a-zA-Z0-9\-\_]+(\.[a-zA-Z0-9\-\_]+)?\.(com|net|it|info|org|eu|uk|ca)((\/[a-zA-Z0-9\_\-\+]+)*(\/([a-zA-Z0-9\_\-\.\+]+\.(php|html|htm|asp|aspx|jsp|cgi))?)?)?(\?([a-zA-Z0-9\_\-\+\s]+\=[a-zA-Z0-9\_\-\s\+\&]+)+)?(#[a-zA-Z0-9\_\-\+\s]+)?([\s]*)?$/'; - - if (preg_match($match,$url)) - { - return true; - } - else - { - return false; - } -} - -function vitalizeUrl($string) -{ - if (checkUrl($string)) - { - return "".$string.""; - } - return $string; -} - -function linkTo($match) -{ - if (checkUrl($match[2])) - { - return "".$match[2].""; - } - else - { - return $match[0]; - } -} - -function linkToWithText($match) -{ - if (checkUrl($match[2])) - { - - return "".$match[3].""; - } - else - { - return $match[0]; - } -} - -//create the link to the wiki page of the notebook -function linkToNotebook($match) -{ - $hardware = new HardwareModel(); - $clean['id_hard'] = (int)$match[2]; - $name = encodeUrl($hardware->getTheModelName($clean['id_hard'])); - $href = "/notebooks/view/".Lang::$current."/".$clean['id_hard']."/$name"; - return (strcmp($name,'') !== 0) ? "".$name."" : $match[0]; -} - -//create the link to the wiki page of the wifi -function linkToWifi($match) -{ - $hardware = new HardwareModel(); - $clean['id_hard'] = (int)$match[2]; - $name = encodeUrl($hardware->getTheModelName($clean['id_hard'])); - $href = "/wifi/view/".Lang::$current."/".$clean['id_hard']."/$name"; - return (strcmp($name,'') !== 0) ? "".$name."" : $match[0]; -} - -//create the link to the wiki page of the videocard -function linkToVideocard($match) -{ - $hardware = new HardwareModel(); - $clean['id_hard'] = (int)$match[2]; - $name = encodeUrl($hardware->getTheModelName($clean['id_hard'])); - $href = "/videocards/view/".Lang::$current."/".$clean['id_hard']."/$name"; - return (strcmp($name,'') !== 0) ? "".$name."" : $match[0]; -} - -function getUserName($id_user = 0) -{ - $clean['id_user'] = (int)$id_user; - $u = new UsersModel(); - return $u->getUser($clean['id_user']); -} - -function getMotivation($row,$controller) -{ - if (strcmp($row['deletion']['object'],'duplication') === 0) - { - $clean['id_hard'] = (int)$row['deletion']['id_duplicate']; - $hardware = new HardwareModel(); - $name = encodeUrl($hardware->getTheModelName($clean['id_hard'])); - return "duplication of the model having id ".$clean['id_hard'].""; - } - else - { - return "".$row['deletion']['object'].""; - } -} diff --git a/h-source/admin/Application/Include/params.php b/h-source/admin/Application/Include/params.php deleted file mode 100644 index 43181bf..0000000 --- a/h-source/admin/Application/Include/params.php +++ /dev/null @@ -1,145 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class Website -{ - static public $generalMail = ""; - - static public $generalName = "h-admin"; - - static public $projectName = "h-admin"; - - static public $mailServer = ""; - - static public $mailPassword = ""; -} - -class Account -{ - - static public $confirmTime = 3600; - - static public function confirm($username,$e_mail,$id_user,$token) - { - require_once (ROOT.'/External/swiftmailer/lib/swift_required.php'); - - $clean['username'] = sanitizeAll($username); - $clean['id_user'] = (int)$id_user; - $clean['token'] = sanitizeAll($token); - - $siteName = Website::$generalName; - $siteMail = Website::$generalMail; - - $mess = "Hello,\n\nyou have registered an account to $siteName with the following data:\nusername: ".$clean['username']."\n\nin order to confirm the registration of the new account follow the link below\nhttp://".DOMAIN_NAME."/users/confirm/".Lang::$current."/".$clean['id_user']."/".$clean['token']."\n\nIf you don't want to confirm the account registration\nthen wait one hour and your username and e-mail will be deleted from the database\n\nIf you received this e-mail for error, please simply disregard this message"; - - $message = Swift_Message::newInstance()->setSubject('account registration to '.$siteName)->setFrom(array($siteMail => $siteName))->setTo(array($e_mail))->setBody($mess); - - //Create the Transport - $transport = Swift_SmtpTransport::newInstance(Website::$mailServer, 25)->setUsername(Website::$generalMail)->setPassword(Website::$mailPassword); - - //Create the Mailer using your created Transport - $mailer = Swift_Mailer::newInstance($transport); - - //Send the message - $result = $mailer->send($message); - - if ($result) - { - return true; - } - else - { - return false; - } - - } - - static public function sendnew($username,$e_mail,$id_user,$token) - { - require_once (ROOT.'/External/swiftmailer/lib/swift_required.php'); - - $clean['username'] = sanitizeAll($username); - $clean['id_user'] = (int)$id_user; - $clean['token'] = sanitizeAll($token); - - $siteName = Website::$generalName; - $siteMail = Website::$generalMail; - - $mess = "Hello,\n\nyou have requested a new password for your account at $siteName.\nYour username is:\n".$clean['username']."\n\nin order to obtain a new password for your account follow the link below\nhttp://".DOMAIN_NAME."/users/change/".Lang::$current."/".$clean['id_user']."/".$clean['token']."\n\nIf you don't want to change the password then disregard this mail\n"; - - $message = Swift_Message::newInstance()->setSubject('request a new password at '.$siteName)->setFrom(array($siteMail => $siteName))->setTo(array($e_mail))->setBody($mess); - - //Create the Transport - $transport = Swift_SmtpTransport::newInstance(Website::$mailServer, 25)->setUsername(Website::$generalMail)->setPassword(Website::$mailPassword); - - //Create the Mailer using your created Transport - $mailer = Swift_Mailer::newInstance($transport); - - //Send the message - $result = $mailer->send($message); - - if ($result) - { - return true; - } - else - { - return false; - } - - } - - static public function sendpassword($username,$e_mail,$password) - { - require_once (ROOT.'/External/swiftmailer/lib/swift_required.php'); - - $clean['username'] = sanitizeAll($username); - $clean['password'] = sanitizeAll($password); - - $siteName = Website::$generalName; - $siteMail = Website::$generalMail; - - $mess = "Hello,\n\nyou have requested a new password for your account to $siteName.\nYour username is:\n".$clean['username']."\n\nYour new password is:\n".$clean['password']."\n"; - - $message = Swift_Message::newInstance()->setSubject('get your new h-node.com account password ')->setFrom(array($siteMail => $siteName))->setTo(array($e_mail))->setBody($mess); - - //Create the Transport - $transport = Swift_SmtpTransport::newInstance(Website::$mailServer, 25)->setUsername(Website::$generalMail)->setPassword(Website::$mailPassword); - - //Create the Mailer using your created Transport - $mailer = Swift_Mailer::newInstance($transport); - - //Send the message - $result = $mailer->send($message); - - if ($result) - { - return true; - } - else - { - return false; - } - - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/AdminusersModel.php b/h-source/admin/Application/Models/AdminusersModel.php deleted file mode 100755 index 498a1a7..0000000 --- a/h-source/admin/Application/Models/AdminusersModel.php +++ /dev/null @@ -1,37 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class AdminusersModel extends Model_Map { - - public function __construct() { - $this->_tables='adminusers,admingroups,adminusers_groups'; - $this->_idFields='id_user,id_group'; - $this->_where=array('id_group'=>'admingroups','id_user'=>'adminusers','name'=>'admingroups'); - $this->_popupItemNames = array('id_group'=>'name'); - $this->orderBy = 'adminusers.id_user desc'; - -// $this->on = "adminusers.id_user=adminusers_groups.id_user and admingroups.id_group=adminusers_groups.id_group"; - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/BaseModel.php b/h-source/admin/Application/Models/BaseModel.php deleted file mode 100644 index 374be72..0000000 --- a/h-source/admin/Application/Models/BaseModel.php +++ /dev/null @@ -1,68 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class BaseModel extends Model_Tree { - - public $type = ''; //device type - public $diffFields = array(); - - public function __construct() { - $this->_tables = 'hardware'; - $this->_idFields = 'id_hard'; - - $this->_where=array( - 'type' => 'hardware', - 'vendor' => 'hardware', - 'compatibility' => 'hardware', - 'comm_year' => 'hardware', - ); - - $this->orderBy = 'hardware.id_hard desc'; - parent::__construct(); - } - - public function checkType($id_hard = 0) - { - $clean['id_hard'] = (int)$id_hard; - $res = $this->db->select('hardware','type','id_hard='.$clean['id_hard']); - if (count($res) > 0) - { - return (strcmp($this->type,$res[0]['hardware']['type']) === 0 ) ? true : false; - } - return false; - } - - public function getDiffArray($oldArray, $newArray) - { - $diffArray = array(); - foreach ($this->diffFields as $field => $label) - { - if (array_key_exists($field,$oldArray) and array_key_exists($field,$newArray)) - { -// echo htmlDiff($oldArray[$field], $newArray[$field]); -// echo $oldArray[$field].$newArray[$field]; - $diffArray[$label] = htmlDiff($oldArray[$field], $newArray[$field]); - } - } - return $diffArray; - } -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/BoxesModel.php b/h-source/admin/Application/Models/BoxesModel.php deleted file mode 100644 index 1f1a51a..0000000 --- a/h-source/admin/Application/Models/BoxesModel.php +++ /dev/null @@ -1,42 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class BoxesModel extends Model_Tree { - - public function __construct() { - $this->_tables = 'boxes'; - $this->_idFields = 'id_box'; - - parent::__construct(); - } - - public $formStruct = array( - 'entries' => array( - 'title' => array(), - 'message' => array('type'=>'Textarea'), - 'id_box' => array( - 'type' => 'Hidden' - ) - ), - ); - -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/DeletionModel.php b/h-source/admin/Application/Models/DeletionModel.php deleted file mode 100644 index 0e67904..0000000 --- a/h-source/admin/Application/Models/DeletionModel.php +++ /dev/null @@ -1,53 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class DeletionModel extends Model_Tree -{ - - public function __construct() - { - $this->_tables = 'deletion'; - $this->_idFields = 'id_del'; - -// $this->_where=array( -// 'id_hard' => 'talk' -// ); -// - $this->_popupItemNames = array( - 'object' => 'object', - ); - - $this->_popupLabels = array( - 'object' => 'OBJECT', - ); -// - $this->orderBy = 'deletion.id_del desc'; - - $this->strongConditions['insert'] = array( - "checkIsStrings|duplication,other" => 'object', - "+checkLength|500" => 'message' - ); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/HardwareModel.php b/h-source/admin/Application/Models/HardwareModel.php deleted file mode 100644 index 48cab7e..0000000 --- a/h-source/admin/Application/Models/HardwareModel.php +++ /dev/null @@ -1,200 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class HardwareModel extends Model_Map { - - public $id_user = 0; - public $type = ''; //device type - public $lastId = 0; //the id of the last record inserted - - public $formStruct = array( - 'entries' => array( - 'deleted'=> array('type'=>'Select','options'=>'no,yes'), - 'id_hard' => array( - 'type' => 'Hidden' - ) - ), - ); - - public function __construct() { - $this->_tables='hardware,regusers,hardware_users'; - $this->_idFields='id_hard,id_user'; - $this->_where=array( - 'type' => 'hardware', - 'username' => 'regusers', - 'has_confirmed' => 'regusers', - 'deleted' => 'regusers', - '-deleted' => 'hardware' - ); - $this->orderBy = 'hardware.id_hard desc'; - $this->printAssError = "no"; - - $this->_popupItemNames = array( - 'type'=>'type', - 'ask_for_del'=>'ask_for_del', - '-deleted'=>'deleted', - ); - - $this->_popupLabels = array( - 'type'=>'TYPE', - 'ask_for_del'=>'ASK FOR DEL?', - '-deleted'=>'DELETED?', - ); - - $this->databaseConditions['insert'] = array( - 'checkUnique' => 'model', - ); - - $this->databaseConditions['update'] = array( - 'checkUniqueCompl' => 'model', - ); - - parent::__construct(); - } - - public function insert() - { - $this->values['created_by'] = (int)$this->id_user; - $this->values['updated_by'] = (int)$this->id_user; - $this->values['update_date'] = date('Y-m-d H:i:s'); - - //random ID - $randomId = md5(uniqid(mt_rand(),true)); - $this->values["type"] = $randomId; - - parent::insert(); - - //associate the user to the record - if ($this->queryResult) - { - $resId = $this->db->select("hardware","id_hard","type='$randomId'"); - $clean['id'] = $resId[0]['hardware']['id_hard']; - $this->lastId = $clean['id']; - $this->db->update('hardware','type',array($this->type),'id_hard='.$clean['id']); - - $this->associate($clean['id']); - } - - } - - public function update($id) - { - $clean['id'] = (int)$id; - - $this->values['updated_by'] = (int)$this->id_user; - $this->values['update_date'] = date('Y-m-d H:i:s'); - - //save the old fields in the revisions table - $this->setWhereQueryClause(array('id_hard' => $clean['id'])); - $oldStruct = $this->getFields($this->fields.',created_by,updated_by,update_date,type,id_hard'); - - if (count($oldStruct > 0)) - { - if (strcmp($oldStruct[0]['hardware']['type'],$this->type) === 0) - { - $oldValues = $oldStruct[0]['hardware']; - - $revisions = new RevisionsModel(); - $revisions->values = $oldValues; - if ($revisions->insert()) - { - parent::update($clean['id']); - if ($this->queryResult) - { - $this->lastId = $clean['id']; - if (!$this->checkAssociation($clean['id'],(int)$this->id_user)) - { - $this->associate($clean['id']); - } - } - } - } - } - } - - public function makeCurrent($id_rev) - { - $clean['id_rev'] = (int)$id_rev; - - $revisions = new RevisionsModel(); - - $clean['id_hard'] = (int)$revisions->getIdHard($clean['id_rev']); - - //save the old fields in the revisions table - $this->setWhereQueryClause(array('id_hard'=>$clean['id_hard'])); - $oldStruct = $this->getFields($this->fields.',created_by,updated_by,update_date,type,id_hard'); - - if (count($oldStruct > 0)) - { - if (strcmp($oldStruct[0]['hardware']['type'],$this->type) === 0) - { - //get the values of the revision - $revisions->setWhereQueryClause(array('id_rev'=>$clean['id_rev'])); - $newStruct = $revisions->getFields($this->fields.',created_by,updated_by,update_date,type,id_hard'); - - if (count($newStruct > 0)) - { - $revisions->values = $oldStruct[0]['hardware']; - - $this->values = $newStruct[0]['revisions']; - $this->values['updated_by'] = (int)$this->id_user; - $this->values['update_date'] = date('Y-m-d H:i:s'); - - if ($revisions->insert()) - { - if (parent::update($clean['id_hard'])) - { - $this->lastId = $clean['id_hard']; - if (!$this->checkAssociation($clean['id_hard'],(int)$this->id_user)) - { - $this->associate($clean['id_hard']); - } - } - } - } - } - else - { - $this->notice = "
              Wrong type..
              \n"; - } - } - - } - - public function associate($id_record) - { - return parent::associate((int)$id_record,(int)$this->id_user); - } - - //get the model name - public function getTheModelName($id) - { - $clean['id'] = (int)$id; - $this->setWhereQueryClause(array('id_hard' => $clean['id'])); - $res = $this->getFields('model'); - $name = count($res) > 0 ? $res[0]['hardware']['model'] : ''; - return $name; - } - - - -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/HistoryModel.php b/h-source/admin/Application/Models/HistoryModel.php deleted file mode 100644 index 5f35d6b..0000000 --- a/h-source/admin/Application/Models/HistoryModel.php +++ /dev/null @@ -1,55 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class HistoryModel extends Model_Tree { - - public function __construct() { - $this->_tables = 'history'; - $this->_idFields = 'id_history'; - - $this->orderBy = 'history.id_history'; - - $this->_popupFunctions = array( - 'created_by'=> 'getUserName', - ); - - $this->_popupItemNames = array( - 'type' => 'type', - 'action' => 'action', - 'created_by'=> 'created_by', - ); - - $this->_popupLabels = array( - 'type' => 'TYPE', - 'action' => 'ACTION', - 'created_by'=> 'MODERATOR', - ); - - $this->_popupWhere = array( - 'created_by' => 'gr != "registered"', - ); - - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/IssuesModel.php b/h-source/admin/Application/Models/IssuesModel.php deleted file mode 100644 index 3ad3a5c..0000000 --- a/h-source/admin/Application/Models/IssuesModel.php +++ /dev/null @@ -1,96 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class IssuesModel extends Model_Tree { - - public function __construct() { - $this->_tables = 'issues'; - $this->_idFields = 'id_issue'; - - $this->_onDelete = 'nocheck'; - - $this->_where = array( - 'priority' => 'issues', - 'status' => 'issues', - 'topic' => 'issues', - ); - - $this->_popupItemNames = array( - 'priority' => 'priority', - 'status' => 'status', - 'topic' => 'topic', - 'deleted' => 'deleted', - ); - - $this->_popupLabels = array( - 'priority' => 'PRIORITY', - 'status' => 'STATUS', - 'topic' => 'TOPIC', - 'deleted' => 'DELETED?', - ); - - $this->orderBy = 'issues.id_issue desc'; - - $this->strongConditions['insert'] = array( - "checkLength|99" => 'title', - "+checkLength|34" => 'topic', - "++checkLength|15" => 'priority', - "+++checkLength|5000" => 'message', - "checkisStrings|low,medium,high" => 'priority', - "+checkisStrings|maybe-a-bug,new-categories-of-hardware,add-a-vendor-name,other" => 'topic', - ); - - parent::__construct(); - } - - public $formStruct = array( - 'entries' => array( - 'title' => array(), - 'topic' => array( - 'type'=>'Select', - 'options'=>array( - 'Add a vendor name' => 'add-a-vendor-name', - 'Maybe a bug' => 'maybe-a-bug', - 'Add new categories of hardware' => 'new-categories-of-hardware', - 'Other' => 'other' - ), - ), - 'deleted'=> array( - 'type' => 'Select', - 'options' => 'no,yes', - ), - 'priority' => array('type'=>'Select','options'=>'low,medium,high'), - 'message' => array('type'=>'Textarea','idName'=>'bb_code'), - 'status' => array( - 'type' => 'Select', - 'options' => 'opened,closed' - ), - 'notice' => array( - 'type' => 'Textarea', - 'idName' => 'bb_code_notice', - ), - 'id_issue' => array( - 'type' => 'Hidden' - ) - ), - ); -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/MessagesModel.php b/h-source/admin/Application/Models/MessagesModel.php deleted file mode 100644 index 2022b4a..0000000 --- a/h-source/admin/Application/Models/MessagesModel.php +++ /dev/null @@ -1,58 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class MessagesModel extends Model_Tree { - - public function __construct() { - $this->_tables = 'messages'; - $this->_idFields = 'id_mes'; - - $this->orderBy = 'messages.id_mes'; - - $this->_popupItemNames = array( - 'deleted' => 'deleted', - 'has_read' => 'has_read', - ); - - $this->_popupLabels = array( - 'deleted' => 'DELETED?', - 'has_read' => 'ALREADY READ?', - ); - - $this->strongConditions['insert'] = array( - "checkLength|5000" => 'message', - ); - - parent::__construct(); - } - - public $formStruct = array( - 'entries' => array( - 'deleted' => array('type'=>'Select','options'=>'no,yes'), - 'has_read' => array('type'=>'Select','options'=>'no,yes'), - 'message' => array('type'=>'Textarea','idName'=>'bb_code'), - 'id_mes' => array( - 'type' => 'Hidden' - ) - ), - ); -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/NewsModel.php b/h-source/admin/Application/Models/NewsModel.php deleted file mode 100644 index 2f47800..0000000 --- a/h-source/admin/Application/Models/NewsModel.php +++ /dev/null @@ -1,44 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class NewsModel extends Model_Tree { - - public function __construct() { - $this->_tables = 'news'; - $this->_idFields = 'id_news'; - - $this->orderBy = 'news.id_news desc'; - - parent::__construct(); - } - - public $formStruct = array( - 'entries' => array( - 'title' => array(), - 'message' => array('type'=>'Textarea','idName'=>'bb_code'), - 'id_news' => array( - 'type' => 'Hidden' - ) - ), - ); - -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/NotebooksModel.php b/h-source/admin/Application/Models/NotebooksModel.php deleted file mode 100644 index fda2c42..0000000 --- a/h-source/admin/Application/Models/NotebooksModel.php +++ /dev/null @@ -1,71 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class NotebooksModel extends BaseModel { - - public $type = 'notebook'; //device type - - public $diffFields = array( - 'vendor' => 'vendor', - 'model' => 'model name', - 'subtype' => 'subtype (notebook or netbook) ?', - 'comm_year' => 'year of commercialization', - 'distribution' => 'distribution used', - 'compatibility' => 'compatibility level', - 'kernel' => 'kernel libre version', - 'video_card_type' => 'video card model', - 'video_card_works' => 'does the video card work?', - 'wifi_type' => 'wifi model', - 'wifi_works' => 'does the wifi card works?', - 'description' => 'model description', - ); - - public $fieldsWithBreaks = array('model description'); - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'compatibility' => 'compatibility', - 'comm_year' => 'comm_year', - 'subtype' => 'subtype', - ); - - $this->_popupLabels = array( - 'vendor' => 'vendor', - 'compatibility' => 'compatibility', - 'comm_year' => 'year', - 'subtype' => 'subtype', - ); - - $this->_popupWhere = array( - 'vendor' => 'type="notebook" and deleted="no"', - 'compatibility' => 'type="notebook" and deleted="no"', - 'comm_year' => 'type="notebook" and deleted="no"', - 'subtype' => 'type="notebook" and deleted="no"', - ); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/ParamsModel.php b/h-source/admin/Application/Models/ParamsModel.php deleted file mode 100644 index f30bca1..0000000 --- a/h-source/admin/Application/Models/ParamsModel.php +++ /dev/null @@ -1,48 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class ParamsModel extends Model_Tree { - - public function __construct() { - $this->_tables = 'params'; - $this->_idFields = 'id_par'; - - parent::__construct(); - } - - public $formStruct = array( - 'entries' => array( - 'updating' => array( - 'type'=>'Select', - 'options'=>'no,yes', - ), - 'boxes_xml' => array( - 'type'=>'Textarea', - 'labelString'=> 'Configuration xml', - ), - 'id_par' => array( - 'type' => 'Hidden' - ) - ), - ); - -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/PrintersModel.php b/h-source/admin/Application/Models/PrintersModel.php deleted file mode 100644 index 104e214..0000000 --- a/h-source/admin/Application/Models/PrintersModel.php +++ /dev/null @@ -1,70 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class PrintersModel extends BaseModel -{ - - public $type = 'printer'; //device type - - public $diffFields = array( - 'vendor' => 'vendor', - 'model' => 'model name', - 'pci_id' => 'VendorID:ProductID', - 'comm_year' => 'year of commercialization', - 'interface' => 'interface', - 'distribution' => 'distribution used', - 'compatibility' => 'compatibility', - 'kernel' => 'kernel libre version', - 'driver' => 'driver used', - 'description' => 'model description', - ); - - public $fieldsWithBreaks = array('model description'); - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'compatibility' => 'compatibility', - 'comm_year' => 'comm_year', - 'interface' => 'interface', - ); - - $this->_popupLabels = array( - 'vendor' => 'vendor', - 'compatibility' => 'compatibility', - 'comm_year' => 'year', - 'interface' => 'interface', - ); - - $this->_popupWhere = array( - 'vendor' => 'type="printer" and deleted="no"', - 'compatibility' => 'type="printer" and deleted="no"', - 'comm_year' => 'type="printer" and deleted="no"', - 'interface' => 'type="printer" and deleted="no"', - ); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/ProfileModel.php b/h-source/admin/Application/Models/ProfileModel.php deleted file mode 100644 index 626e652..0000000 --- a/h-source/admin/Application/Models/ProfileModel.php +++ /dev/null @@ -1,72 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class ProfileModel extends Model_Tree { - - public function __construct() { - $this->_tables = 'profile'; - $this->_idFields = 'id_prof'; - - $this->_where=array( - 'username' => 'regusers', - 'has_confirmed' => 'regusers', - 'deleted' => 'regusers' - ); - - $this->softConditions['update'] = array( - "checkLength|90" => "real_name,where_you_are,fav_distro,birth_date,website|the fields 'real name', 'where_you_are', 'favorite distro', 'website' and 'birthdate' don't have to have more than 90 characters", - "checkLength|1000" => "projects,description|the fields 'projects' and 'description' don't have to have more than 1000 characters", - "checkIsStrings|no,yes" => "publish_mail" - ); - - parent::__construct(); - } - - public $formStruct = array( - - 'entries' => array( - 'real_name' => array('labelString'=>'Your real name'), - 'website' => array('labelString'=>'Your website address (add http://)'), - 'where_you_are' => array('labelString'=>'I\'m from...'), - 'birth_date' => array('labelString'=>'My birthdate'), - 'fav_distro' => array('labelString'=>'My favourite distribution'), - 'projects' => array( - 'type' => 'Textarea', - 'labelString'=>'Free software projects I\'m working on' - ), - 'publish_mail' => array( - 'type' => 'Select', - 'options' => 'no,yes', - 'labelString'=> 'Would you like to publish your e-mail address?' - ), - 'description' => array( - 'type' => 'Textarea', - 'labelString'=> 'Your description' - ), - 'id_prof' => array( - 'type' => 'Hidden' - ) - ), - - ); - -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/RevisionsModel.php b/h-source/admin/Application/Models/RevisionsModel.php deleted file mode 100644 index bbfa939..0000000 --- a/h-source/admin/Application/Models/RevisionsModel.php +++ /dev/null @@ -1,50 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class RevisionsModel extends Model_Tree { - - public $id_user = 0; - public $type = ''; //device type - - public function __construct() { - $this->_tables='revisions'; - $this->_idFields='id_rev'; - - $this->_where=array( - 'id_hard'=>'revisions' - ); - - $this->orderBy = 'id_rev desc'; - - parent::__construct(); - } - - public function getIdHard($id_rev = 0) - { - $clean['id_rev'] = (int)$id_rev; - - $res = $this->db->select('revisions','id_hard','id_rev='.$clean['id_rev']); - - return (count($res) > 0) ? $res[0]['revisions']['id_hard'] : 0; - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/ScannersModel.php b/h-source/admin/Application/Models/ScannersModel.php deleted file mode 100644 index 978a26b..0000000 --- a/h-source/admin/Application/Models/ScannersModel.php +++ /dev/null @@ -1,70 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class ScannersModel extends BaseModel -{ - - public $type = 'scanner'; //device type - - public $diffFields = array( - 'vendor' => 'vendor', - 'model' => 'model name', - 'pci_id' => 'VendorID:ProductID', - 'comm_year' => 'year of commercialization', - 'interface' => 'interface', - 'distribution' => 'distribution used', - 'compatibility' => 'compatibility', - 'kernel' => 'kernel libre version', - 'driver' => 'driver used', - 'description' => 'model description', - ); - - public $fieldsWithBreaks = array('model description'); - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'compatibility' => 'compatibility', - 'comm_year' => 'comm_year', - 'interface' => 'interface', - ); - - $this->_popupLabels = array( - 'vendor' => 'vendor', - 'compatibility' => 'compatibility', - 'comm_year' => 'year', - 'interface' => 'interface', - ); - - $this->_popupWhere = array( - 'vendor' => 'type="scanner" and deleted="no"', - 'compatibility' => 'type="scanner" and deleted="no"', - 'comm_year' => 'type="scanner" and deleted="no"', - 'interface' => 'type="scanner" and deleted="no"', - ); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/TalkModel.php b/h-source/admin/Application/Models/TalkModel.php deleted file mode 100644 index cdf2fc6..0000000 --- a/h-source/admin/Application/Models/TalkModel.php +++ /dev/null @@ -1,54 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class TalkModel extends Model_Tree { - - public function __construct() { - $this->_tables = 'talk'; - $this->_idFields = 'id_talk'; - - $this->_where=array( - 'id_hard' => 'talk' - ); - - $this->orderBy = 'talk.id_talk desc'; - - $this->strongConditions['insert'] = array( - "checkLength|99" => 'title', - "+checkNotEmpty" => 'message', - "++checkLength|5000" => 'message', - ); - - parent::__construct(); - } - - public $formStruct = array( - 'entries' => array( - 'title' => array(), - 'message' => array('type'=>'Textarea'), - 'id_talk' => array( - 'type' => 'Hidden' - ) - ), - ); - -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/UsersModel.php b/h-source/admin/Application/Models/UsersModel.php deleted file mode 100755 index 3f55cfe..0000000 --- a/h-source/admin/Application/Models/UsersModel.php +++ /dev/null @@ -1,223 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class UsersModel extends Model_Map -{ - - public static $usersList = array(); - - public function __construct() - { - $this->_tables='regusers,reggroups,regusers_groups'; - $this->_idFields='id_user,id_group'; - - $this->_where=array( - 'id_group' => 'reggroups', - 'id_user' => 'regusers', - 'name' => 'reggroups', - 'confirmation_token'=> 'regusers', - 'has_confirmed' => 'regusers', - 'deleted' => 'regusers', - 'forgot_token' => 'regusers' - ); - - $this->_popupItemNames = array( - 'has_confirmed'=>'has_confirmed', - 'deleted'=>'deleted', - 'id_group'=>'name', - ); - - $this->_popupLabels = array( - 'has_confirmed'=>'HAS CONFIRMED?', - 'deleted'=>'DELETED?', - 'id_group'=>'GROUP' - ); - - $this->orderBy = 'regusers.id_user desc'; - - parent::__construct(); - - $this->deleteNotRegistered(); - } - - public function deleteNotRegistered() - { - $limit = time() - Account::$confirmTime; - $this->db->del('regusers','has_confirmed = 1 and deleted = "no" and creation_time < '.$limit); - } - - public function getUser($id_user = 0) - { - $clean['id_user'] = (int)$id_user; - if (array_key_exists($clean['id_user'],self::$usersList)) - { - return self::$usersList[$clean['id_user']]; - } - else - { - $user = $this->db->select('regusers','username,has_confirmed','id_user='.$clean['id_user']); - if (count($user) > 0) - { - $fuser = (strcmp($user[0]['regusers']['has_confirmed'],0) === 0) ? $user[0]['regusers']['username'] : "__".$user[0]['regusers']['username']; - self::$usersList[$clean['id_user']] = $fuser; - return $fuser; - } - else - { - return "__"; - } - } - } - - public function insert() - { - //create the token - $confirmation_token = md5(randString(20)); - $this->values['confirmation_token'] = $confirmation_token; - //has_confirmed flag - $this->values['has_confirmed'] = 1; - $this->values['creation_time'] = time(); - - //random ID - $randomId = md5(randString(5).uniqid(mt_rand(),true)); - $this->values["temp_field"] = $randomId; - - if (isset($_POST['captcha'])) - { - if ( strcmp($_SESSION['captchaString'],$_POST['captcha']) === 0 ) - { - - parent::insert(); - - if ($this->queryResult) - { - $resId = $this->db->select("regusers","id_user","temp_field='$randomId'"); - $clean['id_user'] = $resId[0]['regusers']['id_user']; - $this->db->update("regusers",'temp_field',array(''),'id_user='.$clean['id_user']); - - $result = Account::confirm($this->values['username'],$this->values['e_mail'],$clean['id_user'],$confirmation_token); - - if ($result) - { - $_SESSION['status'] = 'sent'; - } - else - { - $_SESSION['status'] = 'regerror'; - } - - $hed = new HeaderObj(DOMAIN_NAME); - $hed->redirect('users/notice/'.Lang::$current); - } - - } - else - { - $this->result = false; - $this->queryResult = false; - $this->notice = "
              Wrong captcha code...
              \n"; - } - } - } - - public function close($id_user) - { - $clean['id_user'] = (int)$id_user; - - $this->values = array( - 'has_confirmed' => 1, - 'deleted' => 'yes', - 'e_mail' => '' - ); - - if ($this->update($clean['id_user'])) - { - $_SESSION['status'] = 'deleted'; - - $profile = new ProfileModel(); - $res = $profile->db->select('profile','id_prof','created_by='.$clean['id_user']); - - if (count($res) > 0) - { - $clean['id_prof'] = (int)$res[0]['profile']['id_prof']; - $profile->values = array( - 'real_name' => '', - 'where_you_are' => '', - 'birth_date' => '', - 'fav_distro' => '', - 'projects' => '', - 'description' => '' - ); - $profile->update($clean['id_prof']); - } - } - - } - - public function forgot($username) - { - $clean['username'] = ctype_alnum($username) ? sanitizeAll($username) : ''; - - if (isset($_POST['captcha'])) - { - if ( strcmp($_SESSION['captchaString'],$_POST['captcha']) === 0 ) - { - $res = $this->db->select('regusers','e_mail,id_user','username="'.$clean['username'].'" and has_confirmed = 0 and deleted = "no"'); - if (count($res) > 0) - { - $e_mail = $res[0]['regusers']['e_mail']; - $id_user = (int)$res[0]['regusers']['id_user']; - $forgot_token = md5(randString(20)); - $forgot_time = time(); - $updateArray = array($forgot_token, $forgot_time); - $this->db->update('regusers','forgot_token,forgot_time',$updateArray,'username="'.$clean['username'].'"'); - - $result = Account::sendnew($clean['username'],$e_mail,$id_user,$forgot_token); - - if ($result) - { - $_SESSION['status'] = 'sent_new'; - } - else - { - $_SESSION['status'] = 'sent_new_error'; - } - - $hed = new HeaderObj(DOMAIN_NAME); - $hed->redirect('users/notice/'.Lang::$current,1); - - } - else - { - $this->notice = "
              the user does not exist
              \n"; - } - } - else - { - $this->result = false; - $this->queryResult = false; - $this->notice = "
              Wrong captcha code...
              \n"; - } - } - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/VideocardsModel.php b/h-source/admin/Application/Models/VideocardsModel.php deleted file mode 100644 index 3b96091..0000000 --- a/h-source/admin/Application/Models/VideocardsModel.php +++ /dev/null @@ -1,66 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class VideocardsModel extends BaseModel -{ - - public $type = 'videocard'; //device type - - public $diffFields = array( - 'vendor' => 'vendor', - 'model' => 'model name', - 'pci_id' => 'VendorID:ProductID', - 'comm_year' => 'year of commercialization', - 'interface' => 'interface', - 'distribution' => 'distribution used', - 'kernel' => 'kernel libre version', - 'video_card_works' => 'how does it work with free software?', - 'description' => 'model description', - ); - - public $fieldsWithBreaks = array('model description'); - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'comm_year' => 'comm_year', - 'interface' => 'interface', - ); - - $this->_popupLabels = array( - 'vendor' => 'vendor', - 'comm_year' => 'year', - 'interface' => 'interface', - ); - - $this->_popupWhere = array( - 'vendor' => 'type="videocard" and deleted="no"', - 'comm_year' => 'type="videocard" and deleted="no"', - 'interface' => 'type="videocard" and deleted="no"', - ); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Models/WifiModel.php b/h-source/admin/Application/Models/WifiModel.php deleted file mode 100644 index d8c84aa..0000000 --- a/h-source/admin/Application/Models/WifiModel.php +++ /dev/null @@ -1,69 +0,0 @@ -. - -if (!defined('EG')) die('Direct access not allowed!'); - -class WifiModel extends BaseModel -{ - - public $type = 'wifi'; //device type - - public $diffFields = array( - 'vendor' => 'vendor', - 'model' => 'model name', - 'pci_id' => 'VendorID:ProductID', - 'comm_year' => 'year of commercialization', - 'interface' => 'interface', - 'distribution' => 'distribution used', - 'kernel' => 'kernel libre version', - 'wifi_works' => 'does it work with free software?', - 'description' => 'model description', - ); - - public $fieldsWithBreaks = array('model description'); - - public function __construct() - { - - $this->_popupItemNames = array( - 'vendor' => 'vendor', - 'comm_year' => 'comm_year', - 'wifi_works' => 'wifi_works', - 'interface' => 'interface', - ); - - $this->_popupLabels = array( - 'vendor' => 'vendor', - 'comm_year' => 'year', - 'wifi_works' => 'does it work?', - 'interface' => 'interface', - ); - - $this->_popupWhere = array( - 'vendor' => 'type="wifi" and deleted="no"', - 'comm_year' => 'type="wifi" and deleted="no"', - 'wifi_works' => 'type="wifi" and deleted="no"', - 'interface' => 'type="wifi" and deleted="no"', - ); - - parent::__construct(); - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Modules/ModBase.php b/h-source/admin/Application/Modules/ModBase.php deleted file mode 100644 index 44d25a2..0000000 --- a/h-source/admin/Application/Modules/ModBase.php +++ /dev/null @@ -1,41 +0,0 @@ -simpleXmlObj->classname)) - { - return " class='".$this->simpleXmlObj->classname[0]."' "; - } - return null; - } - - //wrap the html with a
              - //look for the
              tag in the xml in order to set the class of the div - public function wrapDiv($string) - { - $divOpen = "
              "; - $divClose = "
              "; - - if (isset($this->simpleXmlObj->div)) - { - $divOpen = "
              "; - } - - return $divOpen . $string . $divClose; - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Modules/ModImage.php b/h-source/admin/Application/Modules/ModImage.php deleted file mode 100644 index 5a116b1..0000000 --- a/h-source/admin/Application/Modules/ModImage.php +++ /dev/null @@ -1,45 +0,0 @@ -simpleXmlObj->width)) - { - return " width = '" . $this->simpleXmlObj->width ."' "; - } - return null; - } - - public function heightPropertyString() - { - if (isset($this->simpleXmlObj->height)) - { - return " height = '" . $this->simpleXmlObj->height ."' "; - } - return null; - } - - public function titlePropertyString() - { - if (isset($this->simpleXmlObj->title)) - { - return " title = '" . $this->simpleXmlObj->title ."' "; - } - return null; - } - - public function render() - { - $link = "getHtmlClass().$this->widthPropertyString().$this->heightPropertyString().$this->titlePropertyString()." src='".$this->simpleXmlObj->src[0]."'>"; - return $this->wrapDiv($link)."\n"; - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Modules/ModLink.php b/h-source/admin/Application/Modules/ModLink.php deleted file mode 100644 index 011bc78..0000000 --- a/h-source/admin/Application/Modules/ModLink.php +++ /dev/null @@ -1,18 +0,0 @@ -getHtmlClass()." href='".$this->simpleXmlObj->href[0]."'>".$this->simpleXmlObj->text[0].""; - return $this->wrapDiv($link)."\n"; - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Modules/ModLinkimage.php b/h-source/admin/Application/Modules/ModLinkimage.php deleted file mode 100644 index 8e49bbf..0000000 --- a/h-source/admin/Application/Modules/ModLinkimage.php +++ /dev/null @@ -1,18 +0,0 @@ -getHtmlClass()." href='".$this->simpleXmlObj->href[0]."'>widthPropertyString().$this->heightPropertyString().$this->titlePropertyString()." src='".$this->simpleXmlObj->src[0]."'>"; - return $this->wrapDiv($link)."\n"; - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Modules/ModRaw.php b/h-source/admin/Application/Modules/ModRaw.php deleted file mode 100644 index 4ed3226..0000000 --- a/h-source/admin/Application/Modules/ModRaw.php +++ /dev/null @@ -1,18 +0,0 @@ -simpleXmlObj->text[0]; - return $this->wrapDiv($link)."\n"; - } - -} \ No newline at end of file diff --git a/h-source/admin/Application/Modules/index.html b/h-source/admin/Application/Modules/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Application/Modules/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Application/Strings/Lang/It/DbCondStrings.php b/h-source/admin/Application/Strings/Lang/It/DbCondStrings.php deleted file mode 100644 index 4c985cd..0000000 --- a/h-source/admin/Application/Strings/Lang/It/DbCondStrings.php +++ /dev/null @@ -1,17 +0,0 @@ -Il valore del campo ". $field ." è già presente. Per favore scegline un altro.
              \n"; - } - -} diff --git a/h-source/admin/Application/Strings/Lang/It/ModelStrings.php b/h-source/admin/Application/Strings/Lang/It/ModelStrings.php deleted file mode 100644 index e02013b..0000000 --- a/h-source/admin/Application/Strings/Lang/It/ModelStrings.php +++ /dev/null @@ -1,19 +0,0 @@ - "
              Errore nella query: contatta l'amministratore!
              \n", - "executed" => "
              operazione eseguita!
              \n", - "associate" => "
              Problema di integrità referenziale: il record è associato ad un record di una tabella figlia. Devi prima rompere l'associazione.
              \n", - "no-id" => "
              Non è definito alcun id della query
              \n", - "not-linked" => "
              Il record non è associato, non puoi dissociarlo
              ", - "linked" => "
              Il record è già associato, non puoi associarlo un'altra volta
              " - ); - -} diff --git a/h-source/admin/Application/Strings/Lang/It/UploadStrings.php b/h-source/admin/Application/Strings/Lang/It/UploadStrings.php deleted file mode 100644 index 57bcda6..0000000 --- a/h-source/admin/Application/Strings/Lang/It/UploadStrings.php +++ /dev/null @@ -1,26 +0,0 @@ - "
              Errore: verificare i permessi del file/directory
              \n", - "executed" => "
              Operazione eseguita!
              \n", - "not-child" => "
              La cartella selezionata non è una sotto directory della directory base
              \n", - "not-dir" => "
              La cartella selezionata non è una directory
              \n", - "not-empty" => "
              La cartella selezionata non è vuota
              \n", - "no-folder-specified" => "
              Non è stata specificata alcuna cartella
              \n", - "not-writable" => "
              La cartella non è scrivibile
              \n", - "not-writable-file" => "
              Il file non è scrivibile
              \n", - "dir-exists" => "
              Esiste già una directory con lo stesso nome
              \n", - "no-upload-file" => "
              Non c'è alcun file di cui fare l'upload
              \n", - "size-over" => "
              La dimensione del file è troppo grande
              \n", - "not-allowed-ext" => "
              L'estensione del file che vuoi caricare non è consentita
              \n", - "file-exists" => "
              Esiste già un file con lo stesso nome
              \n", - ); - -} diff --git a/h-source/admin/Application/Strings/Lang/It/ValCondStrings.php b/h-source/admin/Application/Strings/Lang/It/ValCondStrings.php deleted file mode 100644 index a54c650..0000000 --- a/h-source/admin/Application/Strings/Lang/It/ValCondStrings.php +++ /dev/null @@ -1,69 +0,0 @@ -". $element ." non è stato definito
              \n"; - } - - //if the elements are not equal - public function getNotEqualResultString($element) - { - return "
              Differenti valori: $element
              \n"; - } - - //if the element is not alphabetic - public function getNotAlphabeticResultString($element) - { - return "
              ".$element." deve essere una stringa di soli caratteri alfabetici
              \n"; - } - - //if the element is not alphanumeric - public function getNotAlphanumericResultString($element) - { - return "
              ".$element." deve essere una stringa di soli caratteri alfanumerici
              \n"; - } - - //if the element is not a decimal digit - public function getNotDecimalDigitResultString($element) - { - return "
              ".$element." deve essere una stringa di soli numeri decimali
              \n"; - } - - //if the element has the mail format - public function getNotMailFormatResultString($element) - { - return "
              ".$element." non sembra un indirizzo e-mail
              \n"; - } - - //if the element is numeric - public function getNotNumericResultString($element) - { - return "
              ".$element." deve essere un numero
              \n"; - } - - //if the element (string) length exceeds the value of characters (defined by $maxLength) - public function getLengthExceedsResultString($element,$maxLength) - { - return "
              ".$element." non deve essere composto da più di $maxLength caratteri
              \n"; - } - - //if the element is one of the strings indicated by $stringList (a comma-separated list of strings) - public function getIsForbiddenStringResultString($element,$stringList) - { - return "
              ".$element." non può assumere uno dei seguenti valori: $stringList
              \n"; - } - - //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings) - public function getIsNotStringResultString($element,$stringList) - { - return "
              ".$element." deve assumere uno dei seguenti valori: $stringList
              \n"; - } -} diff --git a/h-source/admin/Application/Strings/Lang/It/index.html b/h-source/admin/Application/Strings/Lang/It/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Application/Strings/Lang/It/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Application/Strings/Lang/index.html b/h-source/admin/Application/Strings/Lang/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Application/Strings/Lang/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Application/Strings/index.html b/h-source/admin/Application/Strings/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Application/Strings/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Application/Views/Adminboxes/main.php b/h-source/admin/Application/Views/Adminboxes/main.php deleted file mode 100644 index 7d71709..0000000 --- a/h-source/admin/Application/Views/Adminboxes/main.php +++ /dev/null @@ -1,25 +0,0 @@ - - -. - -?> - - \ No newline at end of file diff --git a/h-source/admin/Application/Views/Admindeletion/main.php b/h-source/admin/Application/Views/Admindeletion/main.php deleted file mode 100644 index 7d71709..0000000 --- a/h-source/admin/Application/Views/Admindeletion/main.php +++ /dev/null @@ -1,25 +0,0 @@ - - -. - -?> - - \ No newline at end of file diff --git a/h-source/admin/Application/Views/Adminhardware/ask.php b/h-source/admin/Application/Views/Adminhardware/ask.php deleted file mode 100644 index 1368dca..0000000 --- a/h-source/admin/Application/Views/Adminhardware/ask.php +++ /dev/null @@ -1,53 +0,0 @@ - - -. - -?> - - - -
              - - -
              -
              - id hardware to delete: -
              -
              - requested by: -
              -
              - at: -
              -
              - why: -
              -
              - hardware duplicated: -
              -
              - message: -
              -
              - -
              \ No newline at end of file diff --git a/h-source/admin/Application/Views/Adminhardware/main.php b/h-source/admin/Application/Views/Adminhardware/main.php deleted file mode 100644 index 7d71709..0000000 --- a/h-source/admin/Application/Views/Adminhardware/main.php +++ /dev/null @@ -1,25 +0,0 @@ - - -. - -?> - - \ No newline at end of file diff --git a/h-source/admin/Application/Views/Adminhistory/main.php b/h-source/admin/Application/Views/Adminhistory/main.php deleted file mode 100644 index 7d71709..0000000 --- a/h-source/admin/Application/Views/Adminhistory/main.php +++ /dev/null @@ -1,25 +0,0 @@ - - -. - -?> - - \ No newline at end of file diff --git a/h-source/admin/Application/Views/Adminissues/main.php b/h-source/admin/Application/Views/Adminissues/main.php deleted file mode 100644 index 1df2110..0000000 --- a/h-source/admin/Application/Views/Adminissues/main.php +++ /dev/null @@ -1,36 +0,0 @@ - - -. - -?> - - - - \ No newline at end of file diff --git a/h-source/admin/Application/Views/Adminmessages/main.php b/h-source/admin/Application/Views/Adminmessages/main.php deleted file mode 100644 index 0ce6983..0000000 --- a/h-source/admin/Application/Views/Adminmessages/main.php +++ /dev/null @@ -1,35 +0,0 @@ - - -. - -?> - - - - \ No newline at end of file diff --git a/h-source/admin/Application/Views/Adminnews/main.php b/h-source/admin/Application/Views/Adminnews/main.php deleted file mode 100644 index 5b603f2..0000000 --- a/h-source/admin/Application/Views/Adminnews/main.php +++ /dev/null @@ -1,35 +0,0 @@ - - -. - -?> - - - - \ No newline at end of file diff --git a/h-source/admin/Application/Views/Adminparams/form.php b/h-source/admin/Application/Views/Adminparams/form.php deleted file mode 100755 index 7d71709..0000000 --- a/h-source/admin/Application/Views/Adminparams/form.php +++ /dev/null @@ -1,25 +0,0 @@ - - -. - -?> - - \ No newline at end of file diff --git a/h-source/admin/Application/Views/Adminpassword/form.php b/h-source/admin/Application/Views/Adminpassword/form.php deleted file mode 100755 index 640b6e5..0000000 --- a/h-source/admin/Application/Views/Adminpassword/form.php +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/h-source/admin/Application/Views/Adminregusers/associate.php b/h-source/admin/Application/Views/Adminregusers/associate.php deleted file mode 100644 index 9350d3a..0000000 --- a/h-source/admin/Application/Views/Adminregusers/associate.php +++ /dev/null @@ -1,54 +0,0 @@ - - -. - -?> - - - - - -
              - Associate the user to some groups:

              -
              - - - - - '> - -
              - -

              -
              - The user is inserted inside the following Groups: -
                - -
              • - -
              -
              \ No newline at end of file diff --git a/h-source/admin/Application/Views/Adminregusers/main.php b/h-source/admin/Application/Views/Adminregusers/main.php deleted file mode 100644 index 7d71709..0000000 --- a/h-source/admin/Application/Views/Adminregusers/main.php +++ /dev/null @@ -1,25 +0,0 @@ - - -. - -?> - - \ No newline at end of file diff --git a/h-source/admin/Application/Views/Admintalk/main.php b/h-source/admin/Application/Views/Admintalk/main.php deleted file mode 100644 index 7d71709..0000000 --- a/h-source/admin/Application/Views/Admintalk/main.php +++ /dev/null @@ -1,25 +0,0 @@ - - -. - -?> - - \ No newline at end of file diff --git a/h-source/admin/Application/Views/Adminusers/associate.php b/h-source/admin/Application/Views/Adminusers/associate.php deleted file mode 100644 index b0f6672..0000000 --- a/h-source/admin/Application/Views/Adminusers/associate.php +++ /dev/null @@ -1,54 +0,0 @@ - - -. - -?> - - - - - -
              - Associate the user to some groups:

              -
              - - - - - '> - -
              - -

              -
              - The user is inserted inside the following Groups: -
                - -
              • - -
              -
              \ No newline at end of file diff --git a/h-source/admin/Application/Views/Adminusers/forceout.php b/h-source/admin/Application/Views/Adminusers/forceout.php deleted file mode 100755 index f4b901d..0000000 --- a/h-source/admin/Application/Views/Adminusers/forceout.php +++ /dev/null @@ -1,29 +0,0 @@ - - -. - -?> - - - - diff --git a/h-source/admin/Application/Views/Adminusers/login.php b/h-source/admin/Application/Views/Adminusers/login.php deleted file mode 100755 index c005f35..0000000 --- a/h-source/admin/Application/Views/Adminusers/login.php +++ /dev/null @@ -1,45 +0,0 @@ - - -. - -?> - - - -
              - - - - - - - - - - - -
              Username
              Password
              - - -
              diff --git a/h-source/admin/Application/Views/Adminusers/logout.php b/h-source/admin/Application/Views/Adminusers/logout.php deleted file mode 100755 index 81ec4db..0000000 --- a/h-source/admin/Application/Views/Adminusers/logout.php +++ /dev/null @@ -1,29 +0,0 @@ - - -. - -?> - -
              -
              - - -
              \ No newline at end of file diff --git a/h-source/admin/Application/Views/Adminusers/main.php b/h-source/admin/Application/Views/Adminusers/main.php deleted file mode 100644 index 7d71709..0000000 --- a/h-source/admin/Application/Views/Adminusers/main.php +++ /dev/null @@ -1,25 +0,0 @@ - - -. - -?> - - \ No newline at end of file diff --git a/h-source/admin/Application/Views/footer_back.php b/h-source/admin/Application/Views/footer_back.php deleted file mode 100755 index fa9269c..0000000 --- a/h-source/admin/Application/Views/footer_back.php +++ /dev/null @@ -1,27 +0,0 @@ - - -. - -?> - -
              - - diff --git a/h-source/admin/Application/Views/header_back.php b/h-source/admin/Application/Views/header_back.php deleted file mode 100755 index 862847d..0000000 --- a/h-source/admin/Application/Views/header_back.php +++ /dev/null @@ -1,94 +0,0 @@ - - - -. - -?> - - - Admin - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
              - diff --git a/h-source/admin/Application/Views/panel.php b/h-source/admin/Application/Views/panel.php deleted file mode 100755 index 1fff0b6..0000000 --- a/h-source/admin/Application/Views/panel.php +++ /dev/null @@ -1,55 +0,0 @@ - - -. - -?> - - \ No newline at end of file diff --git a/h-source/admin/Application/index.html b/h-source/admin/Application/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Application/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/COPYRIGHT.txt b/h-source/admin/COPYRIGHT.txt deleted file mode 100755 index 63dbdc9..0000000 --- a/h-source/admin/COPYRIGHT.txt +++ /dev/null @@ -1,24 +0,0 @@ -EasyGiant is a PHP framework for creating and managing dynamic content -Copyright (C) 2009 - 2010 Antonio Gallo - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - - -EasyGiant includes works distributed under the licenses listed below. - -FreeFont -------- -License: GNU GPL version 3 or later -Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -link: http://savannah.gnu.org/projects/freefont/ diff --git a/h-source/admin/Config/Autoload.php b/h-source/admin/Config/Autoload.php deleted file mode 100644 index 56bb9f6..0000000 --- a/h-source/admin/Config/Autoload.php +++ /dev/null @@ -1,23 +0,0 @@ - -The folowing list cites the other contributors that contributed to -particular ISO 10646 blocks. - -* URW++ Design & Development GmbH - - Basic Latin (U+0041-U+007A) - Latin-1 Supplement (U+00C0-U+00FF) (most) - Latin Extended-A (U+0100-U+017F) - Spacing Modifier Letters (U+02B0-U+02FF) - Mathematical Operators (U+2200-U+22FF) (parts) - Block Elements (U+2580-U+259F) - Dingbats (U+2700-U+27BF) - -* Yannis Haralambous and John - Plaice - - Latin Extended-B (U+0180-U+024F) - IPA Extensions (U+0250-U+02AF) - Greek (U+0370-U+03FF) - Armenian (U+0530-U+058F) - Hebrew (U+0590-U+05FF) - Arabic (U+0600-U+06FF) - Currency Symbols (U+20A0-U+20CF) - Arabic Presentation Forms-A (U+FB50-U+FDFF) - Arabic Presentation Forms-B (U+FE70-U+FEFF) - -* Young U. Ryu - - Arrows (U+2190-U+21FF) - Mathematical Symbols (U+2200-U+22FF) - Mathematical Alphanumeric Symbols (U+1D400-U+1D7FF) - -* Valek Filippov - - Cyrillic (U+0400-U+04FF) - -* Wadalab Kanji Comittee - - Hiragana (U+3040-U+309F) - Katakana (U+30A0-U+30FF) - -* Angelo Haritsis - - Greek (U+0370-U+03FF) - -* Yannis Haralambous and Virach Sornlertlamvanich - - Thai (U+0E00-U+0E7F) - -* Shaheed R. Haque - - Bengali (U+0980-U+09FF) - -* Sam Stepanyan - - Armenian (U+0530-U+058F) - -* Mohamed Ishan - - Thaana (U+0780-U+07BF) - -* Sushant Kumar Dash - - Oriya (U+0B00-U+0B7F) - -* Harsh Kumar - - Devanagari (U+0900-U+097F) - Bengali (U+0980-U+09FF) - Gurmukhi (U+0A00-U+0A7F) - Gujarati (U+0A80-U+0AFF) - -* Prasad A. Chodavarapu - - Telugu (U+0C00-U+0C7F) - -* Frans Velthuis and Anshuman Pandey - - - Devanagari (U+0900-U+097F) - -* Hardip Singh Pannu - - Gurmukhi (U+0A00-U+0A7F) - -* Jeroen Hellingman - - Oriya (U+0B00-U+0B7F) - Malayalam (U+0D00-U+0D7F) - -* Thomas Ridgeway - - Tamil (U+0B80-U+0BFF) - -* Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>, - Prof. Dr. Manfred Kudlek , Olaf - Kummer , and Jochen Metzinger - - Ethiopic (U+1200-U+137F) - -* Maxim Iorsh - - Hebrew (U+0590-U+05FF) - -* Vyacheslav Dikonov - - Syriac (U+0700-U+074A) - Braille (U+2800-U+28FF) - -* Panayotis Katsaloulis - - Greek Extended (U+1F00-U+1FFF) - -* M.S. Sridhar - - Devanagari (U+0900-U+097F) - Bengali (U+0980-U+09FF) - Gurmukhi (U+0A00-U+0A7F) - Gujarati (U+0A80-U+0AFF) - Oriya (U+0B00-U+0B7F) - Tamil (U+0B80-U+0BFF) - Telugu (U+0C00-U+0C7F) - Kannada (U+0C80-U+0CFF) - Malayalam (U+0D00-U+0D7F) - -* DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt - - - Sinhala (U+0D80-U+0DFF) - -* Dan Shurovich Chirkov - - Cyrillic (U+0400-U+04FF) - -* Abbas Izad - - Arabic (U+0600-U+06FF) - Arabic Presentation Forms-A (U+FB50-U+FDFF) - Arabic Presentation Forms-B (U+FE70-U+FEFF) - -* Denis Jacquerye - - Latin Extended-B (U+0180-U+024F) - IPA Extensions (U+0250-U+02AF) - -* K.H. Hussain and R. Chitrajan - - Malayalam (U+0D00-U+0D7F) - -* Solaiman Karim and Omi Azad - - Bengali (U+0980-U+09FF) - -* Sonali Sonania and Monika Shah - - - Devanagari (U+0900-U+097F) - Gujarati (U+0A80-U+0AFF) - -* Pravin Satpute , Bageshri Salvi - , Rahul Bhalerao and Sandeep Shedmake - - Devanagari (U+0900-U+097F) - Gujarati (U+0A80-U+0AFF) - Oriya (U+0B00-U+0B7F) - Malayalam (U+0D00-U+0D7F) - Tamil (U+0B80-U+0BFF) - -* Kulbir Singh Thind - - Gurmukhi (U+0A00-U+0A7F) - -* Gia Shervashidze - - Georgian (U+10A0-U+10FF) - -* Daniel Johnson - - Cherokee (U+13A0-U+13FF) - -* George Douros - - Gothic (U+10330-U+1034F) - Phoenecian (U+10900-U+1091F) - Byzantine Musical Symbols (U+1D000-U+1D0FF) - Western Musical Symbols (U+1D100-U+1D1DF) - Mathematical Alphanumeric Symbols (U+1D400-U+1D7FF) - Mah Jong Tiles (U+1F000-U+1F02B) - Dominoes (U+1F030-U+1F093) - -* Steve White - Coptic (U+2C80-U+2CFF) - -* Primož Peterlin - maintained FreeFont for several years, and is thanked for all his work. - -Please see the CREDITS file for details on who contributed particular -subsets of the glyphs in font files. - --------------------------------------------------------------------------- -$Id: AUTHORS,v 1.18 2009/01/04 15:57:54 Stevan_White Exp $ diff --git a/h-source/admin/External/Fonts/FreeFont/COPYING b/h-source/admin/External/Fonts/FreeFont/COPYING deleted file mode 100644 index 94a9ed0..0000000 --- a/h-source/admin/External/Fonts/FreeFont/COPYING +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/h-source/admin/External/Fonts/FreeFont/CREDITS b/h-source/admin/External/Fonts/FreeFont/CREDITS deleted file mode 100644 index 0f47440..0000000 --- a/h-source/admin/External/Fonts/FreeFont/CREDITS +++ /dev/null @@ -1,528 +0,0 @@ --*- mode:text; coding:utf-8; -*- - GNU FreeFont Credits - ==================== - -This file lists contributors and contributions to the GNU FreeFont project. - - -* URW++ Design & Development GmbH - -URW++ donated a set of 35 core PostScript Type 1 fonts to the -Ghostscript project , to be available -under the terms of GNU General Public License (GPL). - - Basic Latin (U+0041-U+007A) - Latin-1 Supplement (U+00C0-U+00FF) - Latin Extended-A (U+0100-U+017F) - Spacing Modifier Letters (U+02B0-U+02FF) - Mathematical Operators (U+2200-U+22FF) - Block Elements (U+2580-U+259F) - Dingbats (U+2700-U+27BF) - - -* Yannis Haralambous and John - Plaice - -Yannis Haralambous and John Plaice are the authors of Omega typesetting -system, . Omega is an extension of TeX. -Its first release, aims primarily at improving TeX's multilingual abilities. -In Omega all characters and pointers into data-structures are 16-bit wide, -instead of 8-bit, thereby eliminating many of the trivial limitations of TeX. -Omega also allows multiple input and output character sets, and uses -programmable filters to translate from one encoding to another, to perform -contextual analysis, etc. Internally, Omega uses the universal 16-bit Unicode -standard character set, based on ISO-10646. These improvements not only make -it a lot easier for TeX users to cope with multiple or complex languages, -like Arabic, Indic, Khmer, Chinese, Japanese or Korean, in one document, but -will also form the basis for future developments in other areas, such as -native color support and hypertext features. ... Fonts for UT1 (omlgc family) -and UT2 (omah family) are under development: these fonts are in PostScript -format and visually close to Times and Helvetica font families. -Omega fonts are available subject to GPL - - Latin Extended-B (U+0180-U+024F) - IPA Extensions (U+0250-U+02AF) - Greek (U+0370-U+03FF) - Armenian (U+0530-U+058F) - Hebrew (U+0590-U+05FF) - Arabic (U+0600-U+06FF) - Currency Symbols (U+20A0-U+20CF) - Arabic Presentation Forms-A (U+FB50-U+FDFF) - Arabic Presentation Forms-B (U+FE70-U+FEFF) - -Current info: - -* Valek Filippov - -Valek Filippov added Cyrillic glyphs and composite Latin Extended A to -the whole set of the abovementioned URW set of 35 PostScript core fonts, -. The fonts are available under GPL. - - Latin Extended-A (U+0100-U+017F) - Cyrillic (U+0400-U+04FF) - - -* Wadalab Kanji Comittee - -Between April 1990 and March 1992, Wadalab Kanji Comittee put together -a series of scalable font files with Japanese scripts, in four forms: -Sai Micho, Chu Mincho, Cho Kaku and Saimaru. The font files are -written in custom file format, while tools for conversion into -Metafont and PostScript Type 1 are also supplied. The Wadalab Kanji -Comittee has later been dismissed, and the resulting files can be now -found on the FTP server of the Depertment of Mathematical Engineering -and Information Physics, Faculty of Engineering, University of Tokyo -. - - Hiragana (U+3040-U+309F) - Katakana (U+30A0-U+30FF) - - -* Young U. Ryu - -Young Ryu is the author of Txfonts, a set of mathematical symbols -designed to accompany text typeset in Times or its variants. In the -documentation, Young adresses the design of mathematical symbols: "The -Adobe Times fonts are thicker than the CM fonts. Designing math fonts -for Times based on the rule thickness of Times = , , + , / , < , -etc. would result in too thick math symbols, in my opinion. In the TX -fonts, these glyphs are thinner than those of original Times -fonts. That is, the rule thickness of these glyphs is around 85% of -that of the Times fonts, but still thicker than that of the CM fonts." -TX fonts are are distributed under the GNU public license (GPL). -. - - Arrows (U+2190-U+21FF) - Mathematical Symbols (U+2200-U+22FF) - - -* Angelo Haritsis - -Angelo Haritsis has compiled a set of Greek Type 1 fonts, available on -. -The glyphs from this source has been used to compose Greek glyphs in -FreeSans and FreeMono. - -Angelo's licence says: "You can enjoy free use of these fonts for -educational or commercial purposes. All derived works should include -this paragraph. If you want to change something please let me have -your changes (via email) so that they can go into the next -version. You can also send comments etc to the above address." - - Greek (U+0370-U+03FF) - - -* Yannis Haralambous and Virach Sornlertlamvanich - -In 1999, Yannis Haralambous and Virach Sornlertlamvanich made a set of -glyphs covering the Thai national standard Nf3, in both upright and -slanted shape. The collection of glyphs have been made part of GNU -intlfonts 1.2 package and is available under the GPL at -. - - Thai (U+0E00-U+0E7F) - - -* Shaheed R. Haque - -Shaheed Haque has developed a basic set of basic Bengali glyphs -(without ligatures), using ISO10646 encoding. They are available under -the XFree86 license at . - -Copyright (C) 2001 S.R.Haque . All Rights Reserved. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL S.R.HAQUE BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, -ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of S.R.Haque shall not be -used in advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization from -S.R.Haque. - - Bengali (U+0980-U+09FF) - - -* Sam Stepanyan - -Sam Stepanyan created a set of Armenian sans serif glyphs visually -compatible with Helvetica or Arial. Available on -. On -2002-01-24, Sam writes: "Arial Armenian font is free for -non-commercial use, so it is OK to use under GPL license." - - Armenian (U+0530-U+058F) - - -* Mohamed Ishan - -Mohamed Ishan has started a Thaana Unicode Project - and among other things created a -couple of Thaana fonts, available under FDL or BDF license. - - Thaana (U+0780-U+07BF) - - -* Sushant Kumar Dash (*) - -Sushant Dash has created a font in his mother tongue, Oriya. As he -states on his web page : -"Please feel free to foreword this mail to your Oriya friends. No -copyright law is applied for this font. It is totally free!!! Feel -free to modify this using any font editing tools. This is designed for -people like me, who are away from Orissa and want to write letters -home using Computers, but suffer due to unavailability of Oriya -fonts.(Or the cost of the available packages are too much)." - - Oriya (U+0B00-U+0B7F) - - -* Harsh Kumar - -Harsh Kumar has started BharatBhasha - -an effort to provide "FREE software, Tutorial, Source Codes -etc. available for working in Hindi, Marathi, Gujarati, Gurmukhi and -Bangla. You can type text, write Web pages or develop Indian Languages -Applications on Windows and on Linux. We also offer FREE help to -users, enthusiasts and software developers for their work in Indian -languages." - - Devanagari (U+0900-U+097F) - Bengali (U+0980-U+09FF) - Gurmukhi (U+0A00-U+0A7F) - Gujarati (U+0A80-U+0AFF) - - -* Prasad A. Chodavarapu - -Prasad A. Chodavarapu created Tikkana, a Telugu font available in Type -1 and TrueType format on . -Tikkana exceeds the Unicode Telugu range with some composite glyphs. -Available under the GNU General Public License. - - Telugu (U+0C00-U+0C7F) - - -* Frans Velthuis and Anshuman Pandey - - -In 1991, Frans Velthuis from the Groningen University, The -Netherlands, released a Devanagari font as Metafont source, available -under the terms of GNU GPL. Later, Anshuman Pandey from the Washington -University, Seattle, USA, took over the maintenance of font. Fonts can -be found on CTAN, . I -converted the font to Type 1 format using Péter Szabó's TeXtrace -program and removed some -redundant control points with PfaEdit. - - Devanagari (U+0900-U+097F) - - -* Hardip Singh Pannu - -In 1991, Hardip Singh Pannu has created a free Gurmukhi TrueType font, -available as regular, bold, oblique and bold oblique form. Its license -says "Please remember that these fonts are copyrighted (by me) and are -for non-profit use only." - - Gurmukhi (U+0A00-U+0A7F) - - -* Jeroen Hellingman - -Jeroen Hellingman created a set of Malayalam metafonts in 1994, and a -set of Oriya metafonts in 1996. Malayalam fonts were created as -uniform stroke only, while Oriya metafonts exist in both uniform and -modulated stroke. From private communication: "It is my intention to -release the fonts under GPL, but not all copies around have this -notice on them." Metafonts can be found on CTAN, - and -. - - Oriya (U+0B00-U+0B7F) - Malayalam (U+0D00-U+0D7F) - - -* Thomas Ridgeway <> (*) - -Thomas Ridgeway, then at the Humanities And Arts Computing Center, -Washington University, Seattle, USA, (now defunct), created a Tamil -metafont in 1990. Anshuman Pandey from the same university took over -the maintenance of font. Fonts can be found at CTAN, -. - - Tamil (U+0B80-U+0BFF) - - -* Berhanu Beyene <1beyene AT informatik.uni-hamburg.de>, - Prof. Dr. Manfred Kudlek , Olaf - Kummer , and Jochen Metzinger - -Beyene, Kudlek, Kummer and Metzinger from the Theoretical Foundations -of Computer Science, University of Hamburg, prepared a set of Ethiopic -metafonts, found on -. They also -maintain home page on the Ethiopic font project, -, -and can be reached at . The current -version of fonts is 0.7 (1998), and they are released under GNU GPL. I -converted the fonts to Type 1 format using Péter Szabó's TeXtrace-A -program and removed some -redundant control points with PfaEdit. - - Ethiopic (U+1200-U+137F) - - -* Maxim Iorsh - -In 2002, Maxim Iorsh started the Culmus project, aiming at providing -Hebrew-speaking Linux and Unix community with a basic collection of -Hebrew fonts for X Windows. The fonts are visually compatible with -URW++ Century Schoolbook L, URW++ Nimbus Sans L and URW++ Nimbus Mono -L families, respectively, and are released under GNU GPL license. See -also . - - Hebrew (U+0590-U+05FF) - - -* Panayotis Katsaloulis - -Panayotis Katsaloulis helped fixing Greek accents in the Greek -Extended area. - - Greek Extended (U+1F00-U+1FFF) - - -* Vyacheslav Dikonov - -Vyacheslav Dikonov made a Braille unicode font that could be merged -with the UCS fonts to fill the 2800-28FF range completely. (uniform -scaling is possible to adapt it to any cell size). He also contributed -a free syriac font, whose glyphs (about half of them) are borrowed -from the "Carlo Ator" font freely downloadable from -. Vyacheslav also filled in a few missing -spots in the U+2000-U+27FF area, e.g. the box drawing section, sets of -subscript and superscript digits and capital Roman numbers. - - Syriac (U+0700-U+074A) - Box Drawing (U+2500-U+257F) - Braille (U+2800-U+28FF) - - -* M.S. Sridhar - -M/S Cyberscape Multimedia Limited, Mumbai, developers of Akruti -Software for Indian Languages (http://www.akruti.com/), have released -a set of TTF fonts for nine Indian scripts (Devanagari, Gujarati, -Telugu, Tamil, Malayalam, Kannada, Bengali, Oriya, and Gurumukhi) -under the GNU General Public License (GPL). You can download the fonts -from the Free Software Foundation of India WWW site -(http://www.gnu.org.in/akruti-fonts/) or from the Akruti website. - -For any further information or assistance regarding these fonts, -please contact mssridhar AT vsnl.com. - - Devanagari (U+0900-U+097F) - Bengali (U+0980-U+09FF) - Gurmukhi (U+0A00-U+0A7F) - Gujarati (U+0A80-U+0AFF) - Oriya (U+0B00-U+0B7F) - Tamil (U+0B80-U+0BFF) - Telugu (U+0C00-U+0C7F) - Kannada (U+0C80-U+0CFF) - Malayalam (U+0D00-U+0D7F) - - -* DMS Electronics, The Sri Lanka Tipitaka Project, and Noah Levitt - - -Noah Levitt found out that the Sinhalese fonts available on the site - are released under GNU GPL, or, -precisely, "Public Domain under GNU Licence Produced by DMS -Electronics for The Sri Lanka Tipitaka Project" (taken from the font -comment), and took the effort of recoding the font to Unicode. - - Sinhala (U+0D80-U+0DFF) - - -* Daniel Shurovich Chirkov - -Dan Chirkov updated the FreeSerif font with the missing Cyrillic -glyphs needed for conformance to Unicode 3.2. The effort is part of -the Slavjanskij package for Mac OS X, -. - - Cyrillic (U+0400-U+04FF) - - -* Denis Jacquerye - -Denis Jacquerye added new glyphs and corrected existing ones in the -Latin Extended-B and IPA Extensions ranges. - - Latin Extended-B (U+0180-U+024F) - IPA Extensions (U+0250-U+02AF) - - -* K.H. Hussain and R. Chitrajan - -`Rachana' in Malayalam means `to write', `to create'. Rachana Akshara Vedi, -a team of socially committed information technology professionals and -philologists, has applied developments in computer technology and desktop -publishing to resurrect the Malayalam language from the disorder, -fragmentation and degeneration it had suffered since the attempt to adapt -the Malayalam script for using with a regular mechanical typewriter, which -took place in 1967-69. K.H. Hussein at the Kerala Forest Research Institute -has released "Rachana Normal" fonts with approximately 900 glyphs required -to typeset traditional Malayalam. R. Chitrajan apparently encoded the -glyphs in the OpenType table. - -In 2008, the Malayalam ranges in FreeSerif were updated under the advise -and supervision of Hiran Venugopalan of Swathanthra Malayalam Computing, -to reflect the revised edition Rachana_04. - - Malayalam (U+0D00-U+0D7F) - - -* Solaiman Karim - - Bengali (U+0980-U+09FF) - -Solaiman Karim has developed several OpenType Bangla fonts and -released them under GNU GPL on . - - -* Sonali Sonania and Monika Shah - - - Devanagari (U+0900-U+097F) - Gujarati (U+0A80-U+0AFF) - -Glyphs were drawn by Cyberscape Multimedia Ltd., #101,Mahalakshmi -Mansion 21st Main 22nd "A" Cross Banashankari 2nd stage Banglore -560070, India. Converted to OTF by IndicTrans Team, Powai, Mumbai, -lead by Prof. Jitendra Shah. Maintained by Monika Shah and Sonali -Sonania of janabhaaratii Team, C-DAC, Mumbai. This font is released -under GPL by Dr. Alka Irani and Prof Jitendra Shah, janabhaaratii -Team, C-DAC, Mumabi. janabhaaratii is localisation project at C-DAC -Mumbai (formerly National Centre for Software Technology); funded by -TDIL, Govt. of India. Contact:monika_shah AT lycos.com, -sonalisonania AT yahoo.com, jitendras AT vsnl.com, alka AT ncst.ernet.in. -website: www.janabhaaratii.org.in. - - -* Pravin Satpute , Bageshri Salvi - , Rahul Bhalerao and Sandeep Shedmake - - Devanagari (U+0900-U+097F) - Gujarati (U+0A80-U+0AFF) - Oriya (U+0B00-U+0B7F) - Malayalam (U+0D00-U+0D7F) - Tamil (U+0B80-U+0BFF) - -In December 2005 the team at www.gnowledge.org released a set of two -Unicode pan-Indic fonts: "Samyak" and "Samyak Sans". "Samyak" font -belongs to serif style and is an original work of the team; "Samyak -Sans" font belongs to sans serif style and is actually a compilation -of already released Indic fonts (Gargi, Padma, Mukti, Utkal, Akruti -and ThendralUni). Both fonts are based on Unicode standard. You can -download the font files (released under GNU/GPL License) from -http://www.gnowledge.org/Gnoware/localization/font.htm - - -* Kulbir Singh Thind - - Gurmukhi (U+0A00-U+0A7F) - -Dr. Kulbir Singh Thind designed a set of Gurmukhi Unicode fonts, -AnmolUni and AnmolUni-Bold, which are available under the terms of GNU -Generel Public Licens from the Punjabu Computing Resource Center, -http://guca.sourceforge.net/typography/fonts/anmoluni/. - - -* Gia Shervashidze - - Georgian (U+10A0-U+10FF) - -Starting in mid-1990s, Gia Shervashidze designed many -Unicode-compliant Georgian fonts: Times New Roman Georgian, Arial -Georgian, Courier New Georgian. His work on Georgian localization can -be reached at http://www.gia.ge/. - - -* Primož Peterlin - -Primož Peterlin filled in missing glyphs here and there (e.g. Latin -Extended-B and IPA Extensions ranges in the FreeMono familiy), and -created the following UCS blocks: - - Latin Extended-B (U+0180-U+024F) - IPA Extensions (U+0250-U+02AF) - Arrows (U+2190-U+21FF) - Box Drawing (U+2500-U+257F) - Block Elements (U+2580-U+259F) - Geometrical Shapes (U+25A0-U+25FF) - -* Mark Williamson - -Made the MPH 2 Damase font, from which - Hanunóo (U+1720-U+173F) - Buginese (U+1A00-U+1A1F) - Tai Le (U+1950-U+197F) - Ugaritic (U+10380-U+1039F) - Old Persian (U+103A0-U+103DF) - -* Jacob Poon - -Submitted a very thorough survey of glyph problems and other suggestions. - -* Alexey Kryukov - -Made the TemporaLCGUni fonts, based on the URW++ fonts, from which at one -point FreeSerif Cyrillic, and some of the Greek, was drawn. He also provided -valuable direction about Cyrillic and Greek typesetting. - -* George Douros - -The creator of several fonts focusing on ancient scripts and symbols. -Many of the glyphs are created by making outlines from scanned images -of ancient sources. - - Aegean: Phoenecian - Analecta: Gothic (U+10330-U+1034F) - Musical: Byzantine & Western - Unicode: many Miscellaneous Symbols, Miscellaneous Technical, - supplemental Symbols, and Mathematical Alphanumeric symbols, - Mah Jong, and the outline of the Domino. - -* Daniel Johnson - -Created by hand a Cherokee range specially for FreeFont to be "in line with -the classic Cherokee typefaces used in 19th century printing", but also to -fit well with ranges previously in FreeFont. - Cherokee (U+13A0-U+13FF) - -Notes: - -*: The glyph collection looks license-compatible, but its author has - not yet replied and agreed on their work being used in part of - this glyph collection. - --------------------------------------------------------------------------- -$Id: CREDITS,v 1.23 2009/01/04 15:57:54 Stevan_White Exp $ diff --git a/h-source/admin/External/Fonts/FreeFont/ChangeLog b/h-source/admin/External/Fonts/FreeFont/ChangeLog deleted file mode 100644 index d5345d0..0000000 --- a/h-source/admin/External/Fonts/FreeFont/ChangeLog +++ /dev/null @@ -1,4525 +0,0 @@ -$Id: ChangeLog,v 1.254 2009/01/04 16:12:59 Stevan_White Exp $ -2009-01-04 Stevan_White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Added 2009 to copyright dates - - * AUTHORS, CREDITS: - - Removed Glagolitic range author - - * FreeSans.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Added some TrueType names - -2009-01-01 Stevan_White - * FreeSerif.sfd: - - Removde Glagolitic range, since have not (yet) received OK from author. - - Added some TrueType Names - -2008-12-31 Stevan_White - * COPYING: - - Updated license to GPL v3 - -2008-12-30 Stevan_White - * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Oblique versions of Daniel Johnson's Cherokee. - - * FreeSerifBold.sfd: - - Cherokee Bold range from Daniel Johnson. - -2008-12-27 Stevan_White - * isMonoMono.py: - - 900 EM -> 800 - - * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd: - - Made glyphs to lie between -200 and 800 EM - - * isMonoMono.py: - - check that glyphs lie in vertical bounding boxes - - * FreeMono.sfd, FreeSerif.sfd: - - Extensible bracket characters didn't exactly line up. Fixed. - Mono: a couple of glyphs had gotten out of their bounding boxes again. - -2008-12-26 Stevan_White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Final pre-release cleanup - - * FreeSerif.sfd: - - Buginese vowel u was misnamed - - * FreeMono.sfd: - - Yatcyrillic somehow was a mark character ... fixed - - * FreeSans.sfd, FreeSansOblique.sfd: - - Had to un-link references in - Sans: uni02B2, uni02B5 - SansOblique: uni0363 - because validation of the TTF file said the glyph - "is drawn in wrong direction" - I would have preferred to have understand this... - - * Makefile: - - Added quick test for FontForge version. - - * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd: - - Removed kerning tables (?? what were they doing here anyway??) - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Kerning tables for Thai. - Handles one common case: short letter followed by a tall one with - an overhang to the left. - -2008-12-25 Stevan_White - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: - - More putzing with kerning tables - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Copied kerning classes - Serif -> SerifBold - SerifItalic -> SerifBoldItalic - Sans -> SansOblique SansBold SansBoldOblique - Some associated naming of characters, etc - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Additions and correction in Spacing Modifier letters and IPA Extensions - -2008-12-23 Stevan_White - * FreeSerif.sfd: - - Applied patch to Cherokee range - -2008-12-20 Stevan_White - * FreeSerif.sfd, FreeSerifItalic.sfd: - - Fixed kern classes that end in space (crashes FontForge) - - * FreeSerifItalic.sfd, FreeSerif.sfd: - - kerning - -2008-12-19 Stevan_White - * FreeSerifItalic.sfd: - - kerning - - * FreeSerif.sfd: - - kerning - Some adjustments to Glagolitc spacing, mark positioning - -2008-12-18 Stevan_White - * FreeSerif.sfd, FreeSerifItalic.sfd: - - kerning - -2008-12-17 Stevan_White - * FreeSerif.sfd, FreeSerifItalic.sfd: - - kerning - -2008-12-11 Stevan_White - * FreeSans.sfd, FreeSerif.sfd: - - kerning - -2008-12-10 Stevan_White - * FreeSans.sfd, FreeSansBold.sfd: - - kerning - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd: - - kerning - -2008-12-09 Stevan_White - * FreeSerif.sfd, FreeSerifItalic.sfd: - - kerning - -2008-12-08 Stevan_White - * FreeSansOblique.sfd: - - Slanted small final sigma. Remedies - bug #24993: U+03C2 "Greek small letter final sigma" not slanted in - Free Sans Oblique - https://savannah.gnu.org/bugs/index.php?24993 - -2008-12-07 Stevan_White - * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - kerning, etc - -2008-12-06 Stevan_White - * FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: - - kerning - Tweek in Sans having to do with addition of Latin Extended - -2008-12-05 Stevan_White - * FreeSansBold.sfd, FreeSansBoldOblique.sfd: - - Tweeks to Latin Extended Additional - - * FreeSansBoldOblique.sfd: - - Added Latin Extended Additional range - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Extra space at end of kern class names has bad effect on FornForge - script that try to run through kern classes. Some FontForge call - corrupts memory. - Got rid of extra space. - -2008-12-02 Stevan_White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Replaced U+0387 GREEK ANO TELEIA with top dot of colon. - See bug #24987: U+0387 GREEK ANO TELEIA too low - https://savannah.gnu.org/bugs/index.php?24987 - - * FreeSerif.sfd: - - more kerning in Cyrillic (broke into two tables of classes) - -2008-12-01 Stevan_White - * FreeSerif.sfd: - - tweeks to kernin - - * FreeSerifBoldItalic.sfd: - - kerning - -2008-11-30 Stevan_White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Kerning for Latin and Cyrillic fairly complete in Serif faces. - Complete in sense that it looks pretty good under Pango for - English French German Spanish Polish Czech Latvian - But have not done Vietnamese (will require many more entries). - I adjust roman and italic, then copy tables by hand to bold and - bolditalic. - Misgiving: bolditalic is much too crammed - Overall, I may have over-kerned. (A difficult temptation to master.) - - * FreeSerif.sfd, FreeSerifItalic.sfd: - - kerning - - * FreeSans.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: - - kerning - In Serif, modified widths of some extended latin glyphs - -2008-11-29 Stevan_White - * FreeSerif.sfd: - - Broke Latin kerning subtable into four, hoping it will be easier to - understand and maintain. - - * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, - FreeSerifItalic.sfd, FreeSerifBold.sfd, FreeSansOblique.sfd, - FreeSans.sfd: - - kerninig - -2008-11-28 Stevan_White - * FreeSans.sfd, FreeSerif.sfd: - - more kerning; - made guillemot narrower - - * FreeSansOblique.sfd, FreeSerif.sfd: - - previous commit was incomplete - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Adjusted width of single quotes (and apostrophe) to be "punctuation width" - More fiddling with kerning. - -2008-11-27 Stevan_White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: - - much fiddling with kerning - -2008-11-26 Stevan_White - * FreeSerifBold.sfd: - - Basic kerning, named main Cyrillic letters - - * FreeSerifItalic.sfd: - - Basic Cyrillic kerning - - * FreeSerif.sfd: - - Tweeks to Cyrillic kerning - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd, Makefile: - - Much fiddling with kerning, tables, and generating fonts whose kerning - tables work with OpenOffice. - -2008-11-24 Stevan_White - * FreeSerif.sfd: - - regularized padding in Miscellaneous symbols. - At least within related ranges tried to make similar. - Made to validate - -2008-11-23 Stevan_White - * FreeSerif.sfd: - - Filled out Miscellaneous Symbols. Used George Douros' Unicode font. - Completed Miscellaneous Symbols, with some drawings from George Douros' - Unicode Symbols, and some of mine. - - * FreeMono.sfd, FreeMonoOblique.sfd: - - Replaced Greek Exteded psili and dasia with scaled versions of the - "bent quote" mark. I think it's distinctive enough, but not so silly. - - Remedies bug #22997: Mono: Greek Extended psili is ugly - https://savannah.gnu.org/bugs/?22997 - - * FreeSerif.sfd: - - Made some recycling symbols - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Finished with Hebrew Pointed letters in all faces. - -2008-11-22 Stevan_White - * FreeSans.sfd: - - Fiddled with Hebrew Pointed letters - - * FreeSerifItalic.sfd: - - Marks for Vietnamese - - * FreeSerif.sfd, FreeSerifItalic.sfd: - - Letter pe had strange thick middle ear that looked awful. lamed had ben - bumped at some point. Fixed. Adjusted some of the points. - -2008-11-21 Stevan_White - * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - repairs to Pointed Hebrew - - * FreeSerif.sfd: - - Numeral line positioning marks for Gothic - - * FreeSerifItalic.sfd: - - Added Combining Marks for Symbols (some question about obliqueness of - some symbols) - Cleaned up some empty glyphs in Pointed Hebrew. - -2008-11-20 Stevan_White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Provided Hebrew pointed letters, with lookups, for all Serif faces. - -2008-11-19 Stevan_White - * FreeSerifBoldItalic.sfd: - - renamed Hebrew lookups - - * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Completed Hebrew in Bold faces. - - * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: - - More tweeks to Hebrew points - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: - - Adjustments corrections and additions to Hebrew points - -2008-11-18 Stevan_White - * FreeSansBold.sfd: - - Cleaned out a lot of ridiculous kernings - -2008-11-17 Stevan_White - * FreeSansBoldOblique.sfd: - - fiddled with Armenian ligatures - - * FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Added Armenian (with ligatures) to BoldOblique - Fiddled with character spacing - -2008-11-16 Stevan_White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Added U+01f9 and paragraph end marker to Georgian - Fiddled with Armenian ligatures - -2008-11-15 Stevan_White - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Another pass at letter spacing in Cyrillic. - Also went through ancient letters. - - Added Georgian paragraph separator 10FB - Added Georgian turned gan 10F9 (because it was easy) - - Re-worked letter spacing through modern Cyrillic range. - - * FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd: - - Letter spacing - -2008-11-14 Stevan_White - * FreeSerif.sfd: - - Added several characters to Cyrillic Extended-B - - * FreeSansBold.sfd, FreeSansBoldOblique.sfd: - - Made Cyrillic hooked e U+04BC-F to look less goofy. - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Based on assertion on Pechatnyj Dvor's web site, Cyrillic Fita - U+0472-3 and "Barred O" U+04E8-9 are different styles the same letter, - and the fact that the tilde in the O never looked good in Sans, I - made them all barred O's. - - * FreeSerif.sfd: - - Added Cyrillic Yn, yn (U+a65e-f) - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Synced up Cyrillic and Combining Diacritics ranges, - Couple of tweeks in Gujarati to make TT validate - - * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Changes to older Cyrillic letters, in response to further information. - Made omegas, omegas with titlo, and OT to all be of the same size and - shape in Serif. - Un-linked Cyrillic Psi and psi from Greek, made squarer versions. - - Some more Cyrillic diacritical marks in Sans. Re-worked U+04bc-f . - Experimenting with mark positioning for Cyrillic - -2008-11-12 Stevan_White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Strove to make Euro look more like the EC logo design, while making - glyph fit better with the design of its face. Bug #3576: Euro design - https://savannah.gnu.org/bugs/?23576 - - * FreeSans.sfd, FreeSerif.sfd: - - Adjustments mostly to GPOS tables having to do with Vietnamese marks. - The WAZU Vietnamese test page looks pretty good in Sans now. - Still not thrilled with below-dot when it appears with a mark over - e.g. U+0102. Pango positions one or the other but not both. - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Extensive modification of GPOS lookup tables for mark positioning. - I think they're now all functional (except styled Mono faces have none). - Also added lots of marks to faces that didn't have them, and also - fiddled with Combining Diacritical Marks. - -2008-11-10 Stevan_White - * FreeSerif.sfd: - - Made one combining mark really combining - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Made a few combining characters to be zero-width in Mono, - Added them to other styles. - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Figured out why below marks in Thai weren't working in the lowest - letters. I think Pango and other font renderers ignore 'blwm'. - However, 'mark' works. - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Tweeks to Thai marks - -2008-11-09 Stevan_White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Several bugfixes in Thai, mostly having to do with mark placement and - ligatures. Implemented ru-saraaa and lu-saraaa with ligatures. - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - added and named dottedcircle (used by Pango to render - combining mark base) - - * FreeSerif.sfd: - - Tweeks to Coptic, after viewing more papyrus samples and web pages. - - * FreeSerif.sfd: - - Weight of Coptic small letters made to match that of Latin and Greek ones. - -2008-11-08 Stevan_White - * FreeSerif.sfd: - - Made Coptic to comply better with - http://www.wazu.jp/gallery/Test_Coptic.html - Made a flourish at foot of letters with long diagonal. - - More tweeks to Coptic; put in a mark lookup table. - - Note: for small letters I made scaled references to captials. - Results in those letters looking quite light next to the capitals and - next to small Latin letters. Also, there are a few variant forms for - capitals (Unicode samples don't show this). It would be good to - re-work - - Added Coptic alphabet in u+2C80-2CB1 and u+03E2-u+03EF, drawn/built by - me, based on Unicode samples, TeX font copte, and scans at WikiPedia. - -2008-11-07 Stevan_White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Further tweeks to dieresis in Greek and Cyrillic - - * FreeSerif.sfd: - - replaced Greek I dieresis with references, tweeked height of dieresis. - -2008-11-04 Stevan_White - * FreeSerif.sfd: - - Added a few Cyrillic Extended-B letters seen in web pages while looking - for Glagolitic text. - - * FreeMono.sfd, FreeMonoOblique.sfd: - - Added a few old Cyrillic characters. - - * FreeSerif.sfd: - - Several corrections and tweeks to Glagolitic. - Still missing six slots from Unicode, but don't see them in the TeX - fonts. - On the other hand, several on-line Glagolitic pages (bibles etc) don't - seem to use these. Maybe it's OK as-is. - -2008-11-03 Stevan_White - * FreeSerif.sfd: - - Added lowercase range to Glagolitic, as a facile scaling of the - uppercase. - - Added letter to Glagolitic, scaled range. - -2008-11-02 Stevan_White - * FreeSerif.sfd: - - Replaced fraktur bold from Mathematical Alphanumeric Symbols with that - from TX Fonts by Young Ryu. - One concern: letter k is damaged (in both medium and bold). I just - hacked something up. - - Added Glagolitic "round type" font (Croation capitols only) from the - collection of Croatian fonts for LaTeX by Darko Zubrinić - ftp://ftp.dante.de/tex-archive/languages/croatian/ - http://www.tug.org/TUGboat/Articles/tb17-1/tb50zubr.pdf - - Several letters are missing besides the small letters. - - * FreeSerifBoldItalic.sfd: - - A couple of Thai references got obliqued twice. - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - By popular demand, removed 'ears' from Greek Upsilon and Psi. - Copied resulting glyphs to Serif Mathematical Alphanumeric Symbols. - - * FreeSerif.sfd: - - Some pointwise cleanup of main Tamil range - - Tried some things with lookups. Didn't make much headway. - -2008-11-01 Stevan_White - * FreeMono.sfd: - - somehow made a letter with wrong width - - * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Added similar lookups and ligatures to Thai ranges. - - * FreeSerif.sfd: - - Lookups now work no worse than those for other Thai fonts, at least - in Pango. Still perplexed by behaviour of "Required" lookups. - - For Thai, made ligatures and lookups for yoying and thothan combined - with a lower vowel. These work well. - Attempted looksups for saraaa with ru and lu, and for saraam. - Not working. - - Cleaned up a few of the Bengali ligatures - - * FreeSerifBold.sfd: - - Tweek Thai - -2008-10-31 Stevan_White - * FreeSerif.sfd: - - Fixed ligatures and mark positioning for Hanunóo. - Problem with ligatures: Gnome pango doesn't do 'rlig', only 'liga' - - * FreeSerifItalic.sfd: - - Changed lookup table scripts for Devanagari and Bengali. - Find Problems -> ATT found several problems showing lookups acting on - glyphs that weren't listed in the script ranges, including dev2, bng2 - (why not deva and beng, I don't know). - - danda and doubledanda of Devanagari I understand are to be shared among - Indic scripts. So included bng2 and dev2 in the 'aalt' table for those. - - The 'init' and 'half' tables for Bengali made active for bng2. - - The 'locl' table for Bengali didn't do anything I could see: It mapped - the Devanagari danda to itself, and the doubledanda to itself. Deleted. - - Cleaned up some kern tables. - adjustments of under 5 EM are invisible. Some others I just didn't like. - Some were putting a letter beneath another, with is wrong. - - * FreeSerifBoldItalic.sfd: - - Added Thai - - * FreeSerifBold.sfd, FreeSerifItalic.sfd: - - Changes to mark positioning lookups, esp. in Italic. - Widened numerals in Bold - -2008-10-27 Stevan_White - * FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Tweeks regarding Armenian and lookups - - * FreeSansBold.sfd: - - Added Armenian ligatures FB13-FB17 with lookups - Also made a historical ligature ('hlig') table for u+0587. - - Toward bug #15183: missing characters from Armenian range - https://savannah.gnu.org/bugs/index.php?15183 - - * FreeSansOblique.sfd: - - Added Armenian ligatures, lookups. Cleaned up contours. - - * FreeSans.sfd: - - Added 5 Armenian ligatures to U+FB13 – FB17, and made corresponding - 'liga' lookup. Found there one ligature u+0587 that according to - http://en.wikipedia.org/wiki/Armenian_alphabet - - "in new orthography the և character is not a typographical ligature anymore, and must never be treated as such. It is a distinct letter and has its place in the new alphabetic sequence." - So moved this out of the 'liga' lookup and into a new 'hlig' lookup. - -2008-10-26 Stevan_White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: - - Lots of improvements to Thai. - Completely revised letter spacing in Italic, and fiddled with combining - marks in all. - Still aren't working quite right, especially in Italic. - Still need to work over digits (in Bold they aren't even bold yet) - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifItalic.sfd: - - Bold Thai : added (painstakingly) constructed glyphs, lookups - roman Thai: tweeks - Italic Thai: tweeks (Note this still has multiple problems) - -2008-10-25 Stevan_White - * FreeSerif.sfd: - - WAZU says - http://www.wazu.jp/gallery/Fonts_Hanunoo.html - - MPH 2B Damase doesn't support the consonant-vowel ligatures necessary - to render Buhid writing. - - OK, so I made 'mark' lookups for combining marks and a bunch of - ligatures in an 'rlig' lookup. The latter still not working: - don't know why. - - Made page to match the example of the combining forms at - http://www.omniglot.com/writing/hanunoo.htm - -2008-10-24 Stevan_White - * FreeSerif.sfd: - - Removed some marks from Mathematical Alphanumeric Symbols - - * FreeSerif.sfd: - - Tweeked combining marks for Vietnamese. Made to satisfy - WAZU JAPAN Comprehensive Unicode Test Page for Vietnamese - http://www.wazu.jp/gallery/Test_Vietnamese.html - Could still use some tweeking... - - * FreeSerif.sfd: - - Added marks for composition of Vietnamese - - * FreeMono.sfd, FreeSerif.sfd: - - Put "below" combining mark on lots of vowels and derivatives, - for Vietnamese. - Named a bunch of composit Latin, expecting to make substitutions. - -2008-10-23 Stevan_White - * FreeSerif.sfd: - - Thai spacing alterations based on advice of a native speaker. - -2008-10-22 Stevan_White - * FreeSerif.sfd: - - re-named Thai lookups according to order - -2008-10-21 Stevan_White - * FreeSans.sfd: - - Cleanup of glyphs in Gujarati, Devanagari. - - Note: Serious problem with Sans GPOS abvm in Devanagari - "'abvm' Above Base Mark in Devanagari subtable" "gujr-0" - But all the characters that list gujr-0 are in Gujarati. - Not sure how this got broken or how to fix it. - - * FreeSerif.sfd: - - Fiddled with Thai mark positioning: passes my tests now OK. - Made a few more references in Math Symbols; more regularization of - stroke. - - * FreeSerif.sfd: - - Added mark class for Vietnamese "horn" - Several references made in General Punctuation, Arrows - - * FreeMono.sfd: - - added some Combining Diacritical Marks - -2008-10-20 Stevan_White - * FreeSerif.sfd: - - Made some references from serifed Latin capitals to Greek counterparts. - - * FreeSerif.sfd: - - Made a few repeated glyphs into references in Musical Symbols - -2008-10-19 Stevan_White - * FreeSerif.sfd: - - Moved several glypns from Mathematical Alphanumeric Symbols to - Letterlike Symbols. - Couple tweeks in Mathematical Symbols. - - * FreeMono.sfd, FreeSerif.sfd: - - Fiddling with Mathematical Symbols. - In Serif, trying to make stroke width more consistent. - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd: - - Added some Greek symbols in Mono and Sans to make a little more regular - and correspond better with TeX. - Tweek of serif. - - * FreeSansBold.sfd: - - a few more improvements. - - One problem with the Mathematical Alphanumeric area is, one must - remember to change it any time another face is altered... - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerifBold.sfd: - - Several improvements and additions to Sans faces (mostly in Greek) from - experience of pasting into FreeSerif Mathematical Alphanumeric Symbols. - - * FreeSerif.sfd: - - Replaced most of Mathematical Alphanumeric Symbols - roman italic bold (latin and greek) - gothic italic bold (latin and greek) - typewriter - and numerals - with glyphs from FreeFont. These were scaled to uniform height. - - Remains: Blackboard Bold, Fraktur, Calligraphic, Script - - * FreeSerif.sfd: - - Tidied lookup table names for Malayalam - - * FreeSerif.sfd: - - Applied Malayalam patch from Hiran Venugopalan - - * FreeMono.sfd: - - Added/corrected many Mathematical Symbols - - * FreeSansOblique.sfd: - - more IPA - -2008-10-18 Stevan_White - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Made lots more IPA and Phonetic Extensions - Note: fontforge is reporting an error in a few glyphs made by scaling - another, that the glyphs are drawn in the wrong direction--only in - TrueType though. Suspect a FontForge bug. - - Added several Combining Diacritical Marks - -2008-10-17 Stevan_White - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Made several Spacing Modifier Letters, Combining Diacritical Marks, - and IPA and Phonetic Extensions - -2008-10-16 Stevan_White - * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Added some Superscripts and Subscripts - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Finished off Superscripts and subscripts - - Completed General Punctuation for Mono faces - - Added some General Punctuation - -2008-10-15 Stevan_White - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - more Letterlike Symbols, Currency Symbols - - * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Made some Combining Diacritical Marks for Symbols, Letterlike Symbols - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Added some General Punctuation - -2008-10-14 Stevan_White - * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Added double slanted hyphen, made General Punctuaton Supplement like - Serif's - - * FreeSansBoldOblique.sfd: - - Filled out Greek Extended - - * FreeMono.sfd, FreeSerifItalic.sfd: - - fixes to last 2 commits - - * FreeSerifItalic.sfd: - - Last character to General Punctuation - - * FreeMono.sfd: - - Built some Enclosed Alphanumerics (1-10) - - * FreeSerif.sfd: - - Copied in Daniel Johnson's changes to Cherokee. - -2008-10-12 Stevan_White - * FreeSerif.sfd: - - Included Daniel Johnson's Cherokee glyphs. - -2008-10-05 Stevan_White - * FreeMono.sfd: - - Further corrections to diaresis in Cyrillic -- legibility in small sizes - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSerif.sfd: - - Regularized placement of diaresis in Cyrillic - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Added same set of glyphs to Cyrillic Supplement - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Added some of the easier letters from Cyrillic Supplement - -2008-10-04 Stevan_White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSerifItalic.sfd: - - Finished high Cyrillic range for MonoBold and MonoBoldOblique. - (Remaining: historic ranges, Cyrillic extensions) - Tweeked others. - - * FreeMonoBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Serif*Italic: Added last Abkhazian letters to Cyrillic - MonoBold: tweek - -2008-10-03 Stevan_White - * FreeMono.sfd, FreeMonoOblique.sfd, FreeSerif.sfd, FreeSerifBoldItalic.sfd: - - Mono: Some additions to historic letters - - * FreeSerif.sfd: - - Added some punctuation and combining numeric marks from - Cyrillic Extended B - - * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Various technical tweeks, mostly concerning recent additions. - Also did a bit more "Points too close" and "irrelevant control points". - Cyrillic millions redesign meant could not maintain use of refrences - for it. - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - More high Cyrillic - Included old Cyrillic millions combining mark in Sans, changed design - in Serif - -2008-10-02 Stevan_White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - More high Cyrillic - - * FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd: - - More high Cyrillic glyphs - - * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - More glyphs in high Cyrillic. Remains only some whose form I'm unsure - of in italic. - - * FreeSerifBoldItalic.sfd: - - More glyphs in higher Cyrillic range - - * FreeSerifItalic.sfd: - - Same process of tightening el, em, ge (but a P.S. to previous commit: - also did ya, ze for SerifBold.) - - * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - BoldItalic: Tightened up spacing on left of el, em, ge (could go - farther, but it is partly a problem with glyph design... - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - More additions to Cyrillic. Finished SerifBold except for Nivkh - additions. - Used references on number combining forms. - -2008-09-30 Stevan_White - * FreeSerif.sfd: - - Added four (obsolete) Chuvash letters to Cyrillic Supplement - - completing it. - -2008-09-29 Stevan_White - * FreeSerif.sfd: - - Greek adjustments - Adjusted spacing of kappa slightly - Got rid of ears on Psi, following similar request for Upsilon. - -2008-09-28 Stevan_White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Adding and fiddling with Spacing Modifiers and Combining Diacriticals - - * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Revisions of several Combining Diacritical marks - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - A few Combining Diacriticals and Spacing Modifiers - - MonoBoldOblique: Primarily filling out Spacing Modifier Letters - others: little fixes found along the way - -2008-09-27 Stevan_White - * FreeSerif.sfd: - - Replaced Malayalam range with that from Rachana_04 found on - Swathanthra Malayalam Computing project page - http://savannah.nongnu.org/projects/smc/ - Besides scaling and converting to cubic, performed much clean-up of - glyphs, added an r2 character, and re-named a bunch of characters. - -2008-09-22 Stevan_White - * FreeSerif.sfd: - - Filled in as much of Phonetic Extensions as I could without artistic - abilities. - Note 1D48-9 are not references due to apparent FontForge bug, that says - scaled references go in wrong direction. - - * FreeSerif.sfd: - - Cleaup of some Bengali glyphs. - Note many of the ligatures remain very very messy. - - * Makefile: - - added more validations - made to work with GenerateOpenType - - * FreeSerif.sfd: - - Built two more easy Phonetic Extensions - - * FreeSerif.sfd: - - Built some Phonetic Extensions letters, those with middle tilde - -2008-09-21 Stevan_White - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Added lots of Spacing Modifier Letters and Combining Diacritical Marks. - - * FreeMono.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSerif.sfd: - - Wrote script to check if glyph encodings were in stated ranges, fixed - most discrepancies. - - There were a bunch of incompletely deleted characters in several faces. - - Sans: found several other problems in the process - # Tamil - Four slots labelled 0BDA-D have glyphs, not in Unicode. also 0BE1 - I think they are misplaced; added 0010 to each of them - - # Devanagari - Slot labelled U+093B is not in Unicode--can't find glyph: deleted - likewise 094F (may have been meant to be 0954) - 0955, 0973-0976 - - 0954 should be a combining mark, but it appears on the wrong side of 0. - 0971 was just wrong--made into simple dot. - 0972 is also wrong--made my own Candra A. - - # Gujarati - Slots labelled 0AE4-5 are not in Unicode; seem not to belong at all. - Deleted. 2800 is a dup of 2790. Deleted - - Serif: phillipine_double u1736 was misplaced - - A bunch of the Math Alphanumeric symbols are empty in the standard, - because they're represented elsewhere. These should be deleted - First need to make style consistent with existing symbols. - - * FreeSerif.sfd: - - Applied patch from Daniel J - Remedies bug - FreeSerif: Missing glyphs with palatal hook - https://savannah.gnu.org/bugs/index.php?24298 - Adding several letters to Phoenetic Extensions range U+1D80-BF - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Made four characters U+200C-F to be zero-width - Remedy to bug #23593: Mono 0-width chars: zero-width or space? - https://savannah.gnu.org/bugs/index.php?23593 - - * FreeSerif.sfd: - - Made Mahjong tiles to take up less space using references - Cleaned up several validation problems - -2008-09-19 Stevan_White - * FreeSerif.sfd: - - Added several Hebrew Alphabetic Presentation Forms (some easy ones), to - make its coverage the same as Serif Bold. - - * FreeSerifBold.sfd: - - Re-encoded. - Deleted several glyphs in Hebrew Alphabetic Presentation Forms that - didn't correspond valid Unicode - - * FreeMonoBold.sfd, FreeSans.sfd, FreeSerifItalic.sfd: - - Ran script to find mis-numbered glyphs. Several were simply typos, - some offset by one. - - * FreeSansOblique.sfd: - - Numerous cases of glyphs in Private Use area incorrectly assigned - Unicode numbers and names. Gave all -1 for Unicode and named like - "slot.XXXX". - - * FreeSerif.sfd: - - Adapted Mahjong Tiles from George Douros' Unicode Symbols font. - - * FreeSerif.sfd: - - Added Domino Tiles. Domino outline is copied from George Douros' - Unicode Symbols, but the rest I preferred to do with references. - -2008-09-18 Stevan_White - * FreeSerif.sfd: - - Adapted Mathematical Alphanumeric Symbols from George Douros' Unicode - Symbols font. - - * FreeMonoBoldOblique.sfd: - - This one got away from me--I don't know what I did. - Looks like some small contour edits. - - * FreeSansBoldOblique.sfd: - - Fixed one mis-numberd character in Latin Extended-B - - * FreeSerifBold.sfd, FreeSerifItalic.sfd: - - Fixed several mis-numbered characters. - - * FreeSansBold.sfd: - - SansBold: one Georgian letter with no name, one Zapf Dingbat was - unnumbered - ATT test shows a bunch of problems with Gurmukhi and 'blwf' table - indeed shows those letters at 0x10000+ - Sans names them like uni0A30_uni0A4D.blwf: they are in range - ECC6 to ED06 - - I meant to move this range into Private Use in last release, and - missed it. So now it is moved, into same range as Sans. - - Both Sans and SansBold in nukt table for Gurmukhi have duplicate - entries for uni0A15 uni0A3C. Deleted dups. - - * FreeMonoOblique.sfd: - - fixed a number of Unassigned Code Points in Greek Extended - - * FreeSansOblique.sfd: - - mis-numbered Combining Diacritics - - * FreeSansOblique.sfd: - - Several chars in Latin Extended hadn't been named. - One spurious letter in Letterlike Symbols - -2008-09-16 Stevan_White - * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd: - - Lots of additions: unless otherwise noted, they are from George Duros' - fonts Analecta, Music, and Unicode (haven't got final confirmation of - the eligibility of these glyphs, so this is just for testing.) - - Added some combining marks, fiddled a bit. In both Serif & Mono, tried - to get a key symbol characters to fit inside the key combining mark - - Serif - Got rid of ears on Upsilon - Added: - # Gothic - # Western & Byzantine Musical Symbols - - # Misc Symbols, Misc Technical Symbols (drew many myself) - # Supplemental Symbols and Arrows - - Mono - Added: - # lotsa Misc Technical Symbols - # OCR Symbols - # drew many Supplemental Symbols and Arrows, Misc Technical - - Sans - Added # Phoenecian - Made a few Letterlike Symbols; Made Re and Im to be sans-serif. - -2008-09-11 Stevan_White - * FreeSerif.sfd: - - Removed pointless entries from Latin kern table - - Tidied points in Sinhala - -2008-09-07 Stevan_White - * FreeSerif.sfd: - - Tidied up Tamil ligatures EEA8-EEAB to fix TT build warning - "MonotonicFindAlong: Never found our spline." - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, Makefile: - - - Added APL characters to FreeMono (why?...) - - Fixed several last-minute problems, including - - Serif: Tweeked GPOS mark table for Cyrillic - Sans: Added a GPOS table for Cyrillic (but several diacritics missing) - - Serif, Mono: tweeked some bugs in extensible brackets & integrals - - Serif: Vietnamese o circumflex: accent was a bit high. fixed. - - MonoBoldOblique OTF build - uni213b intersects self - - Generation of TT fonts complains about several things to stderr, - including: - - SerifBold: "There exists a 'fpgm' code that seems incompatible with FontForge's. Instructions generated will be of lower quality. If legacy hinting is to be scrapped, it is suggested to clear the `fpgm` and repeat autoinstructing. It will be then possible to append user's code to FontForge's 'fpgm', but due to possible future updates, it is extremely advised to use high numbers for user's functions." - Probably has been there since I first copied the TT instructions in. - Just repeated the copying process carefully, and the warning went away. - - Serif: "FindMatchingHVEdge fell into an impossible position" - fixed a bunch of point too close - - REMAINING PROBLEM in Serif TT build - "MonotonicFindAlong: Never found our spline." - fixed several bad TT matrices-- there are several more - fixed many "control points too close" no luck - -2008-09-03 Stevan_White - * FreeSans.sfd, FreeSansOblique.sfd: - - Added/corrected some Misc. Symbols by copying from Serif. - Note this is only a stopgap solution. Want real sans-serif symbols. - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Added minimal Miscellaneous Symbols: card suites and some musical notes. - Note not happy with shapes...some I just drew. Sans isn't really sans. - - Fixed one APL symbol in Mono so it verified in OTF version - -2008-08-31 Stevan_White - * FreeMono.sfd: - - Built set of APL symbols. - -2008-08-30 Stevan_White - * FreeSans.sfd: - - Un-linked references in uni02B2 and uni02B5, because when validating the - TrueType version, FontForge gave an error "is drawn in wrong direction". - I suspect a bug in FontForge. Other similar glyphs make no errors. - - Fixed missing extrema in TrueType. - These were the last cases being reported by validate in all the faces. - - * FreeSerifItalic.sfd: - - fixed last missing extrema in TrueType - - * Makefile: - - restructured validation to look in a directory - - * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd: - - Fixed missing extrema in TrueType versions - -2008-08-15 Stevan_White - * FreeSans.sfd: - - Same problem with uni0A83 as with bn_llikaar. Just made zero-width. - -2008-08-14 Stevan_White - * FreeSans.sfd, FreeSansOblique.sfd: - - Glyph bn_llikaar, U+09E3 BENGALI VOWEL SIGN VOCALIC LL, - has right bound positioned far into the negative. Causes a warning in - FontForge when opening OTF version. - Comparing with other fonts supporting Bengali, found no others that - do this. - Serif makes glyph width 0 (which sounds right according to Unicode) - and puts glyph wholly to left of 0. But, I haven't found this letter - in text anywhere. I wonder if it is really used in writing. - - * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: - - Further TrueType validation fixes. - Sans still has two glyps in wrong direction. - - * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Fixed more TrueType problems...all missing extrema in TTF validation - -2008-08-13 Stevan_White - * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - fixed all the TrueType validation problems of type "intersects itself" - and all but two of the "wrong directions", as well as a lot of - "missing extrema". But there remain hundreds of missing extrema in the - TrueType version. - Also, bn_llikaar in Sans and Oblique still has a problem in OTF version. - - * FreeMono.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd: - - Made .ttf files to validate. Other faces have many more problems still. - -2008-08-12 Stevan_White - * FreeMonoOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: - - Continuing to make OTF versions validate. - - * FreeMonoOblique.sfd: - lots of missing points at extrema - * FreeSerif.sfd: - 12 wrong directions, 1 missing extrema - * FreeSerifItalic.sfd: - many missing points at extrema, 1 self-intersecting - - What was wrong: in several oblique cases, an already-italic glyph was - made more italic, thereby fouling up extrema (although why it passed - validation in the SFD I don't know). Some glyphs were - overly-complicated with many near points. Cleaned up, rounded to int. - - Remaining problem: OTF FreeSansOblique FreeSans. one Bengali glyph in - each whose advance width and htmx don't match. - - Moral of story: validate the OTF and TTF versions too before a release. - - * FreeSansOblique.sfd: - - Reverse a mistake from last commit: somehow this file was converted to - quadratic, or something. - -2008-08-11 Stevan_White - * FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Found that SFD files that validated produced OpenType files that don't. - These represent the easy fixes. Some were result of conversion to - quadratic; some shouldn't have validated in the SFD... - - * MonoBoldOblique: uni0250 missing pts at extrema [reference glyph rotated...] - * Sans: uni0AC4 wrong direction [simplified, rounded to int] - * SansOblique: uni01EA wrong direction [rounded to int] - * SerifBold: uni023f wrong direction [round to int] - * SerifBoldItalic: uni0245 missing pts at extrema [ungrouped ref, added extrema] - -2008-08-06 Stevan_White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd: - - Re-set font metrics, which were somehow making uneven vertical spacing. - -2008-06-22 Steve White - * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Made to validate - - * ranges.py: - - Brought more into line with OpenType - Added some ranges - Fixed bug with ranges outside of font - - * CREDITS: - - 3 new ranges - - * FreeSerif.sfd, FreeSerifItalic.sfd: - - Cyrillic: tweeked accents for consistency, and for readability in small - sizes. - - * FreeSerif.sfd: - - Thanna range: tweeking - - Thaana range: Scaled up by about 15%, raised by 100EM, tightened - some of the diacritics to get inside 900 to -300 EM limits. - - * FreeSans.sfd: - - Added Old Persian and Ugaritic from MPH2BDamase font. - -2008-06-21 Steve White - * FreeSerif.sfd: - - Added Tai Le range adapted from MPH2BDamase font. - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Added some ancient Greek numerals from Tempora to high Unicode area, - (partly just to show it can now be done.) - - * FreeSerifItalic.sfd: - - Couple of tweeks putting glyphs above -300EM. - - * FreeSerif.sfd, FreeSerifItalic.sfd: - - Surgery to Thai letter 'tho than', u+0e10, to push it above -300 EM. - This makes Thai range completely between 900 and -300 EM. - - * FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: - - Many auxilary characters (esp. for Malayalam, Bengla, and Tamil) - representing ligatures and alternative forms without their own Unicode, - were moved from - ranges above 0xFFFF (which ought to have been slots for other defined - Unicode ranges) into the Private Use area. - - In Serif, I segregated the scripts, in Sans it was hard to see where one - began and another ended, so I moved them en masse. - - Note several problems with wrongly-named characters: - I already re-named glyph570 and glyph582. - But there are others with names starting with A... - - * FreeSansBold.sfd, FreeSansOblique.sfd: - - Fixed (I hope the last) problem with scripts in lookups - Find Problems -> ATT (all selected) finds multiple issues, - - * FreeSansBold.sfd: - In addition to script 'guru', added 'gur2' to the scripts for these - lookups - 'nukt' Nukta forms in Gurmukhi - 'blwf' Below Base Forms in Gurmukhi - 'pstf' Post Base Forms in Gurmukhi - 'blws' Below Base Substitutions in Gurmukhi - 'abvs' Above Base Substitutions in Gurmukhi - 'psts' Post Base Substitutions in Gurmukhi - - * FreeSansOblique.sfd: - In addition to script 'beng', added 'bng2' to the scripts for the lookup - 'half' Half Forms in Bengali - - Moreover, the lookup - 'aalt' Access All Alternates in Latin - contains only Bengali letters. - Re-named as Bengali, made to work on beng, bng2 scripts - -2008-06-20 Steve White - * FreeSerif.sfd: - - Scaled Sinhala range. - Remedies bug #23656: Sinhala letters over-sized - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Mostly messing with Greek Extended accents again. - re-positioned ypogegrammani on advice of Alexey Kryukov - Put prosgegrammani beneath main letters in Mono, to make narrower glyphs - Implemented more distinction between tonos and acute. - -2008-06-19 Steve White - * FreeMonoBoldOblique.sfd: - - Completed fit of Mono to 800 to -200 EM. - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd: - - Set Metrics to recommended values - - * FreeMonoOblique.sfd: - - Now Mono Oblique, as well as roman and Bold, are within 800 to -200 EM. - Just BoldOblique to go. - - * FreeMono.sfd, FreeMonoBold.sfd: - - More toward fitting to 800 to -200 EM. - Basically, reduced Georgian by 92%. - Also made an over-all offset, so Georgian is somehow centered (Bold...I - guess I already did this in roman). - Want to also do an emboldening to make stroke like rest of font, but - current FontForge has a nasty crash that loses data on this function. - - * FreeMono.sfd: - - In effort to make fit in 800 to -200 EM, - Scaled Georgian by 92%, centered on 600 wide box. - Next: Embolden a bit. - -2008-06-18 Steve White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Toward making all glyphs lie between -200 and 800 EM. - Numerous small changes, especially raising descenders of some Hebrew - letters. - Georgian remains a problem - -2008-06-13 Steve White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Moved prosgegrammeni up to baseline, - (and then moved all references down to baseline) - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Added Control Picture "blank" to all faces. - Switched U+0222-3 from TemporaLGCUni - -2008-06-11 Steve White - * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - More fiddling with Greek Extended accents - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Tweeks to accents etc in Greek Extended and Cyrillic - -2008-06-10 Steve White - * FreeSerifBold.sfd, FreeSerifItalic.sfd: - - Fixed a few big horizontal spacing problems - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Implemented TemporaLCGUni glyphs in Cyrillic ranges. - Added a breve_cyrillic for the moustache breve mark. - -2008-06-08 Steve White - * FreeSerif.sfd: - - Replaced most of Cyrillic range with TemporaLGCUni. - Remodelled many of the derived Cyrillic characters after these. - Fiddled globally with spacing of small letters. - Unclear on diacritics 485-6, unhappy with breve. - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Started implementing TemporaLCGUni in Greek ranges. - - Replaced 3DC-3E1 from Tempora, because I thought they looked nicer and - more like the other existing FreeFont glyphs. - Replaced 3DA-B from Tempora, because they look more like Unicode - samples, and nicer. - Added 03f3-4, 03F7-F. - Prefer my own lunate epsilon. - Replaced Phi and Omega from Tempora. - These plainly fit the other FreeFont glyphs better than the origninals. - (How did this happen?) - - In bold, replaced U+03D7 - - Copied lbbar u+2114 - - Small italic greek--replaced most except phi, psi, omega - - Based on new information, broke the identification of oxia with Latin - acute. - -2008-06-07 Steve White - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Efforts to control heights of characters - -2008-06-06 Steve White - * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Made to validate - -2008-06-05 Steve White - * FreeSans.sfd: - - Fixed undefined character in kerning classes - -2008-06-04 Steve White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - tweeks and additions to General Punctuation - -2008-06-03 Steve White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansOblique.sfd: - - Completed/tweeked Number Forms - - * FreeMono.sfd, FreeSerif.sfd: - - Added some Miscellaneous Technical symbols - -2008-06-02 Steve White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Tweeks...mostly Letterlike - -2008-06-01 Steve White - * FreeMono.sfd, FreeSerif.sfd: - - Added Box Drawing characters to Serif. - Tweeked a glyph in Mono - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Added several glyphs to Letterlike Characters - -2008-05-31 Steve White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Validation pass - - SansOblique and SansBoldOblique had validation problem with BlueValues - Private Dictionary - Elements in BlueValues/OtherBlues array are disordered - Elements in BlueValues/OtherBlues array are too close - (Change BlueFuzz) - StemSnapV does not contain StdVW value. - So I ordered the array, and based on other slanted fonts, - removed StemSnapV. - - Note however, I still think the two top Blues lines are too close - But I don't even know what the second-to-top line is meant to do. - - * FreeSerif.sfd: - - Added to Block Elements, Geometric Shapes - Made to validate - -2008-05-29 Steve White - * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Looking at special symbols. - Drew several Miscellaneous Symbols in Mono and Serif - > Completed/corrected planetary symbols, added Dice, - some other easy ones - > Completed Dingbats in Serif (using URW Dingbats) - Added some Block Elements to Serif - -2008-05-26 Steve White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - More changes stemming from J. Poon's report. - -2008-05-25 Steve White - * FreeSerif.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Height surgery on SerifBoldItalic. - More fiddling with accents in others. - - * FreeSerifItalic.sfd: - - More height surgery. Only a few left in Benglai and Thai - - * FreeSerifBold.sfd: - - Re-applied surgery to make glyphs between 900 and -300EM - - *** Regression - Inadvertently un-linked all references in SerifBold in r1.83. - This reverses that error (but also un-does the surgery mentioned there) - - * FreeSerifBold.sfd, FreeSerifItalic.sfd: - - Applied surgery to make Latin letters go under 900EM. - One exception yet... - -2008-05-24 Steve White - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Serif: much fiddling with accents in Latin ranges. - Re-thought some glyphs (there are still a few messy ones, especially - in bold) - Checked horizontal spacing...fixed a number of problems. - -2008-05-23 Steve White - * FreeSansBold.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Made Latin Extended-B coverage consistent across Serif; cleaned up some - glyphs - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Filled more of General Punctuation in Sans and Serif - Made all agree on coverage of Latin Extended Additional - -2008-05-22 Steve White - * FreeSans.sfd, FreeSansBold.sfd, FreeSansOblique.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Added Latin Extended Additional to SansOblique. - Made Latin Extended Additional coverage consistent across Sans, B, I - Made Latin Extended-B coverage same in SerifBold. - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeSansBold.sfd: - - Mono* made Latin-B coverage consistent across faces - - * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Made set of Latin Extended-B consistent across Sans faces - - * FreeSans.sfd, FreeSansBold.sfd: - - More filling in General Punctuation - - * FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Another bunch of J. Poon's reports - also, filling in some Combining Diacriticals, Spacing Modifiers, and - General Punctuation in bold faces - -2008-05-21 Steve White - * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Mucking about with mark tables in Thai (Serif) - Other faces: Making changes from J. Poon's report - -2008-05-20 Steve White - * CREDITS: - - Mark Williamson - Jacob Poon - - * Makefile: - - added tests target - -2008-05-18 Steve White - * ranges.py: - - Put table explanation back in - - Improved behaviour for high Unicode - - * FreeSans.sfd: - - Revision of kerning - - * FreeSerif.sfd: - - Made Latin kerning a little more reasonable: - reduced many excessive kerns (some had letters apparently - overlapping, which shouldn't happen) - made kerns increment by 5EM for ease of reading - got rid of kerns too small to be seen - - * FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerifBold.sfd: - - Made to verify - -2008-05-13 Steve White - * FreeSerif.sfd: - - Made to validate - - * FreeSerif.sfd: - - Gurmukhi: filled range in Serif, taking glyphs from the original - Punjabi font by Hardip Singh Pannu - http://members.aol.com/hspannu/punjabi.html (file pb_win95.exe) - -2008-05-12 Steve White - * FreeSans.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Hebrew, basic. Some faces missing punctuation marks, added. - - * FreeMono.sfd, FreeSans.sfd: - - Armenian: Sans tried to make verticals and horizontals of more uniform - width both, finddled with punctuation - - * FreeMonoOblique.sfd: - - made to validate - - * FreeMonoBold.sfd: - - made to validate - - * FreeSans.sfd, FreeSansBold.sfd: - - Armenian in Sans: regularized letter spacing - - * FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd: - - Armenian: fill out ranges and clean up - SansBold especially had a lot of incorrect references. - Now all the ranges with Armenian at least share the same set of - characters. - - * FreeMono.sfd: - - Fixed glyph with wrong width. - -2008-05-11 Steve White - * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerifItalic.sfd: - - 1) made to validate - 2) Mono: copied in Spacing Modifier Letters (glyphs not yet named) - 3) SerifItalic: Filled in General Punctuation - - * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Made to validate, and pass all other FontForge tests. - Expedient: rounded everything to int - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Made to have the same Greek Symbols, - Made to validate - - * FreeSans.sfd, FreeSansBold.sfd: - - Made Greek Symbols as full as rest of Sans. Changed a name in Sans. - - * FreeMonoOblique.sfd: - - Made Greek as full as other faces - Made to validate - - * FreeSansBold.sfd: - - Deleted seven orphaned Arabic characters; looks like somebody started, - didn't get very far, putting Arabic in bold. - - Deleted orphaned Arabic glyph from Arabic Presentation forms-B - - * FreeSerifBold.sfd: - - Deleted the single Arabic character: it was clearly there by mistake. - - * FreeSansOblique.sfd: - - Made Greek Symbols as full as rest of Sans - - Tweeks to Armenian - - Comment from previous commit of FreeSans was meant for FreeSansOblique. - In FreeSans, only tweeked a few letters during putting more characters - in this face. - - Filled in Spacing Modifier Letters, increased General Punctuation. - - * FreeSans.sfd: - - Filled in Spacing Modifier Letters, increased General Punctuation - - * FreeMono.sfd: - - Made Armenian as full as other roman faces. - - Completed Spacing Modifier Letters - Added a couple of Greek Punctuation - - added more Spacing Modifier Letters - -2008-05-10 Steve White - * FreeSerif.sfd, FreeSerifItalic.sfd: - - Did same process of scaling and sizing for Thai in Sans as in Serif. - Added mark tables to Sans. Improvement, but there are questions... - - * FreeSans.sfd: - - Tidied some Gurmukhi glyphs, validated. - - Deleted ranges for Oriya, Kannada, on account of - 1) they only contained a subset of the consonant glyphs of the scripts, - few if any vowels, and had no ligature lookups as required - 2) Kannada was based on the Akurti fonts, which have copyright issues. - - See - bug #23225: Oriya range only partial - bug #23224: Kannada range only partial - - * FreeMonoBoldOblique.sfd: - - Made metrics like rest of Mono - -2008-05-09 Steve White - * ranges.py: - - More info on range intervals - - * FreeSerif.sfd: - - Deleted Telugu range. - It didn't represent a complete writing system for the language. - - See notes at https://savannah.gnu.org/bugs/index.php?23202 - Serif: Telugu range missing many characters; many wrong - - Got a copy of the original Tikkana font, - Copied in remaining consonants and vowels that I could find there. - I think one vowel 0C55 is missing according to unicode). - Strangely, the Telugu digits are alo missing. - In Tikkana, the default "checkmark" structural mark is missing from many - consonants, according to Unicode, but is a separate glyph. I put - the checkmark on. - This, and scaled up by 150% and cleaned up intersecting glyphs and - many unnecessary points. - -2008-05-08 Steve White - * FreeSerif.sfd: - - Filled out Telugu consonants. - Vowels still need to be done - -2008-05-07 Steve White - * FreeSerif.sfd: - - Operated on Latin glyphs with stacked accents to make them fit under - 900EM. - Scaled Telugu bu 150%. - -2008-05-06 Steve White - * FreeMono.sfd, FreeMonoBold.sfd, FreeSansBold.sfd, FreeSerif.sfd: - - Corrected further fontforge "find problems" - Added some math characters to FreeSerif - -2008-05-05 Steve White - * FreeSansBold.sfd: - - Made to validate, and fixed bad TT transformations - -2008-05-04 Steve White - * FreeMono.sfd, FreeSerif.sfd: - - Mainly TeX additions trying to satisfy Markus Kuhn's TeX-as-Unicode page - - * FreeMono.sfd: - - Adjusted heights of extensible brackets - - Fixed problems with extensible brackets, thanks to Markus Kuhn's page - http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-demo.txt - - * ranges.py: - - fiddled with ranges, doc - - made some ranges more correct? - - fixed some bugs in ranges - better error reporting - - Got rid of Unicode 1.1 references - - made to use OpenType table - - * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd: - - made to validate - -2008-05-03 Steve White - * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Removed digits from Private Use Area. - See bug 23050. - - * FreeMono.sfd, FreeSans.sfd: - - Completed General Punctuation - - * FreeSans.sfd: - - Completed IPA Extensions - - * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd: - - More work on Superscripts and Subscripts, Spacing Modifiers. - Sans is now complete in both. - Added Pfennig to Sans and Mono. - - * ranges.py: - - Restructure text output - Rearrangement and cosmetic ...except I had broken it. now fixed - Seems to be in a useful form at this point. - More docs, date - - * FreeSerif.sfd: - - Added a hand-drawn old German Pfennig to Currency Symbols - - * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifItalic.sfd: - - Further additions to General Punctuation, Super and Sub Scripts, - Spacing Modifiers, etc. - -2008-05-02 Steve White - * FreeSans.sfd: - - additions to Spacing Modifiers, IPA - - * FreeSerifItalic.sfd: - - Shortening stacked accents to maintain readability when clipped - -2008-05-01 Steve White - * FreeSans.sfd: - - Additions to Spacing Modifiers and changes to Combining Diacritics - - * FreeSerif.sfd: - - Made sure all the half rings in Combining Diacriticals and Spacing - Modifiers were really half rings (J. Poon had complained about this) - - Filled out General Punctuation - Some work on Spacing Modifiers - - Filled out Mathematical Operators - still needs lots of work - Made to validate - - Filled out Latin Extended B - Added some letters with curls to Latin Extended B - More fiddling with Latin Extended B accents - -2008-04-30 Steve White - * FreeSerif.sfd: - - Added Hanunóo script, with characters based on those in - font MPH2BDamase, on request from the maintainer of that font, - http://packages.debian.org/sid/ttf-mph-2b-damase - - Glyphs are simple vector strokes. Could be a little more uniform. - - Added Buginese script "Lontara", with characters based on those in - font MPH2BDamase, on request from the maintainer of that font, - http://packages.debian.org/sid/ttf-mph-2b-damase - - Note the glyphs are pretty rough, clearly a digitization of handwriting. - I just cleaned them up, and corrected discrepancies with Unicode, - and compared with some pictorial samples of the script I could find. - -2008-04-29 Steve White - * ranges.py: - - Improved look a lot--still unhappy with some ranges - OS/2 seems sometimes bang-on, sometimes unrelated to anything (including - fontforge's OS/2 listing) - - * FreeSerif.sfd: - - Much fiddling with Tamil range. - First scaled to 78% (avoiding the references) - This gets it in the ballpark height-wise. [A bit taller than the Latin - letters, but the stroke is narrower, but then the glyphs are busier.] - Then had to re-align combined references, the trickiest being the - halants. - Checked with other fonts with Tamil text. - -2008-04-28 Steve White - * FreeSans.sfd, FreeSerif.sfd: - - Cleanup of control points in Arabic and Thaana - - * FreeSerif.sfd: - - Cleanup of missing extrema in Arabic and Thaana - - Many changes to Thai, trying to make the script fit between some lines, - so accents won't get clipped, etc. - Also, stroke weight was heavier than that of Latin. - - Scaled whole thing by 93%. - Shrank the tallest letters 0E42-4 to get them under 900EM. - Shaved off top of maiek. - Fiddled with positioning of all accents. - Made positioning tables for accents. - Note: unclear these are working correctly - - Fixed a bug having to do with character replacements for characters - named 'ng' and 'nj'; these names had been taken on by other characters. - - Made to validate - - Unicode positions of two Cyrillic Extended characters were switched. - Fiddled with a couple of Cyrillic combining diacritics - -2008-04-27 Steve White - * FreeSans.sfd: - - bugfix: a left harpoon mysteriously appeared to the left of letter p! - -2008-04-26 Steve White - * FreeMono.sfd: - - Made to validate - - * FreeSans.sfd: - - Made to validate - - Toward J. Poons report - Made 032B more like proper double-arches (and distinct fro 033C seagull) - Made 032b more like a seagull - - * FreeSans.sfd, FreeSansBold.sfd: - - Sans: fiddling with widths and terminators of math symbols, - toward J. Poon's report - R & B: removed u+2741 because it didn't match the Unicode description - - * FreeMono.sfd: - - Extensible parenthesis symbols weight/terminators - Toward bug # 23064: https://savannah.gnu.org/bugs/index.php?23064 - Rounded a bunch of terminators - -2008-04-22 Steve White - * FreeSerif.sfd: - - Small alignment problem in Greek Extended - - One more tweek to spacing in Cyrillic Extended - - Corrected spacing in Cyrillic Supplement - - Added Cyrillic Supplement letters for - Enets, Khanty, Chukchi, Itelmen, Mordvin, Kurdish, Aleut - - Added Cyrillic letters for Nivkh (completing Cyrillic range) - More tightening of accents in Latin Extended. - - * FreeSans.sfd: - - Fiddled with math--consequences of changing the "similar" operator - - More tightening of accents - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Adjustments to h and k with caron and cedilla in Latin A and B - - * FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd: - - FreeSerifBold: deleted 3 dotted Hebrew letters in Private/Corporate use - (E801-3). They weren't ligatures or in any other lookup, and they - weren't present in FreeSerif. - - * FreeSansBold: - Unlinked and deleted F6C3, which called itself commaaccent. - Made some new spacing and non-spacing accents to make up for it. - - * FreeSansBoldOblique: - Made references of many Latin Extended. - Also corrected several wrong ones. - - * Freeserif: - Re-named commaaccent - -2008-04-21 Steve White - * FreeMono.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSerif.sfd, FreeSerifBold.sfd: - - Deleted Hiragana and Katakana ranges, as discussed on bugs list. - Cleaned up some encoding issues, unnamed glyphs - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Roman: added 'sine' -- not beautiful, but I liked drawing it - All: Made special lookup for Dutch ligatures 'IJ' and 'ij' - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Roman: ffi etc Latin ligatures from 'liga' to 'dlig' (these weren't - really ligatures anyway, and only looked very bad when used. - Retain for condensed type. - Others: deleted Latin 'liga' table altogether - BoldOblique : added j to ij ligature - - Toward J. Poon's Report: - Except for issues of terminators not always vertical or horizontal, - and a few things that were too hard or I was unsure of. - -2008-04-20 Steve White - * FreeSerif.sfd: - - Futzing with accents in Latin Extended Additional and Latin Extended-B - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Added primemod character, referenced by Greek number sign - - * FreeMono.sfd, FreeMonoOblique.sfd: - - Following J. Poon's report, disconnected NJ (01CA) - -2008-04-19 Steve White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - First pass throught J. Poon's bug list. - See bug reports for details. - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Made underscore slanted in Oblique faces, made all to be width of - space character. - Towards J. Poon's report. - Disturbed that xterm and some other apps put small space between - characters when none was called for. - - * FreeMono.sfd, FreeMonoBold.sfd, FreeSans.sfd, FreeSansOblique.sfd: - - Corrections on Currency Symbols - - * FreeMono.sfd, FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - More corrections, additions to Currency Symbols - - * FreeSans.sfd, FreeSerif.sfd: - - Filled out and corrected Currency Symbols - -2008-04-18 Steve White - * FreeSans.sfd, FreeSerif.sfd: - - Adjustments to Combining Marks for Symbols - Additions to range in Sans, and re-structured its marks table so that - "middle" can apply to any range - - * FreeSerif.sfd, FreeSerifItalic.sfd: - - Made reference between combining koronis and lenis of Greek Extended. - In Serif, re-worked combining marks lookup tables, added anchors in - Latin, moved so without marks they work in kedit (but now I'm doubting - kedit does a reasonable thing...what is a better application for - testing this?) - -2008-04-16 Steve White - * FreeSerifItalic.sfd: - - Adjusting of spacing and accents in Greek - - * FreeMono.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansOblique.sfd, FreeSerif.sfd: - - Much futzing with Greek letter spacing and accents. - Added lenis to FreeMono. - - * FreeMono.sfd, FreeSerif.sfd: - - Adjusted spacing of dots of Greek dieresistonons in Serif - Whipped up something for Greek kappascript in Mono (could use revision) - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Raised dots on double-dotted Cyrillic i, to match that of i and j. - -2008-04-14 Steve White - * FreeMono.sfd: - - Corrected 27e6-7 "white bracket" - Note it is probably a FontForge bug these symbols aren't showing up. - FontForge thinks they are in Supplemental Arrows, but they should be - in Supplemental Math-A - - Named some Greek characters - - * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd: - - Spacing of some Cyrillic characters - -2008-04-13 Steve White - * FreeSerif.sfd: - - Some fiddling with accents - 'yogh' was too wide - - * FreeSansBold.sfd, FreeSansOblique.sfd: - - Character spacing was chaos--tried to improve. BoldOblique also needs - it. - - * FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd: - - Completed the fix of bug #12798, Greek glyphs with accents to side - Much mucking with accents here, and fixed a few things that were just - wrong. - -2008-04-12 Steve White - * FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Made Mono curly quotes "bent" - - * FreeMono.sfd: - - More fiddling with Greek accents - Made quotes "bent" - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Adjustments on Greek diaresistonos etc. - Adjustments in Serif on combining marks for symbols - - * FreeSerif.sfd: - - More additions to Combining marks for Symbols - - Additions to Combining marks for Symbols -- now mostly full. - Lots of adjustments to middle anchor point in Latin to make big circle - (nearly) encircle preceding latter - -2008-04-11 Steve White - * FreeMono.sfd: - - Bugfix: - Had indroduce a glyph of width other than 600, making kterminal not - recognize it as a monospace font. - -2008-04-10 Steve White - * FreeSans.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - More messing with accents. - Further to bug #12798, Greek glyphs with accents to side - Much messing with glyphs in Greek Extended range - -2008-04-09 Steve White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSerif.sfd: - - Revisited Latin-1 and Latin-A accents. - Glyph B7 was called "periodcentered", but Unicode callse it Mid Dot, - and the description doesn't refer to the period. I made it like the - dot accent. throughout, and referred L-dot to it. - - Also double-checked "commaaccent" characters (some in Unicode called - cedilla, but the Unicode example shows a comma...mystery) - - Also the funny IPA upside-down f often had two bars, incorrectly. - - To do: go through rest of Serif, and Sans - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Completed re-structuring of stacked Latin accents in Mono. - Also: lots of associated adjustments of Greek Extended accents. - (Trying to at least center extremely wide characters on their box) - Repaired some victems of "find overlaps" sweeps - Worked on glyphs with apostrope/comma parts - Corrected a few wrong glyphs. - - Trying out a "bent quotes" solution to making primes distinct from - quotes. - -2008-04-08 Steve White - * FreeMonoOblique.sfd: - - Toward reducing overall height - Did similar process as for Mono, fixing a few errors along the way. - Also the Greek Extended range was very messed up vertical and - horizontally. - Horizonal spacing of the heavily accented Greek is a real problem in - Mono... - To do: - revisit "commaaccent" characters in all faces: do some have - edillas? - some Hebrew glyphs are a little low - Georgian generally is way out of bounds - -2008-04-07 Steve White - * INSTALL: - - Various updates and corrections, tweeked formatting - - * FreeMonoBold.sfd: - - Tweeking of accents - -2008-04-06 Steve White - * FreeMono.sfd, FreeMonoBold.sfd: - - Re-worked accents in FreeMonoBold.sfd to make Latin ranges lie between - 800 and -200 EM, as with FreeMono. - - * FreeMono.sfd: - - Latin Extended ranges: Implemented new policy of shortening the letters - of the characters with the highest-stacked accents. - - At this point all the Latin glyphs lie betweeen 800 and -200 EM. - - Also checked for readability of all the Latin extended letters in xterm. - (Issue: it chops letters outside their bounding boxes; many accents had - been a bit outside. Made sure that if they were chopped, they were at - least still recognizable.) - -2008-04-05 Steve White - * FreeMono.sfd: - - Following exchange about Mono on freefont-bugs with Joe Wells, who - > doesn't like the curly quote marks - > wants combining diacritics to work - > wants tight line spacing - - Trying to reduce font height: - > exclamdown was below -200 - > Throughout Extended Greek, ypogegrammeni were too low. Shortened - glyph, and raised all references. - > Lots of messing with Latin Extended ranges to make glyphs mostly - fit into 800 height. Mostly succeeded. A couple will get chopped. - > Messed with "commaaccent" glyphs, which were very low - > Cyrillic 04B1 had a tail that was incorrectly low - > Much mucking with Georgian range. Moved up by 95 (read that Georgian - is written as though centered between two horizontal lines, rather than - as sitting on a baseline) There are still a few very high glyphs. - - FontForge U+0122 called Gcommaaccent, glyph looks like that, but - Unicode says it's Gcedilla. Made the ones called cedilla by Unicode - to be cedillas - - Note bug in Unicode: standard for 0122, 0123, 0136, 0137, 013B, 013C, - 0145, 0146, 0156, 0157 all talk about cedilla, say to make it with - cedilla, but example shows comma. - - By the way: - > Got rid of commaaccent and dotlessj in Corporate Use - > Replaced shadedark, with little squares now not overlapping. - > Corrected IPA symbol 'ts' 02A6, added 02a8, 02a9, 02aa, 02ab, 02ac, - 02ad, 02ae, 02af - - (so many changes...the CVS server was down...) - - * FreeSerif.sfd: - - Re-named arabic and hebrew characters - Big adjustment to comma-accents. Mostly effects Greek Extended. - Made such accents to be like comma, rather than like Russian apostrophe - (and de-referenced that symbol) - -2008-04-04 Steve White - * FreeMono.sfd, FreeSerif.sfd: - - Raised dot on superscript i (2071) -- more distinct at small sizes - - * FreeMono.sfd: - - added two IPA symbols - -2008-04-02 Steve White - * FreeSerif.sfd: - - fixed a few more control points too close - - Fixed names of languages in ligature table for latn "w/i". - This fixes a crash when FontForge opened the ttf table - - Motivated by bug crashing FontForge when opening ttf file, - started cleanup of useless control points. Not finished. - Got partway through Sinhala - -2008-03-31 Steve White - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoOblique.sfd, FreeSans.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Fixed various "Find Problems", including glyphs with mixed-up names, - and bad TT matrices. (lots more bad TT matrices remain) - - * FreeSerif.sfd: - - Re-named a bunch of Cyrillic letters - - * FreeSerif.sfd: - - Put above mark on Cyrillic i and double-dot i for Slavonic number forms - -2008-03-30 Steve White - * FreeSans.sfd: - - Tightened spacing on glyphs of last commit - - * FreeSans.sfd, FreeSerif.sfd: - - Concerning bug #16120, Include upper case Wynn and upper case Yogh - Adapted Herman Miller's Thyromanes letters 01F7 021C 021D for Serif - Drew my own versions for Sans. - - * FreeSerif.sfd: - - Added 04F6,7 - - * FreeSerif.sfd, FreeSerifItalic.sfd: - - Made more Cyrillic diacritics really combine. - Made a mark lookup just for Cyrillic diacritics, - Marked most of the unadorned Cyrillic alphabet. - - Still not clear on correct shapes for some of the marks. - - * FreeMono.sfd, FreeMonoOblique.sfd: - - Tweeks to accents - -2008-03-29 Steve White - * FreeSans.sfd, FreeSerifItalic.sfd: - - Small adjustments in Cyrillic - - * FreeSerif.sfd: - - Corrected small palochka - Made Cyrillic combining hundred-thousands and millions really combine - Named some combining diacriticals - - * FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd: - - Mostly adjusted horizontal spacing of mono oblique faces - - * FreeMono.sfd, FreeMonoBold.sfd, FreeMonoBoldOblique.sfd, FreeMonoOblique.sfd, FreeSansBold.sfd, FreeSansBoldOblique.sfd, FreeSansOblique.sfd, FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - More cleanup of Cyrillic ranges - - Completely re-did horizontal spacing of SerifItalic and SerifBoldItalic. - See bug #17912, poor kerning in Cyrillic oblique... - https://savannah.gnu.org/bugs/index.php?17912 - It looked like chaos to me. - Only so much can be done: the font is flawed. - But I think the changes make text readable in these faces. - - There were dozens of incorrect glyphs in higher-numbered characters. - I deleted all those I found. No glyph is better than a wrong glyph. - - Futzt with accents, shooting for consistency and readability. - - A maintenance thing: making correct references (acyrillic vs a, - although they may be the same glyph) I made a lot of headway, but - it isn't finished. - - Likewise, a large fraction of these are compound characters, which can - be made with references, resulting in easier maintenance, reduced - likelihood of errors, and smaller files. I replaced many. - - * FreeSerif.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Cyrillic italic - Added italic, bolditalic - 0493, 04a7, 04AD - because their form clearly varies in italic. But was just guessing... - - * FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Cyrillic italic - - Added italic, bolditalic - 0493, 04AD - because their form clearly varies in italic. - But was just guessing as to exact form. - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Overhaul of Cyrillic - - Italic, BoldItalic - added small yat for bug #22588 (note Times New Roman doesn't use - alternate form in Italic) - - All forms of Serif have big problems in Cyrillic. - - The ugliest is in roman. The letters, even of the Russian alphabet, are - of inconsistent height (awfully, small 0438 (ii) 0446 (tse)) - and they vary from the height of Latin - and they vary from the height of italic and bold. - They are a mish-mash of letters from several fonts, of similar (but not - quite identical) weight, and similar, (but not quite identical) size. - - I think the best solution would be to identify the face that best - matches Latin, and fill the range with that. I think this is possible - because the rarer letters seem to be better: the common letters are the - ones that are wrong. - - For now, I just increased the sized of 0438 and 0446, and 048a, 048b, - also 0459 (lje) 045A (nje) 0464 (dje) - - Other issues - -2008-03-27 Steve White - * FreeSerifBoldItalic.sfd: - - Moving all Greek capitals with accent so they don't cover previous - letter. Remedies bug #12798 - - * FreeSerif.sfd, FreeSerifBold.sfd, FreeSerifBoldItalic.sfd, FreeSerifItalic.sfd: - - Various tweeks to accented Latin letters. - Connected O-ogonek correctly - - * FreeSerifItalic.sfd: - - Accents of numerous accented Latin letters got shifted in a previous - commit. This fixes it. - - * FreeSerif.sfd: - - Adjusted combining tack left and right (0318-0319) to be above -300 EM. - - * FreeSans.sfd, FreeSerif.sfd: - - Added some "middle" marks for positioning of diacritics - - * FreeSans.sfd: - - Copied 4 enclosing combining diacriticals from Serif 20DD - 20E0 - - * FreeSerif.sfd: - - Adjusted and added some enclosing diacritics 20DD - 20E0 - In response to Debian bug #472566 - ttf-freefont: U+20DD COMBINING ENCOLSING CIRCLE doesn't combine - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=472566 - -2008-03-26 Steve White - * FreeSerif.sfd: - - Lowered a few over-high Latin accents - - * FreeSansBold: - - Devangari--only digits 1 and 2, and nothing else. Deleted - - * FreeMonoBold, FreeMonoOblique, - FreeSerifBold, FreeSeriftalic, FreeSerifBoldItalic, - FreeSansOblique, FreeSansBold, FreeSansBoldOblique: - - Got rid of dotlessj, comma in Corporate Use - Single Substitution lookup, ccmp table - Made proper dotlessj, re-linked j-circumflex - - Note: - FreeSansBold has a commaaccent in Corporate Use, used by several other - characers. Haven't done anything about this. - -2008-03-25 Steve White - * FreeSerif.sfd: - - Added/corrected glyphs for yeh hamza in Arabic, - Added init and medi lookups for yeh hamza. - -2008-03-24 Steve White - * FreeSerif.sfd: - - Added isolated and final forms for - 0629 teh marbuta - 0624 waw hamza - 0626 yeh hamza - 0649 alef maksura - A previous commit had added lookups that referred to these, - - More fiddling with super/subscripts - - * Makefile, Makefile, GenerateTrueType: - - Scripts and Make targets to generate OpenType fonts and zip file - - * maintenance.txt: - - Added gnupload and info about tagging - -2008-03-23 Steve White - * FreeSerif.sfd: - - Last of Find Problems -> ATT - 'mark' Latin lookup: afii10026 is in 'cyrl', also afii10074 - Upper and lower Cyrillic i. Just removed mark from both letters. - - 'half' Bengali lookup Khanda_Ta is in 'bng2'. Added bng2 to lookup - Added TtTable etc - - Clean-up of Points too Close through to end of font. - This episode completes the paths/points clean-up of Serif. - But note: many ranges, esp. Ethiopic, Japanese, and Indic, have way - too many points, resulting in lumpiness. - - At this point, FontForge can convert splines to quadratic, auto-hint, - and auto-instrument without segfault. - - * Makefile, sfd/Makefile, tools/GenerateTrueType: - - Alterations to build process: added a Makefile, and made to work - on my system. Now auto-hints before generating TrueType. - -2008-03-22 Steve White - * sfd/FreeSans.sfd: - Lots of additions of math characters. Should complete for - LaTeX 2e, except for extensible brackets. - -2008-03-21 Steve White - * *.sfd: - - Regularized stacking of accents in Latin Extended Additional - Changed name of 00B5 from 'mu' to 'micro', - 2206 from 'Delta' to 'Delta.math', - 0308 from 'diaerisis' to 'diaerisiscomb' - - * FreeMono.sfd: - - additions to IPA - - * FreeMonoBoldOblique.sfd: - - Moved dotlessj from Corporate Use, - Deleted commaaccent there - Fixed mis-named glyphs tcommaaccent, Tcommaaccent - Changed name of 030A from 'dieresis' to 'ringcomb' - - * FreeSans.sfd: - - Added some arrows, and a couple of blackboard bold characters - - Several characters in U+F600 Corporate Use range - dotlessj, onefitted, commaaccent - - dotlessj referred to by: jcircumflex, uni01F0: - renamed it to uFFFF, re-linked others by hand - - commaaccent - http://diacritics.typo.cz/index.php?id=9 - should be u+0326 but wasn't linked to anything - - * FreeSansBold.sfd: - - U+0617 etc: read glyphs "4GWglm". It should be Arabic. Deleted - - * FreeSansBold.sfd, FreeSansOblique.sfd, FreeSansBoldOblique.sfd: - - Removed bogus glyphs for 200C 200D, ZWJ and ZWNJ - - * FreeSerif.sfd: - - Split lookup for ligatures in latin into two classes; - ff, ffl, fl which are appropriate for all languages, - and fi, ffi, which are not appropriate in Turkish (due to distinction - between short and long i) - Needs to be done for other faces. - - Filled set of extensible brackets in Miscellaneous Technical - - Think IPA is now complete. - -2008-03-18 Steve White - * FreeSans.sfd: - - clean-up of all path issues and points too close - -2008-03-18 Steve White - * FreeSans.sfd: - - Something was causing crashing effects in Windows. Cleanup of - problems eventually made it go away. Now works well. - - Cleaned up many "points too close" - - Cleaned up all ATT problems, of which there were many and various. - - # Incorrectly labelled zero-width joiner used in a ligature - - # Incorrect substitution of dotlessi and dotlessj with i and j was - somehow connected with FontForge crash. Attemts to remove the - substitution would damage a 'ccmp' table; subsequent changes would - result in FontForge crashing on save, and truncating the sfd file. - Surgically removed with vi. - - # A couple of Indic lookups had incorrect script DFLT; one had 'latn'. - - # Don't understand why there are scripts named - dev2 bng2 grj2 gur2 when there are already deva beng gurj guru - But anyway, lots of 'vatu' 'pres' 'haln' and 'liga' lookups contained - characters in the '2' scripts but were lablled only for the 'non-2' - ones. Added the '2' scripts to all these lookups. Suspect a mistake. - - Note: several of these problems are repeated in other Sans faces. - -2008-03-16 Steve White - * FreeMono.sfd: - - Cleanup of many path problems "points too close" - - Strove to make accents Latin Extended range legible at small sizes - - Named some unnamed characters; removed a duplicate - - At this point, all fonts are passing FontForge Validate. - -2008-03-15 Steve White - * FreeSerif.sfd: - - CJK punctuation: made some of the very high glyphs smaller (under 900EM) - The brackets in Sans were very ugly, and not even Sans-serif. - Serif: added extensible square brackets, diddled with integral - corrected direction of some added glyphs - - Several bugs having to do with missing glyphs in Tamil range. - Also a buggy ligature in Devangari. - - Shortened names of many lookup tables - - Futzt with some combining diacriticals - - Added extensible square brackets. - - * FreeSans.sfd: - - Changed names of a bunch of glyphs with invalid - TrueType names, in range 0x1025f+ (not real Unicode). - Took pains to retain information contained in the names. - Wonder if these glyphs have ever been of any use. - - CJK Punctuation: brackets were hand-drawn and very ugly. Improved. - - * *.sfd: - - Set OS/2 Metrics back to absolute 900/300. Offsets are not - interpreted uniformly. - - Cleanup of many path problems up to extrema and self-intersecting - - Ordered PS Blue values. - -2008-03-14 Steve White - * FreeSerif.sfd: - - Got rid of mixed references and contours - Cleanup of many path problems "points too close" - - Started clean-up to satisfy FontForge Validate - - Changed names of three glyphs in the - Tamil ligatures range...all clearly bugs. - - * FreeSans.sfd: - - Added slanted-hyphen - - * *.sfd: - - Unified OS/2 Metrics - Added Grid Fit - -2008-03-13 Steve White - * FreeSans.sfd: - - Rearranged PS BluesValues so they were in increasing order, - Made all 20 in width. - -2008-03-12 Steve White - * FreeSans.sfd, FreeMono.sfd: - - Added TrueType hinting tables. - Fixed glyphs that didn't convert well to quadratics - Got rid of mixed contours and refs - - * FreeSerifBold.sfd: - - Cleanup of path problems - -2008-03-11 Steve White - * FreeMonoOblique.sfd: - - Cleanup of path problems - -2008-03-09 Steve White - * FreeSerif.sfd: - - Corrected L-dot - Further cleanup of path/ref problems - - Found several ligatures that referred to a missing glyph "ZWJ". - Took this to mean the "zero width joiner" u+200D - - * *.sfd: - - Changed OS/2 metrics to be absolute 900/300 - - * FreeSerifItalic.sfd: - - Added Greek lunate epsilon - - * FreeMono.sfd: - - Many additions in math range - Reduced size of binary union, intersection, vee, wedge - Corrected empty set - Corrected logical 'assert' relations, etc. 22a2-22af - Efforts to make Math glyphs legible at small point sizes - - * FreeSans.sfd: - - Added Greek lunate epsilon and rho symbol - Unstacked more stacked diacriticals - - Further cleanup of path/reference problems - -2008-03-08 Steve White - * FreeSans.sfd, FreeSerif.sfd: - - Added some "n-ary" Math operators - - * FreeSerif.sfd: - - Further clean-up of path problems...up to Ethiopic - > Started adding and correcting Math operators for LaTeX 2e - > Corrected n-ary union, intersection, and spikes to be larger - than the binary operators - > Made (many of) the operators based on + - = to use those - symbols directly (by reference or copying). - > Added lunate epsilon - > Corrected empty set - > Tightened up spacing of some other technical characters - > Worked on some more math operators involving = - > triangle - > Several arrows - > Supplemental Arrows-A - - * FreeSans.sfd: - - Clean-up of font paths - Open self-intersecting outermost-clockwise missing-extrema - also flipped references (unlinked) - - Added Greek lunate epsilon and rho symbol - -2008-03-06 Steve White - * sfd/FreeSerif.sfd: Shortened and thickened the combining hook mark, - U+0309, to make more like Unicode samples. - Also see (bug #22499) un-stacked incorrectly stacked accents - -2008-03-05 Steve White - * sfd/FreeSerif.sfd: vertical lines: combining diacritical marks - corrected 0300 030D 0329 0348 (were rendered as straight apostrophes) - Spacing Modifier letters added 02C8 02CC - 02B9 02Ba prime and double-prime - Fixed positioning U+1EC8, 9, I with hook above - -2008-03-03 Steve White - * sfd/FreeSerif.sfd: TT strings updates. - updated Copyright to 2008 - Added Vendor URL as the Savannah freefont site - * sfd/FreeMono.sfd: A standard pangram as the Sample Text for Russian - It reads: In the thickets of the South once there was a citrus - ...--yes, but a fake specimen! - * sfd/*.sfd: Set the OS/2 Sup/Sub settings, which by default looked - like random trash. - -2008-03-02 Steve White - * sfd/FreeSerif.sfd: began cleanup of problems given by FontForge - "Find Problems" feature. (bug #22454) - -2008-03-01 Steve White - * sfd/FreeSerif.sfd: made Arabic work for text display (bug #22329) - Added required contextual replacement tables, - Made a few missing characters, - * sfd/*.sfd: Removde all back layers from glyphs that had them. - -2008-02-27 Steve White - * sfd/FreeSans.sfd: filled in Combining Diacriticals - * sfd/FreeSerif.sfd: shifted whole Arabic range down by 200EM. - -2008-02-26 Steve White - * sfd/FreeSerif.sfd: enabled DPOS table. - -2008-02-24 Steve White - * sfd/*.sfd: Much fiddling with the "combining diacriticals" - range 0300-036F. Made to align with medium-size lowercase - preceding character if not using DPOS table. - -2008-02-23 Steve White - * sfd/FreeSerif.sfd, FreeSans.sfd, FreeMono.sfd: (bug #21784) Filled - in set of HTML 4 Character Entities. - - * sfd/FreeSerif.sfd, FreeSans.sfd, FreeMono.sfd: (bug #18413) - undertie too low -- went on to tidy other similar characters in - Combining Diacriticals range. - -2008-02-21 Steve White - * sfd/*.sfd: Moved capital Greek letters with tonos so tonos doesn't - cover preceding letter (bug #12798) - - * sfd/FreeSerif.sfd, FreeSans.sfd: (bug #13370) made extended - integrals to line up. - -2008-02-20 Steve White - * sfd/*.sfd: started removing glyphs with back layers (printing bug) - * sfd/*.sfd: adjusted vulgar fractions (bug #17756) - * sfd/*.sfd: adjusted numerical superscripts (bug #20278) - -2008-02-18 Steve White - * sfd/FreeSerif.sfd: Offset Hiragana and Katakana ranges (bug #22326) - * sfd/FreeSerif.sfd: U+30FB, KATAKANA MIDDLE DOT to be full width - (bug #18326) - - * sfd/FreeSerif.sfd: Re-promoted - ff ffi ffl fi fl - as standard ligatures in Latin. - -2008-02-17 Steve White - * sfd/*.sfd: committed to FontForge Spline Font Database (SFD) 2 - format. - -2008-02-10 Steve White - * sfd/*.sfd: brought into line with Debian ttf-freefont - Deleted a couple of patches, and applied those applied to Debian. - -2006-09-20 Primoz Peterlin - - * INSTALL: added installation procedure for MacOS X, courtesy - Philipp Kempgen. - -2006-05-04 Primoz Peterlin - - * sfd/FreeMono.sfd: deleted Russian sample text, which did not - conform to UTF-7. - -2006-04-15 Primoz Peterlin - - * sfd/FreeSerif.sfd: corrected U+10D3. - - * sfd/FreeSans.sfd: ligature U+FB06 (LATIN SMALL LIGATURE S T) - changed from mandatory ("liga") to discretionary ("dlig") (bug - #16253). - - * sfd/FreeMono.sfd: deleted incomplete glyph U+FB06 (LATIN SMALL - LIGATURE S T); deleted U+FB00, U+FB01, U+FB02, U+FB05 as - ligatures (bug #16253). - - * sfd/FreeMonoOblique.sfd, sfd/FreeMonoBoldOblique.sfd: added - U+FB00; deleted U+FB01, U+FB02 as ligatures (bug #16253). - - * sfd/FreeMonoBold.sfd: deleted U+FB00, U+FB01, U+FB02 as - ligatures (bug #16253). - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd: added Georgian letters, donated by - Gia Shervashidze - -2006-02-22 Primoz Peterlin - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd: ligature U+FB4F - changed from mandatory ("liga") to discretionary ("dlig"). This is - respons to Bug#349657: [bug #15792] Freefont Alef and Lamed - combine - -2006-02-21 Primoz Peterlin - - * sfd/FreeSerifBold.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd, - sfd/FreeSansBold.sfd: ligature U+FB4F changed from mandatory - ("liga") to discretionary ("dlig"). This is respons to Bug#349657: - [bug #15792] Freefont Alef and Lamed combine - - * sfd/FreeSerif.sfd: corrected bug#275759: [bug #15790] FreeSerif - glyphs for U+2198/U+2199 were reversed. - -2006-02-15 Denis Jacquerye - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeMonoBold.sfd: removed ij - and IJ ligatures. - -2006-02-10 Primoz Peterlin - - * sfd/FreeSerif.sfd: added small Georgian letters (mkhedruli), - donated by Gia Shervashidze - - * AUTHORS: Added Gia Shervashidze - - * CREDITS: Added Gia Shervashidze - -2006-01-26 Primoz Peterlin - - * notes/maintenance.txt: Added information on the Makefile now - used; username for FTP login is anonymous. - - * sfd/FreeSansBold.sfd: added U+0569, U+0571, U+0579, U+057B, - U+0586. Armenian small letters completed. - - * sfd/FreeSerif.sfd: added U+0297, U+02AD-02AF. IPA Extensions - section is now complete. Copied a dozen of glyphs from Omega IPA - to Phonetic Extension section. - -2006-01-25 Primoz Peterlin - - * sfd/FreeSans.sfd: added U+01A, U+01A3, U+01A6, U+01B2, U+01BA, - U+01BB, U+01BE, U+01BF. - - * sfd/FreeSans.sfd: aligned small Armenian letters to x-height in - response to bug #15480. Armenian in Free Sans needs a major - cleanup. - -2006-01-24 Primoz Peterlin - - * sfd/FreeSerif.sfd: changed U+0452, U+045B. Cleanup: U+0460, - U+0461, U+04Bc, U+04BD, U+0508. - - * sfd/FreeSansOblique.sfd: replaced accented chars in Latin-1 and - Latin Extended-B sections with references, where possible. - - * sfd/FreeSerif.sfd: changed U+0285. - -2006-01-23 Primoz Peterlin - - * sfd/FreeSans.sfd: added U+0195, U+01AA, U+0297, U+03D7, - U+03F0. Several flipped references replaced by outlines. - - * sfd/FreeSansOblique.sfd: Latin Extended-B section more or less - brought in sync with FreeSans. - - * sfd/FreeMonoBoldOblique.sfd: added glyphs from FreeMonoBold in - the Latin Extended-B and IPA Extensions sections. - - * sfd/FreeSerifBold.sfd: Added U+0224, U+0225. Changed U+01B7, - U+01B8, U+04E0, U+0452, U+045B. Replaced accented characters in - the Cyrillic region with references. - -2006-01-21 Primoz Peterlin - - * sfd/FreeSans.sfd: added U+0255, U+0264, U+0277, U+0286, - U+029D. Changed U+0261. Deleted spurious glyphs in the control - code area. - -2006-01-19 Primoz Peterlin - - * sfd/FreeSans.sfd: replaced Hardip Pannu Singh's Gurmukhi with - AnmolUni by Kulbir Singh Thind. - -2006-01-17 Primoz Peterlin - - * sfd/FreeSansBold.sfd: Added U+018D, U+0194, U+01B5, U+01B6, - U+01BE, U+0262, U+02A2. - - * sfd/FreeSansBold.sfd: Changed U+0261 in order to distinguish it - from U+0067. Changed U+0251, U+0252. - - * sfd/FreeSerifBold.sfd: Small changes in the Cyrillic - section. Added U+0183, U+018C. - - * sfd/FreeSans.sfd: Added U+2045, U+2046. - - * sfd/FreeSansBold.sfd: Filled in the Gurkmukhi part with the - AnmolUni-Bold by Kulbir Singh Thind. Also some minor corrections - in the Cyrillic part. - - * CREDITS: Added Kulbir Singh Thind. - - * AUTHORS: Added Kulbir Singh Thind. - -2006-01-14 Primoz Peterlin - - * sfd/FreeSerif.sfd: Thomas Ridgeway's Tamil characters replaced - by the ones released by the Samyak font project. - - * CREDITS: Added Pravin Satpute, Bageshri Salvi, Rahul Bhalerao - and Sandeep Shedmake - - * AUTHORS: Added Pravin Satpute, Bageshri Salvi, Rahul Bhalerao - and Sandeep Shedmake - -2006-01-08 Primoz Peterlin - - * sfd/FreeSansBold.sfd, sfd/FreeMonoBoldOblique.sfd: minor changes. - -2006-01-05 Denis Jacquerye - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd: added cedi sign U+20B5, Ghanaian - currency - -2005-12-29 Primoz Peterlin - - * sfd/FreeSans.sfd: minor cleanup in the Gujarati part. - -2005-12-22 Primoz Peterlin - - * sfd/FreeSans.sfd: Devanagari and Gujarati parts cleared; once - again merged with Gargi 1.9 and Padmaa 0.6, this time correctly so - that the anchor points survived the merger. - -2005-12-16 Primoz Peterlin - - * sfd/FreeSans.sfd: added U+0577. - -2005-12-15 Primoz Peterlin - - * sfd/FreeSans.sfd: added U+0559, U+055F, U+2024. - - * sfd/FreeSansBold.sfd: added U+056E, U+0573. - -2005-12-14 Primoz Peterlin - - * sfd/FreeSans.sfd: Merged with Gargi 1.9 and Padmaa 0.6, - courtesy Monika Shah and Sonali Sonania from C-DAC, Mumbai. - - * CREDITS: Added Monika Shah and Sonali Sonania. - - * AUTHORS: Added Monika Shah and Sonali Sonania. - -2005-12-13 Primoz Peterlin - - * sfd/FreeSans.sfd - Removed Sinhala glyphs. - - * sfd/FreeSerif.sfd - Added Sinhala glyphs, formerly in FreeSans. - -2005-12-09 Primoz Peterlin - - * sfd/FreeSerif.sfd: added U+20AF, U+211E. Changed U+20AC (EURO - SIGN). - - * tools/freefont-ttf.spec: Added specification file for building - RPM package, courtesy Rok Papez. - - * sfd/FreeSerifBold.sfd: added more glyphs from Txfonts to the - Arrows and Mathematical Symbols ranges. - - * sfd/FreeSerifBoldItalic.sfd: added U+03F5 from Txfonts. - -2005-12-08 Primoz Peterlin - - * sfd/FreeSans.sfd: added U+0567, U+056A, U+056C, U+0582. - - * sfd/FreeSerifBold.sfd: copied Box Drawing range from FreeSans. - - * sfd/FreeSerifBold.sfd: added glyphs from Txfonts to the Arrows - and Mathematical Symbols ranges. - - * sfd/FreeSerif.sfd: added U+2259-225A, U+22BA, U+2308-230B, - U+2322-2323. Cyrillic composite characters replaced with - references. - -2005-12-07 Primoz Peterlin - - * sfd/FreeSerifBold.sfd: added U+025A, U+025D, U+026B, U+029B, - U+02AE, U+02AF, U+02DE. - - * sfd/FreeSerifBold.sfd: updated Hebrew part with Drugulin font - from the Culmus project. - - * sfd/FreeSerif.sfd: added U+207A-207C, U+208A-208C, U+2215-2216. - - * sfd/FreeSans.sfd: added U+2320 TOP HALF INTEGRAL, U+23AE - INTEGRAL EXTENSION, U+2321 BOTTOM HALF INTEGRAL (bug #13370). - -2005-12-07 Primoz Peterlin - - * sfd/FreeSerifBold.sfd: added U+0294-0296, U+02A1-02A2. Started - adding "below" anchors. Performed hinting on characters that were - not hinted "en masse". - -2005-12-06 Primoz Peterlin - - * sfd/FreeSans.sfd: fixed some more metrics problems in the - Extended Greek area; performed hinting on characters that were not - hinted "en masse". - - * Makefile: clean also signature files. - - * sfd/FreeMonoBoldOblique.sfd, sfd/FreeMonoBold.sfd: cosmetic - changes; cleaning background of referenced composed characters. - -2005-12-05 Panayotis Katsaloulis - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd: Some changes to the greek glyphs, - mostly having to do with "tonos" (accent) - -2005-12-05 Primoz Peterlin - - * sfd/FreeSans.sfd: minor cosmetic changes. - - * sfd/FreeSans.sfd: adjusted widths of characters in the Extended - Greek range; accents are not any more considerably overhanging on - the left side. Added U+1EDA-1EE3, U+1EE8-1EF1. - - * sfd/FreeSans.sfd: continued working on Extended Greek range; - metrics still not finished. - -2005-12-03 Primoz Peterlin - - * sfd/FreeSans.sfd: fixed combined Greek accents (bug - #12800). Width of characters still need to be adjusted as in - FreeSerif. - - * sfd/FreeSerif.sfd: fixed positions of Greek accents (bug #12798). - - * CREDITS: Added Panayotis Katsaloulis. - - * AUTHORS: Added Panayotis Katsaloulis. - - * Makefile: minor changes; now creating also a tarfile with sfds. - -2005-12-01 Primoz Peterlin - - * sfd/FreeSerifItalic.sfd: added U+0183, U+018C, U+01C0, U+01C1, - U+01C3, U+01E0, U+01E1, U+01F8, U+01F9. - - * Makefile: created a Makefile to assist building. - - * README: an update. - - * COPYING: added GNU General Public License, version 2. - - * tools/GenerateTrueType: wrote a FontForge script for conversion - to TrueType. - - * sfd/FreeSerif.sfd: merged with SolaimanLipi Bangla OpenType font - from www.ekushey.org, courtesy Solaiman Karim. - - * sfd/FreeSerifItalic.sfd: merged with SolaimanLipi Bangla - OpenType font from www.ekushey.org, slanted by 15.5 degrees. - - * sfd/FreeSans.sfd: merged with Rupali Bangla OpenType font from - www.ekushey.org - - * sfd/FreeSansOblique.sfd: merged with Rupali Bangla OpenType font from - www.ekushey.org, slanted by 12 degrees. - - * CREDITS: added Solaiman Karim - - * AUTHORS: added Solaiman Karim - -2005-11-30 Primoz Peterlin - - * sfd/FreeSerif.sfd: merged with the Rachana Normal. - - * AUTHORS: added K.H. Hussain and R. Chitrajan - - * CREDITS: added K.H. Hussain and R. Chitrajan - -2005-11-23 Primoz Peterlin - - * sfd/FreeSans.sfd - cleaned some background images. - - * sfd/FreeSans.sfd - added U+01A0-01A1, U+01AF-01B0, U+026E, - U+028F, U+0291, U+02A3-02A5, U+031B. Modified U+0198. - -2005-11-22 Primoz Peterlin - - * sfd/FreeSans.sfd - added U+2504-250B. - - * sfd/FreeSans.sfd - added U+2591-25A1, U+25A3-25A5, U+25AA, U+25AC. - - * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd - added U+0263. - -2005-11-21 Primoz Peterlin - - * sfd/FreeMono.sfd - corrected positions of some Greek diacritics - on page 0x1F. - - * sfd/FreeMonoOblique.sfd - working on bringing it in sync with - FreeMono.sfd. - - * sfd/FreeSerifBoldItalic.sfd - applied the sequence suggested by - Werner Lemberg for reducing redundant points. Added a couple of - glyphs in the IPA Extensions region. - - * sfd/FreeSansBold.sfd - added U+0574, U+0576. Removed overlaps. - -2005-11-20 Primoz Peterlin - - * sfd/FreeSerif.sfd - added U+02AA-02AC, U+02B0-02B2. - -2005-11-19 Primoz Peterlin - - * sfd/FreeSans.sfd - added U+01B7-01B9, U+0196, U+019A, U+01C3, - U+0224-0225, U+025E, U+029A, U+2422. Changed U+0184-0185, U+0192, - U+01B4, U+0282, U+0284. - -2005-11-18 Primoz Peterlin - - * sfd/FreeSerif.sfd - added U+02EE, U+207F. - - * sfd/FreeSans.sfd - started Box Drawing area. - -2005-11-17 Primoz Peterlin - - * sfd/FreeSerifBold.sfd - added glyphs from the Omega project to - Latin Extended-B, IPA Extensions and Greek ranges. - - * sfd/FreeSerifBoldItalic.sfd - added glyphs from the Omega - project to Latin Extended-B, IPA Extensions and Greek ranges. - - * sfd/FreeSerifItalic.sfd - added glyphs from the Omega - project to Latin Extended-B, IPA Extensions and Greek ranges. - - * sfd/FreeSerifItalic.sfd - added U+018B, U+025C, U+0265, U+026F, - U+0279, U+0287, U+028C-028E, U+029E. - - * sfd/FreeSerifBoldItalic.sfd - added U+1EDA-1EE3, U+1EE8-1EF1, - U+2190-219B, U+219E-21A8, U+21B9-21BA, U+21C4-21CA, U+21E4-21E5, - U+2669-266F. MES-1 compliant. - - * sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSansOblique.sfd, - sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd - added U+FFFD. - - * sfd/FreeSerif.sfd - removed overlaps in Latin Extended-B and IPA - Extensions ranges. - -2005-11-16 Primoz Peterlin - - * sfd/FreeSerifItalic.sfd - applied the sequence suggested by - Werner Lemberg for reducing redundant points. - - * sfd/papers/eurotex2003/freefont.tex, - sfd/papers/eurotex2003/freefont.bib - Revised version, sent back - by Karl Berry on 20050110, that should match the one published in - TUGboat. - - * sfd/FreeSerifItalic.sfd - started added accent anchors. Added a - handful of Greek letters from Omega font collection. - - * sfd/FreeSerif.sfd - added a handful of letters in the Latin - Extended-B and IPA Extension ranges from the Omega font collection. - -2005-11-16 Denis Jacquerye - - * sfd/FreeSerif.sfd - moved U+0263 to U+0264; added U+0263 - - * sfd/FreeSerifItalic.sfd - fixe U+01EE; added U+01B7-U+01B9 - -2005-11-16 Primoz Peterlin - - * sfd/FreeSans.sfd - Made small Greek letters the same height as - Latin and Cyrillic ones and replaced them with references, where - applicable. - - * sfd/FreeSerif.sfd - replaced Greek letters with references, - where applicable. Added U+03D7, U+03F0-03F2. - - * sfd/FreeSerif.sfd - added U+0255, U+025A, U+025D, U+025F, - U+0262-0263, U+026B-026C, U+0274, U+0276-0277, U+028F, U+0291, - U+029D. - - * sfd/FreeMonoOblique.sfd - applied the sequence suggested by - Werner Lemberg for reducing redundant points. Added U+F6BE. - - * sfd/FreeSansOblique.sfd - applied the sequence suggested by - Werner Lemberg for reducing redundant points. - - * sfd/FreeSans.sfd - changed U+01A5. - -2005-11-16 Primoz Peterlin - - * sfd/FreeSans.sfd - applied the sequence suggested by Werner - Lemberg for reducing redundant points. Replaced accented glyphs in - the Latin-1 and Latin Extended-A areas with references. Made - capital Greek letters the same height as Latin and Cyrillic ones - and replaced them with references, where applicable. - -2005-11-15 Denis Jacquerye - - * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSansOblique.sfd - fixed - U+026A, it was a dotlessi and therefore like U+0069 when - accented. - -2005-11-15 Primoz Peterlin - - * sfd/FreeMonoBold.sfd - corrected Greek tonos (slanted instead of - a vertical line). - - * sfd/FreeMonoBoldOblique.sfd - applied the sequence suggested by - Werner Lemberg for reducing redundant points. Replaced accented - glyphs in the Latin-1 and Latin Extended-A areas with references. - -2005-11-14 Primoz Peterlin - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd - Added 2005 in copyright info. - - * sfd/FreeSansBoldOblique.sfd - applied the sequence suggested by - Werner Lemberg for reducing redundant points. Replaced accented - glyphs in the Latin-1 area with references. - - * sfd/FreeSansBoldOblique.sfd - added U+0180, U+0184, U+0185, - U+0195, U+01A0-01A2, U+01AF-01B0, U+025E, U+026E, U+0292, - U+0294-0296, U+029A, U+02A1, U+2126-2127, U+2190-219B, - U+219E-21A8, U+21C4-21CA, U+2669-266F. MES-1 compliant. - - * sfd/FreeMono.sfd - Replaced accented glyphs in the Greek and - Cyrillic areas with references. - - * sfd/FreeMonoBold.sfd - applied the sequence suggested by Werner - Lemberg for reducing redundant points. Replaced accented glyphs in - the Latin-1 and Latin Extended-A areas with references. - -2005-11-14 Primoz Peterlin - - * sfd/FreeSerif.sfd - applied the sequence suggested by Werner - Lemberg for reducing redundant points. - - * sfd/FreeSansBold.sfd - added U+219A, U+219B, U+2669-266F. - - * sfd/FreeSerifBold.sfd - added U+2669-266F. - -2005-11-12 Primoz Peterlin - - * sfd/FreeSansBold.sfd - added U+0180, U+0181, U+0183, U+0187, - U+0188, U+018A, U+018C, U+018D, U+0193, U+019C, U+01A0, U+01A1, - U+01AC, U+01AF, U+01B0, U+025C, U+0260, U+026E, U+0277, U+0281, - U+0284. - -2005-11-11 Primoz Peterlin - - * sfd/FreeSansBold.sfd - added U+195, U+1A6, U+025E, U+026E, - U+029A, U+0313, U+0314, U+0342, U+0344, U+0345. Started adding - accent anchors. - - * sfd/FreeMono.sfd - applied the sequence for reducing redundant - points, suggested by Werner Lemberg. - - * sfd/FreeMono.sfd - corrected Greek letters (using tonos instead - of a vertical line). Added U+026E, U+F6BE. Accented characters in - Latin 1, Latin Extended A and partly Latin Extended B replaced by - references. - - * sfd/FreeSerifBold.sfd - applied the sequence for reducing - redundant points, suggested by Werner Lemberg. Added U+01A5, - U+02A0, U+2190-219B, U+219E-21A8, U+21B8, U+21B9, U+21C4-21CA, - U+21E4, U+21E5. - -2005-11-10 Primoz Peterlin - - * sfd/FreeSansOblique - changed U+0192, U+01A5; added U+01C0-01C3. - - * sfd/FreeSansBold.sfd - replaced glyphs with references in the - Cyrillic area. Removed U+04A8, U+04A9. Added U+04C5, U+04C6, - U+04C9, U+04CA, U+04CD, U+04CE, U+0535, U+053F, U+0546, U+0565, - U+0584, U+0587, U+0589. - -2005-11-10 Denis Jacquerye - - * sfd/FreeSans.sfd - added U+028A-U+028B - - * sfd/FreeSansOblique - added U+028A-U+028B, U+0276, - U+0292, U+0294-U+0296, U+0298-U+0299 and U+029B; fixed some - other glyphs - -2005-11-10 Primoz Peterlin - - * sfd/FreeSerif.sfd - added U+01A6. Simplified outlines in the - ASCII range. - - * sfd/FreeSansBold.sfd - added U+00A0, U+00AD, U+0531, U+2126, - U+2190-2199, U+219E-21A8, U+21C4-21CA. - - * sfd/FreeSansBold.sfd - applied the sequence for reducing - redundant points, suggested by Werner Lemberg. Added automatically - constructed accented characters in page 0x1E. - -2005-11-09 Primoz Peterlin - - * sfd/FreeSerif.sfd - added U+0183, U+018C. - - * sfd/FreeSans.sfd - added U+1EA2, U+1EA3, U+1EA8, U+1EA9, U+1EB2, - U+1EB3, U+1EBA, U+1EBB, U+1EC2, U+1EC3, U+1EC8, U+1EC9, U+1ECE, - U+1ECF, U+1ED4, U+1ED5, U+1EE6, U+1EE7, U+1EF6, U+1EF7, U+220A, - U+220B, U+220D, U+2272, U+2273, U+2282, U+2283. - - * sfd/FreeSerifItalic.sfd - changed U+03D5. - - * sfd/FreeSerifBoldItalic.sfd - changed U+03C6; added U+2070, - U+2075-2079, U+207F, U+2080, U+2085-2089, U+2155-217F. - - * sfd/FreeSerif.sfd - added U+0184, U+0185, U+018D, U+0195, - U+0197, U+019A, U+019B, U+01A0, U+01A1, U+01AC, U+01B5, U+01B6, - U+01C0, U+01C1, U+01C3, U+01F6, U+0294-0296, U+1E9A, U+1EDA-1EE3, - U+1EE8-1EF1. - -2005-11-07 Primoz Peterlin - - * sfd/FreeSansBold.sfd - added U+0562, U+056D. U+0575. - - * sfd/FreeMono.sfd - added U+0589. - -2005-11-06 Primoz Peterlin - - * sfd/FreeSans.sfd - added U+0278, U+03D5, U+2248. Corrected - U+2071, U+222E, U+2242, U+2243 in response to bug reports - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276118 - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276120 - - * sfd/FreeMono.sfd - added U+2227, U+2228, U+2262. Corrected - U+2299-229D in response to bug report - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=276121 - - * sfd/FreeMonoBold.sfd - added U+2010, U+2012 in response to bug - report http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=289032 - Swapped U+03C6 (Greek small letter phi) and U+03D5 (Greek phi - symbol) in order to conform to Unicode standard. Simplified glyph - shapes in ASCII range. Started adding "above" and "below" anchors. - -2005-11-05 Primoz Peterlin - - * sfd/FreeSerif.sfd - accented letters in Latin Extended-A - replaced by references wherever possible. - - * sfd/FreeSerif.sfd - added U+0180, U+0181, U+0187, U+0188, - U+018A, U+0193, U+019C, U+01A4, U+01A5, U+01A7, U+01A8, U+01AF, - U+01B0, U+026E, U+0270, U+0278, U+0280, U+0281, U+028B, U+0299, - U+029C, U+029F. - -2005-11-03 Primoz Peterlin - - * sfd/FreeSansBold.sfd - added U+0180, U+0184, U+0185, U+0192, - U+019B, U+01A0-01A2, U+01AF, U+01B0, U+01EE, U+01EF, U+0292, - U+0294-0296, U+02A1, U+0532, U+054C, U+057C, U+222B. Changed - U+014B, U+01A5, U+01B4, U+03BB. - - * sfd/FreeSans.sfd - added U+04C5, U+04C6, U+04C9, U+04CA, U+04D, - U+04CE. - - * sfd/FreeSansBold.sfd - cleaner Arabic outlines. Added U+01E4, - U+01E5. - -2005-11-02 Primoz Peterlin - - * sfd/FreeSansBold.sfd - started Armenian; added U+0538, U+0542, - U+0544, U+0548, U+054D, U+054F, U+0550, U+0553, U+0555, U+0561, - U+0563, U+0564, U+0566, U+0568 U+056B, U+056F, U+0570, U+0572, - U+0578, U+057A, U+057D-057F, U+0580, U+0581, U+0583, U+0585. - - * sfd/FreeMono.sfd - swapped U+03C6 (Greek small letter phi) and - U+03D5 (Greek phi symbol) in order to conform to Unicode standard. - Added U+04C5, U+04C6, U+04C9, U+04CA, U+04D, U+04CE. - -2005-11-01 Primoz Peterlin - - * sfd/FreeSansBold.sfd - modified U+019C. - - * sfd/FreeSansBoldOblique.sfd - added U+00A0, U+00AD, U+019C, - U+01B7, U+01B8, U+0275, U+0278, U+0298, U+2012, U+2015, - U+2070-207F, U+2080-208E, U+2153-217F, U+2213, U+2215. - -2005-10-31 Primoz Peterlin - - * sfd/FreeSerif.sfd - added U+0199, U+01AB, U+0265, U+0282, - U+0288, U+028C-028E, U+0290, U+029E, U+02A0. - -2005-10-28 Primoz Peterlin - - * sfd/FreeSerifBold.sfd - added U+019E, U+01AB, U+01AD, U+01B1, - U+0256, U+025F, U+0265, U+0269, U+026F, U+0270, U+0279-027F, - U+0282, U+0287, U+0288, U+028C-028E, U+0290. - - * sfd/FreeSerifBold.sfd - added U+2070, U+2075-2079, U+2080, - U+2085-2089, U+2153-215E, U+2113-2115, U+2119. - - * sfd/FreeSerifBold.sfd - added U+0199, U+019B, U+01B8, U+01B9, - U+01BE, U+01C0, U+0262, U+0274, U+0278, U+0280, U+028F, U+0298, - U+0299, U+029C, U+029E, U+029F, U+2012, U+2015, U+2016, U+2129, - U+2217. - -2005-10-27 Primoz Peterlin - - * sfd/FreeSans.sfd - added U+018D, U+0194, U+019B, U+019C, U+01B5, - U+01B6, U+0295, U+0296, U+029B, U+02A2, U+0472, U+0473, U+2114, - U+2119. - - * sfd/FreeSerifItalic.sfd - minor cleanup in the superscript range - (U+2070-2079). - - * sfd/FreeSansBold.sfd - added subscripts and superscripts - (U+2070-208F), completed fractions (U+2152-215F) and Roman - numerals (U+2160-217F). - - * sfd/FreeSerifBold.sfd - added U+018B, U+018E, U+018F, U+0191, - U+019D, U+01A7, U+01A8, U+01AE, U+0253, U+0266, U+0267, U+026A, - U+0271-0273, U+0283, U+0285. - -2005-10-26 Primoz Peterlin - - * sfd/FreeSans.sfd - added "above" anchors to selected Cyrillic - characters. Added U+0294, U+02A1. - - * sfd/FreeMono.sfd - added U+2011, U+2012, U+203B, U+204A, U+2071, - U+2129, U+2232, U+2233. Changed and/or corrected U+2106, U+211E, - U+2126, U+2127, U+2153-215F, U+2202. - - * sfd/FreeMono.sfd - a try to imitate Denis' work on adding - anchors by adding "above" anchor to a couple of basic Latin - characters. - - * sfd/FreeSansBold.sfd - added U+0278, U+0298. Cleaned up outlines - of most Greek letters. - - * sfd/FreeSansBold.sfd - Added U+2010-2012, U+2015, U+2032, - U+203C, U+2047-2049. - - * sfd/FreeSans.sfd - Added U+01C0-01C2, U+0276, U+0292, - U+0298. Changed U+0251, U+0294, U+02A1. - -2005-10-25 Primoz Peterlin - - * sfd/FreeSerifItalic.sfd - added U+00A0, U+00AD, U+2010-2012, - U+2015, U+2126, U+2127, U+2153-215E, U+2160-217F, U+2190-2193, - U+2669-266F. FreeSerifItalic is now MES-1 compliant. - - * sfd/FreeSerif.sfd - added U+0191, U+019D, U+01AE, U+027E, - U+027F, U+0283, U+0285. - - * sfd/FreeSerif.sfd - added U+019E, U+01AD, U+01B8, U+01B9, - U+0253, U+0256, U+0257, U+025C, U+0260, U+0266, U+0267, U+0269, - U+026D, U+0271-0273, U+0279-027D. - - * sfd/FreeSerifBoldItalic.sfd - added U+00A0, U+00AD, U+2010-2012, - U+2015, U+2032-2034, U+203C, U+2047-204A, U+2074, U+2081-2084, - U+2126, U+2153, U+2154, U+215F, U+2215. Corrected positions of - diacritics on U+0200-0217. - - * sfd/FreeSansOblique.sfd, sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeMonoBoldOblique.sfd, - sfd/FreeMonoBold.sfd, sfd/FreeSerifItalic.sfd, - sfd/FreeSerifBold.sfd sfd/FreeSerifBoldItalic.sfd - brought in - sync with Valek Filipov's urw-fonts-1.0.7pre41. - - * sfd/FreeSansOblique.sfd - added U+00A0, U+2011-2012, U+2015, - U+2070, U+2071, U+2074-2079, U+2080-2089, U+2126, U+2153-215F, - U+2190-2195, U+2215, U+266A. FreeSansOblique is now MES-1 - compliant. - -2005-10-24 Denis Jacquerye - - * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd - added - ccmp for i and j to be substituted with dotless i or j when - followed by above diacritic - -2005-10-24 Primoz Peterlin - - * sfd/FreeSans.sfd - added U+2011, U+2012, U+2015. FreeSans is now - MES-1 conformant. - -2005-10-23 Denis Jacquerye - - * sfd/FreeSans.sfd - added above, below, abovemk and belowmk - anchors for diacritics placement to many Basic Latin characters, - some Latin Extented A and B, and some IPA characters; fixed a - couple of precomposed characters to have diacritics at the same - height as similar characters. - -2005-10-21 Primoz Peterlin - - * sfd/FreeSerif.sfd - added U+02B9, U+02BA, U+02CD, U+2017, - U+2036, U+2037, U+203C, U+203E, U+2047-204A. - -2005-10-20 Primoz Peterlin - - * sfd/FreeSerifBold.sfd - added U+0182, U+0189, U+0192, U+019F, - U+01A9, U+01B7, U+01C4-01CC, U+01E0-1E2, U+01F0-01F3, U+F6BE. - Corrected position of diacritics on U+0200-0217. - - * sfd/FreeSerif.sfd - added U+00A0, U+00AD, U+0182, U+0189, - U+018B, U+018E, U+018F, U+0192, U+019F, U+01A9, U+01B1, U+01B7, - U+01DD, U+2010-2013, U+2015. FreeSerif is now MES-1 conformant. - -2005-10-19 Denis Jacquerye - - * sfd/FreeSerif.sfd - added U+0268, U+026A, U+0289, U+0292; and - anchor "above" to more base glyphs. - - * sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd, - sfd/FreeSerifBoldItalic.sfd - added U+0250-0252, U+0258-0259, - U+0261, U+0268, U+026A, U+0279, U+0289 - - * sfd/FreeSerifBold.sfd - added anchor "above" to marks - U+0300-0314, and to base glyphs (vowels). - -2005-10-18 Denis Jacquerye - - * sfd/FreeSerif.sfd - added anchor "above" to marks U+0300-0314, - and bases vowel of the U+0041-007A range, U+00E6, U+0186, U+0190, - U+0254 and U+025B; fixed Latin-1 Supplement block accented glyphs - to use references. - -2005-10-17 Primoz Peterlin - - * sfd/FreeSansBold.sfd - added U+01B7, U+01B8, U+0275. - -2005-10-16 Denis Jacquerye - * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - added some Latin - Extended-B African letters: U+0181, U+018A, U+0197-0198, U+01A4, - U+01AC, U+01B1, U+01B3-01B4; - - * sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd - added Latin - Extended-B U+0187, 018E-018F, U+0191, U+0193, U+0197-0199, - U+019D-019F, U+01AB-01AE; correcting width of non-space - Combining Diacrtical Marks; added more glyphs to IPA Extensions - to match non Bold - - * sfd/FreeSansBoldOblique.sfd - added many accented glyphs to - Latin Extended-B - -2005-10-15 Denis Jacquerye - * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - added IPA Extensions - U+0262,U+0274,U+0280-0281, U+0299, U+029F, and Spacing Modifier - Letters U+02C9-02CB; fixed U+0287,029E height to baseline; added - stroke to U+0268 - - * sfd/FreeSansOblique.sfd - fixed skew on U+027F - - * sfd/FreeSansBold.sfd, sfd/FreeSansBoldOblique.sfd - added to Latin - Extended-B U+01A7-01A8, IPA Extensions U+0251-0253, U+0256-0257, - U+0261, U+0265-026A, U+026F-0273, U+0289, U+028C-028E - - * sfd/FreeSansBoldOblique.sfd - added to Latin extended-B U+0189, - U+01A8, U+01B1, U+0283, U+02C9 and Spacing Modifiers U+02C9-02CB - -2005-10-14 Primoz Peterlin - - * sfd/FreeSansBold.sfd - Added a couple of composite glyphs, - mostly in the IPA and Latin Extended B ranges. - -2005-10-13 Denis Jacquerye - - * FreeSans.sfd - removed overlap and simplified U+0187, 0191, - 0193, 01A5, 01AE, 0260, 0271, 0272, 0273, 027B; fixed diacritics - placement on U+0200-0217; fixed glyph for U+0283 to correct esh - without stroke; added U+025F and fixed U+025F from it; fixed - height of glyph at U+0285; arranged U+027E,027F to make more - distinguishable from U+0072. - - * FreeSansOblique.sfd - added the corrected or new glyphs from - FreeSans; diacritics on U+200-0217 will need height readjustements. - - * FreeSansBold.sfd, FreeSansBoldOblique.sfd - added U+0186, 0190, - 0250, 0254, 0258, 0259, 025B, 025C - -2005-10-13 Primoz Peterlin - - * sfd/FreeSerif.sfd - Minor changes: U+22A2, U+22A3, U+22A6, U+23AE. - Added U+0250, U+0251, U+0258, U+0259, U+0275. - - * sfd/FreeSerifItalic.sfd - Added glyphs U+222B-U+222F, U+2320, - U+2321. Fixed diacritics on U+0200-U+0217. - -2005-10-12 Denis Jacquerye - - * sfd/FreeSerif.sfd - Corrected diacritics position on - U+01D5-01D9,01DB,01EA-01ED,0200-0217 and U+022A. - - * sfd/FreeSerif.sfd, sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd, - sfd/FreeSerifBoldItalic.sfd - added U+0186,0190,0254 and U+025B. - -2005-10-11 Primoz Peterlin - - * sfd/FreeSerif.sfd - Fixed bug #13399 (glyphs for U+0360 and - U+0361 were swapped). - - * sfd/FreeSerif.sfd - Attempt to correct bug #13370: INTEGRAL - EXTENSION does not align with TOP/BOTTOM HALF INTEGRAL; added - glyph U+23AE. - -2005-05-16 Primoz Peterlin - - * sfd/FreeMono.sfd - Corrected shapes for Cross of Lorraine and - Cross of Jerusalem. - -2005-04-07 Primoz Peterlin - - * sfd/FreeSansBold.sfd - Added some combining accents, just to - test the a version of FontForge. - -2003-12-05 Primoz Peterlin - - * sfd/FreeMono.sfd - Some composite Latin characters rebuilt, as - they had accents 600 points to the left due to changes on October - 2. Some other minor changes in the mathematics area. - -2003-10-08 Primoz Peterlin - - * sfd/FreeMonoOblique.sfd, sfd/FreeSerifBoldItalic.sfd, - FreeSerifItalic.sfd - applied Josef Segur's corrections from - Oct. 5. - -2003-10-02 Primoz Peterlin - - * sfd/FreeSerif.sfd - Abbas Izad's contributed Arabic/Farsi - characters added. - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd - Combining characters (U+0300 - - U+036F) moved left, so that they have negative horizontal values - and zero advance width. - -2003-09-15 Primoz Peterlin - - * sfd/FreeSerifBold.sfd, sfd/FreeSerifItalic.sfd - Started working - on super- and subscripts. - -2003-09-12 Primoz Peterlin - - * sfd/FreeSans.sfd, sfd/FreeSerif.sfd - Added some missing - Hiragana and Katakana characters. - - * sfd/FreeSansBold.sfd - Cleared background characters in Latin - Extended-A. Added some automatically constructed characters in - Latin Extended-B. Started with superscripts and subscripts. - - * sfd/FreeSans.sfd - Subscript numerals (U+2080-U+2089) completed. - -2003-05-19 Primoz Peterlin - - * sfd/FreeSerif.sfd - Thai characters po pla and bo baimai - swapped; Thai character fongman corrected; all courtesy Theppitak - Karoonboonyanan. - -2003-05-17 Panayotis Katsaloulis - - * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, - sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - Full support - of all ancient greek glyphs - -2003-05-15 Primoz Peterlin - - * tools/KerningNumerals.pl - A Perl script for moving kerning - information from ASCII numerals (U+0030...) to characters in the - Adobe corporate use area (U+F6xx). - - * sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd, - sfd/FreeSansBoldOblique.sfd - Created kerned numerals in the Adobe - corporate use area (U+F6xx) and moved kerning information from - ASCII numerals to the kerned numerals. - -2003-05-14 Primoz Peterlin - - * sfd/FreeSans.sfd - First approximation of super- and subscript - numerals and vulgar fractions. - - * sfd/FreeSerif.sfd - Super- and subscript numerals complete, - vulgar fractions completed and redone as references rather than - outlines. - -2003-05-12 Primoz Peterlin - - * sfd/FreeSerif.sfd - Clean-up of the Cyrillic letters added on - March 27; super- and subscripts, vulgar fractions. - -2003-05-09 Primoz Peterlin - - * sfd/FreeMonoBold.sfd - Added a couple of characters to - the Latin Extended-B area and the IPA extensions area. - -2003-05-08 Primoz Peterlin - - * sfd/FreeSerifBoldItalic.sfd - Added a couple of characters to - the Latin Extended-B area. - - * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, - sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - ASCII - numerals now monospaced; kerned numerals moved to Adobe corporate - use area - (U+F6xx). - -2003-05-07 Primoz Peterlin - - * sfd/FreeSerif.sfd - Roman numerals now more complete. - - * sfd/FreeSansOblique.sfd, sfd/FreeSansBoldOblique.sfd - Accented - characters added in the Latin Extended-B area. - - * sfd/FreeSans.sfd - Greek accents added in the Greek Extended - area, characters added in the Latin Extended-B area, Roman - numerals added. - - * sfd/FreeMonoOblique.sfd - Kerning pairs removed (what were they - doing in a monospaced font, anyway?). - - * sfd/FreeMonoBoldOblique.sfd - Additions in Latin Extended-B and - Basic Greek. - - * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd, sfd/FreeMonoOblique.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd, - sfd/FreeSansBoldOblique.sfd - Major cleanup (fixed widths, open - paths, path directions (clockwise/counter-clockwise), points - rounded to integer values; outlines simplified etc.) - -2003-05-06 Primoz Peterlin - - * tools/OS2UnicodeRange - A simple script to display OS/2 Unicode - range table in TrueType fonts. - - * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd - ASCII numerals now - monospaced; kerned numerals moved to Adobe corporate use area - (U+F6xx). FreeSans is done, FreeSansBold half-way. - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd - Added 2003 in copyright info. - -2003-03-27 Primoz Peterlin - - * sfd/FreeSerif.sfd - Cyrillic and Cyrillic Supplement blocks - brought to conformance with Unicode 3.2, courtesy Daniel Shurovich - Chirkov. - -2003-03-19 Primoz Peterlin - - * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd - somewhat wider - germandbls (U+00DF), due to complaints by Walter Schmidt. - -2003-03-18 Primoz Peterlin - - * sfd/FreeSans.sfd - Added Sinhala glyphs from the Tipitaka - project , recoded to Unicode by Noah Levitt. - -2003-02-19 Primoz Peterlin - - * sfd/FreeSans.sfd - Minor changes on mathematical operators. - -2003-02-18 Primoz Peterlin - - * sfd/FreeMono.sfd - minor cleanup of glyph backgrounds; changed - integral signs (U+222B - U+2230) - -2003-02-05 Primoz Peterlin - - * sfd/FreeSans.sfd - added a couple of glyphs in the IPA and - African Latin ranges. - -2003-01-30 Primoz Peterlin - - * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd - Corrected Maltese Hbar (U+0126) - and/or hbar (U+0127). - -2003-01-28 Primoz Peterlin - - * sfd/FreeSerifItalic.sfd - Corrected Maltese hbar (U+0127). - -2002-12-18 Primoz Peterlin - - * tools/ConvertFont - PfaEdit script for converting SFD files to - TrueType fonts. - - * sfd/FreeSans.sfd - Added Tamil and Kannada glyphs from the - Akruti Indic fonts. - -2002-12-17 Primoz Peterlin - - * sfd/FreeSans.sfd - Added Devanagari and Gujarati glyphs from the - Akruti Indic fonts. - - * www/index.html - Added information on Rogier van Dalen's tools. - - * AUTHORS - Added M.S. Sridhar. - - * CREDITS - Correct spelling of Culmus project. Added M.S. Sridhar. - -2002-12-06 Primoz Peterlin - - * sfd/FreeMono.sfd - Added Braille glyphs, courtesy Vyacheslav - Dikonov. - - * sfd/FreeSans.sfd - Added Unicode Syriac glyphs, courtesy - Vyacheslav Dikonov. - -2002-10-11 Primoz Peterlin - - * www/index.html - Added information on the availability of the - Debian GNU/Linux package. - - * sfd/FreeSerif.sfd, sfd/FreeSans.sfd - added some kern pairs - beyond Latin-1 area. - - * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, - sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - re-introduced - all the emtpy glyph slots (changes from Sep 23 made PfaEdit - crash). - -2002-09-23 Primoz Peterlin - - * sfd/FreeSerif.sfd, sfd/FreeSerifItalic.sfd, - sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd - imported - kerning information from the URW++ AFM files - -2002-09-11 Primoz Peterlin - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoOblique.sfd - updated Hebrew parts to comply with - Culmus v0.6. - - * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansOblique.sfd - Added Danilo Segan's Serbian Cyrillic - glyphs; updated Hebrew parts to comply with Culmus v0.6. - -2002-09-09 Primoz Peterlin - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansOblique.sfd - Updated Cyrillic part to match - Filippov's 1.0.7pre14 - - * sfd/FreeSansOblique.sfd - added Sam Stepanyan's Armenian glyphs - from FreeSans (skewed for 12 degrees). - -2002-09-06 Primoz Peterlin - - * sfd/FreeSans.sfd, sfd/FreeSansOblique.sfd, - sfd/FreeSansBold.sfd, sfd/FreeSansOblique.sfd - Added Maxim - Iorsh's Hebrew characters. - -2002-08-29 Primoz Peterlin - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, - sfd/FreeMonoBold.sfd, sfd/FreeMonoOblique.sfd - Added Maxim - Iorsh's Hebrew characters. - - * AUTHORS, CREDITS - Added Maxim Iorsh as author. - -2002-08-28 Primoz Peterlin - - * www/index.html - Added information of Microsoft's withdrawal of - freely available Unicode TrueType fonts - - * www/resources.html - Added link to Maxim Iorsh's Culmus project. - -2002-07-26 Primoz Peterlin - - * sfd/FreeMono.sfd - Added a couple of characters (Arrows area). - -2002-06-11 Primoz Peterlin - - * sfd/FreeMono.sfd - Applied Michalis Kabrianis's patch concerning - perispomeni in Greek politoniko. - -2002-05-23 Primoz Peterlin - - * sfd/FreeMono.sfd - Applied Michalis Kabrianis's patch concerning - psili in Greek politoniko. Also added two working variants of - chars in the IPA range. - -2002-05-15 Primoz Peterlin - - * sfd/FreeSans.sfd, sfd/FreeSansBold.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifBold.sfd - Deleted explicit ".notdef" character with - no contours. - -2002-05-14 Primoz Peterlin - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd - The new version of PfaEdit saves - correctly formed Panose and LineGap lines. - - * sfd/FreeSansBoldOblique.sfd - Filled-in the missing TTFWidth and - TTFWeight values. - -2002-05-09 Primoz Peterlin - - * sfd/FreeSans.sfd - Added diacritics to the Spacing Modifier - Letters and Combining Diacritical Marks areas. Added composed - glyphs to the Latin Extended-B area. - -2002-05-07 Primoz Peterlin - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd - Updated Panose information with data - provided by Josef W. Segur. Updated TTF headers with English and - Slovenian text. - -2002-04-30 Primoz Peterlin - - * sfd/FreeMonoBold.sfd - Working on Greek small letters. Several - minor changes (lower carons etc.) - -2002-04-29 Primoz Peterlin - - * FreeMonoBoldOblique.sfd - Started adding Greek. - - * sfd/FreeMonoBold.sfd - Added glyphs in the Geometrical Shapes - and Miscellaneous Symbols area. Harmonizing Greek with Latin. Done - with capitals. - - * sfd/FreeMono.sfd - Deleted the explicit .notdef character. Added - one glyph to the Geometrical Shapes area, which is now completed; - added three glyphs to the Miscellaneous Symbols area. Harmonizing - Greek with Latin. Done with the capitals. - -2002-04-26 Primoz Peterlin - - * sfd/FreeSans.sfd - Adjusted accent positions on several glyphs - in the Latin Extended-A area. - -2002-04-25 Primoz Peterlin - - * sfd/FreeMonoBold.sfd - Box Drawing area completed. Added a - couple of glyphs in the Geometrical Shapes area. - - * sfd/FreeMono.sfd - Small corrections in the Box Drawing area. - -2002-04-24 Primoz Peterlin - - * sfd/FreeMono.sfd - Box Drawing area completed. - -2002-04-23 Primoz Peterlin - - * tools/WGL4.lst - corrected. - - * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd - Working on Box Drawing - area. - -2002-04-22 Primoz Peterlin - - * sfd/FreeMono.sfd, sfd/FreeMonoBold.sfd - Working on Latin - Extended-B and Greek. - -2002-04-19 Primoz Peterlin - - * sfd/FreeSerif.sfd - Somewhat cleaner chess figures. - - * tools/MES-2.txt, tools/MES-2.lst - Corrected list (it is not - 203C-203E, it is 203C and 203E). - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd, sfd/FreeSans.sfd, - sfd/FreeSansOblique.sfd, sfd/FreeSansBold.sfd, - sfd/FreeSansBoldOblique.sfd, sfd/FreeSerif.sfd, - sfd/FreeSerifItalic.sfd, sfd/FreeSerifBold.sfd, - sfd/FreeSerifBoldItalic.sfd - Changed "Family Name" from Free to - FreeSerif, FreeSans and FreeMono, as appropriate. Changed Font - Modifiers from MonoBold etc. to Bold, Italic, Oblique, BoldOblique - and BoldItalic. - -2002-04-18 Primoz Peterlin - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd, sfd/FreeMonoBold.sfd, - sfd/FreeMonoBoldOblique.sfd - Corrected metrics; now all character - widths are set to 600. - -2002-04-17 Primoz Peterlin - - * sfd/FreeSerif.sfd - Corrected glyphs in the Box Drawing area and - Block Elements area, which should extend through the ascender *and - descender* height. - - * sfd/FreeMonoBold.sfd - Continued working on harmonizing Greek - letters with Latin and Cyrillic. - - * sfd/FreeMonoBold.sfd - Added some box drawing characters. - -2002-04-16 Primoz Peterlin - - * www/design-notes.html - Updated notes on stroke width for - symbols in Free Mono Bold. - - * sfd/FreeMono.sfd - Added a handful of characters in the - Miscellaneous Symbols area. - - * sfd/FreeMonoBoldOblique.sfd - Added subscripts, superscripts and - vulgar fractions. - - * sfd/FreeMonoBold.sfd - Started harmonizing Greek letters with - Latin and Cyrillic. - - * sfd/FreeMonoBold.sfd - Added subscripts, superscripts and vulgar - fractions. - -2002-04-15 Primoz Peterlin - - * www/design-notes.html - Updated notes on super-/subscripts in - Free Mono Bold. Separate subsections for Free Mono regular and - Free Mono Bold. - -2002-04-12 Primoz Peterlin - - * sfd/FreeSerif.sfd - Added Ethiopian glyphs, converted from the - Metafont sources from TGI, Universität Hamburg (authors Berhanu - Beyene, Prof. Dr. Manfred Kudlek, Olaf Kummer, and Jochen - Metzinger) using Szabo's TeXtrace and retouched using - PfaEdit. Ethiopian metafonts are released under GNU GPL, - . - - * sfd/FreeMonoBold.sfd - Added 40 characters, mostly in the Latin - Extended-B and IPA Extensions areas. - -2002-04-11 Primoz Peterlin - - * sfd/FreeMono.sfd - Added a handful of characters in the Latin - Extended-B, IPA Extensions, Currency Symbols and Miscellaneous - Symbols areas. - -2002-04-09 Primoz Peterlin - - * sfd/FreeMono.sfd - Correcting accent positioning in the Extended - Greek area; adding a couple of characters here and there. Still 20 - characters short of MES-2 conformance. - -2002-04-08 Primoz Peterlin - - * sfd/FreeMono.sfd - Added some characters in the Arrows area; - more or less completed Extended Greek area (accents still need to - be fine-tuned). - -2002-04-05 Primoz Peterlin - - * sfd/FreeMono.sfd - Modern non-Russian Cyrilic mostly completed. - - * sfd/FreeMonoOblique.sfd - Synchronized with FreeMono. - - * sfd/FreeSerif.sfd - Added Thomas Ridgeway's Tamil characters - (converted from Metafont and edited somehwat). - -2002-04-04 Primoz Peterlin - - * sfd/FreeMonoOblique.sfd - Armenian letters added. - - * sfd/FreeMonoBold.sfd - Serbian Cyrillic letters dje, tshe, lje - and nje corrected. - - * sfd/FreeMono.sfd - Serbian Cyrillic letters dje and tshe - corrected. Some other non-Russian Cyrillic letters modified and - "welded together". - -2002-04-03 Primoz Peterlin - - * sfd/FreeMono.sfd - Added more or less complete Armenian - area. The glyphs are a tidied-up version based on the Armenian - Courier on the . Now we have - 1673 characters. - -2002-03-28 Primoz Peterlin - - * sfd/FreeMono.sfd - Added some mathematical symbols. - -2002-03-26 Primoz Peterlin - - * sfd/FreeSans.sfd - took H.S. Pannu's Gurmukhi from FreeSerif. It - actually fits to FreeSans much better. It seems I'll have to look - for another Gurmukhi font with modulated stroke for FreeSerif. - - * sfd/FreeSerifItalic.sfd - replaced existing Hebrew glyphs by - those from FreeSerif (slanted for 15.5 degrees). - - * sfd/FreeSerif.sfd - Added dotted Hebrew letters. Changed barred H. - - * sfd/FreeMono.sfd - Completed vulgar fractions; minor changes in - Greek; added some mathematical operators. - - * sfd/FreeMonoBold.sfd - added 12 characters to Latin Extended-B - and IPA Extensions areas (total 984). - -2002-03-25 Primoz Peterlin - - * sfd/FreeMonoBold.sfd - started adding Latin Extended-B and IPA - Extensions. - - * sfd/FreeMono.sfd - Minor cosmetic changes; cleaning up Greek - (removing redundant control points), added some non-European - Cyrillic glyphs as a test. - -2002-03-22 Primoz Peterlin - - * sfd/FreeMono.sfd - Some minor modifications; letters in Latin - Extended-B area "welded" together. - -2002-03-20 Primoz Peterlin - - * www/index.html - finally linked the resources and design notes - pages. - - * www/design-notes.html - added scaling information for super- and - subscript numerals in FreeMono. - -2002-03-19 Primoz Peterlin - - * sfd/FreeMono.sfd - the Latin Extended-B and IPA Extension area - characters moved from FreeMono and skewed for 12 degrees. - -2002-03-18 Primoz Peterlin - - * sfd/FreeMono.sfd - added a dozen or two of new characters, in - particular in the Latin Extended-B and IPA Extension area. - -2002-03-15 Primoz Peterlin - - * sfd/FreeMono.sfd - added a dozen of two of new characters, in - particular in the IPA Extension area. - - * www/design-notes.html - Corrected data for x-height in FreeMono; - information on constructing small caps. - -2002-03-14 Primoz Peterlin - - * sfd/FreeMono.sfd - added three smiley characters to the - Miscallaneous Symbols area. - -2002-03-10 Primoz Peterlin - - * sfd/FreeSerif.sfd - Anshuman Pandey has only converted Gurmukhi - from TrueType to Metafont; the original author of Gurkmukhi font - is Hardip Singh Pannu . - Got the permission from him to include the Gurmukhi glyph set. - -2002-03-08 Primoz Peterlin - - * sfd/FreeSerif.sfd - Added some more glyphs in the Mathematical - Symbols area to a total number of 3374. - -2002-03-06 Primoz Peterlin - - * sfd/FreeSerif.sfd - Added a basic Gurmukhi set. - - * www/design-notes.html - started a page on design notes - - * sfd/FreeMono.sfd - realized that glyphs in the Box Drawing area - and Block Elements area should extend through the ascender *and - descender* height, and corrected it. - - * sfd/FreeMono.sfd, sfd/FreeMonoOblique.sfd - added some musical - glyphs, linking "no-break space" to space, "soft hyphen" to - hyphen-minus etc. - -2002-03-05 Primoz Peterlin - - * tools/WGL4.lst - Added Windows Glyph List 4.0 - - * tools/LigatureList.pl - Wrote a Perl script, which lists the - GSUB list (ligature list) of a OpenType font. - - * sfd/FreeSerifBold.sfd, sfd/FreeSerifBoldItalic.sfd, - sfd/FreeSerifItalic.sfd - auxilliary Hebrew glyphs added. They are - too light compared with Latin and will be substituted with better - ones. - -2002-03-04 Primoz Peterlin - - * sfd/FreeSerif.sfd - Added some more glyphs to the Mathematical - Operators area (page 0x22). - - * sfd/FreeSerif.sfd - Incomplete and fragmentary support for - Devanagari, originating from Harsh Kumar's Shusha fonts was - replaced by Frans Velthuis' Devanagari metafont, now maintained by - Anshuman Pandey and available under - GPL. Until I figure out how to provide glyph substitution table in - OpenType, only the Unicode part is there. - -2002-02-28 Primoz Peterlin - - * ChangeLog file created - - * sfd/FreeSerif.sfd - Added some Telugu glyphs to page 0x0C, - courtesy Prasad A. Chodavarapu - - * sfd/FreeSerif.sfd - Added some glyphs to the Miscellaneous - Symbols page (0x26). - -2002-02-26 Primoz Peterlin - - * mailing lists freefont-announce and freefont-bugs created - -2002-02-25 Primoz Peterlin - - * sfd/FreeSerif.sfd - Added a couple of glyphs in Mathematics - Operators area. - - * sfd/FreeMono.sfd - - Added some more glyphs, in particular in the Mathematical - Operators section. - - Changed FamilyName to Free, FontName to FreeMono, and Full name - to "Free Monospaced". - -2002-02-20 Primoz Peterlin - - * sfd/ directory added containing FreeSerif, FreeSans and FreeMono - families. - - * tools/ directory added containing lists with characters required - for MES (Multilinguag European Subset) compliance. - - * tools/mes-list-expand.pl created - a Perl script for expanding MES - ranges into simple one-char-per-line format - - * tools/CheckConformance.pl created - a Perl script for checking - conformance of a font file with a given coded character set - - * homepage created - -2002-02-19 Primoz Peterlin - - * freefont (Free UCS Scalable Fonts) project approved on - savannah.gnu.org: diff --git a/h-source/admin/External/Fonts/FreeFont/FreeMono.ttf b/h-source/admin/External/Fonts/FreeFont/FreeMono.ttf deleted file mode 100644 index ba90adb..0000000 Binary files a/h-source/admin/External/Fonts/FreeFont/FreeMono.ttf and /dev/null differ diff --git a/h-source/admin/External/Fonts/FreeFont/INSTALL b/h-source/admin/External/Fonts/FreeFont/INSTALL deleted file mode 100644 index fbbbe80..0000000 --- a/h-source/admin/External/Fonts/FreeFont/INSTALL +++ /dev/null @@ -1,86 +0,0 @@ - Installing GNU FreeFont - ======================= - -GNU FreeFont can be used in any modern operating system. - -This document explains how to install FreeFont on some common systems. - -UNIX/GNU/Linux/BSD Systems --------------------------- - -FreeFont works with any system using the free font rasterizer FreeType -. - -* Debian GNU/Linux - -Users of Debian GNU/Linux system will probably want to use the Debian package, -available from the Debian site, - - , - -or any of its mirrors. - -Install them by issuing the command - apt-get install ttf-freefont - - -* KDE local installation - -Users of KDE can install .ttf files on a per-user basis using the KDE -Control Center module "kcmfontinst", which may appear in the menu as - - Settings -> System Administration -> Font Installer - -This is especially helpful for developers and testers. - - -* Generic X-windows - - 1) Fetch the freefont-ttf.tar.gz package with Free UCS outline fonts - in the TrueType format. - - 2) Unpack TrueType fonts into a suitable directory, - e.g. /usr/local/share/fonts/default/TrueType/ - - 3) If you have chosen any other directory, make sure the directory you - used to install the fonts is listed in the path searched by the X - Font Server by editing the config file in /etc/X11/. - - In some systems, you list the directory in the item "catalogue=" - in the file /etc/X11/fs/config. - - 4) Run ttmkfdir in the directory where you unpacked the fonts. - - -Windows 95/98/NT/2000/XP; Vista -------------------------------- - -Note that in at least Vista, XP and 2000, the OpenType versions perform much -better than, and are recommended over, the TrueType ones. - -* Vista: - 1) From the Start menu, open Control Panels - 2) Drag-n-drop font files onto Fonts control panel - You may get a dialog saying - "Windows needs your permission to continue" - a) Click Continue - -* 95/98/NT: - The font installation is similar to Vista. - - In order to use OpenType, users of Windows 95, 98 and NT 4.0 can - install Adobe's 'Type Manager Light'. It is available for download - without cost from Adobe's web site. - - Otherwise, use the TrueType versions. - -Mac OS X --------- - -Installing on Mac OS X consists of moving the .ttf files to either - /Library/Fonts/ or ~/Library/Fonts/ -depending on whether they should be available to all users on your system -or just to yourself. - --------------------------------------------------------------------------- -$Id: INSTALL,v 1.7 2008/12/26 12:33:31 Stevan_White Exp $ diff --git a/h-source/admin/External/Fonts/FreeFont/README b/h-source/admin/External/Fonts/FreeFont/README deleted file mode 100644 index 60e67f2..0000000 --- a/h-source/admin/External/Fonts/FreeFont/README +++ /dev/null @@ -1,108 +0,0 @@ --*-text-*- - GNU FreeFont - -The GNU FreeFont project aims to provide a useful set of free scalable -(i.e., OpenType) fonts covering as much as possible of the ISO 10646/Unicode -UCS (Universal Character Set). - -Statement of Purpose --------------------- - -The practical reason for putting glyphs together in a single font face is -to conveniently mix symbols and characters from different writing systems, -without having to switch fonts. - -Coverage --------- - -FreeFont covers the following character sets - -* ISO 8859 parts 1-15 -* CEN MES-3 European Unicode Subset - http://www.evertype.com/standards/iso10646/pdf/cwa13873.pdf -* IBM/Microsoft code pages 437, 850, 852, 1250, 1252 and more -* Microsoft/Adobe Windows Glyph List 4 (WGL4) - http://www.microsoft.com/typography/otspec/WGL4.htm -* KOI8-R and KOI8-RU -* DEC VT100 graphics symbols -* International Phonetic Alphabet -* Arabic, Hebrew, Armenian, Georgian, Ethiopian and Thai alphabets, - including Arabic presentation forms A/B -* mathematical symbols, including the whole TeX repertoire of symbols -* APL symbols - etc. - -Editing -------- - -The free outline font editor, George Williams's FontForge - is used for editing the fonts. - -Design Issues -------------- - -Which font shapes should be made? Historical style terms like Renaissance -or Baroque letterforms cannot be applied beyond Latin/Cyrillic/Greek -scripts to any greater extent than Kufi or Nashki can be applied beyond -Arabic script; "italic" is really only meaningful for Latin letters. - -However, most modern writing systems have typographic formulations for -contrasting uniform and modulated character stroke widths, and have some -history with "oblique", faces. Since the advent of the typewriter, most -have developed a typographic style with uniform-width characters. - -Accordingly, the FreeFont family has one monospaced - FreeMono - and two -proportional faces (one with uniform stroke - FreeSans - and one with -modulated stroke - FreeSerif). - -To make text from different writing systems look good side-by-side, each -FreeFont face is meant to contain characters of similar style and weight. - -Licensing ---------- - -Free UCS scalable fonts is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License as published -by the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. - -The fonts are distributed in the hope that they will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -As a special exception, if you create a document which uses this font, and -embed this font or unaltered portions of this font into the document, this -font does not by itself cause the resulting document to be covered by the -GNU General Public License. This exception does not however invalidate any -other reasons why the document might be covered by the GNU General Public -License. If you modify this font, you may extend this exception to your -version of the font, but you are not obligated to do so. If you do not -wish to do so, delete this exception statement from your version. - - -Files and their suffixes ------------------------- - -The files with .sfd (Spline Font Database) are in FontForge's native format. -Please use these if you plan to modify the font files. - -TrueType fonts for immediate consumption are the files with the .ttf -(TrueType Font) suffix. These are ready to use in Xwindows based -systems using FreeType, on Mac OS, and on older Windows systems. - -OpenType fonts (with suffix .otf) are for use in Windows Vista. -Note that although they can be installed on Linux, but many applications -in Linux still don't support them. - - --------------------------------------------------------------------------- -Primoz Peterlin, -Steve White - -Free UCS scalable fonts: http://savannah.gnu.org/projects/freefont/ -$Id: README,v 1.6 2008/12/25 12:51:41 Stevan_White Exp $ diff --git a/h-source/admin/Library/Array/Validate/Base.php b/h-source/admin/Library/Array/Validate/Base.php deleted file mode 100644 index 3366097..0000000 --- a/h-source/admin/Library/Array/Validate/Base.php +++ /dev/null @@ -1,241 +0,0 @@ -_lang = $lang; - $stringClass = 'Lang_'.$this->_lang.'_ValCondStrings'; - if (!class_exists($stringClass)) - { - $stringClass = 'Lang_Eng_ValCondStrings'; - } - $this->_resultString = new $stringClass(); - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other - public function checkEqual($associativeArray,$keyString) - { - $errorString = null; - $keyArray = explode(',',$keyString); - $numb = 0; - - //set the first value to null - $firstValue = null; - - foreach ($keyArray as $key) - { - if (array_key_exists($key,$associativeArray)) - { - $firstValue = $associativeArray[$key]; - break; - } - } - - if (isset($firstValue)) - { - for ($i = 0; $i < count($keyArray); $i++) - { - if (array_key_exists($keyArray[$i],$associativeArray)) - { - if (strcmp($associativeArray[$keyArray[$i]],$firstValue) !== 0) - { - $numb++; - $errorString = $this->_resultString->getNotEqualResultString($keyString); - } - } - } - } - - $this->errorString = $errorString; - return $numb === 0 ? true : false; - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphabetic values - //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null - public function checkAlpha($associativeArray,$keyString,$strength = 'strong') - { - return $this->checkGeneric($associativeArray,$keyString,$strength,'ctype_alpha','getNotAlphabeticResultString'); - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphanumeric values - //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null - public function checkAlphaNum($associativeArray,$keyString,$strength = 'strong') - { - return $this->checkGeneric($associativeArray,$keyString,$strength,'ctype_alnum','getNotAlphanumericResultString'); - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal digits - //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null - public function checkDigit($associativeArray,$keyString,$strength = 'strong') - { - return $this->checkGeneric($associativeArray,$keyString,$strength,'ctype_digit','getNotDecimalDigitResultString'); - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have mail format - //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null - public function checkMail($associativeArray,$keyString,$strength = 'strong') - { - return $this->checkGeneric($associativeArray,$keyString,$strength,'checkMail','getNotMailFormatResultString'); - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function - //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null - public function checkNumeric($associativeArray,$keyString,$strength = 'strong') - { - return $this->checkGeneric($associativeArray,$keyString,$strength,'is_numeric','getNotNumericResultString'); - } - - - //apply a generic check function - //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null - //$func: the function to apply - //$strFunc: the method of the object $this->_resultString to apply - private function checkGeneric($associativeArray,$keyString,$strength,$func,$strFunc) - { - - $errorString = null; - $keyArray = explode(',',$keyString); - $numb = 0; - - for ($i = 0; $i < count($keyArray); $i++) - { - if (array_key_exists($keyArray[$i],$associativeArray)) - { - if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong') - { - if (!call_user_func($func,$associativeArray[$keyArray[$i]])) - { - $numb++; - $errorString .= call_user_func(array($this->_resultString,$strFunc),$keyArray[$i]); - } - } - } - } - - $this->errorString = $errorString; - return $numb === 0 ? true : false; - - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have a number of chars smaller than $maxLenght - public function checkLength($associativeArray,$keyString,$maxLength = 10) - { - $errorString = null; - $keyArray = explode(',',$keyString); - $numb = 0; - for ($i = 0; $i < count($keyArray); $i++) - { - if (array_key_exists($keyArray[$i],$associativeArray)) - { - if (eg_strlen($associativeArray[$keyArray[$i]]) > $maxLength) - { - $numb++; - $errorString .= $this->_resultString->getLengthExceedsResultString($keyArray[$i],$maxLength); - } - } - } - $this->errorString = $errorString; - return $numb === 0 ? true : false; - - } - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are different from the values indicated in the argument $strings (a comma-separated list of words) - public function checkIsNotStrings($associativeArray,$keyString,$strings = '') - { - $errorString = null; - $keyArray = explode(',',$keyString); - $numb = 0; - //get the array from the comma-separated list of strings - $stringsArray = explode(',',$strings); - for ($i = 0; $i < count($keyArray); $i++) - { - if (array_key_exists($keyArray[$i],$associativeArray)) - { - foreach ($stringsArray as $string) - { - if (strcmp($associativeArray[$keyArray[$i]],$string) === 0) - { - $numb++; - $errorString .= $this->_resultString->getIsForbiddenStringResultString($keyArray[$i],$strings); - } - } - } - } - $this->errorString = $errorString; - return $numb === 0 ? true : false; - } - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are one of the values indicated in the argument $strings (a comma-separated list of words) - //$strength: hard or soft. If $strength is set equal to soft than non check is made upon array values equalt to '' or null - public function checkIsStrings($associativeArray,$keyString,$strings = '',$strength = 'strong') - { - $errorString = null; - $keyArray = explode(',',$keyString); - $numb = 0; - //get the array from the comma-separated list of strings - $stringsArray = explode(',',$strings); - for ($i = 0; $i < count($keyArray); $i++) - { - if (array_key_exists($keyArray[$i],$associativeArray)) - { - if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong') - { - if (!in_array($associativeArray[$keyArray[$i]],$stringsArray)) - { - $numb++; - $errorString .= $this->_resultString->getIsNotStringResultString($keyArray[$i],$strings); - } - } - } - } - $this->errorString = $errorString; - return $numb === 0 ? true : false; - } - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) match the regular expression $regExp - public function checkMatch($associativeArray,$keyString,$regExp = '/./',$strength = 'strong') - { - $errorString = null; - $keyArray = explode(',',$keyString); - $numb = 0; - for ($i = 0; $i < count($keyArray); $i++) - { - if (array_key_exists($keyArray[$i],$associativeArray)) - { - if (strcmp($associativeArray[$keyArray[$i]],'') !== 0 or $strength === 'strong') - { - if (!preg_match($regExp,$associativeArray[$keyArray[$i]])) - { - $numb++; - $errorString .= $this->_resultString->getDoesntMatchResultString($keyArray[$i],$regExp); - } - } - } - } - $this->errorString = $errorString; - return $numb === 0 ? true : false; - } - -} \ No newline at end of file diff --git a/h-source/admin/Library/Array/Validate/Soft.php b/h-source/admin/Library/Array/Validate/Soft.php deleted file mode 100644 index 95e208d..0000000 --- a/h-source/admin/Library/Array/Validate/Soft.php +++ /dev/null @@ -1,85 +0,0 @@ -_resultString->getNotDefinedResultString($keyArray[$i]); - $numb++; - } - } - else - { - $errorString .= $this->_resultString->getNotDefinedResultString($keyArray[$i]); - $numb++; - } - } - $this->errorString = $errorString; - $this->errorNumb = $numb; - return $numb === 0 ? true : false; - } - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are not '' and are equal (===) to each other - public function checkEqual($associativeArray,$keyString) - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkEqual($associativeArray,$keyString); - - } else { - return false; - } - } - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphabetic values - public function checkAlpha($associativeArray,$keyString) - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkAlpha($associativeArray,$keyString,'strong'); - - } else { - return false; - } - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are alphanumeric values - public function checkAlphaNum($associativeArray,$keyString) - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkAlphaNum($associativeArray,$keyString,'strong'); - - } else { - return false; - } - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are decimal digits - public function checkDigit($associativeArray,$keyString) - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkDigit($associativeArray,$keyString,'strong'); - - } else { - return false; - } - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have mail format - public function checkMail($associativeArray,$keyString) - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkMail($associativeArray,$keyString,'strong'); - - } else { - return false; - } - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) is a number (integer or number). It makes use of the is_numeric PHP built-in function - public function checkNumeric($associativeArray,$keyString) - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkNumeric($associativeArray,$keyString,'strong'); - - } else { - return false; - } - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) have a number of chars smaller than $maxLenght - public function checkLength($associativeArray,$keyString,$maxLength = 10) - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkLength($associativeArray,$keyString,$maxLength); - - } else { - return false; - } - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are different from the values indicated in the argument $strings (a comma-separated list of words) - public function checkIsNotStrings($associativeArray,$keyString,$strings = '') - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkIsNotStrings($associativeArray,$keyString,$strings); - - } else { - return false; - } - } - - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) are one of the values indicated in the argument $strings (a comma-separated list of words) - public function checkIsStrings($associativeArray,$keyString,$strings = '') - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkIsStrings($associativeArray,$keyString,$strings,'strong'); - - } else { - return false; - } - } - - //verify that the values of the associative array ($associativeArray) indicated by the key string ($keyString) match the regular expression $regExp - public function checkMatch($associativeArray,$keyString,$regExp = '/./') - { - if ($this->checkNotEmpty($associativeArray,$keyString)) - { - - return parent::checkMatch($associativeArray,$keyString,$regExp,'strong'); - - } else { - return false; - } - } -} \ No newline at end of file diff --git a/h-source/admin/Library/Array/Validate/index.html b/h-source/admin/Library/Array/Validate/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Library/Array/Validate/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Library/Array/index.html b/h-source/admin/Library/Array/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Library/Array/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Library/ArrayExt.php b/h-source/admin/Library/ArrayExt.php deleted file mode 100755 index 93eca91..0000000 --- a/h-source/admin/Library/ArrayExt.php +++ /dev/null @@ -1,63 +0,0 @@ -subset($associativeArray,$complementaryKeyString,$func); - } - -} diff --git a/h-source/admin/Library/Bootstrap.php b/h-source/admin/Library/Bootstrap.php deleted file mode 100755 index 796b22f..0000000 --- a/h-source/admin/Library/Bootstrap.php +++ /dev/null @@ -1,14 +0,0 @@ -module name tag defines the name of the object that has to be instantiate and saved in the -//$modules property (that is an array referencing different module objects) array(moduleObj1,moduleObj2, ...) -//if the module class corresponding ot the module name tag does not exists, than no module is created and the next module name is checked -class BoxParser { - - public $modules = array(); //array referencing different module classes --> array(moduleObj1,moduleObj2, ...) See files inside the Application/Modules folder - - //$simpleXMLText: it has to be an XML text - //$type; it can be string or file. - public function __construct($simpleXMLText, $type = 'string') - { - if ($type === 'string') - { - if (@simplexml_load_string($simpleXMLText)) - { - $simpleXmlObj = simplexml_load_string($simpleXMLText); - $this->populate($simpleXmlObj); - } - } - else if ($type === 'file') - { - if (@simplexml_load_file($simpleXMLText)) - { - $simpleXmlObj = simplexml_load_file($simpleXMLText); - $this->populate($simpleXmlObj); - } - } - } - - //inistantiate the module objects and save them in the $this->modules property array - private function populate($simpleXmlObj) - { - foreach ($simpleXmlObj as $mod) - { - $className = 'Mod'.ucwords((string)$mod->type); - if (class_exists($className)) - { - if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Modules' . DS . $className . '.php')) - { - $newModule = new $className($mod); - if ($newModule instanceof ModAbstract) - { - $this->modules[] = $newModule; - } - } - } - } - } - - //create the HTML of the modules - public function render() - { - $HTML = null; - foreach ($this->modules as $module) - { - $HTML .= $module->render(); - } - return $HTML; - } - -} \ No newline at end of file diff --git a/h-source/admin/Library/Call.php b/h-source/admin/Library/Call.php deleted file mode 100755 index d80f1d4..0000000 --- a/h-source/admin/Library/Call.php +++ /dev/null @@ -1,321 +0,0 @@ - $value) - { - if (strlen($value) > MAX_POST_LENGTH) die('the length of some of the $_POST values is too large'); - } - } -} - -function checkRequestUriLength() -{ - if (MAX_REQUEST_URI_LENGTH !== 0) - { - if (strlen($_SERVER['REQUEST_URI']) > MAX_REQUEST_URI_LENGTH) die('the length of the REQUEST_URI is too large'); - } -} - -function checkRegisterGlobals() -{ - if (ini_get('register_globals')) die('register globals is on: easyGiant works only with register globals off'); -} - -function callHook() -{ - - if (MOD_REWRITE_MODULE === true) - { - $url = isset($_GET['url']) ? $_GET['url'] : DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION; - } - else - { - $url = (strcmp(getQueryString(),"") !== 0) ? getQueryString() : DEFAULT_CONTROLLER . '/' . DEFAULT_ACTION; - } - - //rewrite the URL -// if (Route::$rewrite === 'yes') -// { -// $url = rewrite($url); -// } - -// echo $url; - - $urlArray = array(); - $urlArray = explode("/",$url); - - $controller = DEFAULT_CONTROLLER; - $action = DEFAULT_ACTION; - - if (isset($urlArray[0])) - { - $controller = (strcmp($urlArray[0],'') !== 0) ? strtolower(trim($urlArray[0])) : DEFAULT_CONTROLLER; - } - - array_shift($urlArray); - - if (isset($urlArray[0])) - { - $action = (strcmp($urlArray[0],'') !== 0) ? strtolower(trim($urlArray[0])) : DEFAULT_ACTION; - } - - //set ERROR_CONTROLLER and ERROR_ACTION - $errorController = ERROR_CONTROLLER !== false ? ERROR_CONTROLLER : DEFAULT_CONTROLLER; - $errorAction = ERROR_ACTION !== false ? ERROR_ACTION : DEFAULT_ACTION; - - /* - VERIFY THE ACTION NAME - */ - if (method_exists('Controller', $action) or !ctype_alnum($action) or (strcmp($action,'') === 0)) - { - $controller = $errorController; - $action = $errorAction; - $urlArray = array(); - } - - /* - VERIFY THE CONTROLLER NAME - */ - if (!ctype_alnum($controller) or (strcmp($controller,'') === 0)) - { - $controller = $errorController; - $action = $errorAction; - $urlArray = array(); - } - - //check that the controller class belongs to the application/controllers folder - //otherwise set the controller to the default controller - if (!file_exists(ROOT.DS.APPLICATION_PATH.DS.'Controllers'.DS.ucwords($controller).'Controller.php')) - { - $controller = $errorController; - $action = $errorAction; - $urlArray = array(); - } - - //set the controller class to DEFAULT_CONTROLLER if it doesn't exists - if (!class_exists(ucwords($controller).'Controller')) - { - $controller = $errorController; - $action = $errorAction; - $urlArray = array(); - } - - //set the action to DEFAULT_ACTION if it doesn't exists - if (!method_exists(ucwords($controller).'Controller', $action)) - { - $controller = $errorController; - $action = $errorAction; - $urlArray = array(); - } - - /* - CHECK COUPLES CONTROLLER,ACTION - */ - if (!in_array('all',Route::$allowed)) - { - $couple = "$controller,$action"; - if (!in_array($couple,Route::$allowed)) - { - $controller = $errorController; - $action = $errorAction; - $urlArray = array(); - } - } - - array_shift($urlArray); - $queryString = $urlArray; - //set the name of the application - $application = $controller; - $controller = ucwords($controller); - $model = $controller; - $controller .= 'Controller'; - $model .= 'Model'; - - //include the file containing the set of actions to carry out before the initialization of the controller class - Hooks::load(ROOT . DS . APPLICATION_PATH . DS . 'Hooks' . DS . 'BeforeInitialization.php'); - - if (class_exists($controller)) - { - $dispatch = new $controller($model,$application,$queryString); - - //pass the action to the controller object - $dispatch->action = $action; - $dispatch->currPage = $dispatch->baseUrl.'/'.$dispatch->controller.'/'.$dispatch->action; - - //require the file containing the set of actions to carry out after the initialization of the controller class - Hooks::load(ROOT . DS . APPLICATION_PATH . DS . 'Hooks' . DS . 'AfterInitialization.php'); - - $templateFlag= true; - - if (method_exists($controller, $action)) - { - //pass the action to the theme object - $dispatch->theme->action = $action; - $dispatch->theme->currPage = $dispatch->baseUrl.'/'.$dispatch->controller.'/'.$dispatch->action; - - call_user_func_array(array($dispatch,$action),$queryString); - } - else - { - $templateFlag= false; - } - - if ($templateFlag) - { - $dispatch->theme->render(); - } - - } - else - { - echo "

              the '$controller' controller is not present!

              "; - } - -} - - -// //rewrite the URL -// function rewrite($url) -// { -// foreach (Route::$map as $key => $address) -// { -// if (preg_match('/^'.$key.'/',$url)) -// { -// return preg_replace('/^'.$key.'/',$address,$url); -// } -// } -// return ERROR_CONTROLLER.'/'.ERROR_ACTION; -// } - -function getQueryString() -{ - - if (strstr($_SERVER['REQUEST_URI'],'index.php/')) - { - return Params::$mbStringLoaded === true ? mb_substr(mb_strstr($_SERVER['REQUEST_URI'],'index.php/'),10) : substr(strstr($_SERVER['REQUEST_URI'],'index.php/'),10); - } - - return ''; -} - -function __autoload($className) -{ - - $backupName = $className; - - if (strstr($className,'_')) - { - $parts = explode('_',$className); - $className = implode(DS,$parts); - } - - if (file_exists(ROOT . DS . 'Library' . DS . $className . '.php')) - { - require_once(ROOT . DS . 'Library' . DS . $className . '.php'); - } - else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Controllers' . DS . $backupName . '.php')) - { - require_once(ROOT . DS . APPLICATION_PATH . DS . 'Controllers' . DS . $backupName . '.php'); - } - else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Models' . DS . $backupName . '.php')) - { - require_once(ROOT . DS . APPLICATION_PATH . DS . 'Models' . DS . $backupName . '.php'); - } - else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Modules' . DS . $backupName . '.php')) - { - require_once(ROOT . DS . APPLICATION_PATH . DS . 'Modules' . DS . $backupName . '.php'); - } - else if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Strings' . DS . $className . '.php')) - { - require_once(ROOT . DS . APPLICATION_PATH . DS . 'Strings' . DS . $className . '.php'); - } - -} - -try { - - //check the length of the $_POST values - checkPostLength(); - - //check the length of the REQUEST_URI - checkRequestUriLength(); - - //connect to the database - Factory_Db::getInstance(DATABASE_TYPE,array(HOST,USER,PWD,DB)); - - //set htmlentities charset - switch (DEFAULT_CHARSET) - { - case 'SJIS': - Params::$htmlentititiesCharset = 'Shift_JIS'; - break; - } - - $allowedCharsets = array('UTF-8','ISO-8859-1','EUC-JP','SJIS'); - if (!in_array(DEFAULT_CHARSET,$allowedCharsets)) die('charset not-allowed'); - - //check if the mbstring extension is loaded - if (extension_loaded('mbstring')) - { - //set the internal encoding - mb_internal_encoding(DEFAULT_CHARSET); - Params::$mbStringLoaded = true; - } - - //load the files defined inside Config/Autoload.php - foreach (Autoload::$files as $file) - { - $ext = strtolower(end(explode('.', $file))); - $path = ROOT . DS . APPLICATION_PATH . DS . 'Include' . DS . $file; - if (file_exists($path) and $ext === 'php') - { - require_once($path); - } - } - - //include the file containing the set of actions to carry out before the check of the super global array - Hooks::load(ROOT . DS . APPLICATION_PATH . DS . 'Hooks' . DS . 'BeforeChecks.php'); - - //sanitize super global arrays - sanitizeSuperGlobal(); - - //report errors - ErrorReporting(); - - //verify that register globals is not active - checkRegisterGlobals(); - - //call the main hook - callHook(); - - //disconnect to the database - Factory_Db::disconnect(DATABASE_TYPE); - -} catch (Exception $e) { - - echo '
              Message: '.$e->getMessage().'
              '; - -} \ No newline at end of file diff --git a/h-source/admin/Library/Controller.php b/h-source/admin/Library/Controller.php deleted file mode 100755 index 9ceaa5f..0000000 --- a/h-source/admin/Library/Controller.php +++ /dev/null @@ -1,291 +0,0 @@ -viewArgs) - - public $theme; - public $baseUrl = null; //the base url of the website: http://domainname - public $baseUrlSrc = null; //the base url of the website (http://domainname) if MOD_REWRITE_MODULE has been set to false - - public $headerObj; //reference to headerObj class - -// protected $_users; //object to manage access - - protected $scaffold = null; //the reference to the scaffold object - - function __construct($model, $controller, $queryString = array()) { - - $this->controller = $controller; - $this->modelName = $model; - $this->_queryString = $queryString; - - $this->theme = new Theme($controller); - $this->baseUrl = $this->theme->baseUrl; - $this->baseUrlSrc = $this->theme->baseUrlSrc; - - $this->headerObj = new HeaderObj(DOMAIN_NAME); - $this->request = new Request(); - } - - //redirect to $path after the time $time - final public function redirect($path,$time = 0,$string = null) - { - $this->headerObj->redirect($path,$time,$string); - } - - //set the $_data structure of the theme - final public function set($value) - { - $this->theme->set($value); - } - - //append values to the $_data structure of the theme - final public function append($value) - { - $this->theme->append($value); - } - - //load a view file - final public function load($viewFile,$option = 'none') { - $this->theme->load($viewFile,$option); - } - - //clean the array containing the view files to load - final public function clean() { - $this->theme->clean(); - } - - //load an helper class - final function helper($helperName) { - $args = func_get_args(); - array_shift($args); - $name = 'Helper_'.$helperName; - if (class_exists($name)) - { - $this->h[$helperName] = new $name(); - - if ($this->h[$helperName] instanceof Helper_Html) { - $this->h[$helperName]->viewArgs = $this->viewArgs; - $this->h[$helperName]->viewStatus = $this->viewStatus; - } - - if (method_exists($this->h[$helperName], 'build')) { - call_user_func_array(array($this->h[$helperName],'build'),$args); - } - } - - } - - //load a model class - //$name: the name of the model class - final public function model($name = null) { - $modelName = isset($name) ? $name : $this->modelName; - if (class_exists($modelName)) { - $this->m[$modelName] = new $modelName(); - } else { - throw new Exception('Error in '.__METHOD__.': class "'.$modelName.'" has not been defined'); - } - } - - //load a controller - //$controllerName: the name of the controller class to load - final public function controller($controller) - { - if (class_exists($controller)) { - $model = str_replace('Controller',null,$controller).'Model'; - $application = strtolower(str_replace('Controller',null,$controller)); - $this->c[$controller] = new $controller($model,$application,array()); - $this->c[$controller]->theme = $this->theme; - } - } - - //load a users_checkAdmin class - //$sessonType: the type of session. It can be 'admin' (in the case of the access of an admin user) or 'registered' (in the case of the access of a registerd user) - final public function session($sessionType = 'admin') { - $sessionTypeArray = array('admin','registered'); - if (!in_array($sessionType,$sessionTypeArray)) { - throw new Exception('Error in '.__METHOD__.': the session type can be \'admin\' or \'registered\' only'); - } - //admin session - if ($sessionType === 'admin') { - $params = array( - 'users_controller' => ADMIN_USERS_CONTROLLER, - 'users_login_action' => ADMIN_USERS_LOGIN_ACTION, - 'panel_controller' => ADMIN_PANEL_CONTROLLER, - 'panel_main_action' => ADMIN_PANEL_MAIN_ACTION, - 'cookie_name' => ADMIN_COOKIE_NAME, - 'sessionsTable' => ADMIN_SESSIONS_TABLE, - 'usersTable' => ADMIN_USERS_TABLE, - 'groupsTable' => ADMIN_GROUPS_TABLE, - 'manyToManyTable' => ADMIN_MANYTOMANY_TABLE, - 'accessesTable' => ADMIN_ACCESSES_TABLE, - 'session_expire' => ADMIN_SESSION_EXPIRE, - 'cookie_path' => ADMIN_COOKIE_PATH, - 'database_type' => DATABASE_TYPE, - 'hijacking_check' => ADMIN_HIJACKING_CHECK, - 'on_hijacking_event' => ADMIN_ON_HIJACKING_EVENT, - 'hijacking_action' => ADMIN_HIJACKING_ACTION, - 'time_after_failure' => ADMIN_TIME_AFTER_FAILURE, - 'password_hash' => PASSWORD_HASH, - 'cookie_domain' => ADMIN_COOKIE_DOMAIN, - 'cookie_secure' => ADMIN_COOKIE_SECURE - ); - $this->s['admin'] = new Users_CheckAdmin($params); - } - //registered session - if ($sessionType === 'registered') { - $params = array( - 'users_controller' => REG_USERS_CONTROLLER, - 'users_login_action' => REG_USERS_LOGIN_ACTION, - 'panel_controller' => REG_PANEL_CONTROLLER, - 'panel_main_action' => REG_PANEL_MAIN_ACTION, - 'cookie_name' => REG_COOKIE_NAME, - 'sessionsTable' => REG_SESSIONS_TABLE, - 'usersTable' => REG_USERS_TABLE, - 'groupsTable' => REG_GROUPS_TABLE, - 'manyToManyTable' => REG_MANYTOMANY_TABLE, - 'accessesTable' => REG_ACCESSES_TABLE, - 'session_expire' => REG_SESSION_EXPIRE, - 'cookie_path' => REG_COOKIE_PATH, - 'database_type' => DATABASE_TYPE, - 'hijacking_check' => REG_HIJACKING_CHECK, - 'on_hijacking_event' => REG_ON_HIJACKING_EVENT, - 'hijacking_action' => REG_HIJACKING_ACTION, - 'time_after_failure' => REG_TIME_AFTER_FAILURE, - 'password_hash' => PASSWORD_HASH, - 'cookie_domain' => REG_COOKIE_DOMAIN, - 'cookie_secure' => REG_COOKIE_SECURE - ); - $this->s['registered'] = new Users_CheckAdmin($params); - } - } - - //method to set $this->argKeys. Chenge the string in the array! - final public function setArgKeys($argKeys) { -// $this->argKeys = explode(',',$argKeys); - $this->argKeys = array_keys($argKeys); - $this->argDefault = array_values($argKeys); - } - - //shift the $this->_queryString array a number of times equal to the number indicated by the $number variable and build the $this->viewArgs array and the $this->viewStatus string (additional url) - final public function shift($number = 0) { - - //save the query string array - $oldQueryString = $this->_queryString; - - for ($i = 0; $i < $number; $i++) - { - array_shift($this->_queryString); - } - $this->callInArgKeysFunc(); - for ($i = 0; $i < count($this->argKeys); $i++) - { - if (!isset($this->_queryString[$i])) { - $this->viewArgs[$this->argKeys[$i]] = isset($this->argDefault[$i]) ? $this->argDefault[$i] : null; - continue; - } - $this->viewArgs[$this->argKeys[$i]] = $this->_queryString[$i]; - } - $this->viewStatus = Url::createUrl(array_values($this->viewArgs)); - $this->updateHelpers(); - - //update the theme - $this->theme->viewStatus = $this->viewStatus; - $this->theme->viewArgs = $this->viewArgs; - - //restore the query string array - $this->_queryString = $oldQueryString; - } - - //call the functions defined in $this->argKeys after the colon (ex- 'page:forceInt' => apply the forceInt() function upon the $page arg) - final public function callInArgKeysFunc() { - for ($i = 0; $i < count($this->argKeys); $i++) { - if (strstr($this->argKeys[$i],':')) { - $temp = explode(':',$this->argKeys[$i]); - //exception - if (!in_array($temp[1],explode(',',params::$allowedSanitizeFunc))) { - throw new Exception('"'.$temp[1]. '" function not allowed in $this->argKeys'); - } - $this->argKeys[$i] = $temp[0]; - if (!isset($this->_queryString[$i])) { - continue; - } - $this->_queryString[$i] = call_user_func($temp[1],$this->_queryString[$i]); - } - } - } - - //function to update all the Helper that are instance of the HtmlHelper class. This function update the $viesArgs and $viewStatus properties. This function is called by the shift method. - final public function updateHelpers() { - foreach ($this->h as $Helper) { - if ($Helper instanceof Helper_Html) { - $Helper->viewArgs = $this->viewArgs; - $Helper->viewStatus = $this->viewStatus; - } - } - } - - //create the viewStatus property - final public function buildStatus() - { - $this->viewStatus = Url::createUrl(array_values($this->viewArgs)); - //update the theme - $this->theme->viewStatus = $this->viewStatus; - $this->theme->viewArgs = $this->viewArgs; - } - - //method to instanciate the scaffold - final public function loadScaffold($type,$params = null) { - - $typeArray = array('main','form'); - if (!in_array($type,$typeArray)) { - throw new Exception("the type '$type' is not allowed in ".__METHOD__); - } - $this->scaffold = new Scaffold($type,$this->controller,$this->m[$this->modelName],$this->viewArgs,$params); - - $this->helper('Menu',$this->controller,$this->scaffold->params['panelController']); - $this->scaffold->mainMenu = $this->h['Menu']; - - $this->m[$this->modelName]->popupBuild(); - $popupArray = $this->m[$this->modelName]->popupArray; - - if ($type === 'main') { - - $here = $this->controller.'/'.$this->scaffold->params['mainAction']; - $this->helper('Pages',$here,$this->scaffold->params['pageVariable']); - $this->helper('List',$this->m[$this->modelName]->identifierName); - - - $this->helper('Popup',$here,$popupArray,$this->scaffold->params['popupType'],$this->scaffold->params['pageVariable']); - - $this->scaffold->pageList = $this->h['Pages']; - $this->scaffold->itemList = $this->h['List']; - $this->scaffold->popupMenu = $this->h['Popup']; - } - } - -} \ No newline at end of file diff --git a/h-source/admin/Library/Db/Mysql.php b/h-source/admin/Library/Db/Mysql.php deleted file mode 100755 index 8b96f44..0000000 --- a/h-source/admin/Library/Db/Mysql.php +++ /dev/null @@ -1,394 +0,0 @@ - 'utf8', - 'ISO-8859-1' => 'latin1', - 'EUC-JP' => 'ujis', - 'SJIS' => 'sjis' - ); - - private function __construct($host,$user,$pwd,$db_name) - { - - $this->dblink = mysql_connect($host,$user,$pwd); - - if ($this->dblink === FALSE) { - die ("Connection error. Verify parameters in config.php"); - } - - $db2 = mysql_select_db($db_name, $this->dblink) - or die ("Database selection error. Verify parameters in config.php"); - - $charset = array_key_exists(DEFAULT_CHARSET,$this->charsetTranslationTable) ? $this->charsetTranslationTable[DEFAULT_CHARSET] : 'utf8'; - - if (!@mysql_set_charset($charset,$this->dblink)) $this->charsetError = false; - - $this->charset = mysql_client_encoding(); - } - - public static function getInstance($host = null, $user = null, $pwd = null, $db_name = null) - { - if (!isset(self::$instance)) { - $className = __CLASS__; - self::$instance = new $className($host,$user,$pwd,$db_name); - } - - return self::$instance; - } - - - //close the connection - public function disconnect() - { - mysql_close($this->dblink); - } - - //the text of the error message from previous MySQL operation - public function getError() - { - return mysql_error($this->dblink); - } - - //the numerical value of the error message from previous MySQL operation - public function getErrno() - { - return mysql_errno($this->dblink); - } - - public function createSelectQuery($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=null,$using=null) - { - if (isset($where)) - { - $where='WHERE '.$where; - } - if (isset($using)) - { - $using ='USING ('.$using.')'; - $on = null; - } - if (isset($on) and !isset($using)) - { - $on='ON '.$on; - } - if (isset($order_by)) { - $order_by='ORDER BY '.$order_by; - } - if (isset($group_by)) { - $group_by='GROUP BY '.$group_by; - } - if (isset($limit)) { - $limit='LIMIT '.$limit; - } - - $query="SELECT $fields FROM $table $on $using $where $group_by $order_by $limit;"; - return $query; - } - - public function get_num_rows($table,$where=null,$group_by=null,$on=null,$using=null) { - - $query = $this->createSelectQuery($table,'*',$where,$group_by,null,null,$on,$using); - - $this->query=$query; - - $ris = mysql_query($query); - if ($ris) { - $num_rows = mysql_num_rows($ris); - return $num_rows; - } else { - return false; - } - } - - //get the maximum value of the field $field of the table $table having the $where conditions - public function getMath($func,$table,$field,$where=null,$group_by = null, $on=null,$using=null) - { - $query = $this->createSelectQuery($table,"$func($field) AS m",$where,$group_by,null,null,$on,$using); - - $this->query = $query; - $result = mysql_query($query); - if ($result) - { - $row = mysql_fetch_array($result); - return $row['m']; - } - else - { - return false; - } - } - - //get the maximum value of the field $field of the table $table having the $where conditions - public function getMax($table,$field,$where=null,$group_by = null,$on=null,$using=null) - { - return $this->getMath('MAX',$table,$field,$where,$group_by,$on,$using); - } - - //get the minimum value of the field $field of the table $table having the $where conditions - public function getMin($table,$field,$where=null,$group_by = null,$on=null,$using=null) - { - return $this->getMath('MIN',$table,$field,$where,$group_by,$on,$using); - } - - //get the sum of the fields - public function getSum($table,$field,$where=null,$group_by = null,$on=null,$using=null) - { - return $this->getMath('SUM',$table,$field,$where,$group_by,$on,$using); - } - - //get the average of the fields - public function getAvg($table,$field,$where=null,$group_by = null,$on=null,$using=null) - { - return $this->getMath('AVG',$table,$field,$where,$group_by,$on,$using); - } - - public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=null,$using=null) - { - $query = $this->createSelectQuery($table,$fields,$where,$group_by,$order_by,$limit,$on,$using); - - $this->query = $query; - $result = mysql_query($query); - return $this->getData($result); - } - - -// public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null) { -// $query = $this->selectQuery($table,$fields,$where,$group_by,$order_by,$limit); -// return $this->getData($query); -// } - - - //obtain an associative array containing the result values (keys:tableName_fieldsName) - //$par = 'single/multi' single table,multi table - public function getData($result) - { - $data = array(); //data from the query - $temp = array(); //temporary array (values of a single record) -// $result = mysql_query($query); - if ($result) - { - $fieldsNumber = mysql_num_fields($result); - while ($row = mysql_fetch_array($result)) - { - for ($i = 0;$i < $fieldsNumber;$i++) - { - $tableName = mysql_field_table($result, $i); - if (strcmp($tableName,'') === 0) $tableName = Params::$aggregateKey; - $fieldName = mysql_field_name($result, $i); - $temp[$tableName][$fieldName] = $row[$i]; - } - array_push($data,$temp); - } - return $data; - } - else - { - return false; - } - } - - //return an array containing all the types of the fields (indicated in $fields) of a table (indicated in $table) - public function getTypes($table, $fields) - { - $query = "DESCRIBE $table;"; - $result = mysql_query($query); - $temp = array(); - while ($row = mysql_fetch_assoc($result)) { - $temp[$row['Field']] = reset(explode('(',$row['Type'])); - } - - $types = array(); - $fields = explode(',',$fields); - for ($i = 0; $i < count($fields); $i++) - { - if (!array_key_exists($fields[$i],$temp)) return false; - $types[] = $temp[$fields[$i]]; - } - - return $types; - } - - public function insert($table,$fields,$values) { - - #$table is a string - #$fields has to be a string with comma as separator: name1,name2,... - #$values has to be an array - $values = array_values($values); - if (strcmp($fields,'') !== 0) - { - //get the type of the fields - $types = $this->getTypes($table,$fields); - if (!$types) return false; - - for($i = 0; $i < count($values); $i++) - { - if (!in_array($types[$i],$this->fieldsType)) - { - $values[$i] = '"'.$values[$i].'"'; - } - else - { - if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"'; - } - } - - $values = implode(',',$values); - $query="INSERT INTO $table ($fields) VALUES ($values);"; - $this->query = $query; - $ris = mysql_query($query); - - #check the result - if ($ris) { - return true; - } else { - return false; - } - - } else { - return false; - } - } - - // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT). - public function lastId() - { - return mysql_insert_id(); - } - - public function update($table,$fields,$values,$where) { - - #$table and $where are two strings - #$fields has to be a string with comma as separator: name1,name2,... - #$values has to be an array - $values = array_values($values); -// if (isset($where)) { - $where='WHERE '.$where; -// } - #get the array from the $fields string - if (strcmp($fields,'') !== 0) - { - //get the type of the fields - $types = $this->getTypes($table,$fields); - if (!$types) return false; - - $fields=explode(',',$fields); - $str=array(); - - for ($i=0;$ifieldsType)) - { - $values[$i] = '"'.$values[$i].'"'; - } - else - { - if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"'; - } - $str[$i]= $fields[$i].'='.$values[$i]; - } - - #set the string name1=value1,name2=... - $str=implode(',',$str); - $query="UPDATE $table SET $str $where;"; - $this->query=$query; - $ris = mysql_query($query); - - #check the result - if ($ris) { - return true; - } else { - return false; - } - } else { - return false; - } - - } - - - public function del($table,$where) { - - #$table and $where are two strings -// if (isset($where)) { - $where='WHERE '.$where; -// } - $query="DELETE FROM $table $where;"; - $this->query=$query; - $ris = mysql_query($query); - #check the result - - if ($ris) { - return true; - } else { - return false; - } - - } - - // function to check if exist the record having the field $id_name=$id_value - public function recordExists($table,$fieldName,$fieldValue,$where = null,$groupBy=null,$on=null,$using=null) - { - if (isset($where)) - { - $where=' AND '.$where; - } - - $fieldValue = '"'.$fieldValue.'"'; - - $num=$this->get_num_rows($table,$fieldName.'='.$fieldValue.$where,$groupBy,$on,$using); - $res=($num>0) ? true : false; - return $res; - - } - - - //send a generic query to the database - //$query: the query to be sent - public function query($query) - { - $this->query = $query; - $result = mysql_query($query); - if ($result === false) - { - return false; - } - else if ($result === true) - { - return true; - } - else if (@get_resource_type($result)) - { - return $this->getData($result); - } - } - - // Prevent users to clone the instance - public function __clone() - { - throw new Exception('error in '. __METHOD__.': clone is not allowed'); - } - -} \ No newline at end of file diff --git a/h-source/admin/Library/Db/Mysqli.php b/h-source/admin/Library/Db/Mysqli.php deleted file mode 100644 index 4e4c528..0000000 --- a/h-source/admin/Library/Db/Mysqli.php +++ /dev/null @@ -1,400 +0,0 @@ - 'utf8', - 'ISO-8859-1' => 'latin1', - 'EUC-JP' => 'ujis', - 'SJIS' => 'sjis' - ); - - /** - - *connect to the database - *'host','user','password','db_name' - - */ - - private function __construct($host,$user,$pwd,$db_name) - { - - $this->db = new mysqli($host,$user,$pwd,$db_name); - - if (mysqli_connect_error()) - { - die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); - } - - $charset = array_key_exists(DEFAULT_CHARSET,$this->charsetTranslationTable) ? $this->charsetTranslationTable[DEFAULT_CHARSET] : 'utf8'; - - if (!@$this->db->set_charset($charset)) $this->charsetError = false; - - $this->charset = $this->db->character_set_name(); - - } - - //return the $this->db property - public function getDb() - { - return $this->db; - } - - public static function getInstance($host = null, $user = null, $pwd = null, $db_name = null) - { - if (!isset(self::$instance)) { - $className = __CLASS__; - self::$instance = new $className($host,$user,$pwd,$db_name); - } - - return self::$instance; - } - - - //close the connection - public function disconnect() - { - $this->db->close(); - } - - //the text of the error message from previous MySQL operation - public function getError() - { - return $this->db->error; - } - - //the numerical value of the error message from previous MySQL operation - public function getErrno() - { - return $this->db->errno; - } - - public function createSelectQuery($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=null,$using=null) - { - if (isset($where)) - { - $where='WHERE '.$where; - } - if (isset($using)) - { - $using ='USING ('.$using.')'; - $on = null; - } - if (isset($on) and !isset($using)) - { - $on='ON '.$on; - } - if (isset($order_by)) { - $order_by='ORDER BY '.$order_by; - } - if (isset($group_by)) { - $group_by='GROUP BY '.$group_by; - } - if (isset($limit)) { - $limit='LIMIT '.$limit; - } - - $query="SELECT $fields FROM $table $on $using $where $group_by $order_by $limit;"; - return $query; - } - - public function get_num_rows($table,$where=null,$group_by=null,$on=null,$using=null) { - - $query = $this->createSelectQuery($table,'*',$where,$group_by,null,null,$on,$using); - - $this->query = $query; - $ris = $this->db->query($query); - if ($ris) { - $num_rows = $ris->num_rows; - $ris->close(); - return $num_rows; - } else { - return false; - } - } - - public function getMath($func,$table,$field,$where=null,$group_by = null, $on=null,$using=null) - { - $query = $this->createSelectQuery($table,"$func($field) AS m",$where,$group_by,null,null,$on,$using); - - $this->query = $query; - $result = $this->db->query($query); - if ($result) - { - $row = $result->fetch_array(); - $result->close(); - return $row['m']; - } - else - { - return false; - } - } - - //get the maximum value of the field $field of the table $table having the $where conditions - public function getMax($table,$field,$where=null,$group_by = null,$on=null,$using=null) - { - return $this->getMath('MAX',$table,$field,$where,$group_by,$on,$using); - } - - //get the minimum value of the field $field of the table $table having the $where conditions - public function getMin($table,$field,$where=null,$group_by = null,$on=null,$using=null) - { - return $this->getMath('MIN',$table,$field,$where,$group_by,$on,$using); - } - - //get the sum of the fields - public function getSum($table,$field,$where=null,$group_by = null,$on=null,$using=null) - { - return $this->getMath('SUM',$table,$field,$where,$group_by,$on,$using); - } - - //get the average of the fields - public function getAvg($table,$field,$where=null,$group_by = null,$on=null,$using=null) - { - return $this->getMath('AVG',$table,$field,$where,$group_by,$on,$using); - } - - public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null,$on=null,$using=null) - { - $query = $this->createSelectQuery($table,$fields,$where,$group_by,$order_by,$limit,$on,$using); - - $this->query = $query; - $result = $this->db->query($query); - return $this->getData($result); - } - - -// public function select($table,$fields='*',$where=null,$group_by=null,$order_by=null,$limit=null) { -// $query = $this->selectQuery($table,$fields,$where,$group_by,$order_by,$limit); -// return $this->getData($query); -// } - - - //obtain an associative array containing the result values (keys:tableName_fieldsName) - //$par = 'single/multi' single table,multi table - public function getData($result) { - $data = array(); //data from the query - $temp = array(); //temporary array (values of a single record) -// $result = $this->db->query($query); - if ($result) { - $fieldsNumber = $result->field_count; - while ($row = $result->fetch_array()) { - for ($i = 0;$i < $fieldsNumber;$i++) { - $finfo = $result->fetch_field_direct($i); - $tableName = $finfo->table; - if (strcmp($tableName,'') === 0) $tableName = Params::$aggregateKey; - $fieldName = $finfo->name; - $temp[$tableName][$fieldName] = $row[$i]; - } - array_push($data,$temp); - } - $result->close(); - return $data; - } else { - return false; - } - } - - //return an array containing all the types of the fields (indicated in $fields) of a table (indicated in $table) - public function getTypes($table, $fields) - { - $query = "DESCRIBE $table;"; - $result = $this->db->query($query); - $temp = array(); - while ($row = $result->fetch_assoc()) { - $temp[$row['Field']] = reset(explode('(',$row['Type'])); - } - $result->close(); - - $types = array(); - $fields = explode(',',$fields); - for ($i = 0; $i < count($fields); $i++) - { - if (!array_key_exists($fields[$i],$temp)) return false; - $types[] = $temp[$fields[$i]]; - } - - return $types; - } - - public function insert($table,$fields,$values) { - - #$table is a string - #$fields has to be a string with comma as separator: name1,name2,... - #$values has to be an array - $values = array_values($values); - if (strcmp($fields,'') !== 0) - { - //get the type of the fields - $types = $this->getTypes($table,$fields); - if (!$types) return false; - - for($i = 0; $i < count($values); $i++) - { - if (!in_array($types[$i],$this->fieldsType)) - { - $values[$i] = '"'.$values[$i].'"'; - } - else - { - if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"'; - } - } - - $values = implode(',',$values); - $query="INSERT INTO $table ($fields) VALUES ($values);"; - $this->query=$query; - - $ris = $this->db->query($query); - - #check the result - if ($ris) { - return true; - } else { - return false; - } - - } else { - return false; - } - } - - // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT). - public function lastId() - { - return $this->db->insert_id; - } - - public function update($table,$fields,$values,$where) { - - #$table and $where are two strings - #$fields has to be a string with comma as separator: name1,name2,... - #$values has to be an array - $values = array_values($values); -// if (isset($where)) { - $where='WHERE '.$where; -// } - #get the array from the $fields string - if (strcmp($fields,'') !== 0) - { - //get the type of the fields - $types = $this->getTypes($table,$fields); - if (!$types) return false; - - $fields = explode(',',$fields); - $str = array(); - - for ($i=0;$ifieldsType)) - { - $values[$i] = '"'.$values[$i].'"'; - } - else - { - if (strcmp($values[$i],'') === 0) $values[$i] = '"'.$values[$i].'"'; - } - $str[$i]= $fields[$i].'='.$values[$i]; - } - - #set the string name1=value1,name2=... - $str=implode(',',$str); - $query="UPDATE $table SET $str $where;"; - $this->query=$query; - $ris = $this->db->query($query); - - #check the result - if ($ris) { - return true; - } else { - return false; - } - } else { - return false; - } - - } - - - public function del($table,$where) { - - #$table and $where are two strings -// if (isset($where)) { - $where='WHERE '.$where; -// } - $query="DELETE FROM $table $where;"; - $this->query=$query; - $ris = $this->db->query($query); - #check the result - - if ($ris) { - return true; - } else { - return false; - } - - } - - - //function to check if exist the record having the field $id_name=$id_value - public function recordExists($table,$fieldName,$fieldValue,$where = null,$groupBy=null,$on=null,$using=null) - { - if (isset($where)) - { - $where=' AND '.$where; - } - - $fieldValue = '"'.$fieldValue.'"'; - - $num = $this->get_num_rows($table,$fieldName.'='.$fieldValue.$where,$groupBy,$on,$using); - $res=($num>0) ? true : false; - return $res; - - } - - - //send a generic query to the database - //$query: the query to be sent - public function query($query) - { - $this->query = $query; - $result = $this->db->query($query); - if ($result === true) - { - return true; - } - else if ($result === false) - { - return false; - } - else if ($result instanceof MySQLi_Result) - { - return $this->getData($result); - } - } - - // Prevent users to clone the instance - public function __clone() - { - throw new Exception('error in '. __METHOD__.': clone is not allowed'); - } - -} \ No newline at end of file diff --git a/h-source/admin/Library/Db/index.html b/h-source/admin/Library/Db/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Library/Db/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Library/Email.php b/h-source/admin/Library/Email.php deleted file mode 100644 index c948098..0000000 --- a/h-source/admin/Library/Email.php +++ /dev/null @@ -1,229 +0,0 @@ -_check = $bool; - } - - //set the sentTo addresses array - //$addresses: array of e-mail addresses or a string - public function sendTo($addresses) - { - $this->_sendTo = explode(',',$addresses); - } - - //set the subject - public function subject($subject) - { - $this->_subject = $subject; - } - - //set the cc addresses array - //$addresses: array of e-mail addresses or a string - public function cc($addresses) - { - $this->_cc = explode(',',$addresses); - } - - //set the bcc addresses array - //$addresses: array of e-mail addresses or a string - public function bcc($addresses) - { - $this->_bcc = explode(',',$addresses); - } - - //set the address of the sender - public function from($address) - { - $this->_from = $address; - } - - //set the charset - public function charset($charset) - { - $this->_charset = $charset; - } - - //set the Content-Transfer-Encoding - public function ctencoding($ctencoding) - { - $this->_ctencoding = $ctencoding; - } - - //set the text body - public function body($body) - { - $this->_body = $body; - } - - //set the address regular expression - public function addressRegExp($regExp) - { - $this->_addressRegExp = $regExp; - } - - //check if the mail address is valid - public function isValidAddress($address) - { - - if( preg_match( '/^[^<>]*<(.+)>$/', $address, $matches ) ) - { - $address = $matches[1]; - } - - if (isset($this->_addressRegExp)) - { - if (preg_match($this->_addressRegExp,$address)) - { - return true; - } - else - { - return false; - } - } - else - { - if (checkMail($address)) return true; - } - - return false; - - } - - //check the addresses inside the $addresses array - public function checkAddresses($addresses) - { - foreach ($addresses as $address) - { - if(!$this->isValidAddress($address)) return false; - } - return true; - } - - //build the mail - public function buildMail() - { - - if (empty($this->_sendTo)) - { - $this->errorsArray[] = 'no address specified'; - return false; - } - - if ($this->_check) - { - if (!$this->checkAddresses($this->_sendTo)) - { - $this->errorsArray[] = 'errors in the sendTo address validation'; - return false; - } - - if (!empty($this->_cc)) - { - if (!$this->checkAddresses($this->_cc)) - { - $this->errorsArray[] = 'errors in the cc address validation'; - return false; - } - } - - if (!empty($this->_bcc)) - { - if (!$this->checkAddresses($this->_bcc)) - { - $this->errorsArray[] = 'errors in the bcc address validation'; - return false; - } - } - - if (isset($this->_from)) - { - if (!$this->checkAddresses(array($this->_from))) - { - $this->errorsArray[] = 'errors in the from address validation'; - return false; - } - } - } - - if (strcmp($this->_subject,'') === 0) - { - $this->errorsArray[] = 'no subject specified'; - return false; - } - - $headers = null; - if (isset($this->_from)) $headers .= "From: ".$this->_from."\r\n"; - $headers .= "MIME-Version: 1.0\r\n"; - $headers .= "Content-Type: text/plain; charset=\"".$this->_charset."\"\r\n"; - $headers .= "Content-Transfer-Encoding: ".$this->_ctencoding."\r\n"; - if (!empty($this->_cc)) $headers .= "CC: ".implode(',',$this->_cc)."\r\n"; - if (!empty($this->_bcc)) $headers .= "Bcc: ".implode(',',$this->_bcc)."\r\n"; - - $this->_headers = $headers; - - return true; - - } - - public function send() - { - if (!$this->buildMail()) return false; - - $to = implode(',',$this->_sendTo); - - if (!@mail($to,$this->_subject,$this->_body,$this->_headers)) - { - $this->errorsArray[] = 'error in the send process'; - return false; - } - - return true; - } - -} \ No newline at end of file diff --git a/h-source/admin/Library/ErrorReporting.php b/h-source/admin/Library/ErrorReporting.php deleted file mode 100644 index 18ba519..0000000 --- a/h-source/admin/Library/ErrorReporting.php +++ /dev/null @@ -1,45 +0,0 @@ -. - -//function to set the error reporting parameters - -function ErrorReporting() { - if (RUNTIME_CONFIGURATION === true) - { - error_reporting(ERROR_REPORTING_DIRECTIVE); - if (DISPLAY_ERRORS === 'On') { - ini_set('display_errors','On'); - } else { - ini_set('display_errors','Off'); - } - - if (ERROR_REPORTING_FILE === true) - { - if (LOG_ERROR_FILE === 'default') - { - ini_set('error_log',ROOT.DS.'Logs/Errors.log'); - } else { - ini_set('error_log',LOG_ERROR_FILE); - } - } - } -} diff --git a/h-source/admin/Library/Factory/Db.php b/h-source/admin/Library/Factory/Db.php deleted file mode 100755 index 3a988dd..0000000 --- a/h-source/admin/Library/Factory/Db.php +++ /dev/null @@ -1,52 +0,0 @@ -disconnect(); - break; - case 'Mysqli': - $mysqli = Db_Mysqli::getInstance(); - $mysqli->disconnect(); - break; - case 'None': - return null; - break; - } - } - -} diff --git a/h-source/admin/Library/Factory/index.html b/h-source/admin/Library/Factory/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Library/Factory/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Library/Files/Log.php b/h-source/admin/Library/Files/Log.php deleted file mode 100644 index 895c26d..0000000 --- a/h-source/admin/Library/Files/Log.php +++ /dev/null @@ -1,97 +0,0 @@ -splFile = new SplFileObject($path,'a+'); - //change the permission of the file - @chmod($path,self::$logPermission); - } - - // The singleton method - // $instanceName: name of the key of self::$instance. It is also the name of the log file to open - public static function getInstance($instanceName) - { - if (!isset(self::$instance[$instanceName])) { - $className = __CLASS__; - self::$instance[$instanceName] = new $className($instanceName); - } - - return self::$instance[$instanceName]; - } - - //write the string $string at the end of the file - public function writeString($string,$format = 'Y-m-d H:i:s') - { - $date = date($format); - $this->splFile->fwrite("[$date]\t".$string."\n"); - } - - //get the date string of the line $line - public function getDateString($line) - { - if (preg_match('/^[\[]{1}([a-zA-Z0-9:\-\s])*[\]]{1}/',$line,$match)) - { - $match[0] = str_replace('[',null,$match[0]); - $match[0] = str_replace(']',null,$match[0]); - return $match[0]; - } - else - { - return false; - } - } - - //delete all the lines older than a number of days equal to $days - public function clearBefore($days = 30) - { - $tempArray = array(); - $newTime = time() - (int)$days * 24 * 3600; - foreach ($this->splFile as $line) - { - $lineTime = strtotime($this->getDateString($line)); - if ($lineTime !== false and $lineTime > $newTime) - { - $tempArray[] = $line; - } - } - $this->splFile->ftruncate(0); - foreach ($tempArray as $row) - { - $this->splFile->fwrite($row); - } - } - - // Prevent users to clone the instance - public function __clone() - { - throw new Exception('error in '. __METHOD__.': clone is not allowed'); - } - -} \ No newline at end of file diff --git a/h-source/admin/Library/Files/Upload.php b/h-source/admin/Library/Files/Upload.php deleted file mode 100755 index 47289fd..0000000 --- a/h-source/admin/Library/Files/Upload.php +++ /dev/null @@ -1,451 +0,0 @@ -directory. The path starts from the $base folder - private $files = array(); //files inside the current directory - private $relFiles = array(); //files inside $this->directory. The path starts from the $base directory - private $params; //class parameters - private $pattern = null; //the pattern for the preg_match function - - protected $_resultString; //reference to the class uploadStrings containing all the result strings - - public $fileName = null; //the name of the last file that has been uploaded - public $notice = null; //the result string of the operation - - public function __construct($base,$params = null, $directory = null) { - - $this->base = $this->addTrailingSlash($base); - - //set the match pattern - $tmp = str_replace(self::DS,'\\'.self::DS,$this->base); - $this->pattern = "/^(".$tmp.")/"; - - $defaultParams = array( - 'filesPermission'=>0777, - 'delFolderAction'=>'delFolderAction', - 'delFileAction'=>'delFileAction', - 'createFolderAction'=>'createFolderAction', - 'uploadFileAction'=>'uploadFileAction', - 'maxFileSize' => 3000000, - 'language' => 'eng', - 'allowedExtensions'=>'jpg,jpeg,png,gif,txt', - 'fileUploadKey' => 'userfile' - ); - - //set the $this->scaffold->params array - if (is_array($params)) - { - foreach ($params as $key => $value) - { - $defaultParams[$key] = $value; - } - } - $this->params = $defaultParams; - - //instantiate the $_resultString object - $stringClass = 'Lang_'.$this->params['language'].'_UploadStrings'; - if (!class_exists($stringClass)) - { - $stringClass = 'Lang_Eng_UploadStrings'; - } - $this->_resultString = new $stringClass(); - - $this->setDirectory($directory); - - } - - //obtain the current directory - public function setDirectory($directory = null) - { - $relDir = (strcmp($directory,"") !== 0) ? $this->addTrailingSlash($directory) : null; - $absDir = $this->addTrailingSlash($this->base.$directory); - - if (is_dir($absDir)) - { - if ($this->isValidFolder($absDir)) - { - $this->directory = $relDir; - return true; - } - else - { - $this->notice = $this->_resultString->getString('not-child'); - } - } - else - { - $this->directory = null; - $this->notice = $this->_resultString->getString('not-dir'); - } - return false; - } - - //check if $folder is a folder and is subfolder of $this->base - protected function isValidFolder($folder) - { - if (is_dir($folder)) - { - $folder = $this->addTrailingSlash(realpath($folder)); - if ($this->isMatching($folder)) return true; - } - return false; - } - - protected function isMatching($path) - { - if (preg_match($this->pattern,$path)) - { - if (strstr($path,'..')) return false; - return true; - } - return false; - } - - public function getDirectory() { - return $this->directory; - } - - public function getBase() - { - return $this->base; - } - - public function getSubDir() { - return $this->subDir; - } - - public function getRelSubDir() - { - return $this->relSubDir; - } - - public function getFiles() { - return $this->files; - } - - public function getRelFiles() - { - return $this->relFiles; - } - - public function getParentDir() { - return $this->parentDir; - } - - //add the trailing slash to the string - protected function addTrailingSlash($string) - { - $finalChar = $string[strlen($string) - 1]; - if (strcmp($finalChar,self::DS) !== 0) - { - return $string.self::DS; - } - return $string; - } - - protected function urlDeep($dir) { #funzione per creare l'indirizzo completo della cartella all'interno della quale voglio entrare - #$dir:cartella all'interno della quale voglio entrare - return $this->base.$this->directory.$dir.self::DS; - } - - public function listFiles() { #creo la lista di file e cartelle all'interno della directory corrente - $items = scandir($this->base.$this->directory); - foreach( $items as $this_file ) { - if( strcmp($this_file,".") !== 0 && strcmp($this_file,"..") !== 0 ) { - if (is_dir($this->urlDeep($this_file))) { - $this->subDir[] = $this_file; - $this->relSubDir[] = $this->directory.$this_file; - } else { - $this->files[] = $this_file; - $this->relFiles[] = $this->directory.$this_file; - } - } - } - //get the parent dir - $this->parentDir(); - } - - //get the extension of the file - protected function getFileExtension($file) - { - return strtolower(end(explode('.', $file))); - } - - protected function parentDir() { #individuo la cartella madre - - $folders = explode(self::DS,$this->directory); - array_pop($folders); - array_pop($folders); - $parent = implode(self::DS,$folders); - $parent = (strcmp($parent,"") !== 0) ? $this->addTrailingSlash($parent) : null; - - if ($this->isValidFolder($this->base.$parent)) - { - $this->parentDir = $parent; - } - else - { - $this->parentDir = null; - } - } - - //create the $name subfolder of the $this->directory folder - public function createFolder($name) { #funzione per creare una cartella nella directory corrente - $name = basename($name); - if (strcmp(trim($name),'') !== 0) - { - if (is_writable($this->base.$this->directory)) - { - $path = $this->base.$this->directory.$name; - - if ($this->isMatching($path)) - { - if (!file_exists($path)) - { - if (@mkdir($path,$this->params['filesPermission'])) - { - @chmod($path, $this->params['filesPermission']); - $this->notice = $this->_resultString->getString('executed'); - return true; - } - else - { - $this->notice = $this->_resultString->getString('error'); - } - } - else - { - $this->notice = $this->_resultString->getString('dir-exists'); - } - } - else - { - $this->notice = $this->_resultString->getString('not-child'); - } - } - else - { - $this->notice = $this->_resultString->getString('not-writable'); - } - } - else - { - $this->notice = $this->_resultString->getString('no-folder-specified'); - } - return false; - } - - //check if the $name folder is empty or not - protected function isEmpty($name) - { - $items = scandir($name); - foreach( $items as $this_file ) { - if( strcmp($this_file,".") !== 0 && strcmp($this_file,"..") !== 0 ) { - return false; - } - } - return true; - } - - public function removeFile($name) - { - $name = basename($name); - if (strcmp(trim($name),'') !== 0) - { - $path = $this->base.$this->directory.$name; - if ($this->isMatching($path)) - { - if ($this->removeAbsFile($path)) return true; - } - else - { - $this->notice = $this->_resultString->getString('not-child'); - } - } - else - { - $this->notice = $this->_resultString->getString('no-file-specified'); - } - return false; - } - - //remove the $name file - protected function removeAbsFile($name) - { - if (strcmp(trim($name),'') !== 0) - { - if (is_writable($name)) - { - if (@unlink($name)) - { - $this->notice = $this->_resultString->getString('executed'); - return true; - } - else - { - $this->notice = $this->_resultString->getString('error'); - } - } - else - { - $this->notice = $this->_resultString->getString('not-writable-file'); - } - } - else - { - $this->notice = $this->_resultString->getString('no-file-specified'); - } - return false; - } - - public function removeFolder($name) - { - $name = basename($name); - if (strcmp(trim($name),'') !== 0) - { - $dir = $this->base.$this->directory.$name; - if ($this->isMatching($dir)) - { - if ($this->removeAbsFolder($dir)) return true; - } - else - { - $this->notice = $this->_resultString->getString('not-child'); - } - } - else - { - $this->notice = $this->_resultString->getString('no-folder-specified'); - } - return false; - } - - //remove the $name folder - protected function removeAbsFolder($name) { - if (strcmp(trim($name),'') !== 0) { - if (is_writable($name)) - { - if ($this->isEmpty($name)) - { - if (@rmdir($name)) - { - $this->notice = $this->_resultString->getString('executed'); - return true; - } - else - { - $this->notice = $this->_resultString->getString('error'); - } - } - else - { - $this->notice = $this->_resultString->getString('not-empty'); - } - } - else - { - $this->notice = $this->_resultString->getString('not-writable'); - } - } - else - { - $this->notice = $this->_resultString->getString('no-folder-specified'); - } - return false; - } - - //upload a file in the current directory - //$fileName: name of the file - public function uploadFile($fileName = null) { - $userfile = $this->params['fileUploadKey']; - $ext = $this->getFileExtension($_FILES[$userfile]["name"]); - $fileName = isset($fileName) ? $fileName.".$ext" : basename($_FILES[$userfile]["name"]); - - $this->fileName = $fileName; - - if(strcmp(trim($_FILES[$userfile]["name"]),"") !== 0) - { - if(@is_uploaded_file($_FILES[$userfile]["tmp_name"])) { - if ($_FILES[$userfile]["size"] <= $this->params['maxFileSize']) - { - //check the extension of the file - $AllowedExtensionsArray = explode(',',$this->params['allowedExtensions']); - - if (in_array($ext,$AllowedExtensionsArray)) - { - //check if the file doesn't exists - if (!file_exists($this->base.$this->directory.$fileName)) - { - if (@move_uploaded_file($_FILES[$userfile]["tmp_name"],$this->base.$this->directory.$fileName)) - { - @chmod($this->base.$this->directory.$fileName, $this->params['filesPermission']); - $this->notice = $this->_resultString->getString('executed'); - return true; - } - else - { - $this->notice = $this->_resultString->getString('error'); - } - } - else - { - $this->notice = $this->_resultString->getString('file-exists'); - } - } - else - { - $this->notice = $this->_resultString->getString('not-allowed-ext'); - } - } - else - { - $this->notice = $this->_resultString->getString('size-over'); - } - } - else - { - $this->notice = $this->_resultString->getString('no-upload-file'); - } - } - else - { - $this->notice = $this->_resultString->getString('no-upload-file'); - } - return false; - } - - //update the folder tree - public function updateTree() { - - if (isset($_POST[$this->params['delFolderAction']])) { - $this->removeFolder($_POST[$this->params['delFolderAction']]); - } - - if (isset($_POST[$this->params['delFileAction']])) { - $this->removeFile($_POST[$this->params['delFileAction']]); - } - - if (isset($_POST[$this->params['createFolderAction']])) { - $this->createFolder($_POST['folderName']); - } - - if (isset($_POST[$this->params['uploadFileAction']])) { - $this->uploadFile(); - } - - } -} \ No newline at end of file diff --git a/h-source/admin/Library/Files/index.html b/h-source/admin/Library/Files/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Library/Files/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Library/Form/Checkbox.php b/h-source/admin/Library/Form/Checkbox.php deleted file mode 100755 index 5df1917..0000000 --- a/h-source/admin/Library/Form/Checkbox.php +++ /dev/null @@ -1,41 +0,0 @@ -entryName = $entryName; - } - - public function render($value = null) - { - $wrap = $this->getWrapElements(); - $returnString = "
              \n\t"; - $returnString .= $wrap[0]; - $returnString .= $this->getLabelTag(); - $returnString .= $wrap[1]; - $returnString .= Html_Form::checkbox($this->entryName, $value, $this->options, $this->className,$this->idName); - $returnString .= $wrap[2]; - $returnString .="
              \n"; - return $returnString; - } - -} diff --git a/h-source/admin/Library/Form/Entry.php b/h-source/admin/Library/Form/Entry.php deleted file mode 100755 index 725235a..0000000 --- a/h-source/admin/Library/Form/Entry.php +++ /dev/null @@ -1,45 +0,0 @@ - entry or a radio button). Associative array or comma-divided list. - public $defaultValue = ''; - public $wrap = array(); - public $type = null; //the type of the entry - - //create the label of each entry of the form - public function getLabelTag() - { - $labelTagClass = isset($this->labelClass) ? $this->labelClass : 'entryLabel'; - return isset($this->labelString) ? "\n\t" : null; - } - - //get the class of the entry - public function getEntryClass() - { - return isset($this->entryClass) ? $this->entryClass : 'formEntry'; - } - - public function getWrapElements() - { - $wrap[0] = isset($this->wrap[0]) ? $this->wrap[0] : null; - $wrap[1] = isset($this->wrap[1]) ? $this->wrap[1] : null; - $wrap[2] = isset($this->wrap[2]) ? $this->wrap[2] : null; - return $wrap; - } - - abstract public function render($value = null); - -} diff --git a/h-source/admin/Library/Form/Form.php b/h-source/admin/Library/Form/Form.php deleted file mode 100755 index 00e27d4..0000000 --- a/h-source/admin/Library/Form/Form.php +++ /dev/null @@ -1,116 +0,0 @@ -'value') - public $method = 'POST'; //the transmission method: POST/GET - - public function __construct($action,$submit = array('generalAction'=>'save'),$method = 'POST') - { - $this->action = $action; //action of the form: controller/action - $this->submit = $submit; - $this->method = $method; - } - - //method to manage the $this->entry associative array - //entryType: the type of the object to be initialized, $entryName: the name of the entry - //$options: the list of options (if the entry is a \n
              \n"; - } - $htmlForm .= "\n"; - return $htmlForm; - } - -} diff --git a/h-source/admin/Library/Form/Hidden.php b/h-source/admin/Library/Form/Hidden.php deleted file mode 100755 index fb81b30..0000000 --- a/h-source/admin/Library/Form/Hidden.php +++ /dev/null @@ -1,23 +0,0 @@ -entryName = $entryName; - } - - public function render($value = null) - { - $returnString = Html_Form::hidden($this->entryName, $value); - return $returnString; - } - -} diff --git a/h-source/admin/Library/Form/Html.php b/h-source/admin/Library/Form/Html.php deleted file mode 100644 index dce91c6..0000000 --- a/h-source/admin/Library/Form/Html.php +++ /dev/null @@ -1,23 +0,0 @@ -entryName = $entryName; - } - - public function render($value = null) - { - $returnString = "
              \n\t$value\n
              \n"; - return $returnString; - } - -} diff --git a/h-source/admin/Library/Form/InputText.php b/h-source/admin/Library/Form/InputText.php deleted file mode 100755 index fb98336..0000000 --- a/h-source/admin/Library/Form/InputText.php +++ /dev/null @@ -1,30 +0,0 @@ -entryName = $entryName; - } - - public function render($value = null) - { - $wrap = $this->getWrapElements(); - $returnString = "
              \n\t"; - $returnString .= $wrap[0]; - $returnString .= $this->getLabelTag(); - $returnString .= $wrap[1]; - $returnString .= Html_Form::input($this->entryName, $value, $this->className, $this->idName); - $returnString .= $wrap[2]; - $returnString .="
              \n"; - return $returnString; - } - -} diff --git a/h-source/admin/Library/Form/Password.php b/h-source/admin/Library/Form/Password.php deleted file mode 100644 index 76bc735..0000000 --- a/h-source/admin/Library/Form/Password.php +++ /dev/null @@ -1,30 +0,0 @@ -entryName = $entryName; - } - - public function render($value = null) - { - $wrap = $this->getWrapElements(); - $returnString = "
              \n\t"; - $returnString .= $wrap[0]; - $returnString .= $this->getLabelTag(); - $returnString .= $wrap[1]; - $returnString .= Html_Form::password($this->entryName, null, $this->className); - $returnString .= $wrap[2]; - $returnString .="
              \n"; - return $returnString; - } - -} diff --git a/h-source/admin/Library/Form/Radio.php b/h-source/admin/Library/Form/Radio.php deleted file mode 100755 index fb20677..0000000 --- a/h-source/admin/Library/Form/Radio.php +++ /dev/null @@ -1,30 +0,0 @@ -entryName = $entryName; - } - - public function render($value = null) - { - $wrap = $this->getWrapElements(); - $returnString = "
              \n\t"; - $returnString .= $wrap[0]; - $returnString .= $this->getLabelTag(); - $returnString .= $wrap[1]; - $returnString .= Html_Form::radio($this->entryName,$value,$this->options,$this->className, 'after', $this->idName); - $returnString .= $wrap[2]; - $returnString .="
              \n"; - return $returnString; - } - -} diff --git a/h-source/admin/Library/Form/Select.php b/h-source/admin/Library/Form/Select.php deleted file mode 100755 index 558fd57..0000000 --- a/h-source/admin/Library/Form/Select.php +++ /dev/null @@ -1,30 +0,0 @@ -entryName = $entryName; - } - - public function render($value = null) - { - $wrap = $this->getWrapElements(); - $returnString = "
              \n\t"; - $returnString .= $wrap[0]; - $returnString .= $this->getLabelTag(); - $returnString .= $wrap[1]; - $returnString .= Html_Form::select($this->entryName,$value,$this->options,$this->className, $this->idName); - $returnString .= $wrap[2]; - $returnString .="
              \n"; - return $returnString; - } - -} diff --git a/h-source/admin/Library/Form/Textarea.php b/h-source/admin/Library/Form/Textarea.php deleted file mode 100755 index d81cc84..0000000 --- a/h-source/admin/Library/Form/Textarea.php +++ /dev/null @@ -1,30 +0,0 @@ -entryName = $entryName; - } - - public function render($value = null) - { - $wrap = $this->getWrapElements(); - $returnString = "
              \n\t"; - $returnString .= $wrap[0]; - $returnString .= $this->getLabelTag(); - $returnString .= $wrap[1]; - $returnString .= Html_Form::textarea($this->entryName, $value, $this->className, $this->idName); - $returnString .= $wrap[2]; - $returnString .="
              \n"; - return $returnString; - } - -} diff --git a/h-source/admin/Library/Form/index.html b/h-source/admin/Library/Form/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Library/Form/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Library/Functions.php b/h-source/admin/Library/Functions.php deleted file mode 100755 index 414770f..0000000 --- a/h-source/admin/Library/Functions.php +++ /dev/null @@ -1,279 +0,0 @@ -getDb(); - $stringa = $db->real_escape_string($stringa); - return $stringa; - } - - return $stringa; -} - -function sanitizeAll($stringa) { - - $stringa=sanitizeHtml($stringa); - $stringa=sanitizeDb($stringa); - return $stringa; - -} - -function sanitizeHtml($stringa) { - - $charset = Params::$htmlentititiesCharset; - $stringa=htmlentities($stringa,ENT_QUOTES,$charset); - return $stringa; - -} - -//check if only alphabetic + optional characters are present in the string $string. Set $string to $altString if other characters are found -//$optChar: allowed characters divided by '|' Ex: '+|-|;' -function sanitizeCustom($string,$optChar,$altString = 'EasyGiant') -{ - - $optChar = html_entity_decode($optChar,ENT_QUOTES); - $optCharArray = explode('|',$optChar); - $temp = $string; - foreach($optCharArray as $char) - { - $temp = str_replace($char,null,$temp); - } - if (ctype_alnum($temp)) - { - return $string; - } - else - { - return $altString; - } -} - - - - -/* -SANITIZE DEEP -*/ - -function stripslashesDeep($value) { - if(get_magic_quotes_gpc()) {#if stripslashes - return array_map('stripslashes', $value); - } - return $value; -} - - -function sanitizeHtmlDeep($value) { - return array_map('sanitizeHtml', $value); -} - - -function sanitizeDbDeep($value) { - return array_map('sanitizeDb', $value); -} - - -function sanitizeCustomDeep($stringArray,$optChar,$altString = 'EasyGiant') -{ - $result = array(); - foreach ($stringArray as $key => $value) - { - $result[$key] = sanitizeCustom($value,$optChar,$altString); - } - return $result; -} - - -function sanitizeAllDeep($value) { - return array_map('sanitizeAll', $value); -} - - -function forceIntDeep($value) { - return array_map('forceInt', $value); -} - -function forceNatDeep($value) { - return array_map('forceNat', $value); -} - -function noneDeep($value) { - return array_map('none', $value); -} - - -function md5Deep($value) -{ - return array_map('md5', $value); -} - -function sha1Deep($value) -{ - return array_map('sha1', $value); -} - - - - - - - -function sanitizeAlnum($string) -{ - return ctype_alnum($string) ? sanitizeAll($string) : ''; -} - - -function sanitizeIp($ip) -{ - return preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/',$ip) ? sanitizeAll($ip) : ''; -} - - -/* - CHECK FUNCTIONS -*/ - -//check if a string has the mail format (abc.efg@hij.klm.on) -//modification of the rule found at http://www.sastgroup.com/tutorials/8-espressioni-regolari-per-validare-un-po-di-tutto -//original rule: /^[^0-9][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-Z]{2,4}$/ -function checkMail($string) -{ - if (preg_match('/^[a-zA-Z0-9_\-]+([.][a-zA-Z0-9_\-]+){0,2}[@][a-zA-Z0-9_\-]+([.][a-zA-Z0-9_\-]+){0,2}[.][a-zA-Z]{2,4}$/',$string)) - { - return true; - } - else - { - return false; - } -} - - - -function wrap($string,$tag_class) {#wrap the string with the tag and its class - #$tag_class has to be an associative array (tag1=>class1,$tag2=>class2,.. )!! - $str_front=null; - $str_rear=null; - if (is_array($tag_class)) { - foreach ($tag_class as $tag => $class) { - $tag = str_replace('+','',$tag); - $str_class=isset($class) ? " class=\"".$class."\"" : null; - $str_front.="<".$tag.$str_class.">\n"; - $str_rear.="\n"; - } - } - return $str_front.$string.$str_rear; -} - -//generate a random password -//$start: start number of mt_rand -//$end: end number of mt_rand -function randString($length,$start = 33, $end = 126) -{ - $random = ''; - for ($i = 0; $i < $length; $i++) - { - $random .= chr(mt_rand($start, $end)); - } - return $random; -} - -//generate a random string -//$charNumb:number of characters of the final string -//$allowedChars: allowed characters -function generateString($charNumb = 8,$allowedChars = '0123456789abcdefghijklmnopqrstuvwxyz') -{ - $str = null; - for ($i = 0; $i < $charNumb; $i++) - { - $str .= substr($allowedChars, mt_rand(0, strlen($allowedChars)-1), 1); - } - return $str; -} - - -function getIp() -{ - $ip = ""; - - if (isset($_SERVER)) - { - if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) - { - $ip = sanitizeIp($_SERVER["HTTP_X_FORWARDED_FOR"]); - } else if (!empty($_SERVER["HTTP_CLIENT_IP"])) { - $ip = sanitizeIp($_SERVER["HTTP_CLIENT_IP"]); - } else { - $ip = sanitizeIp($_SERVER["REMOTE_ADDR"]); - } - } else { - if ( getenv( 'HTTP_X_FORWARDED_FOR' ) !== false ) { - $ip = sanitizeIp(getenv( 'HTTP_X_FORWARDED_FOR' )); - } else if ( getenv( 'HTTP_CLIENT_IP' ) !== false ) { - $ip = sanitizeIp(getenv( 'HTTP_CLIENT_IP' )); - } else { - $ip = sanitizeIp(getenv( 'REMOTE_ADDR' )); - } - } - return $ip; -} - - - -function getUserAgent() { - if (isset($_SERVER['HTTP_USER_AGENT'])) - { - return md5($_SERVER['HTTP_USER_AGENT']); - } - else - { - return md5('firefox'); - } -} - - -function xml_encode($string) -{ - $trans = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES); - foreach ($trans as $k=>$v) - { - $trans[$k]= "&#".ord($k).";"; - } - - return strtr($string, $trans); -} \ No newline at end of file diff --git a/h-source/admin/Library/HeaderObj.php b/h-source/admin/Library/HeaderObj.php deleted file mode 100644 index f4fe65b..0000000 --- a/h-source/admin/Library/HeaderObj.php +++ /dev/null @@ -1,28 +0,0 @@ -domainName = $domainName; - } - - //redirect to $path after the time $time - //string that appears until the page is redirected - public function redirect($path,$time = 0,$string = null) - { - $completePath = Url::getRoot().$path; - header('Refresh: '.$time.';url='.$completePath); - if (isset($string)) echo $string; - exit; - } - -} diff --git a/h-source/admin/Library/Helper/Array.php b/h-source/admin/Library/Helper/Array.php deleted file mode 100755 index 32a4c27..0000000 --- a/h-source/admin/Library/Helper/Array.php +++ /dev/null @@ -1,11 +0,0 @@ - null, - 'del' => null, - 'up' => null, - 'down' => null, - 'link' => null - ); - - //set the titles of the input:submit - public $submitTitles = array( - 'edit' => 'edit the record', - 'del' => 'delete the record', - 'up' => 'move up the record', - 'down' => 'move down the record', - 'link' => 'associate the record' - ); - - //$position: array. First element: page number, second element: number of pages - public $position = array(); - - //it can be: both, top, bottom, none - protected $_boundaries = 'none'; - - public function build($identifierName = 'identifier') - { - $this->_identifierName = $identifierName; - } - - public function setIdentifierName($identifierName) - { - $this->_identifierName = $identifierName; - } - - //add a list Item. $type: the type of the item, $field: the table.field to exctract (use colon to separate the table and the field),$action: controller/action,$value=if type == link->the value of the link - public function addItem($type, $action = '', $field = '', $name = '') { - if (!in_array($type,$this->_allowedItems)) { - throw new Exception('"'.$type. '" argument not allowed in '.__METHOD__.' method'); - } - $temp=array(); - $temp['type'] = $type; - $temp['action'] = $action; - $temp['field'] = $field; - $temp['name'] = $name; - $this->_itemsList[] = $temp; - - //set the $this->_head array - $head = array(); - $head['type'] = $type; - - if ($type === 'simpleText') { - $head['action'] = $this->extractFieldName($action); - } else { - $head['action'] = ' '; - } - $this->_head[] = $head; - } - - - //set the head of the table - //$columnsName: name of the columns. It has to be a comma-separated list of strings - public function setHead($columnsName = '') - { - //get the array from the list - $columnsArray = explode(',',$columnsName); - for ($i = 0; $i < count($columnsArray); $i++) - { - if ($i < count($this->_itemsList)) $this->_head[$i]['action'] = $columnsArray[$i]; - } - } - - - //$method to extract the field name from the $action string (;table:field;) - public function extractFieldName($string) { - $string = str_replace(';','',$string); - return $string; - } - - //replace the strings wrapped by ; with their correspondent value taken by the $recordArray associative array (a row of the select query) - public function replaceFields($string,$rowArray) { - $stringArray = explode(';',$string); - for ($i = 0; $i < count($stringArray); $i++) { - if (strstr($stringArray[$i],':')) { - //check if a function has been indicated - if (strstr($stringArray[$i],'|')) - { - //get the function - $firstArray = explode('|',$stringArray[$i]); - $func = $firstArray[0]; - //replace the fields - $temp = explode(':',$firstArray[1]); - $stringArray[$i] = $rowArray[$temp[0]][$temp[1]]; - - if (!function_exists($func)) { - throw new Exception('Error in '.__METHOD__.': function '.$func.' does not exists..'); - } - //apply the function - $stringArray[$i] = call_user_func($func,$stringArray[$i]); - } - else - { - $temp = explode(':',$stringArray[$i]); - $stringArray[$i] = $rowArray[$temp[0]][$temp[1]]; - } - } - } - return implode('',$stringArray); - } - - //call the method replaceFields upon the $items array using the associative array $rowArray - public function replaceAll($item,$rowArray) { - $item['action'] = $this->replaceFields($item['action'],$rowArray); - $item['field'] = $this->replaceFields($item['field'],$rowArray); - $item['name'] = $this->replaceFields($item['name'],$rowArray); - return $item; - } - - //wrap the column with the tag td - public function wrapColumn($string, $className = null) { - return wrap($string,array('td'=>$className)); - } - - //wrap the row with the tag tr - public function wrapRow($string,$className = null) { - return wrap($string,array('tr'=>$className)); - } - - public function wrapList($string) { - return wrap($string,array('table'=>'listTable')); - } - - //method to create the HTML of the head of the table - public function createHead() { - $htmlHead = null; - foreach ($this->_head as $item) { - $temp = $item['action']; - $htmlHead .= $this->wrapColumn($temp,$item['type']); - } - return $htmlHead; - } - - //create the HTML of a single row (values taken from the associative array $rowArray) - public function getRowList($rowArray) { - $htmlList = null; - foreach ($this->_itemsList as $item) { - $item = $this->replaceAll($item,$rowArray); - - if (($this->_boundaries === 'top' and $item['type'] === 'moveupForm') or ($this->_boundaries === 'bottom' and $item['type'] === 'movedownForm') or ($this->_boundaries === 'both' and ($item['type'] === 'moveupForm' or $item['type'] === 'movedownForm'))) - { - $htmlList .= $this->wrapColumn(' ',$item['type']); - } - else - { - $temp = call_user_func_array(array($this,$item['type']),array($item)); - $htmlList .= $this->wrapColumn($temp,$item['type']); - } - } - return $htmlList; - } - - //$index: record number - public function ifInBoundaries($index) - { - $this->_boundaries = 'none'; - - if (!empty($this->position)) - { - if ($this->_recordNumber === 1 and strcmp($this->position[0],1) === 0) - { - $this->_boundaries = 'both'; - } - else if ($index === 0 and strcmp($this->position[0],1) === 0) - { - $this->_boundaries = 'top'; - } - else if ($index === ($this->_recordNumber-1) and strcmp($this->position[0],$this->position[1]) === 0) - { - $this->_boundaries = 'bottom'; - } - } - - } - - //create the HTML of the entire list. $queryResult: the array coming from the select query - public function render($queryResult) - { - //set the number of records - $this->_recordNumber = count($queryResult); - $htmlList = null; - //create the HTML of the head of the record list - $htmlList .= $this->wrapRow($this->createHead(),'listHead'); - for ($i = 0; $i < count($queryResult); $i++) - { - $this->ifInBoundaries($i); - $temp = $this->getRowList($queryResult[$i]); - $htmlList .= $this->wrapRow($temp,'listRow'); - } - return $this->wrapList($htmlList); - } - - public function generalForm($itemArray, $submitName, $submitValue) - { - $string = "
              viewStatus."' method='POST'>\n"; - $name = (strcmp($itemArray['name'],'') !== 0) ? $itemArray['name'] : $submitName; - - if (strcmp($this->submitImageType,'yes') === 0) - { - $string .= "\n"; - $string .= "\n"; - } - else - { - $string .= "\n"; - } - - $string .= "\n"; - $string .= "
              \n"; - return $string; - } - - public function moveupForm($itemArray) - { - return $this->generalForm($itemArray, 'moveupAction', 'up'); - } - - public function movedownForm($itemArray) - { - return $this->generalForm($itemArray, 'movedownAction', 'down'); - } - - public function editForm($itemArray) - { - return $this->generalForm($itemArray, 'generalAction', 'edit'); - } - - public function delForm($itemArray) - { - return $this->generalForm($itemArray, 'delAction', 'del'); - } - - public function associateForm($itemArray) - { - return $this->generalForm($itemArray, 'generalAction', 'link'); - } - - public function simpleText($itemArray) { - $string = "".$itemArray['action']."\n"; - return $string; - } - - public function simpleLink($itemArray) { - $string = "viewStatus."'>".$itemArray['name']."\n"; - return $string; - } - -} \ No newline at end of file diff --git a/h-source/admin/Library/Helper/Menu.php b/h-source/admin/Library/Helper/Menu.php deleted file mode 100755 index 119ada8..0000000 --- a/h-source/admin/Library/Helper/Menu.php +++ /dev/null @@ -1,75 +0,0 @@ - array( - 'title' => 'back', - 'class' => 'mainMenuItem', - 'text' => 'Back', - 'url' => 'main' - ), - - 'add' => array( - 'title' => 'add a new record', - 'class' => 'mainMenuItem', - 'text' => 'Add', - 'url' => 'form/insert' - ), - - 'panel' => array( - 'title' => 'back to the Panel', - 'class' => 'mainMenuItem', - 'text' => 'Panel', - 'url' => 'main' - ) - - ); - - public function build($controller = null, $panelController = null) - { - $this->controller = $controller; - $this->panelController = $panelController; - } - - //$voices: comma-separated list of links you want to print - public function render($linksList) - { - $linksArray = explode(',',$linksList); - $menu = null; - foreach ($linksArray as $linkName) - { - //check that the voice exists - if (array_key_exists($linkName,$this->links)) - { - //check that the text and the ure are defined - if (isset($this->links[$linkName]['text']) and isset($this->links[$linkName]['url'])) - { - $title = isset($this->links[$linkName]['title']) ? "title='".$this->links[$linkName]['title']."'" : null; - $class = isset($this->links[$linkName]['class']) ? "class='".$this->links[$linkName]['class']."'" : null; - - //choose the controller (current or panel) - $controller = (strcmp($linkName,'panel') === 0) ? $this->panelController.'/' : $this->controller.'/'; - $viewStatus = (strcmp($linkName,'panel') === 0) ? null : $this->viewStatus; - - $href = Url::getRoot($controller.$this->links[$linkName]['url'].$viewStatus); - $text = $this->links[$linkName]['text']; - $menu .= "\n"; - } - } - } - return $menu; - } - -} \ No newline at end of file diff --git a/h-source/admin/Library/Helper/Pages.php b/h-source/admin/Library/Helper/Pages.php deleted file mode 100755 index eec58f6..0000000 --- a/h-source/admin/Library/Helper/Pages.php +++ /dev/null @@ -1,108 +0,0 @@ -_variableArg = $variableArg; - $this->_urlViewAction =$urlViewAction; //url of the controller and (/) main action - $this->previousString = $previousString; - $this->nextString = $nextString; - - } - - //return the number of pages - public function getNumbOfPages() - { - return $this->_numbOfPages; - } - - //get the limit of the select query clause - public function getLimit($currentPage,$recordNumber,$recordPerPage) - { - $this->_currentPage = $currentPage; - $this->_numbOfPages=(($recordNumber%$recordPerPage)===0) ? (int) ($recordNumber/$recordPerPage) : ((int) ($recordNumber/$recordPerPage))+1; - $start=(($currentPage-1)*$recordPerPage); - return "$start,$recordPerPage"; - } - - //return the page list string - public function render($pageNumber,$numberOfPages) - { - $pageList = null; - $pageList .= $this->pageLink($this->_currentPage-1,$this->previousString); - $pageList .= $this->recursiveLink($pageNumber,$numberOfPages); - $pageList .= $this->pageLink($this->_currentPage+1,$this->nextString); - return $pageList; - } - - //recorsive function in order to write the page list - public function recursiveLink($pageNumber,$numberOfPages) - { - - if ($numberOfPages === 0) return null; - - if ($numberOfPages === 1) { - return $this->pageLink($pageNumber); - } else { - return $this->pageLink($pageNumber) . $this->recursiveLink($pageNumber+1,$numberOfPages-1); - } - } - - public function pageLink($pageNumber, $string = null) { - if ($pageNumber > 0 and $pageNumber <= $this->_numbOfPages) { - return $this->html($pageNumber,$string); - } else { - return null; - } - } - - //return the html link - public function html($pageNumber,$string = null) { - if (isset($string)) { - $strNumber = $string; - $strClass = "class='itemListPage'"; - } else { - if ($pageNumber === $this->_currentPage) - { - $strNumber = $pageNumber; - $strClass = "class='currentPage'"; - } - else - { - $strNumber = $pageNumber; - $strClass = "class='itemListPage'"; - } - } - $this->viewArgs[$this->_variableArg] = $pageNumber; - $viewStatus = Url::createUrl(array_values($this->viewArgs)); - $href= Url::getRoot(null) . $this->_urlViewAction .$viewStatus; - return $this->getATag($href,$strNumber,$strClass); - } - - //get the HTMl of the tag - //$href: href of the link - //$text: the text of the link - //$strClass: the class of the link - public function getATag($href,$text,$strClass) - { - return "$text"; - } - -} \ No newline at end of file diff --git a/h-source/admin/Library/Helper/Popup.php b/h-source/admin/Library/Helper/Popup.php deleted file mode 100755 index 17ba908..0000000 --- a/h-source/admin/Library/Helper/Popup.php +++ /dev/null @@ -1,87 +0,0 @@ -viewArgs[$this->pageArg] is set to 1 if $this->pageArg !== null - - //the type of the popup. If type !=exclusive, than each voice selected is added to the where clause. If type=exclusive, the selection of a popup voice causes the unselection of the other voices - public $type = null; - - //list of popup names - public $popupItems = array(); - - public function build($url, $popupArray = null, $type = 'exclusive', $pageArg = null) { - $this->url = $url; - $this->popupArray = $popupArray; - $this->pageArg = $pageArg; - $this->type = $type; - - foreach ($this->popupArray as $field => $popup) - { - $this->popupItems[] = $field; - } - } - - //check that the ViewArgs array is complete - public function checkViewArgs() - { - foreach ($this->popupArray as $field => $popup) - { - if (!array_key_exists($field,$this->viewArgs)) return false; - } - return true; - } - - //unselect the voices different from the current one - public function unselect($currentVoice) - { - foreach ($this->popupItems as $item) - { - if (strcmp($item,$currentVoice) !== 0) $this->viewArgs[$item] = Params::$nullQueryValue; - } - } - - public function render() { - $returnString = null; - if ($this->checkViewArgs()) - { - if (isset($this->viewArgs[$this->pageArg])) - { - $this->viewArgs[$this->pageArg] = 1; - } - foreach ($this->popupArray as $field => $popup) - { - if ($this->type === 'exclusive') $this->unselect($field); - //save the value of the current ViewArg - $tempArg = $this->viewArgs[$field]; - $returnString .= "\n"; - $this->viewArgs[$field] = $tempArg; - } - if (count($this->popupArray)>0) { - $returnString .= "\n"; - } - } - return $returnString; - } - -} diff --git a/h-source/admin/Library/Helper/index.html b/h-source/admin/Library/Helper/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Library/Helper/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Library/Hooks.php b/h-source/admin/Library/Hooks.php deleted file mode 100644 index fa005b9..0000000 --- a/h-source/admin/Library/Hooks.php +++ /dev/null @@ -1,21 +0,0 @@ -'value') - //$className: the class name of the select - //$idName: name of the id - static public function select($name, $value, $options, $className = null, $idName = null) - { - $strClass = isset($className) ? "class='".$className."'" : null; - $idStr = isset($idName) ? "id='".$idName."'" : null; - - $returnString = null; - $returnString .= "\n"; - return $returnString; - } - - //return the HTML of an - //$name: the name of the input - //$value: the value of the input - //$className: the class name of the input - //$idName: name of the id - static public function input($name, $value, $className = null, $idName = null) - { - $strClass = isset($className) ? "class='".$className."'" : null; - $idStr = isset($idName) ? "id='".$idName."'" : null; - - $returnString ="\n"; - return $returnString; - } - - //return the HTML of a checkBox - //$name: name of the checkBox (string) - //$value: the value of the checkBox (string or number) - //$option: option of the checkBox (string or number) - //$className: the class name of the checkBox (string) - //$idName: name of the id - static public function checkbox($name, $value, $option, $className = null, $idName = null) - { - $strClass = isset($className) ? "class='".$className."'" : null; - $idStr = isset($idName) ? "id='".$idName."'" : null; - - $str = (strcmp($value,$option) === 0) ? "checked = 'checked'" : null; - return "\n"; - } - - //return the HTML of a hidden entry - //$name: name of the hidden entry (string) - //$value: the value of the hidden entry (string or number) - static public function hidden($name, $value) - { - return "\n"; - } - - //return the HTML of a password entry - //$name: name of the password entry (string) - //$value: the value of the password entry (string or number) - //$idName: name of the id - static public function password($name, $value, $className = null, $idName = null) - { - $strClass = isset($className) ? "class='".$className."'" : null; - $idStr = isset($idName) ? "id='".$idName."'" : null; - - return "\n"; - } - - //return the HTML of a textarea - //$name: name of the textarea (string) - //$value: the value of the textarea (string or number) - //$idName: name of the id - static public function textarea($name, $value, $className = null, $idName = null) - { - $strClass = isset($className) ? "class='".$className."'" : null; - $idStr = isset($idName) ? "id='".$idName."'" : null; - - return "\n"; - } - - //return the HTML of a radio button - //$name: name of the radio button - //$value: the selected value of the radio button (set $value equal to null if you don't want to select an option) - //$options: options of the radio button. This param can be a comma-separated list of options or an associative array ('name'=>'value') - //$className: the class name of the radio button - //$position: position of the strings of the radio with respect to the "circles". It can be before or after - //$idName: name of the id - static public function radio($name, $value, $options, $className = null, $position = 'after', $idName = null) - { - $strClass = isset($className) ? "class='".$className."'" : null; - $idStr = isset($idName) ? "id='".$idName."'" : null; - - $returnString = null; - - if (is_string($options)) { - $tempArray = explode(',',$options); - foreach ($tempArray as $item) - { - $optionsArray[$item] = $item; - } - } else { - $optionsArray = $options; - } - - foreach ($optionsArray as $optionName => $optionValue) { - - if ($position === 'before') - { - $before = $optionName; - $after = null; - } - else - { - $before = null; - $after = $optionName; - } - - $str= (strcmp($value,$optionValue) === 0) ? "checked='checked'" : null; - $returnString .= "$before$after\n"; - } - - return $returnString; - } - -} \ No newline at end of file diff --git a/h-source/admin/Library/Html/index.html b/h-source/admin/Library/Html/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Library/Html/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Library/Image/Gd/Captcha.php b/h-source/admin/Library/Image/Gd/Captcha.php deleted file mode 100644 index ace4806..0000000 --- a/h-source/admin/Library/Image/Gd/Captcha.php +++ /dev/null @@ -1,85 +0,0 @@ - 150, - 'boxHeight' => 100, - 'charNumber' => 6, - 'fontPath' => $here.'/External/Fonts/FreeFont/FreeMono.ttf', - 'undulation' => true, - 'align' => false, - 'charHeight' => 28 - ); - - //set the $this->scaffold->params array - if (is_array($params)) - { - foreach ($params as $key => $value) - { - $defaultParams[$key] = $value; - } - } - $this->params = $defaultParams; - - $this->string = generateString($this->params['charNumber']); - } - - public function render() - { - //space among characters - $space = $this->params['boxWidth'] / ($this->params['charNumber']+1); - //create the image box - $img = imagecreatetruecolor($this->params['boxWidth'],$this->params['boxHeight']); - - $background = imagecolorallocate($img,255,255,255); - $border = imagecolorallocate($img,0,0,0); - $colors[] = imagecolorallocate($img,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125)); - $colors[] = imagecolorallocate($img,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125)); - $colors[] = imagecolorallocate($img,mt_rand(0,125),mt_rand(0,125),mt_rand(0,125)); - - //create the background - imagefilledrectangle($img,1,1,$this->params['boxWidth']-2,$this->params['boxHeight']-2,$background); - imagerectangle($img,0,0,$this->params['boxWidth']-1,$this->params['boxHeight']-2,$border); - - //set the text - for ($i=0; $i< $this->params['charNumber']; $i++) - { - $color = $colors[$i % count($colors)]; - $char = substr($this->string,$i,1); - $fontPath = $this->params['fontPath']; - $angle = $this->params['undulation'] === false ? 0 : -20+rand(0,40); - $yposFixed = (int)(($this->params['boxHeight'])/2); - $ypos = $this->params['align'] === true ? $yposFixed : $yposFixed + mt_rand(0,10); - $charHeight = $this->params['charHeight']; - imagettftext($img,$charHeight + rand(0,8),$angle,($i+0.3)*$space,$ypos,$color,$fontPath,$char); - } - - $noiseColor = imagecolorallocate($img, mt_rand(125,255), mt_rand(125,255), mt_rand(125,255)); - /* generate random dots in background */ - for( $i=0; $i<($this->params['boxWidth'] * $this->params['boxHeight'])/7; $i++ ) { - imagefilledellipse($img, mt_rand(0,$this->params['boxWidth']), mt_rand(0,$this->params['boxHeight']), 1, 1, $noiseColor); - } - - $_SESSION['captchaString'] = $this->string; - header('Content-Type: image/png'); - imagepng($img); - imagedestroy($img); - } - -} \ No newline at end of file diff --git a/h-source/admin/Library/Image/Gd/Thumbnail.php b/h-source/admin/Library/Image/Gd/Thumbnail.php deleted file mode 100644 index 5981175..0000000 --- a/h-source/admin/Library/Image/Gd/Thumbnail.php +++ /dev/null @@ -1,151 +0,0 @@ -basePath = $basePath; - - $defaultParams = array( - 'imgWidth' => 100, - 'imgHeight' => 100, - 'defaultImage' => null, - 'cropImage' => 'no', - 'horizAlign' => 'left', - 'vertAlign' => 'top' - ); - - //set the $this->scaffold->params array - if (is_array($params)) - { - foreach ($params as $key => $value) - { - $defaultParams[$key] = $value; - } - } - $this->params = $defaultParams; - } - - //create the thumbnail - //$imageName: the name of the file inside $this->basePath - public function render($imageFile) - { - $imagePath = $this->basePath . basename($imageFile); - - if (!file_exists($imagePath) and isset($this->params['defaultImage'])) $imagePath = $this->params['defaultImage']; - - $img = null; - $ext = strtolower(end(explode('.', $imagePath))); - - if (strcmp($ext,'jpg') === 0 or strcmp($ext,'jpeg') === 0) { - $img = @imagecreatefromjpeg($imagePath); - } else if (strcmp($ext,'png') === 0) { - $img = @imagecreatefrompng($imagePath); - } else if (strcmp($ext,'gif') === 0) { - $img = @imagecreatefromgif($imagePath); - } - - //If an image was successfully loaded, test the image for size - if ($img) { - //image size - $width = imagesx($img); - $height = imagesy($img); - - if ($this->params['cropImage'] === 'no') - { - $scale = min($this->params['imgWidth']/$width, $this->params['imgHeight']/$height); - } - else if ($this->params['cropImage'] === 'yes') - { - $scale = max($this->params['imgWidth']/$width, $this->params['imgHeight']/$height); - } - - if ($scale < 1) { - - $xSrc = 0; - $ySrc = 0; - - if ($this->params['cropImage'] === 'no') - { - $newWidth = floor($scale*$width); - $newHeight = floor($scale*$height); - } - else if ($this->params['cropImage'] === 'yes') - { - - $newWidth = $this->params['imgWidth']; - $newHeight = $this->params['imgHeight']; - $oldWidth = $width; - $oldHeight = $height; - $width = floor($newWidth/$scale); - $height = floor($newHeight/$scale); - - switch ($this->params['horizAlign']) - { - case 'left': - $xSrc = 0; - break; - case 'right': - $xSrc = floor(($oldWidth-$width)); - break; - case 'center': - $xSrc = floor(($oldWidth-$width)/2); - break; - default: - $xSrc = $this->params['horizAlign']; - } - - switch ($this->params['vertAlign']) - { - case 'top': - $ySrc = 0; - break; - case 'bottom': - $ySrc = floor(($oldHeight-$height)); - break; - case 'center': - $ySrc = floor(($oldHeight-$height)/2); - break; - default: - $ySrc = $this->params['vertAlign']; - } - - } - - //temp image - $tmpImg = imagecreatetruecolor($newWidth, $newHeight); - - //copy and resize - imagecopyresized($tmpImg, $img, 0, 0, $xSrc, $ySrc,$newWidth, $newHeight, $width, $height); - imagedestroy($img); - $img = $tmpImg; - } - - } - - if (!$img) { - $img = imagecreate($this->params['imgWidth'], $this->params['imgHeight']); - imagecolorallocate($img,200,200,200); - } - - //print the image - header("Content-type: image/jpeg"); - imagejpeg($img); - - } - -} \ No newline at end of file diff --git a/h-source/admin/Library/Image/Gd/index.html b/h-source/admin/Library/Image/Gd/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Library/Image/Gd/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Library/Image/index.html b/h-source/admin/Library/Image/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Library/Image/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Library/Lang/Eng/DbCondStrings.php b/h-source/admin/Library/Lang/Eng/DbCondStrings.php deleted file mode 100644 index 1edae98..0000000 --- a/h-source/admin/Library/Lang/Eng/DbCondStrings.php +++ /dev/null @@ -1,17 +0,0 @@ -The value of ". $field ." is already present. Please choose a different value.
              \n"; - } - -} diff --git a/h-source/admin/Library/Lang/Eng/ModelStrings.php b/h-source/admin/Library/Lang/Eng/ModelStrings.php deleted file mode 100644 index 411d196..0000000 --- a/h-source/admin/Library/Lang/Eng/ModelStrings.php +++ /dev/null @@ -1,19 +0,0 @@ - "
              Query error: Contact the administrator!
              \n", - "executed" => "
              Operation executed!
              \n", - "associate" => "
              Referential integrity problem: record associated to some other record in a child table. Break the association before.
              \n", - "no-id" => "
              Alert: record identifier not defined!
              \n", - "not-linked" => "
              The Item is not associated : you can't dissociate it
              ", - "linked" => "
              The Item is already associated: you can't associate it another time
              " - ); - -} diff --git a/h-source/admin/Library/Lang/Eng/UploadStrings.php b/h-source/admin/Library/Lang/Eng/UploadStrings.php deleted file mode 100644 index 195fd5f..0000000 --- a/h-source/admin/Library/Lang/Eng/UploadStrings.php +++ /dev/null @@ -1,27 +0,0 @@ - "
              Error: verify the permissions of the file/directory
              \n", - "executed" => "
              Operation executed!
              \n", - "not-child" => "
              The selected directory is not a child of the base directory
              \n", - "not-dir" => "
              The selected directory is not a directory
              \n", - "not-empty" => "
              The selected directory is not empty
              \n", - "no-folder-specified" => "
              No folder has been specified
              \n", - "no-file-specified" => "
              No file has been specified
              \n", - "not-writable" => "
              The folder is not writable
              \n", - "not-writable-file" => "
              The file is not writable
              \n", - "dir-exists" => "
              The directory is already present in the current folder
              \n", - "no-upload-file" => "
              There is no file to upload
              \n", - "size-over" => "
              The size of the file is too big
              \n", - "not-allowed-ext" => "
              The extension of the file you want to upload is not allowed
              \n", - "file-exists" => "
              The file is already present in the current folder
              \n" - ); - -} diff --git a/h-source/admin/Library/Lang/Eng/ValCondStrings.php b/h-source/admin/Library/Lang/Eng/ValCondStrings.php deleted file mode 100644 index b9d132e..0000000 --- a/h-source/admin/Library/Lang/Eng/ValCondStrings.php +++ /dev/null @@ -1,76 +0,0 @@ -". $element ." not defined!
              \n"; - } - - //if the elements are not equal - public function getNotEqualResultString($element) - { - return "
              Different values: $element
              \n"; - } - - //if the element is not alphabetic - public function getNotAlphabeticResultString($element) - { - return "
              ".$element." has to be alphabetic
              \n"; - } - - //if the element is not alphanumeric - public function getNotAlphanumericResultString($element) - { - return "
              ".$element." has to be alphanumeric
              \n"; - } - - //if the element is not a decimal digit - public function getNotDecimalDigitResultString($element) - { - return "
              ".$element." has to be a decimal digit
              \n"; - } - - //if the element has the mail format - public function getNotMailFormatResultString($element) - { - return "
              ".$element." doesn't seem an e-mail address
              \n"; - } - - //if the element is numeric - public function getNotNumericResultString($element) - { - return "
              ".$element." has to be a numeric
              \n"; - } - - //if the element (string) length exceeds the value of characters (defined by $maxLength) - public function getLengthExceedsResultString($element,$maxLength) - { - return "
              ".$element." exceeds the value of $maxLength characters
              \n"; - } - - //if the element is one of the strings indicated by $stringList (a comma-separated list of strings) - public function getIsForbiddenStringResultString($element,$stringList) - { - return "
              ".$element." can't be one of the following strings: $stringList
              \n"; - } - - //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings) - public function getIsNotStringResultString($element,$stringList) - { - return "
              ".$element." has to be one of the following strings: $stringList
              \n"; - } - - //if the element is not one of the strings indicated by $stringList (a comma-separated list of strings) - public function getDoesntMatchResultString($element,$regExp) - { - return "
              ".$element." has to match the following regular expression: $regExp
              \n"; - } - -} diff --git a/h-source/admin/Library/Lang/Eng/index.html b/h-source/admin/Library/Lang/Eng/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Library/Lang/Eng/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Library/Lang/ResultStrings.php b/h-source/admin/Library/Lang/ResultStrings.php deleted file mode 100644 index db1095c..0000000 --- a/h-source/admin/Library/Lang/ResultStrings.php +++ /dev/null @@ -1,25 +0,0 @@ -string[$stringName])) - { - return $this->string[$stringName]; - } - else - { - return 'result string not defined!'; - } - } - -} diff --git a/h-source/admin/Library/Lang/index.html b/h-source/admin/Library/Lang/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Library/Lang/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Library/ModAbstract.php b/h-source/admin/Library/ModAbstract.php deleted file mode 100644 index 885f64f..0000000 --- a/h-source/admin/Library/ModAbstract.php +++ /dev/null @@ -1,25 +0,0 @@ -simpleXmlObj = $simpleXmlObj; - } - - //define the abstract method to render (create the HTML) of the single module - //$xmlObject: simpleXML object - abstract public function render(); - -} diff --git a/h-source/admin/Library/Model/Base.php b/h-source/admin/Library/Model/Base.php deleted file mode 100755 index 1aaadca..0000000 --- a/h-source/admin/Library/Model/Base.php +++ /dev/null @@ -1,1140 +0,0 @@ -fields fields - public $form = null; //reference to a Form_Form object - public $formStruct = null; //the form structure - - public $submitName = null; //the current submitName (from the form) - public $identifierName = 'identifier'; - - public $notice = null; //a string explaining the result of the query applied (or not if an error occured): executed, error, etc - public $result = true; //the result of validate conditions, database conditions and query. It can be 'true' or 'false' - public $queryResult = false; //the result of the query - - //conditions that have to be satisfied before applying the query - //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions' - public $strongConditions = array(); - - //conditions that have to be satisfied before applying the query - //Ex: 'update'=>'checkEmpty:titolo,autore','submitName'=>'conditions' - //do not return error if a value is equal to '' or null - public $softConditions = array(); - - //conditions that have to be satisfied before applying the query - //check that the new values inserted satisfy some conditions - //Ex: 'update'=>'checkUniqueCompl:titolo,autore;checkUnique:titolo','insert'=>'checkUnique:titolo' - public $databaseConditions = array(); - - public $popupArray = array(); //array of popup objects (see popup.php) - - public $supplInsertValues = array(); //associative array defining supplementary values to be inserted on each insert query. It has to have the following form: array(field1 => value1,field2 => value2, ...) - - public $supplUpdateValues = array(); //associative array defining supplementary values to be inserted on each update query. It has to have the following form: array(field1 => value1,field2 => value2, ...) - - public $select = null; //fields that have to be selected in select queries - public $where = array(); //associative array containing all the where clauses ($field => $value) - //group by, order by and limit clauses - public $groupBy = null; - public $orderBy = null; - public $limit = null; - - public $from = null; //from clause of the select queries - public $on = null; //join part of the where clause of the select queries - public $using = null; //using clause - - public $toList = false; //if the result have to be given in a list format - public $listArray = array(); //array containing the $key and the $value to be used to extract a list from a resultSet - - //logic operator between statements in the where clause of select queries - public $logicalOperators = array('AND'); - - protected $_tables='itemTable,boxTable,item_boxTable'; - protected $_idFields='id_item,id_box'; - protected $_tablesArray=array(); - protected $_idFieldsArray=array(); - protected $_where = array(); - - //the name of the field that has to be used to order the rows of the main table of the model - protected $_idOrder = null; - - protected $_onDelete = 'check'; //can be 'nocheck' or 'check'. check: referential integrity check. nocheck: no referential integrity check - protected $_reference = null; //array containing the child table that have a reference to this table and the foreign key of the child table-> array($childTable,$foreignKey) - - protected $_popupItemNames = array(); //the fields to be used as names in the popupArray elements. Associative array ($itemNameField1 => $itemNameValue1, ...) - - //the labels of the pop-up menus - protected $_popupLabels = array(); - - //functions that have to be applied upon the label fields of the popup menu - protected $_popupFunctions = array(); - - protected $_popupWhere = array(); //where clause for the pupup menu - - protected $_resultString; //reference to the class containing all the result strings of the db queries - protected $_dbCondString; //reference to the class containing all the result strings of the database conditions - - protected $_backupFields = ''; //field saved after the delFields method has been applied - protected $_backupValues = array(); //values saved after the delFields method has been applied - protected $_allowedDbMethods = array('update','insert','del','moveup','movedown'); //methods that can be called by the updateTable method - - protected $submitNames = array( - 'update' => 'updateAction', - 'insert' => 'insertAction', - 'del' =>'delAction', - 'moveup' =>'moveupAction', - 'movedown' =>'movedownAction' - ); - - protected $identifierValue = null; //the value of the identifier ($_POST[$this->identifier]) - protected $arrayExt; //arrayExt object (see library/arrayExt.php) - - protected $_arrayStrongCheck; //Array_Validate_Strong object - protected $_arraySoftCheck; //Array_Validate_Soft object - - public $db; //reference to the database layer class - protected $_lang = 'Eng'; //language of notices - - - public function __construct() { - $this->_tablesArray = explode(',',$this->_tables); - $this->_idFieldsArray = explode(',',$this->_idFields); - $this->_where[$this->_idFieldsArray[0]] = $this->_tablesArray[0]; - $this->arrayExt = new ArrayExt(); - - //initialize the validate objects - $this->_arrayStrongCheck = new Array_Validate_Strong($this->_lang); - $this->_arraySoftCheck = new Array_Validate_Soft($this->_lang); - - $this->identifierName = $this->_idFieldsArray[0]; - - //create the $_resultString object (result strings of the db queries) - $modelStringClass = 'Lang_'.$this->_lang.'_ModelStrings'; - if (!class_exists($modelStringClass)) - { - $modelStringClass = 'Lang_Eng_ModelStrings'; - } - $this->_resultString = new $modelStringClass(); - - //create the $_dbCondString object (result strings of the database conditions) - $dbCondStringClass = 'Lang_'.$this->_lang.'_DbCondStrings'; - if (!class_exists($dbCondStringClass)) - { - $dbCondStringClass = 'Lang_Eng_DbCondStrings'; - } - $this->_dbCondString = new $dbCondStringClass(); - - //instantiate the database class - $this->db = Factory_Db::getInstance(DATABASE_TYPE); - } - - //set the submitNames property (array) - //$methodName : the method name, $submitName: the submit name of the submit action of the form - public function setSubmitNames($methodName,$submitName) - { - if (!in_array($methodName,$this->_allowedDbMethods)) - { - throw new Exception('query type "'.$methodName. '" not allowed in '. __METHOD__); - } - $this->submitNames[$methodName] = $submitName; - } - - //get the last query executed - public function getQuery() - { - return $this->db->query; - } - - //get the where clause of the select query - public function getWhereQueryClause() - { - return $this->where; - } - - //set the where clause of the select query - //whereArray = array ($table_field => $value) - public function setWhereQueryClause($whereArray) - { - $this->where = $whereArray; - } - - //append the whereArray clause to $this_->whereClause - //whereArray = array ($table_field => $value) - public function appendWhereQueryClause($whereArray) - { - $this->where = array_merge($this->where,$whereArray); - } - - //drop the char $char from the beginning of the string $string - public function dropStartChar($string,$char) - { - while(strcmp($string[0],$char) === 0) - { - $string = substr($string,1); - } - return $string; - } - - //get the table name from $this->_where. If the table is not present then return $this->_tablesArray[0] - public function getTableName($field) - { - return isset($this->_where[$field]) ? $this->_where[$field] : $this->_tablesArray[0]; - } - - //method to create the where clause of the select query from the $this->where array - //$level: level of the ricorsion - //$whereClauseLevel: array containing the field=>value statements of the where clause. If $whereClause = null than $this->where is considered - public function createWhereClause($level = 0, $whereClauseLevel = null) - { - $whereClause = null; - $whereClauseArray = array(); - - $whereClause = isset($whereClauseLevel) ? $whereClauseLevel : $this->where; - - foreach ($whereClause as $field => $value) - { - if (is_array($value)) - { - $newValue = $this->createWhereClause($level+1, $value); - if (isset($newValue)) $whereClauseArray[] = $newValue; - } - else - { - $flag = 0; //equal where clause - if (isset($field)) - { - //drop the 'n:' and '-' chars from $field - $fieldClean = str_replace('n!',null,$field); - $fieldClean = $this->dropStartChar($fieldClean,'-'); - if (strcmp($value,Params::$nullQueryValue) !== 0 or (Params::$nullQueryValue === false)) - { - foreach (params::$whereClauseSymbolArray as $symbol) - { - if (strstr($value,$symbol)) - { - //check if write or not the table name - $tableName = strstr($field,'n!') ? null : $this->getTableName($field).'.'; - $whereClauseArray[] = $tableName.$fieldClean.' '.$value; - $flag = 1; //not equal where clause - break; - } - } - if ($flag === 0) - { - $value = '"'.$value.'"'; - //check if write or not the table name - $tableName = strstr($field,'n!') ? null : $this->getTableName($field).'.'; - $whereClauseArray[] = $tableName.$fieldClean.'='.$value; - } - } - } - } - } - //get the logic operator at the current level - $logicOper = isset($this->logicalOperators[$level]) ? ' '.$this->logicalOperators[$level].' ' : ' AND '; - $whereClause = !empty($whereClauseArray) ? implode($logicOper,$whereClauseArray) : null; - $whereClause = (isset($whereClause) and $level>0) ? '('.$whereClause.')' : $whereClause; - return $whereClause; - } - - - //get the submitName having its key (the method name) - public function getSubmitName($key) - { - if (!array_key_exists($key,$this->submitNames)) - { - return 'generalAction'; -// throw new Exception('query type "'.$key. '" not allowed in '.__METHOD__); - } - return $this->submitNames[$key]; - - } - - - //return the values, taken from the $_POST array, to be inserted inside the forms - //$queryType: insert or update - //$func: sanitize function to apply upon each value - //$id: if $queryType='update' that the values are taken from the record (of the main table of this model) having the primary key equal to $id - //$defaultValues = associative array of the form: array($entry=>$defaultValue) - //$functionsIfFromDb = associative array of the form: array($entry=>$function_to_be_applied) - public function getFormValues($queryType = 'insert', $func = 'sanitizeHtml',$id = null,$defaultValues = array(),$functionsIfFromDb = array()) - { - $arrayType = array('update','insert'); - $values = array(); - $idName = $this->identifierName; - if (in_array($queryType,$arrayType)) - { - $ident = null; - if (isset($id)) - { - $ident = (int)$id; - } - else if (isset($_POST[$idName])) - { - $ident = (int)$_POST[$idName]; - } - if ($this->result) - { - if ($queryType === 'update') - { - if (isset($ident)) - { - $recordArray = $this->selectId($ident); - - $fieldsArray = explode(',',$this->fields); - - foreach ($fieldsArray as $field) - { - $values[$field] = array_key_exists($field,$recordArray) ? $recordArray[$field] : ''; - } - - $values[$idName] = $ident; - - //apply the functions upon entries - foreach ($functionsIfFromDb as $entry => $funcUponEntry) - { - if (array_key_exists($entry,$values)) - { - if (!function_exists($funcUponEntry)) { - throw new Exception('Error in '.__METHOD__.': function '.$funcUponEntry. ' does not exists'); - } - - $values[$entry] = call_user_func($funcUponEntry,$values[$entry]); - } - } - - } - } - else if ($queryType === 'insert') - { - - $tempArray = is_array($defaultValues) ? $defaultValues : array(); - - $values = $this->arrayExt->subset($tempArray,$this->fields,$func); - - } - } - else - { - $values = $this->arrayExt->subset($_POST,$this->fields,$func); - - if ($queryType === 'update') - { - $values[$idName] = $ident; - } - } - } - return $values; - } - - - //method to set the properties $this->fields and $this->values - public function setFields($fields,$func = 'sanitizeAll') - { - $this->values = $this->arrayExt->subset($_POST,$fields,$func); - $this->fields = $this->extractFields($fields); - - //set the backup variables - $this->_backupFields = $this->fields; - $this->_backupValues = $this->values; - } - - - //clear the fields list - public function clearFields() - { - $this->_backupFields = $this->fields; - $this->_backupValues = $this->values; - $this->fields = ''; - $this->values = array(); - } - - //del the fields written in the $list argument. The $list argument has to be of the type: field1,field2,... - public function delFields($list) - { - $this->_backupFields = $this->fields; - $this->_backupValues = $this->values; - $this->values = $this->arrayExt->subsetComplementary($this->values,$list); - $this->fields = implode(',',array_keys($this->values)); - } - - //restore the fields and values saved in $_backupFields and $_backupValues - public function restoreFields() - { - $this->fields = $this->_backupFields; - $this->values = $this->_backupValues; - } - - //method to clean the $fields string deleting the colons (and the word after the colon) - public function extractFields($fields) { - $fieldsArray = explode(',',$fields); - $resultString = array(); - foreach ($fieldsArray as $field) { - if (strstr($field,':')) { - $temp = explode(':',$field); - $resultString[] = $temp[0]; - } else { - $resultString[] = $field; - } - } - return implode(',',$resultString); - } - - //add the supplementary value on insert and update queries - //$queryType: insert or update - public function setSupplValues($queryType) - { - if ($queryType === 'insert') - { - $supplValues = $this->supplInsertValues; - } - else if ($queryType === 'update') - { - $supplValues = $this->supplUpdateValues; - } - - $baseFields = implode(',',array_keys($this->values)); - - $supplFields = implode(',',array_keys($supplValues)); - $supplFields = (strcmp($supplFields,'') === 0) ? $supplFields : ',' . $supplFields; - - $fields = $baseFields . $supplFields; - $values = array_merge(array_values($this->values),array_values($supplValues)); - - return array($fields,$values); - } - - - //method to call the update query (overriding of the base_db del method) - //update the record with the primary key equal to $id (default) - //if $whereClause is set then use $whereClause as where clause of the update query - public function update($id = null, $whereClause = null) - { - if (!is_array($this->supplUpdateValues)) - { - throw new Exception('error in ' . __METHOD__ . ': the supplUpdateValues property has to be an array.'); - } - $el = $this->setSupplValues('update'); - $this->queryResult = false; - - if (isset($whereClause)) - { - $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$whereClause); - $this->setNotice($result); - return $result; - } - else - { - if (isset($id)) - { - $where = $this->_idFieldsArray[0].'='.(int)($id); - $result = $this->db->update($this->_tablesArray[0],$el[0],$el[1],$where); - $this->setNotice($result); - return $result; - } - else - { - $this->notice = $this->_resultString->getString('no-id'); - $this->result = false; - $this->identifierValue = null; - return false; - } - } - } - - //method to call the insert query (overriding of the base_db del method) - public function insert() { - - $this->queryResult = false; - if (!is_array($this->supplInsertValues)) { - throw new Exception('error in ' . __METHOD__ . ': the supplInsertValues property has to be an array.'); - } - - if (isset($this->_idOrder)) - { - $maxValue = $this->db->getMax($this->_tablesArray[0],$this->_idOrder); - $this->supplInsertValues[$this->_idOrder] = (int)$maxValue + 1; - } - - $el = $this->setSupplValues('insert'); - - $result = $this->db->insert($this->_tablesArray[0],$el[0],$el[1]); - $this->setNotice($result); - return $result; - } - - //method to call the delete query (overriding of the base_db del method) - public function del($id = null, $whereClause = null) { - - $this->queryResult = false; - - if (isset($whereClause)) - { - $result = $this->db->del($this->_tablesArray[0],$whereClause); - $this->setNotice($result); - return $result; - } - else - { - if (isset($id)) { - $where = $this->_idFieldsArray[0].'='.(int)$id; - $result = $this->db->del($this->_tablesArray[0],$where); - $this->setNotice($result); - return $result; - } else { - $this->notice = $this->_resultString->getString('no-id'); - $this->result = false; - $this->identifierValue = null; - return false; - } - } - } - - //move to the top the record having $this->_idOrder = $id - //where clause - public function moveup($id) - { - return $this->move($id,'up'); - } - - //move to the top the record having $this->_idOrder = $id - //where clause - public function movedown($id) - { - return $this->move($id,'down'); - } - - //move the record having $this->_tablesArray[0] = $id - //$par: 'up' or 'down' - //where clause - public function move($id,$par = 'up') - { - $this->queryResult = false; - if (isset($id)) - { - $increm = ($par === 'up') ? 1 : -1; - - $backupLimit = $this->limit; - $this->limit = null; - - $data = $this->getFields($this->_tablesArray[0].'.'.$this->_idFieldsArray[0].','.$this->_tablesArray[0].'.'.$this->_idOrder); - - for($i = 0; $i < count($data); $i++) - { - if (strcmp($data[$i][$this->_tablesArray[0]][$this->_idFieldsArray[0]],$id) === 0) - { - if (($par === 'up' and $i !== 0) or ($par === 'down' and $i !== (count($data)-1))) - { - $prevOrder = $data[$i-$increm][$this->_tablesArray[0]][$this->_idOrder]; - $prevId = $data[$i-$increm][$this->_tablesArray[0]][$this->_idFieldsArray[0]]; - $currentOrder = $data[$i][$this->_tablesArray[0]][$this->_idOrder]; - $currentId = $data[$i][$this->_tablesArray[0]][$this->_idFieldsArray[0]]; - - //exchange the id_order of the two record - $res1 = $this->db->update($this->_tablesArray[0],$this->_idOrder,array($prevOrder),$this->_idFieldsArray[0]."='$currentId'"); - $res2 = $this->db->update($this->_tablesArray[0],$this->_idOrder,array($currentOrder),$this->_idFieldsArray[0]."='$prevId'"); - $result = ($res1 and $res2); - $this->setNotice($result); - return $result; - } - } - } - - $this->limit = $backupLimit; - } - else - { - $this->notice = $this->_resultString->getString('no-id'); - $this->result = false; - $this->identifierValue = null; - return false; - } - return false; - } - - public function setNotice($result) { - if ($result) { - $this->notice = $this->_resultString->getString('executed'); - $this->result = true; - $this->queryResult = true; - } else { - $this->notice = $this->_resultString->getString('error'); - $this->result = false; - $this->queryResult = false; - } - } - - //method used to verify that the value of a field is not duplicated - //$fieldsList: list of fields to check. Ex: field1,field2,... - //$where: the where clause - public function checkUnique($fieldsList,$where = null) - { - $errorString = null; - $numb = 0; - $fieldsArray = explode(',',$fieldsList); - $queryFieldsArray = explode(',',$this->fields); - foreach ($fieldsArray as $field) - { - if (in_array($field,$queryFieldsArray)) - { - if ($this->db->recordExists($this->_tablesArray[0],$field,$this->values[$field],$where)) - { - $errorString .= $this->_dbCondString->getNotUniqueString($field); - $numb++; - } - } - } - $this->notice = $errorString; - return $numb === 0 ? true : false; - } - - //like checkUnique: check all the records of the table apart from the record that has to be modified - public function checkUniqueCompl($fieldsList,$id = null) - { - if (isset($id)) - { - $where = $this->_idFieldsArray[0].'!='.(int)($id); - return $this->checkUnique($fieldsList,$where); - } else { - $this->notice = $this->_resultString->getString('no-id'); - return false; - } - } - - //method to apply the database conditions listed in the $this->databaseConditions associative array - //$queryType: indicates what set of validate conditions has to be considered (it's the key of the associative array) - public function applyDatabaseConditions($queryType,$id = null) - { - if (array_key_exists($queryType,$this->databaseConditions)) - { - if (!is_array($this->databaseConditions[$queryType])) - { - throw new Exception('error in method '.__METHOD__.' : databaseConditions['.$queryType.'] has to be an associative array'); - } - - foreach ($this->databaseConditions[$queryType] as $key => $values) - { - - //personalized error string - $altErrorString = null; - - //delete all the '+' chars - $key = $this->dropStartChar($key,'+'); - - if (strcmp($values,'all') === 0 or strstr($values,'all|')) - { - if (strstr($values,'all|')) - { - $values = str_replace('all|',$this->fields.'|',$values); - } - else - { - $values = $this->fields; - } - } - - if (strstr($values,'|')) - { - $temp = explode('|',$values); - $altErrorString = "
              ".$temp[1]."
              \n"; - $values = $temp[0]; - } - - $allowedMethod = array('checkUnique','checkUniqueCompl'); - if (!in_array($key,$allowedMethod)) - { - throw new Exception('error in method '.__METHOD__.' : method "'.$key. '" not allowed in the property named databaseConditions'); - } - if (!call_user_func_array(array($this,$key),array($values,$id))) - { - if (isset($altErrorString)) $this->notice = $altErrorString; - $this->result = false; - $this->queryResult = false; - return false; - } - } - return true; - } else { - return true; - } - } - - - //method to apply the validate conditions listed in the $this->strongConditions associative array - //$queryType: indicates what set of validate conditions has to be considered (it's the key of the associative array) - //$strength: 'strong' or 'soft' - public function applyValidateConditions($queryType,$strength = 'strong') - { - if ($strength === 'strong') - { - $validateObj = $this->_arrayStrongCheck; - $conditions = $this->strongConditions; - $errString = 'strongConditions'; - } - else - { - $validateObj = $this->_arraySoftCheck; - $conditions = $this->softConditions; - $errString = 'softConditions'; - - if (Params::$nullQueryValue !== false) - { - $conditions['insert']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all'; - $conditions['update']['+++++checkIsNotStrings|'.Params::$nullQueryValue] = 'all'; - } - } - - if (array_key_exists($queryType,$conditions)) - { - if (!is_array($conditions[$queryType])) - { - throw new Exception('error in method '.__METHOD__.' : '.$errString.'['.$queryType.'] has to be an associative array'); - } - - foreach ($conditions[$queryType] as $key => $values) - { - - //personalized error string - $altErrorString = null; - - //delete all the '+' chars - $key = $this->dropStartChar($key,'+'); - - if (strcmp($values,'all') === 0 or strstr($values,'all|')) - { - if (strstr($values,'all|')) - { - $values = str_replace('all|',$this->fields.'|',$values); - } - else - { - $values = $this->fields; - } - } - - if (strstr($values,'|')) - { - $temp = explode('|',$values); - $altErrorString = "
              ".$temp[1]."
              \n"; - $values = $temp[0]; - } - - $baseArgs = array($_POST,$values); - - if (strstr($key,'|')) - { - $funcArray = explode('|',$key); - $funcName = $funcArray[0]; - array_shift($funcArray); - $funcArgs = array_merge($baseArgs,$funcArray); - } - else - { - $funcName = $key; - $funcArgs = $baseArgs; - } - - if (!method_exists($validateObj,$funcName) or $funcName === 'checkGeneric') - { - throw new Exception('error in method '.__METHOD__.' :method "'.$funcName. '" not allowed in '.$errString); - } - if (!call_user_func_array(array($validateObj,$funcName),$funcArgs)) - { - $this->notice .= (isset($altErrorString)) ? $altErrorString : $validateObj->errorString; - $this->result = false; - $this->queryResult = false; - return false; - } - } - return true; - } else { - return true; - } - } - - - //apply, in sequence, the strong,soft and database conditions - //$methodName: insert,update - //$id: the id of the record. It is necessary for database conditions - public function checkConditions($methodName,$id = null) - { - if ($this->applyValidateConditions($methodName,'strong')) - { - if ($this->applyValidateConditions($methodName,'soft')) - { - if ($this->applyDatabaseConditions($methodName,$id)) - { - return true; - } - } - } - return false; - } - - //method that calls the function indicated in $this->submitNames. Ex: if $_POST['delAction'] is found, then the "del" method is called. - public function updateTable($methodsList = '',$id = null) { - - $allowedMethodsArray = explode(',',$methodsList); - $resultArray = array(); - $this->identifierValue = null; - if (isset($id)) - { - $this->identifierValue = (int)$id; - } - else if (isset($_POST[$this->identifierName])) - { - $this->identifierValue = (int)$_POST[$this->identifierName]; - } - foreach ($this->submitNames as $methodName => $submitName) - { - if (array_key_exists($submitName,$_POST)) - { - $this->submitName = $submitName; - if (method_exists($this,$methodName)) - { - //if the method is allowed - if (in_array($methodName,$allowedMethodsArray)) - { - if ($this->checkConditions($methodName,$this->identifierValue)) - { - $this->notice = null; - call_user_func_array(array($this,$methodName),array($this->identifierValue)); - } - } - } - else - { - throw new Exception('method '.$methodName.' not defined in class '.__CLASS__.'; error in method '.__METHOD__.''); - } - return; //only one cycle! - } - } - } - - //method to build the array of popup objects - public function popupBuild() - { - foreach ($this->_popupItemNames as $field => $itemName) - { -// if (array_key_exists($field,$this->_where)) -// { - $fieldClean = str_replace('n!',null,$field); - $itemNameClean = str_replace('n!',null,$itemName); - $fieldClean = $this->dropStartChar($fieldClean,'-'); - $itemNameClean = $this->dropStartChar($itemNameClean,'-'); - - //fields that have to be extracted - $queryFields = ($fieldClean === $itemNameClean) ? $fieldClean : $fieldClean.','.$itemNameClean; - - $table = $this->getTableName($field); - $this->popupArray[$field] = new Popup(); - - $popupWhereClause = array_key_exists($field,$this->_popupWhere) ? $this->_popupWhere[$field] : null; - - $result = $this->db->select($table,$queryFields,$popupWhereClause,$fieldClean); - - if ($result and $result !== false) - { - //get the label of the popup menu - $label = array_key_exists($field,$this->_popupLabels) ? $this->_popupLabels[$field] : $table.' : '.$itemNameClean; - $this->popupArray[$field]->name = $label; - - //get the table name - $fieldTable = isset($result[0][$table][$fieldClean]) ? $table : Params::$aggregateKey; - $itemNameTable = isset($result[0][$table][$itemNameClean]) ? $table : Params::$aggregateKey; - - foreach ($result as $row) - { - $this->popupArray[$field]->itemsValue[] = $row[$fieldTable][$fieldClean]; - - if (array_key_exists($field,$this->_popupFunctions)) - { - if (!function_exists($this->_popupFunctions[$field])) - { - throw new Exception('Error in '.__METHOD__.': function '.$this->_popupFunctions[$field]. ' does not exists'); - } - - $tempName = call_user_func($this->_popupFunctions[$field],$row[$itemNameTable][$itemNameClean]); - } - else - { - $tempName = $row[$itemNameTable][$itemNameClean]; - } - - $this->popupArray[$field]->itemsName[] = $tempName; - } - } -// } - } - } - - - //get the element before and after the current one - //$key: the key of the self::$where array that indicates the field to be used in order to find out the records before and after - //$fields: the fields that have to be extracted - public function getNeighbours($key,$fields = '') - { - //backup of the values - $tempWhere = $this->where; - $tempLimit = $this->limit; - $tempOrderBy = $this->orderBy; - $this->limit = 1; - //before - $this->where[$key] = '<'.$tempWhere[$key]; - $this->orderBy = $this->getTableName($key).'.'.$key.' DESC'; - $dataAfter = $this->getFields($fields); - //after - $this->where[$key] = '>'.$tempWhere[$key]; - $this->orderBy = $this->getTableName($key).'.'.$key; - $dataBefore = $this->getFields($fields); - //restore the previous values - $this->where = $tempWhere; - $this->limit = $tempLimit; - $this->orderBy = $tempOrderBy; - $result[0] = isset($dataBefore[0]) ? $dataBefore[0] : null; - $result[1] = isset($dataAfter[0]) ? $dataAfter[0] : null; - return $result; - } - - //set the $select property and return the current object - public function select($fields = null) - { - $this->select = $fields; - return $this; - } - - //set the $from property and return the current object - public function from($tables = null) - { - $this->from = isset($tables) ? $tables : $this->_tables; - return $this; - } - - //set the $on property and return the current object - public function on($joinClause = '-') - { - $this->on = $joinClause; - return $this; - } - - //set the $using property and return the current object - public function using($using = null) - { - $this->using = $using; - return $this; - } - - //set the $where property and return the current object - public function where($where = array()) - { - $this->where = $where; - return $this; - } - - //append the $where array to the ::where property and return the current object - public function aWhere($where = array()) - { - $this->appendWhereQueryClause($where); - return $this; - } - - //set the $groupBy property and return the current object - public function groupBy($groupBy = null) - { - $this->groupBy = $groupBy; - return $this; - } - - //set the $orderBy property and return the current object - public function orderBy($orderBy = null) - { - $this->orderBy = $orderBy; - return $this; - } - - //set the $limit property and return the current object - public function limit($limit = null) - { - $this->limit = $limit; - return $this; - } - - //set the $listArray property - public function toList($key, $value = null) - { - $this->listArray = array($key,$value); - $this->toList = true; - return $this; - } - - //reset all the clauses of the select query - public function clear() - { - $this->select = null; - $this->where = array(); - $this->groupBy = null; - $this->orderBy = null; - $this->limit = null; - $this->from = null; - $this->on = null; - $this->using = null; - $this->toList = false; - return $this; - } - - //initialize and populate the ::form property (reference to a Form_Form object) - public function setForm($defAction = null, $defSubmit = array(), $defMethod = 'POST') - { - if (isset($this->formStruct)) - { - $action = array_key_exists('action',$this->formStruct) ? $this->formStruct['action'] : $defAction; - $submit = array_key_exists('submit',$this->formStruct) ? $this->formStruct['submit'] : $defSubmit; - $entries = array_key_exists('entries',$this->formStruct) ? $this->formStruct['entries'] : null; - $method = array_key_exists('post',$this->formStruct) ? $this->formStruct['post'] : $defMethod; - - $this->form = new Form_Form($action,$submit,$method); - - if (isset($entries)) - { - $this->form->setEntries($entries); - } - - $copy = $this->form->entry; - - foreach ($copy as $name => $entry) - { - if (strcmp($entry->type,'Select') === 0 and isset($entry->options)) - { - if (!is_array($entry->options)) - { - if (strstr($entry->options,'foreign::')) - { - $elements = explode('::',$entry->options); - - for ($i = 0; $i < count($elements); $i++) - { - if (strcmp($elements[$i],'--') === 0) $elements[$i] = null; - } - //send the query - array_shift($elements); - $resultSet = call_user_func_array(array($this->db,'select'),$elements); - - $single = true; - - if (strstr($elements[1],',')) - { - $args = explode(',',$elements[1]); - //add the table name - $args[0] = $elements[0].'.'.$args[0]; - $args[1] = $elements[0].'.'.$args[1]; - //associative array - $single = false; - } - else - { - $args[0] = $elements[0].'.'.$elements[1]; - $args[1] = null; - } - - $list = $this->getList($resultSet,$args[0],$args[1]); - - $this->form->entry[$name]->options = ($single) ? implode(',',array_values($list)) : $list; - } - } - } - } - - } - else - { - $this->form = new Form_Form($defAction,$defSubmit,$defMethod); - } - } - - //get a list from a result set - //$resultSet: the result set coming from a select query - public function getList($resultSet, $key, $value = null) - { - $list = array(); - - if (strstr($key,'.')) - { - $arr = explode('.',$key); - $keyTable = $arr[0]; - $keyField = $arr[1]; - } - else - { - $keyTable = $this->_tablesArray[0]; - $keyField = $key; - } - - if (!isset($value)) - { - foreach ($resultSet as $row) - { - $list[] = $row[$keyTable][$keyField]; - } - } - else - { - if (strstr($value,'.')) - { - $arr = explode('.',$value); - $valueTable = $arr[0]; - $valueField = $arr[1]; - } - else - { - $valueTable = $this->_tablesArray[0]; - $valueField = $value; - } - - foreach ($resultSet as $row) - { - $list[$row[$keyTable][$keyField]] = $row[$valueTable][$valueField]; - } - - } - return $list; - } - - // Retrieves the ID generated for an AUTO_INCREMENT column by the previous query (usually INSERT). - public function lastId() - { - return $this->db->lastId(); - } - - //send a free query - public function query($query) - { - return $this->db->query($query); - } - - //the text of the error message from previous MySQL operation - public function getError() - { - return $this->db->getError(); - } - - //the numerical value of the error message from previous MySQL operation - public function getErrno() - { - return $this->db->getErrno(); - } - - //define the abstract method to get the value of the record $id of the main table - abstract public function selectId($id); - - //define the abstract method to get the fields from the tables - abstract public function getFields(); - -} \ No newline at end of file diff --git a/h-source/admin/Library/Model/Map.php b/h-source/admin/Library/Model/Map.php deleted file mode 100755 index 7a36c6f..0000000 --- a/h-source/admin/Library/Model/Map.php +++ /dev/null @@ -1,439 +0,0 @@ -identifierName] - protected $_boxIdentifierValue = null; //the id of the box that has to be associated with the item - - public function __construct() - { - //add some submit names (method => form_submit_value) - $this->submitNames['associate'] = 'associateAction'; - $this->submitNames['dissociate'] = 'dissociateAction'; - //add the allowed methods - $this->_allowedDbMethods[] = 'associate'; - $this->_allowedDbMethods[] = 'dissociate'; - parent::__construct(); - } - - public function createMapWhere($choice) - { //create the where join clause - //$choice=(first,last,all) - if (isset($this->on)) - { - return $this->on; - } - else - { - $first = $this->_tablesArray[0].'.'.$this->_idFieldsArray[0].'='.$this->_tablesArray[2].'.'.$this->_idFieldsArray[0]; - $last = $this->_tablesArray[1].'.'.$this->_idFieldsArray[1].'='.$this->_tablesArray[2].'.'.$this->_idFieldsArray[1]; - switch ($choice) { - case 'first': - return $first; - break; - case 'last': - return $last; - break; - case 'all': - return $first. ' and '.$last; - break; - } - } - } - - //check if a join query is necessary or not - //$val: 0 or 1 (items or boxes) - //$whereClauseLevel: array containing the field=>value statements of the where clause. If $whereClause = null than $this->where is considered - public function checkIfJoinNeeded($val, $whereClauseLevel = null) - { - $whereClause = isset($whereClauseLevel) ? $whereClauseLevel : $this->where; - - foreach ($whereClause as $field => $value) - { - if (is_array($value)) - { - if ($this->checkIfJoinNeeded($val, $value) === true) return true; - } - else - { - if (strcmp($this->getTableName($field),$this->_tablesArray[$val]) !== 0) - { - if (strcmp($value,Params::$nullQueryValue) !== 0 or (Params::$nullQueryValue === false)) return true; - } - } - } - //return false if no where clause has been defined - return false; - } - - //method to create the where clause and the list of tables of the select query - public function mapQueryElements($val) - { -// $val = $element === 'Items' ? 0 : 1; - $tables = $this->_tablesArray[$val]; - $where = null; - $fields = $this->_tablesArray[$val].'.*'; - - if ($this->checkIfJoinNeeded($val)) - { - $tables = $this->_tables; - $fields = $this->_tablesArray[$val].'.*'; - $wherePlus = $this->createWhereClause(); - $wherePlus = isset($wherePlus) ? ' AND ' . $wherePlus : null; - $where = $this->createMapWhere('all') . $wherePlus; - } - else - { - $where = $this->createWhereClause(); - } - - return array('tables' => $tables,'where' => $where,'fields' => $fields); - } - - //$element: Items or Boxes. - //get all Item or Boxes - public function getAll($element = 'Items') - { - return $this->getFields('',$element); - } - - //method to get the values of the selected fields - //$fields: the fields that have to be excracted from the tableName - public function getFields($fields = '',$element = 'Items') - { - //get all Item or Boxes - if ((strcmp($element,'Items') !== 0) and (strcmp($element,'Boxes') !== 0)) - { - throw new Exception('"'.$element. '" argument not allowed in '.__METHOD__.' method'); - } - $val = $element === 'Items' ? 0 : 1; - - $elements = $this->mapQueryElements($val); - - $queryFields = (strcmp($fields,'') === 0) ? $elements['fields'] : $fields; - - return $row = $this->db->select($elements['tables'],$queryFields,$elements['where'],$this->groupBy,$this->orderBy,$this->limit); - - } - - public function send($element = 'Items') - { - $table = $this->getFields($this->select, $element); - - if ($this->toList) - { - $key = $this->listArray[0]; - $value = isset($this->listArray[1]) ? $this->listArray[1] : null; - $this->toList = false; - return $this->getList($table, $key, $value); - } - else - { - return $table; - } - } - - //the fields that have to be extracted from the table - public function getTable($fields = null) - { - return isset($fields) ? $this->getFields($fields) : $this->getAll(); - } - - //select the values of a specified record - //$id: the id (primary key) of the record - //$fields: the comma separated list of fields that have to be extracted - public function selectId($id,$fields = null) - { - $id = (int)$id; - $this->setWhereQueryClause(array($this->_idFieldsArray[0] => $id)); - - if (isset($fields)) - { - $values = $this->getFields($fields,'Items'); - } - else - { - $values = $this->getAll('Items'); - } - - return (count($values) > 0) ? $values[0][$this->_tablesArray[0]] : array(); - } - - //get the number of records (items or boxes) - public function recordNumber($element) - { - $val = $element === 'Items' ? 0 : 1; - - $elements = $this->mapQueryElements($val); - return $this->db->get_num_rows($elements['tables'],$elements['where'],$this->groupBy); - } - - //get the number of records (only items) - public function rowNumber() - { - return $this->recordNumber('Items'); - } - - public function getMax($field) - { - $elements = $this->mapQueryElements(0); - return $this->db->getMax($elements['tables'],$field,$elements['where'],$this->groupBy); - } - - public function getMin($field) - { - $elements = $this->mapQueryElements(0); - return $this->db->getMin($elements['tables'],$field,$elements['where'],$this->groupBy); - } - - public function getSum($field) - { - $elements = $this->mapQueryElements(0); - return $this->db->getSum($elements['tables'],$field,$elements['where'],$this->groupBy); - } - - public function getAvg($field) - { - $elements = $this->mapQueryElements(0); - return $this->db->getAvg($elements['tables'],$field,$elements['where'],$this->groupBy); - } - - //check if the table has the field $field equal to $value - public function has($field,$value) - { - $elements = $this->mapQueryElements(0); - return $this->db->recordExists($elements['tables'],$field,$value,$elements['where'],$this->groupBy); - } - - //associate an item with a box - //$idItem : name of the field of the Items table, $idGroup : name of the field of the Boxes table - public function associate($idItem = null,$idGroup = null) - { - $this->queryResult = false; - if (isset($idItem) and isset($idGroup)) - { - $idItem = (int)$idItem; - $idGroup = (int)$idGroup; - $values = array($idItem,$idGroup); //values relative to the fields $this->_idFields - $var = $this->checkAssociation($idItem,$idGroup); - if (!$var) - { - $result = $this->db->insert($this->_tablesArray[2],$this->_idFields,$values); - $this->setNotice($result); - return $result; - } - else - { - if (strcmp($this->printAssError,'yes') === 0) $this->notice = $this->_resultString->getString('linked'); - $this->result = false; - } - } - else - { - $this->notice = $this->_resultString->getString('no-id'); - $this->result = false; - } - return false; - } - - //associate an item with a box - //$idItem : name of the field of the Items table, $idGroup : name of the field of the Boxes table - public function dissociate($idItem = null,$idGroup = null) - { - $this->queryResult = false; - if (isset($idItem) and isset($idGroup)) - { - $idItem = (int)$idItem; - $idGroup = (int)$idGroup; - $var = $this->checkAssociation($idItem,$idGroup); - if ($var) - { - $result = $this->db->del($this->_tablesArray[2],$this->_idFieldsArray[0].'='.$idItem.' and '.$this->_idFieldsArray[1].'='.$idGroup); - $this->setNotice($result); - return $result; - } - else - { - if (strcmp($this->printAssError,'yes') === 0) $this->notice = $this->_resultString->getString('not-linked'); - $this->result = false; - } - } - else - { - $this->notice = $this->_resultString->getString('no-id'); - $this->result = false; - } - return false; - } - - public function checkAssociation($idItem,$idGroup) - { - $idItem = (int)$idItem; - $idGroup = (int)$idGroup; - $numRow = $this->db->get_num_rows($this->_tablesArray[2],$this->_idFieldsArray[0].'='.$idItem.' and '.$this->_idFieldsArray[1].'='.$idGroup); - if ($numRow === 1) - { - return true; - } - else - { - return false; - } - } - - //check what items are associate to a box - //itemsArray:array of items to check - public function checkAssociationDeep($itemsArray) - { - $associatedItems = array(); - $itemsArray = is_array($itemsArray) ? array_values($itemsArray) : array($itemsArray); - foreach ($itemsArray as $item) { - if ($this->db->recordExists($this->_tablesArray[2],$this->_idFieldsArray[0],$item)) - { - $associatedItems[] = $item; - } - } - return $associatedItems; - } - - //method to call the delete query (overriding of the del method of Model.php) - //check the referential integrity - public function del($id = null, $whereClause = null) - { - $this->queryResult = false; - - if (isset($whereClause)) - { - return parent::del(null,$whereClause); - } - else - { - if ($this->_onDelete === 'check') - { - if ($this->db->recordExists($this->_tablesArray[2],$this->_idFieldsArray[0],(int)$id)) - { - $this->notice = $this->_resultString->getString('associate'); - $this->identifierValue = null; - $this->result = false; - } - else - { - return parent::del((int)$id); - } - } - else if ($this->_onDelete === 'nocheck') - { - return parent::del((int)$id); - } - } - return false; - } - - //override of the updateTable method of the parent class - //method that calls the function indicated in $this->submitNames. Ex: if $_POST['delAction'] is found, then the "del" method is called. - public function updateTable($methodsList = '',$id = null) - { - $allowedMethodsArray = explode(',',$methodsList); - $resultArray = array(); - $this->identifierValue = null; - if (isset($id)) - { - $this->identifierValue = (int)$id; - } - else if (isset($_POST[$this->identifierName])) - { - $this->identifierValue = (int)$_POST[$this->identifierName]; - } - foreach ($this->submitNames as $methodName => $submitName) { - if (array_key_exists($submitName,$_POST)) - { - $this->submitName = $submitName; - if (method_exists($this,$methodName)) - { - if (in_array($methodName,$allowedMethodsArray)) - { - if ($this->checkConditions($methodName,$this->identifierValue)) - { - $this->notice = null; - $methodArray = array('associate','dissociate'); - if (in_array($methodName,$methodArray)) - { - $this->_boxIdentifierValue = null; - if (isset($_POST[$this->boxIdentifierName])) - { - $this->_boxIdentifierValue = (int)$_POST[$this->boxIdentifierName]; - } - call_user_func_array(array($this,$methodName),array($this->identifierValue,$this->_boxIdentifierValue)); - } - else - { - call_user_func_array(array($this,$methodName),array($this->identifierValue)); - } - } - } - } - else - { - throw new Exception('method "'.$methodName. '" not defined in class '.__CLASS__.'; error in method '.__METHOD__); - } - return; //only one cycle! - } - } - } - - //method to obtain one columns from the tables $this->_tablesArray as an associative array - //$valueField: the column that have to be extracted (array_values of the resulting associative array), $keyField: the column that have to play the role of array_keys - //$valueField = field:table, $keyField = field:table - public function getFieldArray($valueField,$keyField = null, $groupBy = null, $orderBy = null, $limit = null) - { - - $keyField = isset($keyField) ? $keyField : $valueField; - $valueFieldArray = explode(':',$valueField); - $keyFieldArray = explode(':',$keyField); - - $keyFieldTable = $keyFieldArray[0]; - $valueFieldTable = $valueFieldArray[0]; - - $keyFieldName = $keyFieldArray[1]; - $valueFieldName = $valueFieldArray[1]; - - $fields = implode('.',$keyFieldArray) . ',' . implode('.',$valueFieldArray); - - $temp = $this->where; //save the $this->where array - $this->where = array(); - - $val = array_search($keyFieldTable,$this->_tablesArray); - - if (strcmp($keyFieldTable,$valueFieldTable) !== 0) - { - throw new Exception("the tables '$valueFieldTable' and '$keyFieldTable' do not match in ".__METHOD__); - } - - if ($val === false or !in_array($val,array(0,1))) - { - throw new Exception("the table '$keyFieldTable' is not allowed in ".__METHOD__); - } - - $elements = $this->mapQueryElements($val); - - $table = $this->db->select($elements['tables'],$fields,$elements['where'],$groupBy,$orderBy,$limit); - $this->where = $temp; - - $returnArray = array(); - foreach ($table as $record) { - $returnArray[$record[$keyFieldTable][$keyFieldName]] = $record[$valueFieldTable][$valueFieldName]; - } - - return $returnArray; - - } - -} \ No newline at end of file diff --git a/h-source/admin/Library/Model/Tree.php b/h-source/admin/Library/Model/Tree.php deleted file mode 100755 index d7b655d..0000000 --- a/h-source/admin/Library/Model/Tree.php +++ /dev/null @@ -1,287 +0,0 @@ -_tablesArray - public function createTreeWhere($index) { - if (isset($this->on)) - { - return $this->on; - } - else - { - $whereArray = array(); - for ($i = $index; $i < (count($this->_tablesArray)-1); $i++) - { - $whereArray[] = $this->_tablesArray[$i].'.'.$this->_idFieldsArray[$i+1].'='.$this->_tablesArray[$i+1].'.'.$this->_idFieldsArray[$i+1]; - } - $whereString = !empty($whereArray) ? implode(' and ',$whereArray) : null; - return $whereString; - } - } - - //create the list of tables of the select query - //$index: the index of $this->_tablesArray - public function createTablesList($index) { - if (isset($this->from)) - { - return $this->from; - } - else - { - $tablesString = null; - for ($i = $index; $i < (count($this->_tablesArray)-1); $i++) - { - $tablesString .= $this->_tablesArray[$i] . ','; - } - $tablesString .= $this->_tablesArray[count($this->_tablesArray)-1]; - return $tablesString; - } - } - - //method to create the list of fields of the select query - public function createFieldsList($index) { - $fieldsString = null; - for ($i = $index; $i < (count($this->_tablesArray)-1); $i++) - { - $fieldsString .= $this->_tablesArray[$i] . '.*,'; - } - $fieldsString .= $this->_tablesArray[count($this->_tablesArray)-1].'.*'; - return $fieldsString; - } - - - //method to create the where clause and the list of tables and fields of the select query - //$tableName: the table name ($this->_tablesArray) - //$choice:all->all the tables in $this->_arrayTables, other value->only the table of $this->_arrayTables ad index $index - //return: $elements = array('tables'=>$tables,'where'=>$where,'fields'=>$fields) - public function treeQueryElements($tableName,$choice = 'all') - { - $index = array_search($tableName,$this->_tablesArray); - $subArray = ($choice === 'all') ? array_slice($this->_tablesArray,$index) : array($tableName); //this array is necessary to verify that the where clause makes sense - $tables = ($choice === 'all') ? $this->createTablesList($index) : $tableName; - $where = ($choice === 'all') ? $this->createTreeWhere($index) : null; - $fields = ($choice === 'all') ? $this->createFieldsList($index) : $tableName.'.*'; - - $wherePlus = $this->createWhereClause(); - - if (!isset($this->on)) - { - $on = null; - - if (isset($where) and isset($wherePlus)) - { - $where .= ' AND ' . $wherePlus; - } - else if (!isset($where) and isset($wherePlus)) - { - $where .= $wherePlus; - } - } - else - { - $on = (strcmp($where,'-') !== 0) ? $where : null; - $where = $wherePlus; - } - - return array('tables' => $tables,'where' => $where,'fields'=>$fields,'on'=>$on); - } - - - //method to obtain the values of the whole tree - //$choice:all->all the tables in $this->_arrayTables, other value->only the table of $this->_arrayTables ad index $index - public function getAll($choice = 'all') { - return $this->getFields('',$choice); - } - - //method to get the values of the selected fields - //it walks the tree by means of a join query - //$fields: the fields that have to be excracted from the tableName - public function getFields($fields = '',$choice = 'all') - { - $elements = $this->treeQueryElements($this->_tablesArray[0],$choice); - - $queryFields = (strcmp($fields,'') === 0) ? $elements['fields'] : $fields; - - return $row = $this->db->select($elements['tables'],$queryFields,$elements['where'],$this->groupBy,$this->orderBy,$this->limit,$elements['on'],$this->using); - } - - public function send() - { - $table = $this->getFields($this->select); - - if ($this->toList) - { - $key = $this->listArray[0]; - $value = isset($this->listArray[1]) ? $this->listArray[1] : null; - $this->toList = false; - return $this->getList($table, $key, $value); - } - else - { - return $table; - } - } - - //call the getAll method with $tableName = $this->_tablesArray[0] - //the fields that have to be extracted from the table - public function getTable($fields = null) { - return isset($fields) ? $this->getFields($fields) : $this->getAll(); - } - - //select the values of a specified record - //$id: the id (primary key) of the record - //$fields: the comma separated list of fields that have to be extracted - public function selectId($id,$fields = null) { - $this->setWhereQueryClause(array($this->_idFieldsArray[0] => (int)$id)); - - $this->using = null; - - if (isset($fields)) - { - $values = $this->getFields($fields,'other'); - } - else - { - $values = $this->getAll('other'); - } - - return (count($values) > 0) ? $values[0][$this->_tablesArray[0]] : array(); - - } - - //get the number of records () - //the number of records of the table $tableName is returned - public function rowNumber() { - $elements = $this->treeQueryElements($this->_tablesArray[0]); - return $this->db->get_num_rows($elements['tables'],$elements['where'],$this->groupBy,$elements['on'],$this->using); - } - - public function getMax($field) - { - $elements = $this->treeQueryElements($this->_tablesArray[0]); - return $this->db->getMax($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using); - } - - public function getMin($field) - { - $elements = $this->treeQueryElements($this->_tablesArray[0]); - return $this->db->getMin($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using); - } - - public function getSum($field) - { - $elements = $this->treeQueryElements($this->_tablesArray[0]); - return $this->db->getSum($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using); - } - - public function getAvg($field) - { - $elements = $this->treeQueryElements($this->_tablesArray[0]); - return $this->db->getAvg($elements['tables'],$field,$elements['where'],$this->groupBy,$elements['on'],$this->using); - } - - //check if the table has the field $field equal to $value - public function has($field,$value) - { - $elements = $this->treeQueryElements($this->_tablesArray[0]); - return $this->db->recordExists($elements['tables'],$field,$value,$elements['where'],$this->groupBy,$elements['on'],$this->using); - } - -// //get the number of records of the table $this->_tablesArray[0] -// public function rowNumber() { -// return $this->recordNumber($this->_tablesArray[0]); -// } - - //method to call the delete query (overriding of the del method of Model.php) - //check the referential integrity - public function del($id = null, $whereClause = null) - { - $this->queryResult = false; - - if (isset($whereClause)) - { - return parent::del(null,$whereClause); - } - else - { - if ($this->_onDelete === 'check' and isset($this->_reference)) - { - if (isset($this->_reference[0]) and isset($this->_reference[1])) - { - if ($this->db->recordExists($this->_reference[0],$this->_reference[1],(int)$id)) - { - $this->notice = $this->_resultString->getString('associate'); - $this->identifierValue = null; - $this->result = false; - } - else - { - return parent::del((int)$id); - } - } - else - { - throw new Exception('you have forgotten to set \'$this->_reference\' or you have forgotten to set $this->_onDelete = \'nocheck\''); - } - } - else - { - return parent::del((int)$id); - } - } - return false; - } - - //method to obtain one columns from the tables $this->_tablesArray as an associative array - //$valueField: the column that have to be extracted (array_values of the resulting associative array), $keyField: the column that have to play the role of array_keys - public function getFieldArray($valueField,$keyField = null, $groupBy = null, $orderBy = null, $limit = null) { - - $keyField = isset($keyField) ? $keyField : $valueField; - $valueFieldArray = explode(':',$valueField); - $keyFieldArray = explode(':',$keyField); - - $keyFieldTable = $keyFieldArray[0]; - $valueFieldTable = $valueFieldArray[0]; - - $keyFieldName = $keyFieldArray[1]; - $valueFieldName = $valueFieldArray[1]; - - $fields = implode('.',$keyFieldArray) . ',' . implode('.',$valueFieldArray); - - $temp = $this->where; //save the $this->where array - $this->where = array(); - - if (strcmp($keyFieldTable,$valueFieldTable) !== 0) { - throw new Exception("the tables '$valueFieldTable' and '$keyFieldTable' do not match in ".__METHOD__); - } - - if (!in_array($keyFieldTable,$this->_tablesArray)) { - throw new Exception("the table '$keyFieldTable' is not allowed in ".__METHOD__); - } - - $elements = $this->treeQueryElements($keyFieldTable,''); - - $table = $this->db->select($elements['tables'],$fields,$elements['where'],$groupBy,$orderBy,$limit,$elements['on'],$this->using); - $this->where = $temp; - - $returnArray = array(); - foreach ($table as $record) { - $returnArray[$record[$keyFieldTable][$keyFieldName]] = $record[$valueFieldTable][$valueFieldName]; - } - - return $returnArray; - - } - -} \ No newline at end of file diff --git a/h-source/admin/Library/Model/index.html b/h-source/admin/Library/Model/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Library/Model/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Library/Params.php b/h-source/admin/Library/Params.php deleted file mode 100644 index 9ec0ba5..0000000 --- a/h-source/admin/Library/Params.php +++ /dev/null @@ -1,37 +0,0 @@ -','!=','<=','>=','in(','not in('); - - //is the mbstring extension enabled? - public static $mbStringLoaded = false; - -} \ No newline at end of file diff --git a/h-source/admin/Library/Popup.php b/h-source/admin/Library/Popup.php deleted file mode 100755 index 55ea7f5..0000000 --- a/h-source/admin/Library/Popup.php +++ /dev/null @@ -1,15 +0,0 @@ -'.__METHOD__.': function '.$func. ' does not exists'); - } - return isset($_GET[$name]) ? call_user_func($func,$_GET[$name]) : $default; - } - - public function post($name, $default = null, $func = 'none') - { - if (!function_exists($func)) - { - throw new Exception('Error in '.__METHOD__.': function '.$func. ' does not exists'); - } - return isset($_POST[$name]) ? call_user_func($func,$_POST[$name]) : $default; - } - - public function cookie($name, $default = null, $func = 'none') - { - if (!function_exists($func)) - { - throw new Exception('Error in '.__METHOD__.': function '.$func. ' does not exists'); - } - return isset($_COOKIE[$name]) ? call_user_func($func,$_COOKIE[$name]) : $default; - } - -} \ No newline at end of file diff --git a/h-source/admin/Library/Scaffold.php b/h-source/admin/Library/Scaffold.php deleted file mode 100755 index 2ac3fa5..0000000 --- a/h-source/admin/Library/Scaffold.php +++ /dev/null @@ -1,272 +0,0 @@ -HTML,..) - - public $mainMenu = null; //the reference to the MenuHelper object - public $pageList = null; //the reference to the PageDivisionHelper object - public $itemList = null; //the reference to the ListHelper object - public $popupMenu = null; //the reference to the PopupHelper object - - public $form = null; //the reference to the form object - public $entries = null; //the entries of the form (string having entries separated by comma) - public $values = array(); //the values inserted in the form (taken from the table if $this->queryType === 'update' or if an error occured during the databse query, otherwise taken from the $_POST array) - - //the list of fields of the select query - public $fields = null; - - public function __construct($type,$controller,$model,$viewArgs,$params = null) { - - $this->_type = $type; - $this->_controller = $controller; - $this->model = $model; - $this->viewArgs = $viewArgs; - - $autoParams = array( - 'mainAction' => 'main', - 'modifyAction' => 'form/update', - 'associateAction' => 'associate', - 'panelController' => 'panel', - 'pageList' => true, - 'pageVariable' => 'page', - 'recordPerPage' => 10, - 'mainMenu' => 'panel,add', - 'formMenu' => 'panel,back', - 'postSubmitValue' => 'Save', - 'popup' => false, - 'popupType' => 'exclusive' - ); - - //set the $this->scaffold->params array - if (is_array($params)) { - foreach ($params as $key => $value) { - $autoParams[$key] = $value; - } - } - $this->params = $autoParams; - - } - - //ad some clauses to the select query - //whereArray = array ($table_field => $value) - public function appendWhereQueryClause($whereArray) - { - $this->model->appendWhereQueryClause($whereArray); - } - - //set clauses to the select query - //whereArray = array ($table_field => $value) - public function setWhereQueryClause($whereArray) - { - $this->model->setWhereQueryClause($whereArray); - } - - //initialize the main scaffold (ListHelper) - //$recordList: field of the table to show, $primaryKey: the key of the table - public function loadMain($recordList,$primaryKey,$theme = 'edit,del') - { - $this->_primaryKey = $primaryKey; - - $recordListArray = explode(',',$recordList); - foreach ($recordListArray as $record) { - $this->itemList->addItem("simpleText",";$record;"); - } - - $themeArray = explode(',',$theme); - - foreach ($themeArray as $el) - { - switch ($el) - { - case 'moveup': - $this->itemList->addItem('moveupForm',$this->_controller.'/'.$this->params['mainAction'],$primaryKey); - break; - case 'movedown': - $this->itemList->addItem('movedownForm',$this->_controller.'/'.$this->params['mainAction'],$primaryKey); - break; - case 'link': - $this->itemList->addItem('associateForm',$this->_controller.'/'.$this->params['associateAction'],$primaryKey); - break; - case 'edit': - $this->itemList->addItem('editForm',$this->_controller.'/'.$this->params['modifyAction'],$primaryKey); - break; - case 'del': - $this->itemList->addItem('delForm',$this->_controller.'/'.$this->params['mainAction'],$primaryKey); - break; - } - } - - } - - //initialize the form - //$queryType = insert/update - //$action: the action of the form (controller/action/queryString) - public function loadForm($queryType,$action) - { - $this->queryType = $queryType; - $submitName = $this->model->getSubmitName($queryType); - $value = $this->params['postSubmitValue']; - $viewStatus = Url::createUrl(array_values($this->viewArgs)); - $this->model->setForm($action.$viewStatus,array($submitName => $value),'POST'); - $this->form = $this->model->form; - } - - //function to obtain the values to use in the form - //$func = function to validate the values - //$id = the id of the record (used if $_POST[$this->m[$this->model]->identifierName] is not present) - public function getFormValues($func = 'sanitizeHtml',$id = null,$defaultValues = array(),$functionsIfFromDb = array()) - { - if ($this->_type === 'form') - { - $this->values = $this->model->getFormValues($this->queryType,$func,$id,$defaultValues,$functionsIfFromDb); - } - } - - //set the head of the table - //$columnsName: name of the columns. It has to be a comma-separated list of strings - public function setHead($columnsName) - { - $this->itemList->setHead($columnsName); - } - - //method to set the type of the entries of the form - //$entries: string containing the list of the entries where each entry is separated by comma: entry1,entry2,entry3 - //$entryType: associative array that describes the entries of the form. The key is the entry name while the value is the entry type (textarea,inputText,etc) - public function setFormEntries($entries = 'model',$entryType = array(),$optionsArray = array()) - { - if ($this->_type === 'form') - { - if ($entries === 'model') - { - $this->entries = $this->model->fields; - if ($this->queryType === 'update') - { - $this->entries .= ','. $this->model->identifierName; - } - } - else - { - $this->entries = null; - } - $entriesArray = explode(',',$this->entries); - if (isset($this->form)) - { - foreach ($entriesArray as $entry) - { - $type = isset($entryType[$entry]) ? $entryType[$entry] : 'InputText'; - $options = isset($optionsArray[$entry]) ? $optionsArray[$entry] : null; - $this->form->setEntry($entry,$type,$options); - } - if ($this->queryType === 'update') - { - $this->form->setEntry($this->model->identifierName,'Hidden'); - } - } - else - { - throw new Exception('form object has not been initialized. Call the scaffold->loadForm method before'); - } - } - } - - //add an item to the list of items - public function addItem($type, $action = '', $field = '', $name = '') { - if ($this->_type === 'main') { - $this->itemList->addItem($type, $action, $field, $name); - } - } - - //update the table - public function update($methodsList = '',$id = null) { - $this->model->updateTable($methodsList,$id); - } - - //method to create the HTML of the scaffold - //$values: the values to insert in the from entries - public function render($values = null,$subset = null) - { - - if ($this->_type === 'main') - { - - $recordNumber = $this->model->rowNumber(); - - if (isset($this->viewArgs[$this->params['pageVariable']])) - { - $page = $this->viewArgs[$this->params['pageVariable']]; - } - else - { - $this->params['pageList'] = false; - } - - $recordPerPage = $this->params['recordPerPage']; - - if ($this->params['pageList'] === true) - { - $this->model->limit = $this->pageList->getLimit($page,$recordNumber,$recordPerPage); - $this->html['pageList'] = $this->pageList->render((int)($page-2),5); - $position = array($page,$this->pageList->getNumbOfPages()); - } - else - { - $this->model->limit = null; - $this->html['pageList'] = null; - $position = array(1,1); - } - - $values = $this->model->getTable($this->fields); - - $primaryKey = $this->_primaryKey; - - //pass the variable position - $this->itemList->position = $position; - $this->html['main'] = $this->itemList->render($values); - - $this->html['menu'] = $this->mainMenu->render($this->params['mainMenu']); - - $popupHtml = null; - if ($this->params['popup'] === true) - { - $this->html['popup'] = $this->popupMenu->render(); - $popupHtml = "
              \n".$this->html['popup']."\n
              \n"; - } - - $this->html['all'] = "\n".$this->model->notice."\n $popupHtml \n
              \n".$this->html['main']."\n
              \n"."
              \n
              \n".$this->html['pageList']."
              \n
              \n\n"; - - } - else if ($this->_type === 'form') - { - - $subset = (!isset($subset)) ? $this->entries : $subset; - $values = (!isset($values)) ? $this->values : $values; - $this->html['menu'] = $this->mainMenu->render($this->params['formMenu']); - $this->html['main'] = $this->form->render($values,$subset); - $this->html['all'] = "\n".$this->model->notice."\n
              \n".$this->html['main']."
              \n"; - - } - - return $this->html['all']; - - } - -} \ No newline at end of file diff --git a/h-source/admin/Library/Strings/Functions.php b/h-source/admin/Library/Strings/Functions.php deleted file mode 100644 index eabc0d8..0000000 --- a/h-source/admin/Library/Strings/Functions.php +++ /dev/null @@ -1,30 +0,0 @@ -controller = $controller; - $this->baseUrl = MOD_REWRITE_MODULE === true ? '/admin' : '/admin/index.php'; - $this->baseUrlSrc = '/admin'; - } - - - public function set($values) - { - $this->_data = $values; - } - - public function append($values) - { - $this->_data = array_merge($this->_data,$values); - } - - //clean the $this->viewFiles array - public function clean() { - $this->_viewFiles = array(); - $this->_lastView = null; - } - - public function load($fileName,$option = 'none') { - if ((strcmp($option,'last') !== 0) and (strcmp($option,'none') !== 0)) { - throw new Exception('"'.$option. '" argument not allowed in '.__METHOD__.' method'); - } - if ($option === 'last') { - $this->_lastView = $fileName; - } else { - $this->_viewFiles[] = $fileName; - } - } - - - public function render() { - extract($this->_data); - - foreach ($this->_viewFiles as $file) { - if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . ucwords($this->controller) . DS . $file . '.php')) { - include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . ucwords($this->controller) . DS . $file . '.php'); - } else { - include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . $file . '.php'); - } - } - - if (isset($this->_lastView)) { - if (file_exists(ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . ucwords($this->controller) . DS . $this->_lastView . '.php')) { - include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . ucwords($this->controller) . DS . $this->_lastView . '.php'); - } else { - include (ROOT . DS . APPLICATION_PATH . DS . 'Views' . DS . $this->_lastView . '.php'); - } - } - - } - -} diff --git a/h-source/admin/Library/Url.php b/h-source/admin/Library/Url.php deleted file mode 100755 index 54d6e3e..0000000 --- a/h-source/admin/Library/Url.php +++ /dev/null @@ -1,36 +0,0 @@ -_params = $params; - - $this->_sessionsTable = $params['sessionsTable']; - $this->_usersTable = $params['usersTable']; - $this->_groupsTable = $params['groupsTable']; - $this->_manyToManyTable = $params['manyToManyTable']; - $this->_accessesTable = $params['accessesTable']; - $this->_login = Url::getRoot(null) . $params['users_controller'] . '/' . $params['users_login_action'] ; - $this->_main = Url::getRoot(null) . $params['panel_controller'] . '/' . $params['panel_main_action'] ; - $this->_retype = Url::getRoot(null) . $params['users_controller'] . '/' . $params['hijacking_action'] ; - $this->_db = Factory_Db::getInstance($params['database_type']); - } - - private function acquireCookie() { #obtain cookie - #cookie - $this->uid = NULL; - global $_COOKIE; - $this->uid = isset($_COOKIE[$this->_params['cookie_name']]) ? sanitizeAlnum($_COOKIE[$this->_params['cookie_name']]) : null; - } - - private function cleanSessions() - { - #cancello le sessioni scadute - $row = $this->_db->select($this->_sessionsTable,'creation_date',"uid='".$this->uid."'"); - if ($row) - { - if ($row[0][$this->_sessionsTable]['creation_date']) - { - if($row[0][$this->_sessionsTable]['creation_date'] + $this->_params['session_expire'] <= time()) - { - setcookie($this->_params['cookie_name'],'',time()-3600,$this->_params['cookie_path']); - } - } - } - $this->_db->del($this->_sessionsTable,"creation_date + " . $this->_params['session_expire'] . " <= ".time()); - } - - public function checkStatus() - { #controlla se l'utente è già loggato - $this->acquireCookie(); #ottengo il cookie - $this->cleanSessions(); #elimino le sessioni vecchie - $row=$this->_db->select($this->_usersTable.','.$this->_sessionsTable,$this->_usersTable.'.id_user,username,token,user_agent',$this->_usersTable.".id_user=".$this->_sessionsTable.".id_user and uid='".$this->uid."'"); - if (count($row) === 1 and $row !== false) - { - $this->status['user']=$row[0][$this->_usersTable]['username']; - $this->status['status']='logged'; - $this->status['id_user']=$row[0][$this->_usersTable]['id_user']; - $this->status['user_agent'] = $row[0][$this->_sessionsTable]['user_agent']; - $this->status['token'] = $row[0][$this->_sessionsTable]['token']; - $this->obtainGroups(); - } else { - $this->status['user']='sconosciuto'; - $this->status['status']='not-logged'; - $this->status['id_user']=''; - $this->status['user_agent']=''; - $this->status['token'] = ''; - $this->status['groups'] = array(); - } - } - - public function redirect($val,$time = 3) { #fa il redirect dell'utente - if ($val === 'logged') { - header('Refresh: '.$time.';url='.$this->_main); - if ($time !== 0) echo "You are already logged, ".$this->status['user'].".."; - } else if ($val === 'accepted') { - header('Refresh: '.$time.';url='.$this->_main); - if ($time !== 0) echo "Hi ".$this->status['user'].".."; - } else if ($val === 'login-error') { - header('Refresh: '.$time.';url='.$this->_login); - if ($time !== 0) echo "Wrong username or password..."; - } else if ($val === 'not-logged') { - header('Refresh: '.$time.';url='.$this->_login); - if ($time !== 0) echo "Limited access... sorry"; - } else if ($val === 'not-authorized') { - header('Refresh: '.$time.';url='.$this->_main); - if ($time !== 0) echo "Your account doesn't allow you to manage this page.. sorry!"; - } else if ($val === 'stolen') { - header('Refresh: '.$time.';url='.$this->_login); - if ($time !== 0) echo "Your session have been probably intercepted! Please login another time."; - } else if ($val === 'retype') { - header('Refresh: '.$time.';url='.$this->_retype); - if ($time !== 0) echo "Your session have been probably intercepted. Please type your password another time."; - } else if ($val === 'wait') { - header('Refresh: '.$time.';url='.$this->_login); - if ($time !== 0) echo "You have to wait ".$this->_params['time_after_failure']." seconds before you can try to login another time"; - } - exit; - } - - //obtain the group of the user - private function obtainGroups() - { - $tables = $this->_usersTable.','.$this->_groupsTable.','.$this->_manyToManyTable; - $fields = $this->_groupsTable.'.name'; - $where = $this->_usersTable.'.id_user='.$this->_manyToManyTable.'.id_user and '.$this->_groupsTable.'.id_group='.$this->_manyToManyTable.'.id_group and '.$this->_usersTable.'.id_user='.$this->status['id_user']; - $groups = $this->_db->select($tables,$fields,$where); - $this->status['groups'] = array(); - foreach ($groups as $group) - { - $this->status['groups'][] = $group[$this->_groupsTable]['name']; - } - } - - //$groups: string with name of groups separated by comma; ex: base,root,users - public function checkAccess($groups) - { - $groupsArray = explode (',',$groups); - foreach ($this->status['groups'] as $group) - { - if (in_array($group,$groupsArray)) return true; - } - return false; - } - - //check that the user is logged and, if present, check the group of the user (if loggeg) - //$groups: comma-separated list of groups whose users can access the page - //$time: time before the redirect is carried out - public function check($groups = null, $time = 3) - { - $this->checkStatus(); - if (strcmp($this->status['status'],'not-logged') === 0) - { - $this->redirect('not-logged',$time); - } - else if (strcmp($this->status['status'],'logged') === 0) - { - if ($this->_params['hijacking_check']) - { - if (!$this->checkHijacking()) - { - if ($this->_params['on_hijacking_event'] === 'forceout') - { - $this->logout(); - $this->redirect('stolen',$time); - } - else if ($this->_params['on_hijacking_event'] === 'redirect') - { - $this->redirect('retype',$time); - } - } - } -// $this->obtainGroups(); - if (isset($groups)) - { - $permission = $this->checkAccess($groups); - if (!$permission) $this->redirect('not-authorized',$time); - } - } - } - - //check if someone have stolen your uid - private function checkHijacking() - { - if (array_key_exists('user_agent',$this->status)) - { - if (strcmp($this->status['user_agent'],'') !== 0) - { - if (strcmp($this->status['user_agent'],getUserAgent()) === 0) - { - return true; - } - } - } - return false; - } - - //check CSRF - //$token: token to check - public function checkCSRF($token) - { - if (strcmp($this->status['token'],'') !== 0) - { - if (strcmp($this->status['token'],$token) === 0) - { - return true; - } - } - return false; - } - - //get an array containing all the users currently logged - public function getUsersLogged() - { - $usersLogged = array(); - $data=$this->_db->select($this->_usersTable.','.$this->_sessionsTable,'DISTINCT '.$this->_usersTable.'.username',$this->_usersTable.".id_user=".$this->_sessionsTable.".id_user"); - foreach ($data as $row) - { - $usersLogged[] = $row[$this->_usersTable]['username']; - } - return $usersLogged; - } - - //get the password of the current user - public function getPassword() - { - $row=$this->_db->select($this->_usersTable,'password',"id_user=".$this->status['id_user']); - if ($row !== false) - { - return $row[0][$this->_usersTable]['password']; - } - else - { - return false; - } - } - - private function checkPassword($user,$pwd) { #check username and password - - if (!in_array($this->_params['password_hash'],Params::$allowedHashFunc)) - { - throw new Exception('Error in '.__METHOD__.' : the hash func has to be '.implode(' or ',Params::$allowedHashFunc)); - } - //calculate the hash of the password - $pwd = call_user_func($this->_params['password_hash'],$pwd); - - $row=$this->_db->select($this->_usersTable,$this->_usersTable.'.id_user,username,password',"username=\"".$user."\" and password=\"".$pwd."\" and has_confirmed=0"); - if (count($row) === 1 and $row !== false) - { - $this->status['user'] = $row[0][$this->_usersTable]['username']; - $this->status['status'] = 'accepted'; - $this->status['id_user'] = $row[0][$this->_usersTable]['id_user']; - } - else - { - $this->status['user'] = 'unknown'; - $this->status['status'] = 'login-error'; - $this->status['id_user'] = ''; - if ($this->_db->recordExists($this->_usersTable,'username',$user)) - { - $this->_db->update($this->_usersTable,'last_failure',array(time()),'username="'.$user.'"'); - } - } - } - - //check that enough time is passed since the last failure of the user - private function checkLastFailure($user) - { - //current time - $now = time(); - //max time - $max = $now - $this->_params['time_after_failure']; - $data = $this->_db->select($this->_usersTable,'last_failure','username="'.$user.'"'); - if (count($data) === 1 and $data !== false) - { - if ($data[0][$this->_usersTable]['last_failure'] < $max) - { - return true; - } - return false; - } - else - { - return true; - } - } - - public function login($user,$pwd) - { - $user = sanitizeAll($user); - $this->checkStatus(); - //check if already logged - if ($this->status['status'] === 'logged') - { -// $this->redirect('logged'); - return 'logged'; - } - else - { - if ($this->checkLastFailure($user)) - { - $this->checkPassword($user,$pwd); - if ($this->status['status']==='accepted') - { - $this->uid = md5(randString(10).uniqid(mt_rand(),true)); - $this->_token = md5(randString(12)); - $userAgent = getUserAgent(); - $this->_db->insert($this->_sessionsTable,'id_user,uid,token,creation_date,user_agent',array($this->status['id_user'],$this->uid,$this->_token,time(),$userAgent)); - setcookie($this->_params['cookie_name'],$this->uid,0,$this->_params['cookie_path']); #magic cookie - $this->updateAccesses(); - - $this->_db->del($this->_sessionsTable,'id_user='.$this->status['id_user'].' AND uid != "'.$this->uid.'"'); - -// $this->redirect('accepted'); - return 'accepted'; - } - else if ($this->status['status']==='login-error') - { -// $this->redirect('login-error'); - return 'login-error'; - } - } - else - { -// $this->redirect('wait'); - return 'wait'; - } - } -// $this->redirect('login-error'); - return 'login-error'; - } - - private function updateAccesses() - { - $ip=getIp(); #ip - $date=date('d'). "-" . date('m') . "-" . date('Y'); #date - $ora=date('H') . ":" . date('i'); #time - $values=array($ip,$date,$ora,$this->status['user']); - $res=$this->_db->insert($this->_accessesTable,'ip,data,ora,username',$values); - } - - //force out an user - //$id: the id of the user - public function forceOut($id) - { - $id = (int)$id; - if ($this->_db->del($this->_sessionsTable,'id_user='.$id)) - { - return true; - } - return false; - } - - public function logout() - { - $this->checkStatus(); - if ($this->status['status'] === 'logged') - { - setcookie ($this->_params['cookie_name'], "", time() - 3600,$this->_params['cookie_path']); - if ($this->_db->del($this->_sessionsTable,'id_user='.$this->status['id_user'])) - { - return 'was-logged'; - } - else - { - return 'error'; - } - } - else - { - return 'not-logged'; - } - } - -} \ No newline at end of file diff --git a/h-source/admin/Library/Users/index.html b/h-source/admin/Library/Users/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Library/Users/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Library/index.html b/h-source/admin/Library/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Library/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/License.txt b/h-source/admin/License.txt deleted file mode 100755 index 404896a..0000000 --- a/h-source/admin/License.txt +++ /dev/null @@ -1,201 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - -Version 3, 29 June 2007 - -Copyright © 2007 Free Software Foundation, Inc. - -Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - -Preamble - -The GNU General Public License is a free, copyleft license for software and other kinds of works. - -The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. - -To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. - -For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. - -Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. - -For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. - -Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. - -Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. - -The precise terms and conditions for copying, distribution and modification follow. - -TERMS AND CONDITIONS - -0. Definitions. - -“This License” refers to version 3 of the GNU General Public License. -“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. -“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. -To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. -A “covered work” means either the unmodified Program or a work based on the Program. -To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. -To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. -An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. - -1. Source Code. - -The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. -A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. -The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. -The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. -The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. -The Corresponding Source for a work in source code form is that same work. - -2. Basic Permissions. - -All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. -You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. -Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. - -3. Protecting Users' Legal Rights From Anti-Circumvention Law. - -No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. -When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. - -4. Conveying Verbatim Copies. - -You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. -You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. - -5. Conveying Modified Source Versions. - -You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: -a) The work must carry prominent notices stating that you modified it, and giving a relevant date. -b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. -c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. -d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. -A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. - -6. Conveying Non-Source Forms. - -You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: -a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. -b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. -c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. -d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. -e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. -A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. -A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. -“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. -If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). -The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. -Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. - -7. Additional Terms. - -“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. -When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. -Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: -a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or -b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or -c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or -d) Limiting the use for publicity purposes of names of licensors or authors of the material; or -e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or -f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. -All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. -If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. -Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. - -8. Termination. - -You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). -However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. -Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. -Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. - -9. Acceptance Not Required for Having Copies. - -You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. - -10. Automatic Licensing of Downstream Recipients. - -Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. -An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. -You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. - -11. Patents. - -A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. -A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. -Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. -In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. -If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. -If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. -A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. -Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. - -12. No Surrender of Others' Freedom. - -If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. - -13. Use with the GNU Affero General Public License. - -Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. - -14. Revised Versions of this License. - -The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. -Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. -If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. -Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. - -15. Disclaimer of Warranty. - -THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -16. Limitation of Liability. - -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -17. Interpretation of Sections 15 and 16. - -If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. - -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. -If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. - -You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . - -The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . - - diff --git a/h-source/admin/Logs/index.html b/h-source/admin/Logs/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Logs/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Public/Css/comune.css b/h-source/admin/Public/Css/comune.css deleted file mode 100644 index b6ecdd3..0000000 --- a/h-source/admin/Public/Css/comune.css +++ /dev/null @@ -1,130 +0,0 @@ -/*parte di login.css*/ - -/*controller:users*/ -/*action:login*/ -.login_box { - margin:10px 10px 20px 10px; -} -.login_box input { - border:1px solid orange; -} - -/*action:logout*/ -.logout_box { - margin:10px 10px 20px 10px; -} - -.logout_button a{ - margin:20px; - padding:10px; - background:orange; - border:1px solid black; -/* width:30px; */ -} - - -/*parte di scaffold.css*/ - -td { - font-size: 12px; -} - -td.editForm, td.delForm, td.associateForm, td.moveupForm, td.movedownForm { - width:3%; -} - -td.editForm input, td.delForm input, td.associateForm input, td.moveupForm input, td.movedownForm input -{ - height:30px; -} - -/*alert string*/ -.alert { - font:bold 12px/1.5 Verdana,arial; - padding:5px; - margin:5px 5px 15px 5px; - background:TOMATO; - border-top:2px solid MAROON; - border-bottom:2px solid MAROON; - color:MAROON; -} - -/*executed operation string*/ -.executed { - font:bold 12px/1.5 Verdana,arial; - padding:5px; - margin:5px 5px 15px 5px; - background:#E0FFFF; - border-top:2px solid #ADD8E6; - border-bottom:2px solid #ADD8E6; - color:#4169E1; -} - -/*action:main*/ -tr.listRow { - background:#E6E6FA; -} - -tr.listHead { - font-weight: bold; - background:#d1deed; - border:1px solid #4169E1; - border-bottom:1px solid #4169E1; -} - -tr.listHead td { -/* font-weight: bold; */ -/* background:#d1deed; */ - border-top:1px solid #4169E1; - border-bottom:1px solid #4169E1; -} - -.recordsBox { - margin:10px 0px; -} - -.recordsBox table { - width:100%; -} - -.listItemForm { - margin:0px; -} - -a.linkItem { -/* background:red; */ - font:bold 12px/1 Verdana,arial; -} - -/*controller:panel -/*action:main*/ -.main_box { - padding:50px 20px; - width:700px; - height:250px; -} -.top_color { - text-align:center; - width:160px; - height:35px; - margin:0; - padding:0; -} -.bottom_color { - background:lavender; - text-align:center; - width:160px; - margin:0; - padding:5px 0; -} - - - -/*box che dice dove ti trovi, in che controller*/ -.controller_info_header -{ - background:#E6E6FA; - padding:5px; - font: bold 16px/1.75em sans-serif; - border-bottom:1px solid #4169E1; -} \ No newline at end of file diff --git a/h-source/admin/Public/Css/explorer.css b/h-source/admin/Public/Css/explorer.css deleted file mode 100644 index 1adb80b..0000000 --- a/h-source/admin/Public/Css/explorer.css +++ /dev/null @@ -1,91 +0,0 @@ -ul#menuBlock li { - height:24px; -} - -ul#menuBlock li ul { - top:25px; -} - -ul#menuBlock li ul li { - margin-top:-3px; -} - -.view_page_top_box -{ - height:32px; -} - -.update_submit_class -{ - padding:7px; -} - -.view_page_update_button -{ - width:40px; -} - -/*div that contains the update form*/ -.view_page_update_button -{ - margin-top:2px; - margin-right:5px; -} -.update_submit_class -{ - padding:2px; - width:30px; -} -.notebooks_insert_form -{ - margin-right:-30px; -} - -.notebook_insert_link -{ - margin:0px 5px 0px 5px; -} -.top_left_images_help -{ - height:22px; - margin-bottom:-3px; -} -ul#menuBlock li { - height:26px; -} -ul#menuBlock li ul { - left:-6px; -} -.user_logged -{ - margin-left:62px; -} -.viewall_popup_menu_status_item -{ - padding-left:10px; -} -.copyright_notice_box -{ - width:140px; -} -.language_links_box ul -{ - width:100%; - margin:-1px 5px 30px 5px; -} -.language_links_box ul li -{ - margin-bottom:5px; -} -.language_links_box ul li a -{ - height:30px; -} -.talk_numb_ext -{ - margin-top:-30px; -} -.talk_numb_ext a -{ - margin-bottom:0px; -} \ No newline at end of file diff --git a/h-source/admin/Public/Css/files.css b/h-source/admin/Public/Css/files.css deleted file mode 100644 index e98e681..0000000 --- a/h-source/admin/Public/Css/files.css +++ /dev/null @@ -1,113 +0,0 @@ -form -{ - padding:0px; - margin:0px; -} - -/*external box*/ -.EGexternalBox -{ - height:500px; - overflow:scroll; -} - -/*top box containing the forms: upload,create folder,got to folder*/ -.EGformBox -{ - padding-left:10px; - padding-right:10px; - height:35px; - margin:5px; - border-top:1px solid #DC143C; - border-bottom:1px solid #DC143C; - background:#FF7F50; -} - -/*item box: folder*/ -.EGfolderBox -{ - padding-left:10px; - padding-right:10px; - height:55px; - margin:5px; -/* border-top:1px solid black; */ - background:#E6E6FA; -} - -/*item box: file*/ -.EGfileBox -{ - padding-left:10px; - padding-right:10px; - height:55px; - margin:5px; -/* border-top:1px solid black; */ - background:#E0FFFF; -} - -/*back box*/ -.EGbackBox -{ - padding-left:10px; - padding-right:10px; - height:50px; - margin:5px; - border-top:1px solid #6495ED; - border-bottom:1px solid #6495ED; - background:#ADD8E6; -} - -/*folder image and back image*/ -.EGfolderImage, .EGbackImage, .EGfileImage -{ - margin:3px; -/* padding:2px; */ - width:55px; -/* background:red; */ - float:left; -} - -/*box containing the form to create a new folder*/ -.EGcreateFolderBox -{ - margin:5px; - width:300px; - float:left; -} - -/*box containing the form to upload a file*/ -.EGuploadFileBox -{ - margin:5px; - margin-left:50px; - width:400px; - float:left; -} - -.EGcreateFolderBox input:text -{ - width:150px; -} - -/*name of the folder*/ -.EGfolderName, .EGfileName, .EGcurrentDirectory -{ - width:500px; - float:left; - font:normal 12px/1 Verdana,arial; - margin:10px; -} - -/*del image*/ -.EGfolderDelImage, .EGfileDelImage -{ - float:right; - margin:2px; -} - -/*preview of the image in upload file*/ -#imagePreview -{ - margin:10px; - height:120px; -} diff --git a/h-source/admin/Public/Css/form.css b/h-source/admin/Public/Css/form.css deleted file mode 100755 index 911af19..0000000 --- a/h-source/admin/Public/Css/form.css +++ /dev/null @@ -1,31 +0,0 @@ -.entryLabel { - display:block; - font:bold 12px/1em Verdana,arial; - padding:3px 0px; - margin-top:10px; - background:#E6E6FA; - width:500px; -} - -.formEntry textarea{ - width:500px; - height:300px; -} - -.formEntry input,.formEntry textarea { - width:500px; - padding:3px; - border: 1px solid #4169E1; -} - -.formClass { - margin:10px; -} - -.inputEntry { - margin:10px 0px; -} - -.formEntry #abstract { - height:100px; -} \ No newline at end of file diff --git a/h-source/admin/Public/Css/index.html b/h-source/admin/Public/Css/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Public/Css/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Public/Css/login.css b/h-source/admin/Public/Css/login.css deleted file mode 100644 index 7c42964..0000000 --- a/h-source/admin/Public/Css/login.css +++ /dev/null @@ -1,21 +0,0 @@ -/*controller:users*/ -/*action:login*/ -.login_box { - margin:10px 10px 20px 10px; -} -.login_box input { - border:1px solid orange; -} - -/*action:logout*/ -.logout_box { - margin:10px 10px 20px 10px; -} - -.logout_button a{ - margin:20px; - padding:10px; - background:orange; - border:1px solid black; -/* width:30px; */ -} \ No newline at end of file diff --git a/h-source/admin/Public/Css/mainmenu.css b/h-source/admin/Public/Css/mainmenu.css deleted file mode 100755 index 615c8bf..0000000 --- a/h-source/admin/Public/Css/mainmenu.css +++ /dev/null @@ -1,78 +0,0 @@ -/*stile header di ogni view*/ -.mainMenu { - height:50px; -/* border-top:1px solid #ADD8E6; */ - border-bottom:1px solid #4169E1; - padding-top:6px; - margin-bottom:10px; - background:#d1deed; -} -.mainMenuItem { - float:left; - width:60px; - height:40px; - margin-left:5px; - border:1px outset #708090; - background:#4169E1; - text-align:center; -} - -.mainMenuItem a { -/* margin:8px 5px 1px 10px; */ - display:block; - margin-top:12px; - color:#B0E0E6; - font:bold 14px/1 Verdana,arial; -} - -.verticalMenu { - margin-bottom:30px; - margin-left:10px; -/* text-align:right;*/ -} - -ul#menuBlock { -/* float:right; */ - float:left; - margin:0px; - padding:0px; - list-style:none; - height:24px; -} - -ul#menuBlock li { - position:relative; - display:block; - float:left; - width:100px; - border:1px outset #D3D3D3; - height:21px; -# height:24px; - text-align:center; - background:#E6E6FA; - padding-top:3px; -} - -ul#menuBlock li a { - color:#696969; - font: bold 12px/1 Verdana,arial; -} - -ul#menuBlock li ul { - margin:0px; - padding:0px; - list-style:none; - position:absolute; - top:24px; -# top:25px; - left:-1px; - display:none; -} - -ul#menuBlock li ul li { -# margin-top:-3px; -} - -/*ul#menuBlock li:hover ul{ - display:block; -}*/ \ No newline at end of file diff --git a/h-source/admin/Public/Css/pagelist.css b/h-source/admin/Public/Css/pagelist.css deleted file mode 100644 index 93c8454..0000000 --- a/h-source/admin/Public/Css/pagelist.css +++ /dev/null @@ -1,29 +0,0 @@ -/*page division*/ -.pageList { - text-align:left; - font:normal 14px/1 Verdana,arial; - padding:10px; -} - -div.pageList a { - padding:5px 10px; - border:1px outset #708090; - color:#B0E0E6; - background:#4169E1; - margin-right:5px; -} - -/*view footer*/ -.viewFooter { - height:50px; - border-top:1px solid #4169E1; - padding-top:6px; - margin-bottom:10px; - background:#d1deed; -} - -div.pageList a.currentPage -{ - font-weight:bold; - background:#0000CD; -} \ No newline at end of file diff --git a/h-source/admin/Public/Css/panel.css b/h-source/admin/Public/Css/panel.css deleted file mode 100644 index 8b9f9a9..0000000 --- a/h-source/admin/Public/Css/panel.css +++ /dev/null @@ -1,74 +0,0 @@ -ul { - list-style-type: none; -} - -div.mainPanel { - -} - -/*logout button*/ -.logoutButton -{ - float:left; - width:70px; - height:40px; - margin-left:5px; - border:1px outset #708090; - background:#4169E1; - text-align:center; -} -.logoutButton a -{ - display:block; - margin-top:13px; - color:#B0E0E6; - font:bold 12px/1 Verdana,arial; -} - -/*list of application in the panel main action*/ -.panelApplicationList -{ - padding:0px; -} -.panelApplicationList li -{ - display:block; - width:200px; - height:30px; - border:1px outset #708090; - margin:5px; - background:#4169E1; - padding-top:9px; -} - -.panelApplicationList li a -{ - margin:5px; - font: bold 14px/1 Verdana,arial; - color:#B0E0E6; -} - -/*list of groups an user is inserted within*/ -.groupsList -{ - margin:20px 5px 5px 5px; - font:normal 14px/1 Verdana,arial; -} -.groupsList li -{ - margin:5px 0px; - padding:0px; - font:bold 14px/1 Verdana,arial; -} -.groupsList ul -{ - padding:10px; -} - -/*list of logged users in panel*/ -.usersLoggedList -{ - margin:5px; - text-align:right; - font:normal 14px/1 Verdana,arial; -} \ No newline at end of file diff --git a/h-source/admin/Public/Css/popupmenu.css b/h-source/admin/Public/Css/popupmenu.css deleted file mode 100755 index 66a202e..0000000 --- a/h-source/admin/Public/Css/popupmenu.css +++ /dev/null @@ -1,49 +0,0 @@ -.verticalMenu { - margin-bottom:50px; - margin-left:10px; -/* text-align:right;*/ -} - -ul#menuBlock { -/* float:right; */ - float:left; - margin:0px; - padding:0px; - list-style:none; - height:24px; -} - -ul#menuBlock li { - position:relative; - display:block; - float:left; - width:150px; - border:1px outset #D3D3D3; - height:21px; - text-align:center; - background:#E6E6FA; - padding-top:5px; - padding-bottom:-2px; -} - -ul#menuBlock li a { - color:#696969; - font: bold 12px/1 Verdana,arial; -} - -ul#menuBlock li ul { - margin:0px; - padding:0px; - list-style:none; - position:absolute; - top:24px; - left:-1px; - display:none; -} - -ul#menuBlock li ul li { -} - -/*ul#menuBlock li:hover ul{ - display:block; -}*/ \ No newline at end of file diff --git a/h-source/admin/Public/Css/scaffold.css b/h-source/admin/Public/Css/scaffold.css deleted file mode 100755 index 8cc7529..0000000 --- a/h-source/admin/Public/Css/scaffold.css +++ /dev/null @@ -1,105 +0,0 @@ -html, body{margin: 0;padding:0} - -body{ - font-family: Verdana,arial,sans-serif; - font-size: 11px; - text-align: center; -/* background: #93045a; */ -} - -td { - font-size: 12px; -} - -img { - border:none; -} - -td.editForm, td.delForm, td.associateForm, td.moveupForm, td.movedownForm { - width:3%; -} - -td.editForm input, td.delForm input, td.associateForm input, td.moveupForm input, td.movedownForm input -{ - height:30px; -} - -/*alert string*/ -.alert { - font:bold 12px/1.5 Verdana,arial; - padding:5px; - margin:5px 5px 15px 5px; - background:TOMATO; - border-top:2px solid MAROON; - border-bottom:2px solid MAROON; - color:MAROON; -} - -/*executed operation string*/ -.executed { - font:bold 12px/1.5 Verdana,arial; - padding:5px; - margin:5px 5px 15px 5px; - background:#E0FFFF; - border-top:2px solid #ADD8E6; - border-bottom:2px solid #ADD8E6; - color:#4169E1; -} - -/*action:main*/ -tr.listRow { - background:#E6E6FA; -} - -tr.listHead { - font-weight: bold; - background:#d1deed; - border:1px solid #4169E1; - border-bottom:1px solid #4169E1; -} - -tr.listHead td { -/* font-weight: bold; */ -/* background:#d1deed; */ - border-top:1px solid #4169E1; - border-bottom:1px solid #4169E1; -} - -.recordsBox { - margin:10px 0px; -} - -.recordsBox table { - width:100%; -} - -.listItemForm { - margin:0px; -} - -a.linkItem { -/* background:red; */ - font:bold 12px/1 Verdana,arial; -} - -/*controller:panel -/*action:main*/ -.main_box { - padding:50px 20px; - width:700px; - height:250px; -} -.top_color { - text-align:center; - width:160px; - height:35px; - margin:0; - padding:0; -} -.bottom_color { - background:lavender; - text-align:center; - width:160px; - margin:0; - padding:5px 0; -} \ No newline at end of file diff --git a/h-source/admin/Public/Css/website.css b/h-source/admin/Public/Css/website.css deleted file mode 100755 index 7a5bda5..0000000 --- a/h-source/admin/Public/Css/website.css +++ /dev/null @@ -1,1414 +0,0 @@ -/*stili per il layout fisso*/ -html, body -{ - margin: 0; - padding:0; -} - -body -{ - font:normal 15px/1.3 sans-serif,Verdana,arial; - text-align: center; - background:#ffffff; -} - -img -{ - border:0px; -} - - -div#container -{ - width: 950px; - margin: 0px auto; - text-align: left; - background:white; -} - - -/*stile header grande*/ -div#external_header { - background:#b7f18c; - text-align:center; - height:80px; -} -div#header { - background:#b7f18c; - width: 950px; - margin: 0px auto; - text-align:left; - height:80px; -} - -div#top_menu_external -{ - text-align:center; - background:#015512; - margin-bottom:50px; -/* border-top:1px solid #4169E1; */ -/* border-bottom:1px solid #4169E1; */ -} - -div#top_menu -{ - font:bold 15px sans-serif,Verdana,arial; - text-align:left; - padding:0.4em 0px; - background:#015512; - width: 950px; - margin: 0px auto; -} -#top_menu .currentitem a -{ - background:#DC143C; - color:#FFF; -} - -div#top_menu a -{ - font:bold 16px sans-serif,Verdana,arial; - padding:0.4em 10px; - text-decoration:none; - font-weight:bold; - color:#FFF; -/* border-left:1px solid #4169E1; */ -} -#top_menu a:hover, -#top_menu a:focus, -#top_menu a:active -{ - background:#61c418; -} - -div#top_menu ul -{ - list-style-type: none; - display:inline; - margin:0px; - padding:0px; -} - -div#top_menu li -{ - display:inline; -/* padding:10px; */ -} - - -div#left -{ - width:730px; - float:left; -} - -div#right -{ - width:198px; - float:right; -} - -.login_username_input,.login_password_input -{ - width:150px; -} - -.login_table_box -{ - clear:left; - margin:5px; - margin-bottom:35px; -} -.statistics_ext_box -{ - margin:5px; - margin-bottom:30px; -} -.statistics_int_title -{ - margin:5px 0px 15px 0px; - padding:3px 0px; -/* background-color:#B7F18C; */ - border-bottom:2px solid #DC143C; - font-weight:bold; -} -.statistics_hard_title -{ - margin:5px 0px; - color:#808080; -} -.user_logged -{ - margin-left:55px; - color:black; - font-weight:bold; -} -.login_right_label -{ - font-weight:bold; -} -.login_right_form input -{ - border:1px solid #6495ED; - width:180px; - padding:2px; - margin:3px 0px; -} - -.login_input -{ - width:100px; -} - -.login_form_title -{ - color:black; - -/* padding:10px; */ -/* background:#5c98dc; */ -} - -.login_box -{ - margin-bottom:400px; -} - -.hardware_element -{ - margin:5px; - padding:10px; - background:#c7daef; -/* border-bottom:1px solid #6495ED; */ -} -.hardware_element_link -{ - margin:0px 10px; -} -.notebook_view_title -{ - width:400px; - height:50px; - float:left; - overflow:hidden; -/* background:red; */ - margin:10px 0px 10px 10px; - font:normal 14px/1 sans-serif,Verdana,arial; -} - -.notebook_insert_link -{ -/* border:1px solid black; */ -/* background-color:#c1e3ef; */ - width:200px; -/* background:orange; */ - float:right; - padding:3px 3px 1px 3px; - margin:0px 5px 30px 5px; - text-align:right; - overflow:hidden; - height:38px; -} - -.select_entry -{ -/* width:400px; */ - padding:2px; -/* border:1px solid #6495ED; */ -} -.input_entry, .talk_input_entry -{ - width:400px; - padding:2px; - border:1px solid #6495ED; -} -.textarea_entry, .talk_textarea_entry -{ - width:630px; - height:300px; - padding:2px; - border:1px solid #6495ED; -} -/*.talk_input_entry -{ - border:1px solid #CECECE; -}*/ -.form_entry .talk_textarea_entry -{ - width:400px; - height:200px; - border:1px solid #6495ED; -} -.notebooks_insert_form -{ - width:660px; - margin-left:10px; -} -.notebooks_insert_form .entry_label -{ - display:block; - padding:3px 0px; -/* background:#E6E6FA; */ - width:600px; - font-weight:bold; -} -.form_entry -{ - margin:20px 0px; -} - - -div#footer{ - margin:0px; - color: #000; - height:40px; - background:#b7f18c; - clear:both; -} - -/*div#navigation li{background: url(immagini/tabella1.png) no-repeat left center;}*/ -a.link_menu -{ - font: bold 16px/1.75em Verdana,"Times New Roman",sans-serif; - text-decoration: none; - color:#4169E1; - margin-left:10px; -} - - -/*box contenente i link per tornare nel pannello utente e per sloggarsi*/ -.your_status_box -{ - background:#E6E6FA; - padding:5px; -} - -.login_note -{ - color:#8080a6; - margin:10px; - padding:5px 0px; - border-top:2px solid #8080a6; - border-bottom:2px solid #8080a6; - - font: normal 16px/1.3 sans-serif,Verdana,arial; -} - -/*singolo box contentente un portatile in view all*/ -.notebooks_viewall -{ - clear:both; - clear:right; - margin:40px 0px; - padding:3px; -/* border:2px solid #7dafe7; */ - font: normal 14px/1.5 sans-serif,Verdana,arial; - -} -.model_viewall -{ - margin:40px 10px; -/* background-color:#F7F7F7; */ -/* border:1px solid #CECECE; */ -/* padding:10px; */ -} -.notebook_model -{ -/* background:orange; */ - padding:5px 0px; - margin:0px 5px; - overflow:hidden; - width:100%; -/* margin-bottom:10px; */ - font:normal 14px/1 sans-serif,arial,Verdana; - border-bottom:1px solid #7e0000; -} -.notebook_vendor, .notebook_compatibility, .notebook_kernel, .model_tested_on -{ - margin:5px 0px; -/* background:#eaebec; */ - padding:5px; - width:654px; - overflow:hidden; -/* border-top:2px solid #a4c8f1; */ -} -.inner_label -{ - float:left; - width:300px; -} -.inner_value -{ - float:left; - width:300px; - color:#1f538e; - font-weight:bold; -} -.notebook_description_label -{ -/* background:#B7F18C; */ - padding:5px 0px; - margin:0px 5px; - margin-top:1.5em; -/* margin-bottom:10px; */ - font:bold 14px/1 sans-serif,arial,Verdana; - border-bottom:1px solid #7e0000; -/* border-bottom:1px solid #228B22; */ -} -.notebook_description_value -{ -/* border-top:2px solid #a4c8f1; */ - margin:5px 0px; -/* background:#eaebec; */ - padding:5px 5px; - width:704px; - overflow:hidden; -} -.notebook_view_link -{ - margin-top:10px; -} - - -/*alert string*/ -.alert { - clear:left; - clear:right; - font:bold 12px/1.5 Verdana,arial; - padding:2px; - margin:5px 5px 15px 5px; -/* background:TOMATO; */ -/* border-top:2px solid MAROON; */ -/* border-bottom:2px solid MAROON; */ - color:MAROON; -} - -/*executed operation string*/ -.executed { - font:bold 12px/1.5 Verdana,arial; - padding:5px; - margin:5px 5px 15px 5px; - background:#E0FFFF; - border-top:2px solid #ADD8E6; - border-bottom:2px solid #ADD8E6; - color:#4169E1; -} - -.view_page_top_box -{ - overflow:hidden; - width:664px; -} -/*div that contains the update form*/ -.view_page_update_button -{ - float:right; -} -/*.view_page_update_button input -{ - height:35px; -}*/ -.view_page_update_button form -{ - width:33px; - padding:0px; -} -.view_page_back_button -{ - float:left; - width:50px; -} -/*the update submit button*/ -.update_submit_class -{ - padding:2px; - width:33px; - font:normal 14px/1 sans-serif,Verdana,arial; - cursor:pointer; -} -/*div that contains the link to the history page*/ -.view_page_history_button -{ - float:right; - width:30px; - padding:3px; - margin-left:10px; -/* border:1px solid #a4c8f1; */ -/* height:30px; */ -} -.view_page_history_button a -{ - text-decoration:none; - color:#000; -} - -.page_history -{ - margin:0px; - padding:0px; -} -.page_history_item -{ - list-style-type: none; - padding:5px; - margin:2px; - border-top:1px dashed #a4c8f1; -} -.page_history_current_item -{ - list-style-type: none; - padding:5px; - margin:5px 0px; -/* background:#ADD8E6; */ -} -.history_title -{ - font:normal 14px/1 sans-serif,Verdana; - margin:10px; - padding:3px; -} - -.revision_alert -{ - background:#f1d8d8; - padding:8px; - margin:5px; - margin-bottom:20px; - border-bottom:1px solid #d26262; - border-top:1px solid #d26262; -} - -/*page list in history*/ -.history_page_list, .history_page_list_news { - text-align:left; - font:normal 14px/1 Verdana,arial; - padding:10px; - margin-bottom:15px; -} -.history_page_list_news -{ - background:#C7DAEF; - margin:5px; -} -div.history_page_list a, div.history_page_list_news a { - padding:5px 10px; - border-left:1px outset #000; -/* border:1px outset #708090; */ -/* color:#B0E0E6; */ -/* background:#4169E1; */ -} - -div.history_page_list a.currentPage, div.history_page_list_news a.currentPage -{ - font-weight:bold; - background:#DCDCDC; -} -div.history_page_list_news a -{ - border-left:none; - color:#4169E1; - font-weight:bold; -} - -.viewall_no_items_found -{ - font:normal 14px/1 sans-serif,Verdana,arial; - margin:10px; - padding:5px; -} - - - -.viewall_popup_menu_box { - width:725px; - height:30px; - margin-bottom:0px; - margin-top:10px; - margin-left:0px; -} - -.viewall_popup_menu_status -{ - clear:left; - width:725px; - overflow:hidden; - margin-left:0px; - text-align:center; -} -.viewall_popup_menu_status_item -{ - width:139px; - float:left; - margin-left:3px; - color:#FF4500; - font-weight:bold; - font: bold 13px/1 sans-serif,arial,Verdana; -} - -ul#menuBlock { -/* float:right; */ - float:left; - margin:0px; - padding:0px; - list-style:none; - height:24px; -} - -ul#menuBlock li { - position:relative; - display:block; - float:left; - margin-left:3px; - width:139px; - height:22px; - text-align:center; - background: url('../Img/popup_back.png') no-repeat top left; -/* background:#FFA500; */ - padding-top:3px; -} - -ul#menuBlock li a { - color:#000000; - font: normal 12px/1 sans-serif,Verdana,arial; -} - -ul#menuBlock li ul { - margin:0px; - padding:0px; - list-style:none; - position:absolute; - top:24px; - left:-3px; - display:none; -} - -ul#menuBlock li ul li { - background:#ffef84; - border-top:1px solid #ec8459; -} - - -/*view files with differences*/ -.diff_ext_box -{ - margin:0px 5px 30px 5px; -} -.diff_item_label -{ -/* background:#ADD8E6; */ -/* padding:3px; */ - border-bottom:1px solid black; -} -.diff_item_text -{ - color:#7c7a7a; - background:#F0FFF0; - padding:3px; -} -del -{ - color:red; -} -ins -{ - color:green; -} - - - -/*tree navigation*/ -.position_tree_box -{ - margin:5px 5px 25px 5px; - padding:5px; - font:normal 14px/1 sans-serif,arial,Verdana; - border-top:1px solid #DC143C; - border-bottom:1px solid #DC143C; -} -.position_tree_box a -{ - text-decoration:none; - color:#DC143C; -} -.last_tree_element -{ - font-weight:bold; -} - - - -.td_with_distribution_checkboxes -{ - position:relative; - display:block; -} -.dist_checkboxes_hidden_box -{ - display:none; - position:absolute; - background:#C1E3EF; - top:20px; - left:0px; - width:400px; - padding:3px; -} -.dist_checkboxes_hidden_box_inner -{ - height:150px; - overflow:auto; - z-index:400; -} -.hidden_box_item -{ - margin-bottom:10px; -} -/*wiki code*/ -.code_pre -{ -/* width:650px; */ - max-height:300px; - overflow:auto; - background:#f9f4a7; - padding:5px 0 5px 5px; - font-size:12px; -/* color:#4169E1; */ - border:1px dashed #d4cb3b; -} - -.div_h1 -{ - font:bold 15px/1 sans-serif,arial,Verdana; - border-bottom:1px solid gray; - padding:3px 0px; - margin:10px 0px; - color:gray; -} -.div_h2 -{ - font:bold 14px/1 sans-serif,arial,Verdana; - color:gray; -} -.div_h3 -{ - font:bold 13px/1 sans-serif,arial,Verdana; - color:gray; -} - -.talk_login_notice -{ - margin:5px 5px; - padding:5px; - font:bold 14px/1 sans-serif,arial,Verdana; -/* border:1px solid #4169E1; */ -/* color:#4169E1; */ -/* background:#9acee3; */ -} -.talk_message_item -{ - margin:5px 0px 35px 5px; -} -.talk_message_item_title_date -{ - border-bottom:1px solid gray; - padding-bottom:5px; -/* width:300px; */ -} -.talk_message_item_title -{ - font:bold 14px/1 sans-serif,arial,Verdana; - margin-bottom:5px; -} -.talk_message_item_date -{ - font:normal 12px/1 sans-serif,arial,Verdana; - color:gray; -} -.talk_message_item_content -{ - padding:5px 0px; -} -.talk_form_external_box -{ - margin-bottom:20px; -} - -.model_id -{ - font:normal 12px/1 sans-serif,arial,Verdana; -/* color:gray; */ - margin:5px 3px; - padding:3px; -} - -.top_left_images -{ - height:35px; -} -.top_left_note_image -{ - height:30px; -} -.top_left_images_help -{ - height:30px; - margin-bottom:-10px; -} - -.who_you_are_and_logout, .your_panel_link -{ - margin:5px 0px 15px 0px; - padding:5px 10px; - background-color:#B7F18C; -/* font-weight:bold; */ -/* border-top:1px solid #015512; */ -/* border-bottom:1px solid #015512; */ -} -.your_panel_link -{ - background:#DC143C; -/* color:#FFF; */ -} -.your_panel_link a -{ - font-weight:bold; - color:#FFF; -} - -/*form*/ -.entryLabel { - display:block; - font:bold 12px/1em Verdana,arial; - padding:3px 0px; - margin-top:10px; -/* background:#E6E6FA; */ - width:400px; -} - -.formEntry { - margin:20px 0px; -} - -.formEntry input,.formEntry textarea { - width:400px; - padding:3px; - border: 1px solid #CECECE; -} -.formEntry textarea -{ - height:100px; -} -.formClass { - margin:10px; - margin-right:-40px; - width:400px; -} - -.inputEntry { - margin:10px 0px; - float:left; - width:80px; - height:30px; -} - -.panel_top_box -{ - background-color:#C1E3EF; - margin:5px 5px 35px 5px; - padding:10px; - font:bold 14px/1 sans-serif,arial,Verdana; - border-bottom:1px solid #097fbc; -} -.panel_top_box a -{ - color:#097fbc; -} - -/*list of application in the panel main action*/ -.panelApplicationList -{ - padding:0px; -} -.panelApplicationList li -{ - display:block; - width:200px; - height:30px; - margin:5px; - padding-top:9px; -} - -.panelApplicationList li a -{ - margin:5px; - font: bold 14px/1 sans-serif,Verdana,arial; - color:#097fbc; -} - -.confirm_notice -{ - margin:10px; -/* padding:10px; */ - font:normal 14px/1.5 sans-serif,arial,Verdana; -} - -.meet_item -{ - margin:20px 0px; -} -.meet_item_inner -{ - border-bottom:1px dashed #ed9f4a; - font-weight:bold; -/* color:#8f0754; */ -} -.meet_contrib_link, .contrib_explain_box -{ - margin:10px; -} -.users_contrib_item -{ - margin:10px; - padding:2px 0px; - border-bottom:1px dashed #ed9f4a; -/* color:#8f0754; */ -} -.external_users_contrib -{ - margin-bottom:40px; -} -.contrib_explain_box -{ - font-weight:bold; - margin-bottom:30px; -} -.users_meet_box -{ - margin:25px 30px; - padding:5px 20px; - background:#f6ea99; - border-bottom:1px solid #ed9f4a; - border-top:1px solid #ed9f4a; -} -.delete_account_notice_box -{ - margin:25px 10px; -} -.climb_form_ext_box -{ - margin:25px 10px; -} - -.new_account_title -{ - margin:10px; -} - -.viewall_popup_menu_box_external, .edit_form -{ - clear:left; - clear:right; - margin-bottom:20px; -/* background:#E0FFFF; */ - padding:0px 10px 10px 0px; -} - -.manage_account_link_box -{ - margin:5px 0px; -} - -.login_right_box -{ - margin-bottom:15px; -} - -.mandatory_fields_notice -{ - margin:10px 0px; -} - -.help_tables_of_contents -{ - margin:10px; - padding:10px; -} - -.bottom_licence_notice -{ - font:normal 12px/1.2 sans-serif,arial,Verdana; - padding:10px; - background:#E0FFFF; - margin:25px 0px 5px 0px; -} -.top_licence_notice -{ - clear:left; - clear:right; - font:normal 12px/1.2 sans-serif,arial,Verdana; - padding:10px; - background:#E0FFFF; - margin:25px 0px 5px 0px; - text-align:left; -} - -/*.copyright_notice_box -{ - text-align:right; - font: normal 12px/1 sans-serif,arial,Verdana; - padding:14px; -}*/ - -.copyright_notice_box, .footer_credits_box -{ - width:120px; - float:right; - font: normal 12px/1 sans-serif,arial,Verdana; - padding:14px; - border-left:3px solid #FFF; -} -.footer_credits_box -{ - width:40px; - border-left:3px solid #FFF; -} -.home_objectives_description -{ - margin:5px; - overflow:hidden; - width:100%; -} -.home_objectives_description img -{ - float:left; - margin-right:5px; -} -.home_objectives_title -{ - margin:15px 5px 5px 5px; -/* background:#90EE90; */ - font-weight:bold; - padding:5px 0px; - border-bottom:1px solid #228B22; -} - -.credits_item_title -{ - margin:15px 5px 5px 5px; -/* background:#90EE90; */ - padding:5px; - border-bottom:1px solid #228B22; - font-weight:bold; -} -.credits_item_description -{ - padding:5px; - margin:5px; - overflow:hidden; - width:100%; -} - -.home_container -{ - margin:20px 0px; -} - -.issues_external_box -{ - margin:40px 5px; -} -.issues_viewall_title -{ - margin:10px 2px; - font-weight:bold; -} -.issues_viewall_table -{ - font:normal 14px/1 sans-serif,arial,Verdana; -} -.issues_viewall_table td -{ -/* background:#E6E6FA; */ - padding:5px; -/* border-bottom:1px solid #E6E6FA; */ -} -.issues_viewall_table th -{ - background:#ADD8E6; - border-top:1px solid #4169E1; - border-bottom:1px solid #4169E1; - padding:5px; -} - -.issues_view_title, .issues_view_description_title -{ - font:bold 14px/1 sans-serif,arial,Verdana; - padding:5px 0px; - border-bottom:1px solid black; -} -.issues_view_status_and_priority -{ - margin:20px 0px; - font:normal 12px/1 sans-serif,arial,Verdana; -} -.issues_view_description -{ - margin:20px 0px; -} - -.add_issue_form_title -{ - margin:30px 5px; - font-weight:bold; -} -.add_issue_form -{ - margin:30px 5px; -} - -.contact_div -{ - margin:10px; -} - -.help_external_box -{ - margin:5px; -} -.help_wiki_table thead -{ - text-align:left; -} - -.hardware_element_image -{ - height:50px; -} -.markItUpContainer -{ - z-index:0; -} - -.search_form -{ - clear:both; - margin:5px 5px 35px 5px; -} -.search_form .input_entry_search -{ - width:250px; - border: 1px solid #CECECE; - padding:2px; -} - -.search_result_item -{ - margin:5px 5px 15px 5px; - border-top:1px solid #CECECE; - padding:5px 0px; -} - -.diff_color_notice -{ - background:#f1d8d8; - padding:8px; - margin:5px; - margin-bottom:20px; - border-bottom:1px solid #d26262; - border-top:1px solid #d26262; -} - -.gray_text_notice -{ - color:#7c7a7a; -} -.credits_external_box -{ - margin-bottom:40px; -} -.notebook_model img -{ - float:left; -} -.span_model_name -{ - float:left; - margin-left:10px; - padding-top:5px; -} - -/*dialog*/ -#dialog-form, #delete_dialog -{ - display:none; -} -#suggest_dialog -{ - display:none; -} -#dialog-form table -{ - text-align:left; -} -#dialog-form input -{ - width:300px; - border:1px solid #CECECE; -} -#dialog-form textarea, #delete_dialog textarea -{ - width:300px; - height:100px; - border:1px solid #CECECE; -} -.ask_for_removal_class -{ - float:right; - padding-top:5px; -} -.deletion_motivations_title -{ - margin:15px 5px; - border-bottom:1px solid #D26262; -} - -.deletion_motivations_iternal -{ - margin:15px 5px; - padding:5px; - border:1px dashed #D26262; -} -.deletion_motivations_iternal_message -{ - -} - -.news_external_box -{ - margin:5px; - margin-bottom:40px; -} -.news_item -{ -/* background:#f8f1b2; */ -/* padding:5px; */ - margin:30px 0px; -/* border:1px solid #f99f4f; */ -} -.news_item_title -{ - font-weight:bold; - margin:0px 0px 4px 0px; - padding-bottom:5px; - border-bottom:1px solid #9d1d04; - color:#9d1d04; -} -.news_item_date -{ - font: normal 13px/1 sans-serif,arial,Verdana; -/* color:#e86a17; */ - color:gray; - margin:0px 0px 10px 0px; -} - -.discover_hardware, .download_database -{ - text-align:center; - margin-bottom:5px; -} -.download_database -{ - margin-bottom:30px; -} - -.download_table -{ - margin:10px 0px; - padding:5px; -} -.download_table td -{ - padding:5px 5px; - background:#E0FFFF; -} - -.help_external_box h1 -{ - background:#FFD700; - padding:5px 10px; - color:#800000; - border-top:1px solid #800000; - border-bottom:1px solid #800000; - font:normal 20px/1 sans-serif,arial,Verdana; -} - -.right_box_ext_box -{ - margin:5px; - margin-bottom:300px; -} - -.add_message_form_title -{ - margin:15px 0px; - font-weight:bold; - padding:5px 0px; - color:#4169E1; -} - -.issues_message_item, .issues_message_item_preview, .issues_message_item_hidden, .talk_message_item_hidden -{ - padding:10px; - margin:20px 0px; - background:#eaf2f4; - border-top:1px solid #4169E1; - border-bottom:1px solid #4169E1; -} -.issues_message_item_hidden, .talk_message_item_hidden -{ - background:#FFF; -/* background:#b5d6e0; */ - border-top:1px dashed #bcbcbc; - border-bottom:1px dashed #bcbcbc; -} -.issues_message_item_preview -{ - background:#fffdc2; - border-top:1px dashed #f9a92b; - border-bottom:1px dashed #f9a92b; -} -.talk_message_item_hidden -{ - margin-bottom:40px; -/* background:#f1f1f1; */ -} -.message_view_description -{ - clear:both; - margin-bottom:5px; -} -.message_view_description_hidden -{ - margin-top:5px; -} -.message_preview_notice -{ - margin:3px 3px; - font:bold 14px/1 sans-serif,arial,Verdana; -} -.useful_links_ext div -{ - margin:3px 0px; - padding:1px; - padding-left:20px; - background: url(../Img/link.png) no-repeat left center; -} -.useful_links_ext div a -{ - color:#000; - text-decoration:none; - font:normal 14px/1 sans-serif,arial,Verdana; -} -.issues_message_item_user -{ - overflow:hidden; - font-weight:bold; - margin-bottom:1em; -} -.issues_message_item_user_inner -{ - float:left; - width:500px; -} - -.hide_general -{ - float:right; - margin-left:10px; - font-weight:normal; - text-decoration:none; - color:black; -} -.hide_general img -{ - margin-right:5px; - margin-bottom:-2px; -} -.language_links_box ul -{ - overflow:hidden; - margin:4px 5px 20px 5px; - padding:0px; - list-style-type:none; -} -.language_links_box ul li -{ - float:left; - margin-bottom:10px; - margin-right:10px; - margin-top:5px; -} -.language_links_box ul li a -{ - padding:5px; - text-decoration:none; - color:black; -} -.language_links_box ul li a span -{ - margin-left:3px; -} -.language_links_box a.current_lang -{ - border-top:1px dashed #6495ED; - border-bottom:1px dashed #6495ED; -} - -.talk_numb_ext -{ - clear:both; - text-align:left; - margin-left:10px; -} -.talk_numb_ext a -{ - display:block; - width:150px; - text-align:center; - padding:10px 0px; - text-decoration:none; - color:black; - background: url(../Img/talk_messages.png) no-repeat left center; - margin-bottom:10px; - float:right; - overflow:hidden; -} - -.details_of_hidden_message -{ - display:none; -} -.details_of_hidden_message_inner, .details_of_actions_inner -{ - margin:10px 0px; - background:#fbfbfb; - padding:5px; - border:1px solid #BCBCBC; -} -.details_of_actions_inner -{ - background:#ecfffe; - border:1px solid #7ed0cb; -} - -.md_type -{ - display:none; -} -.hidden_message_view_details -{ - font:normal 12px/1 sans-serif,Verdana,arial; -} -.deleted_message_show -{ - margin:8px 0px 0px 0px; - font:normal 13px/1 sans-serif,arial,Verdana; -} \ No newline at end of file diff --git a/h-source/admin/Public/Img/Icons/back.png b/h-source/admin/Public/Img/Icons/back.png deleted file mode 100644 index 6ceb852..0000000 Binary files a/h-source/admin/Public/Img/Icons/back.png and /dev/null differ diff --git a/h-source/admin/Public/Img/Icons/delete.png b/h-source/admin/Public/Img/Icons/delete.png deleted file mode 100644 index 9b192fe..0000000 Binary files a/h-source/admin/Public/Img/Icons/delete.png and /dev/null differ diff --git a/h-source/admin/Public/Img/Icons/file.png b/h-source/admin/Public/Img/Icons/file.png deleted file mode 100644 index 443765f..0000000 Binary files a/h-source/admin/Public/Img/Icons/file.png and /dev/null differ diff --git a/h-source/admin/Public/Img/Icons/folder.png b/h-source/admin/Public/Img/Icons/folder.png deleted file mode 100644 index 89fb6d5..0000000 Binary files a/h-source/admin/Public/Img/Icons/folder.png and /dev/null differ diff --git a/h-source/admin/Public/Img/Icons/image.png b/h-source/admin/Public/Img/Icons/image.png deleted file mode 100644 index bbc8c82..0000000 Binary files a/h-source/admin/Public/Img/Icons/image.png and /dev/null differ diff --git a/h-source/admin/Public/Img/Icons/index.html b/h-source/admin/Public/Img/Icons/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Public/Img/Icons/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Public/Js/DisplayTag.js b/h-source/admin/Public/Js/DisplayTag.js deleted file mode 100755 index 1ba1fb7..0000000 --- a/h-source/admin/Public/Js/DisplayTag.js +++ /dev/null @@ -1,10 +0,0 @@ - \ No newline at end of file diff --git a/h-source/admin/Public/Js/TinyMCE.js b/h-source/admin/Public/Js/TinyMCE.js deleted file mode 100755 index b0f994e..0000000 --- a/h-source/admin/Public/Js/TinyMCE.js +++ /dev/null @@ -1,34 +0,0 @@ -tinyMCE.init({ - // General options - mode : "textareas", - theme : "advanced", - editor_selector : "contentArea", -// editor_deselector : "mceNoEditor", - plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template", - - // Theme options - theme_advanced_buttons1 : "justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect", - theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,code", - theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media", - theme_advanced_buttons4 : "styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,template,|,forecolor,backcolor,bold,italic,underline,strikethrough,|,insertdate,inserttime,preview", - theme_advanced_toolbar_location : "top", - theme_advanced_toolbar_align : "left", - theme_advanced_statusbar_location : "bottom", - theme_advanced_resizing : true, - - // Example content CSS (should be your site CSS) - content_css : "../stili_editor.css", - - // Drop lists for link/image/media/template dialogs - template_external_list_url : "lists/template_list.js", - external_link_list_url : "lists/link_list.js", - external_image_list_url : "lists/image_list.js", - media_external_list_url : "lists/media_list.js", - - // Replace values for the template plugin - template_replace_values : { - username : "Some User", - staffid : "991234" - } - }); - diff --git a/h-source/admin/Public/Js/functions.js b/h-source/admin/Public/Js/functions.js deleted file mode 100644 index 5e1f2d8..0000000 --- a/h-source/admin/Public/Js/functions.js +++ /dev/null @@ -1,122 +0,0 @@ - \ No newline at end of file diff --git a/h-source/admin/Public/Js/index.html b/h-source/admin/Public/Js/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Public/Js/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png deleted file mode 100755 index 82524ab..0000000 Binary files a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-small_25_c5ddfc_40x40.png and /dev/null differ diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png deleted file mode 100755 index 6aed97a..0000000 Binary files a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_20_e69700_40x40.png and /dev/null differ diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png deleted file mode 100755 index f11ca67..0000000 Binary files a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_22_1484e6_40x40.png and /dev/null differ diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png deleted file mode 100755 index 68306d1..0000000 Binary files a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_diagonals-thick_26_2293f7_40x40.png and /dev/null differ diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png deleted file mode 100755 index f567c28..0000000 Binary files a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e69700_40x100.png and /dev/null differ diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png deleted file mode 100755 index 29e9965..0000000 Binary files a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_flat_0_e6b900_40x100.png and /dev/null differ diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png deleted file mode 100755 index 9a46d19..0000000 Binary files a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_highlight-soft_100_f9f9f9_1x100.png and /dev/null differ diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png deleted file mode 100755 index f811f30..0000000 Binary files a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-bg_inset-hard_100_eeeeee_1x100.png and /dev/null differ diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png deleted file mode 100755 index 755fe99..0000000 Binary files a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0a82eb_256x240.png and /dev/null differ diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png deleted file mode 100755 index 98705f9..0000000 Binary files a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_0b54d5_256x240.png and /dev/null differ diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png deleted file mode 100755 index 2179078..0000000 Binary files a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_5fa5e3_256x240.png and /dev/null differ diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png deleted file mode 100755 index de76ce2..0000000 Binary files a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_fcdd4a_256x240.png and /dev/null differ diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png deleted file mode 100755 index 42f8f99..0000000 Binary files a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/images/ui-icons_ffffff_256x240.png and /dev/null differ diff --git a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css b/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css deleted file mode 100755 index c4ed3ea..0000000 --- a/h-source/admin/Public/Js/jquery/dialog/css/excite-bike/jquery-ui-1.8.4.custom.css +++ /dev/null @@ -1,315 +0,0 @@ -/* - * jQuery UI CSS Framework @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - */ - -/* Layout helpers -----------------------------------*/ -.ui-helper-hidden { display: none; } -.ui-helper-hidden-accessible { position: absolute; left: -99999999px; } -.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } -.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; } -.ui-helper-clearfix { display: inline-block; } -/* required comment for clearfix to work in Opera \*/ -* html .ui-helper-clearfix { height:1%; } -.ui-helper-clearfix { display:block; } -/* end clearfix */ -.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } - - -/* Interaction Cues -----------------------------------*/ -.ui-state-disabled { cursor: default !important; } - - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } - - -/* Misc visuals -----------------------------------*/ - -/* Overlays */ -.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } - - -/* - * jQuery UI CSS Framework @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Theming/API - * - * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=segoe%20ui,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=3px&bgColorHeader=f9f9f9&bgTextureHeader=03_highlight_soft.png&bgImgOpacityHeader=100&borderColorHeader=cccccc&fcHeader=e69700&iconColorHeader=5fa5e3&bgColorContent=eeeeee&bgTextureContent=06_inset_hard.png&bgImgOpacityContent=100&borderColorContent=aaaaaa&fcContent=222222&iconColorContent=0a82eb&bgColorDefault=1484e6&bgTextureDefault=08_diagonals_thick.png&bgImgOpacityDefault=22&borderColorDefault=ffffff&fcDefault=ffffff&iconColorDefault=fcdd4a&bgColorHover=2293f7&bgTextureHover=08_diagonals_thick.png&bgImgOpacityHover=26&borderColorHover=2293f7&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=e69700&bgTextureActive=08_diagonals_thick.png&bgImgOpacityActive=20&borderColorActive=e69700&fcActive=ffffff&iconColorActive=ffffff&bgColorHighlight=c5ddfc&bgTextureHighlight=07_diagonals_small.png&bgImgOpacityHighlight=25&borderColorHighlight=ffffff&fcHighlight=333333&iconColorHighlight=0b54d5&bgColorError=e69700&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=20&borderColorError=e69700&fcError=ffffff&iconColorError=ffffff&bgColorOverlay=e6b900&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=0&opacityOverlay=30&bgColorShadow=e69700&bgTextureShadow=01_flat.png&bgImgOpacityShadow=0&opacityShadow=20&thicknessShadow=0px&offsetTopShadow=6px&offsetLeftShadow=6px&cornerRadiusShadow=3px - */ - - -/* Component containers -----------------------------------*/ -.ui-widget { font-family: segoe ui, Arial, sans-serif; font-size: 1.1em; } -.ui-widget .ui-widget { font-size: 1em; } -.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: segoe ui, Arial, sans-serif; font-size: 1em; } -.ui-widget-content { border: 1px solid #aaaaaa; background: #eeeeee url(images/ui-bg_inset-hard_100_eeeeee_1x100.png) 50% bottom repeat-x; color: #222222; } -.ui-widget-content a { color: #222222; } -.ui-widget-header { border: 1px solid #cccccc; background: #f9f9f9 url(images/ui-bg_highlight-soft_100_f9f9f9_1x100.png) 50% 50% repeat-x; color: #e69700; font-weight: bold; } -.ui-widget-header a { color: #e69700; } - -/* Interaction states -----------------------------------*/ -.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #ffffff; background: #1484e6 url(images/ui-bg_diagonals-thick_22_1484e6_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } -.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #ffffff; text-decoration: none; } -.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #2293f7; background: #2293f7 url(images/ui-bg_diagonals-thick_26_2293f7_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } -.ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; } -.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #e69700; background: #e69700 url(images/ui-bg_diagonals-thick_20_e69700_40x40.png) 50% 50% repeat; font-weight: bold; color: #ffffff; } -.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; } -.ui-widget :active { outline: none; } - -/* Interaction Cues -----------------------------------*/ -.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #ffffff; background: #c5ddfc url(images/ui-bg_diagonals-small_25_c5ddfc_40x40.png) 50% 50% repeat; color: #333333; } -.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #333333; } -.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #e69700; background: #e69700 url(images/ui-bg_diagonals-thick_20_e69700_40x40.png) 50% 50% repeat; color: #ffffff; } -.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; } -.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; } -.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } -.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } -.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } - -/* Icons -----------------------------------*/ - -/* states and images */ -.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_0a82eb_256x240.png); } -.ui-widget-content .ui-icon {background-image: url(images/ui-icons_0a82eb_256x240.png); } -.ui-widget-header .ui-icon {background-image: url(images/ui-icons_5fa5e3_256x240.png); } -.ui-state-default .ui-icon { background-image: url(images/ui-icons_fcdd4a_256x240.png); } -.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } -.ui-state-active .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } -.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_0b54d5_256x240.png); } -.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } - -/* positioning */ -.ui-icon-carat-1-n { background-position: 0 0; } -.ui-icon-carat-1-ne { background-position: -16px 0; } -.ui-icon-carat-1-e { background-position: -32px 0; } -.ui-icon-carat-1-se { background-position: -48px 0; } -.ui-icon-carat-1-s { background-position: -64px 0; } -.ui-icon-carat-1-sw { background-position: -80px 0; } -.ui-icon-carat-1-w { background-position: -96px 0; } -.ui-icon-carat-1-nw { background-position: -112px 0; } -.ui-icon-carat-2-n-s { background-position: -128px 0; } -.ui-icon-carat-2-e-w { background-position: -144px 0; } -.ui-icon-triangle-1-n { background-position: 0 -16px; } -.ui-icon-triangle-1-ne { background-position: -16px -16px; } -.ui-icon-triangle-1-e { background-position: -32px -16px; } -.ui-icon-triangle-1-se { background-position: -48px -16px; } -.ui-icon-triangle-1-s { background-position: -64px -16px; } -.ui-icon-triangle-1-sw { background-position: -80px -16px; } -.ui-icon-triangle-1-w { background-position: -96px -16px; } -.ui-icon-triangle-1-nw { background-position: -112px -16px; } -.ui-icon-triangle-2-n-s { background-position: -128px -16px; } -.ui-icon-triangle-2-e-w { background-position: -144px -16px; } -.ui-icon-arrow-1-n { background-position: 0 -32px; } -.ui-icon-arrow-1-ne { background-position: -16px -32px; } -.ui-icon-arrow-1-e { background-position: -32px -32px; } -.ui-icon-arrow-1-se { background-position: -48px -32px; } -.ui-icon-arrow-1-s { background-position: -64px -32px; } -.ui-icon-arrow-1-sw { background-position: -80px -32px; } -.ui-icon-arrow-1-w { background-position: -96px -32px; } -.ui-icon-arrow-1-nw { background-position: -112px -32px; } -.ui-icon-arrow-2-n-s { background-position: -128px -32px; } -.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } -.ui-icon-arrow-2-e-w { background-position: -160px -32px; } -.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } -.ui-icon-arrowstop-1-n { background-position: -192px -32px; } -.ui-icon-arrowstop-1-e { background-position: -208px -32px; } -.ui-icon-arrowstop-1-s { background-position: -224px -32px; } -.ui-icon-arrowstop-1-w { background-position: -240px -32px; } -.ui-icon-arrowthick-1-n { background-position: 0 -48px; } -.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } -.ui-icon-arrowthick-1-e { background-position: -32px -48px; } -.ui-icon-arrowthick-1-se { background-position: -48px -48px; } -.ui-icon-arrowthick-1-s { background-position: -64px -48px; } -.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } -.ui-icon-arrowthick-1-w { background-position: -96px -48px; } -.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } -.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } -.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } -.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } -.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } -.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } -.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } -.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } -.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } -.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } -.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } -.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } -.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } -.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } -.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } -.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } -.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } -.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } -.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } -.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } -.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } -.ui-icon-arrow-4 { background-position: 0 -80px; } -.ui-icon-arrow-4-diag { background-position: -16px -80px; } -.ui-icon-extlink { background-position: -32px -80px; } -.ui-icon-newwin { background-position: -48px -80px; } -.ui-icon-refresh { background-position: -64px -80px; } -.ui-icon-shuffle { background-position: -80px -80px; } -.ui-icon-transfer-e-w { background-position: -96px -80px; } -.ui-icon-transferthick-e-w { background-position: -112px -80px; } -.ui-icon-folder-collapsed { background-position: 0 -96px; } -.ui-icon-folder-open { background-position: -16px -96px; } -.ui-icon-document { background-position: -32px -96px; } -.ui-icon-document-b { background-position: -48px -96px; } -.ui-icon-note { background-position: -64px -96px; } -.ui-icon-mail-closed { background-position: -80px -96px; } -.ui-icon-mail-open { background-position: -96px -96px; } -.ui-icon-suitcase { background-position: -112px -96px; } -.ui-icon-comment { background-position: -128px -96px; } -.ui-icon-person { background-position: -144px -96px; } -.ui-icon-print { background-position: -160px -96px; } -.ui-icon-trash { background-position: -176px -96px; } -.ui-icon-locked { background-position: -192px -96px; } -.ui-icon-unlocked { background-position: -208px -96px; } -.ui-icon-bookmark { background-position: -224px -96px; } -.ui-icon-tag { background-position: -240px -96px; } -.ui-icon-home { background-position: 0 -112px; } -.ui-icon-flag { background-position: -16px -112px; } -.ui-icon-calendar { background-position: -32px -112px; } -.ui-icon-cart { background-position: -48px -112px; } -.ui-icon-pencil { background-position: -64px -112px; } -.ui-icon-clock { background-position: -80px -112px; } -.ui-icon-disk { background-position: -96px -112px; } -.ui-icon-calculator { background-position: -112px -112px; } -.ui-icon-zoomin { background-position: -128px -112px; } -.ui-icon-zoomout { background-position: -144px -112px; } -.ui-icon-search { background-position: -160px -112px; } -.ui-icon-wrench { background-position: -176px -112px; } -.ui-icon-gear { background-position: -192px -112px; } -.ui-icon-heart { background-position: -208px -112px; } -.ui-icon-star { background-position: -224px -112px; } -.ui-icon-link { background-position: -240px -112px; } -.ui-icon-cancel { background-position: 0 -128px; } -.ui-icon-plus { background-position: -16px -128px; } -.ui-icon-plusthick { background-position: -32px -128px; } -.ui-icon-minus { background-position: -48px -128px; } -.ui-icon-minusthick { background-position: -64px -128px; } -.ui-icon-close { background-position: -80px -128px; } -.ui-icon-closethick { background-position: -96px -128px; } -.ui-icon-key { background-position: -112px -128px; } -.ui-icon-lightbulb { background-position: -128px -128px; } -.ui-icon-scissors { background-position: -144px -128px; } -.ui-icon-clipboard { background-position: -160px -128px; } -.ui-icon-copy { background-position: -176px -128px; } -.ui-icon-contact { background-position: -192px -128px; } -.ui-icon-image { background-position: -208px -128px; } -.ui-icon-video { background-position: -224px -128px; } -.ui-icon-script { background-position: -240px -128px; } -.ui-icon-alert { background-position: 0 -144px; } -.ui-icon-info { background-position: -16px -144px; } -.ui-icon-notice { background-position: -32px -144px; } -.ui-icon-help { background-position: -48px -144px; } -.ui-icon-check { background-position: -64px -144px; } -.ui-icon-bullet { background-position: -80px -144px; } -.ui-icon-radio-off { background-position: -96px -144px; } -.ui-icon-radio-on { background-position: -112px -144px; } -.ui-icon-pin-w { background-position: -128px -144px; } -.ui-icon-pin-s { background-position: -144px -144px; } -.ui-icon-play { background-position: 0 -160px; } -.ui-icon-pause { background-position: -16px -160px; } -.ui-icon-seek-next { background-position: -32px -160px; } -.ui-icon-seek-prev { background-position: -48px -160px; } -.ui-icon-seek-end { background-position: -64px -160px; } -.ui-icon-seek-start { background-position: -80px -160px; } -/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ -.ui-icon-seek-first { background-position: -80px -160px; } -.ui-icon-stop { background-position: -96px -160px; } -.ui-icon-eject { background-position: -112px -160px; } -.ui-icon-volume-off { background-position: -128px -160px; } -.ui-icon-volume-on { background-position: -144px -160px; } -.ui-icon-power { background-position: 0 -176px; } -.ui-icon-signal-diag { background-position: -16px -176px; } -.ui-icon-signal { background-position: -32px -176px; } -.ui-icon-battery-0 { background-position: -48px -176px; } -.ui-icon-battery-1 { background-position: -64px -176px; } -.ui-icon-battery-2 { background-position: -80px -176px; } -.ui-icon-battery-3 { background-position: -96px -176px; } -.ui-icon-circle-plus { background-position: 0 -192px; } -.ui-icon-circle-minus { background-position: -16px -192px; } -.ui-icon-circle-close { background-position: -32px -192px; } -.ui-icon-circle-triangle-e { background-position: -48px -192px; } -.ui-icon-circle-triangle-s { background-position: -64px -192px; } -.ui-icon-circle-triangle-w { background-position: -80px -192px; } -.ui-icon-circle-triangle-n { background-position: -96px -192px; } -.ui-icon-circle-arrow-e { background-position: -112px -192px; } -.ui-icon-circle-arrow-s { background-position: -128px -192px; } -.ui-icon-circle-arrow-w { background-position: -144px -192px; } -.ui-icon-circle-arrow-n { background-position: -160px -192px; } -.ui-icon-circle-zoomin { background-position: -176px -192px; } -.ui-icon-circle-zoomout { background-position: -192px -192px; } -.ui-icon-circle-check { background-position: -208px -192px; } -.ui-icon-circlesmall-plus { background-position: 0 -208px; } -.ui-icon-circlesmall-minus { background-position: -16px -208px; } -.ui-icon-circlesmall-close { background-position: -32px -208px; } -.ui-icon-squaresmall-plus { background-position: -48px -208px; } -.ui-icon-squaresmall-minus { background-position: -64px -208px; } -.ui-icon-squaresmall-close { background-position: -80px -208px; } -.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } -.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } -.ui-icon-grip-solid-vertical { background-position: -32px -224px; } -.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } -.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } -.ui-icon-grip-diagonal-se { background-position: -80px -224px; } - - -/* Misc visuals -----------------------------------*/ - -/* Corner radius */ -.ui-corner-tl { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; } -.ui-corner-tr { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; } -.ui-corner-bl { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; } -.ui-corner-br { -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } -.ui-corner-top { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; } -.ui-corner-bottom { -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } -.ui-corner-right { -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 3px; border-top-right-radius: 3px; -moz-border-radius-bottomright: 3px; -webkit-border-bottom-right-radius: 3px; border-bottom-right-radius: 3px; } -.ui-corner-left { -moz-border-radius-topleft: 3px; -webkit-border-top-left-radius: 3px; border-top-left-radius: 3px; -moz-border-radius-bottomleft: 3px; -webkit-border-bottom-left-radius: 3px; border-bottom-left-radius: 3px; } -.ui-corner-all { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; } - -/* Overlays */ -.ui-widget-overlay { background: #e6b900 url(images/ui-bg_flat_0_e6b900_40x100.png) 50% 50% repeat-x; opacity: .30;filter:Alpha(Opacity=30); } -.ui-widget-shadow { margin: 6px 0 0 6px; padding: 0px; background: #e69700 url(images/ui-bg_flat_0_e69700_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; }/* - * jQuery UI Dialog @VERSION - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Dialog#theming - */ -.ui-dialog { position: absolute; padding: .2em; width: 300px; overflow: hidden; } -.ui-dialog .ui-dialog-titlebar { padding: .5em 1em .3em; position: relative; } -.ui-dialog .ui-dialog-title { float: left; margin: .1em 16px .2em 0; } -.ui-dialog .ui-dialog-titlebar-close { position: absolute; right: .3em; top: 50%; width: 19px; margin: -10px 0 0 0; padding: 1px; height: 18px; } -.ui-dialog .ui-dialog-titlebar-close span { display: block; margin: 1px; } -.ui-dialog .ui-dialog-titlebar-close:hover, .ui-dialog .ui-dialog-titlebar-close:focus { padding: 0; } -.ui-dialog .ui-dialog-content { position: relative; border: 0; padding: .5em 1em; background: none; overflow: auto; zoom: 1; } -.ui-dialog .ui-dialog-buttonpane { text-align: left; border-width: 1px 0 0 0; background-image: none; margin: .5em 0 0 0; padding: .3em 1em .5em .4em; } -.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset { float: right; } -.ui-dialog .ui-dialog-buttonpane button { margin: .5em .4em .5em 0; cursor: pointer; } -.ui-dialog .ui-resizable-se { width: 14px; height: 14px; right: 3px; bottom: 3px; } -.ui-draggable .ui-dialog-titlebar { cursor: move; } diff --git a/h-source/admin/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js b/h-source/admin/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js deleted file mode 100755 index 7469ef3..0000000 --- a/h-source/admin/Public/Js/jquery/dialog/js/jquery-ui-1.8.4.custom.min.js +++ /dev/null @@ -1,87 +0,0 @@ -/*! - * jQuery UI 1.8.4 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI - */ -(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.4",plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a=0)&&c(a).is(":focusable")}})}})(jQuery); -;/*! - * jQuery UI Widget 1.8.4 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Widget - */ -(function(b,j){var k=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return k.call(b(this),a,c)})};b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options); -b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.substring(0,1)==="_")return h;e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}): -this.each(function(){var g=b.data(this,a);if(g){d&&g.option(d);g._init()}else b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,b.metadata&&b.metadata.get(c)[this.widgetName],a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}); -this._create();this._init()},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},widget:function(){return this.element},option:function(a,c){var d=a,e=this;if(arguments.length===0)return b.extend({},e.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}b.each(d,function(f, -h){e._setOption(f,h)});return e},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a= -b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery); -;/* - * jQuery UI Position 1.8.4 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Position - */ -(function(c){c.ui=c.ui||{};var m=/left|center|right/,n=/top|center|bottom/,p=c.fn.position,q=c.fn.offset;c.fn.position=function(a){if(!a||!a.of)return p.apply(this,arguments);a=c.extend({},a);var b=c(a.of),d=(a.collision||"flip").split(" "),e=a.offset?a.offset.split(" "):[0,0],g,h,i;if(a.of.nodeType===9){g=b.width();h=b.height();i={top:0,left:0}}else if(a.of.scrollTo&&a.of.document){g=b.width();h=b.height();i={top:b.scrollTop(),left:b.scrollLeft()}}else if(a.of.preventDefault){a.at="left top";g=h= -0;i={top:a.of.pageY,left:a.of.pageX}}else{g=b.outerWidth();h=b.outerHeight();i=b.offset()}c.each(["my","at"],function(){var f=(a[this]||"").split(" ");if(f.length===1)f=m.test(f[0])?f.concat(["center"]):n.test(f[0])?["center"].concat(f):["center","center"];f[0]=m.test(f[0])?f[0]:"center";f[1]=n.test(f[1])?f[1]:"center";a[this]=f});if(d.length===1)d[1]=d[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(a.at[0]==="right")i.left+=g;else if(a.at[0]==="center")i.left+= -g/2;if(a.at[1]==="bottom")i.top+=h;else if(a.at[1]==="center")i.top+=h/2;i.left+=e[0];i.top+=e[1];return this.each(function(){var f=c(this),k=f.outerWidth(),l=f.outerHeight(),j=c.extend({},i);if(a.my[0]==="right")j.left-=k;else if(a.my[0]==="center")j.left-=k/2;if(a.my[1]==="bottom")j.top-=l;else if(a.my[1]==="center")j.top-=l/2;j.left=parseInt(j.left);j.top=parseInt(j.top);c.each(["left","top"],function(o,r){c.ui.position[d[o]]&&c.ui.position[d[o]][r](j,{targetWidth:g,targetHeight:h,elemWidth:k, -elemHeight:l,offset:e,my:a.my,at:a.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(j,{using:a.using}))})};c.ui.position={fit:{left:function(a,b){var d=c(window);b=a.left+b.elemWidth-d.width()-d.scrollLeft();a.left=b>0?a.left-b:Math.max(0,a.left)},top:function(a,b){var d=c(window);b=a.top+b.elemHeight-d.height()-d.scrollTop();a.top=b>0?a.top-b:Math.max(0,a.top)}},flip:{left:function(a,b){if(b.at[0]!=="center"){var d=c(window);d=a.left+b.elemWidth-d.width()-d.scrollLeft();var e=b.my[0]==="left"? --b.elemWidth:b.my[0]==="right"?b.elemWidth:0,g=-2*b.offset[0];a.left+=a.left<0?e+b.targetWidth+g:d>0?e-b.targetWidth+g:0}},top:function(a,b){if(b.at[1]!=="center"){var d=c(window);d=a.top+b.elemHeight-d.height()-d.scrollTop();var e=b.my[1]==="top"?-b.elemHeight:b.my[1]==="bottom"?b.elemHeight:0,g=b.at[1]==="top"?b.targetHeight:-b.targetHeight,h=-2*b.offset[1];a.top+=a.top<0?e+b.targetHeight+h:d>0?e+g+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(a,b){if(/static/.test(c.curCSS(a,"position")))a.style.position= -"relative";var d=c(a),e=d.offset(),g=parseInt(c.curCSS(a,"top",true),10)||0,h=parseInt(c.curCSS(a,"left",true),10)||0;e={top:b.top-e.top+g,left:b.left-e.left+h};"using"in b?b.using.call(a,e):d.css(e)};c.fn.offset=function(a){var b=this[0];if(!b||!b.ownerDocument)return null;if(a)return this.each(function(){c.offset.setOffset(this,a)});return q.call(this)}}})(jQuery); -;/* - * jQuery UI Dialog 1.8.4 - * - * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) - * Dual licensed under the MIT or GPL Version 2 licenses. - * http://jquery.org/license - * - * http://docs.jquery.com/UI/Dialog - * - * Depends: - * jquery.ui.core.js - * jquery.ui.widget.js - * jquery.ui.button.js - * jquery.ui.draggable.js - * jquery.ui.mouse.js - * jquery.ui.position.js - * jquery.ui.resizable.js - */ -(function(c,j){c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",of:window,collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title"); -if(typeof this.originalTitle!=="string")this.originalTitle="";var a=this,b=a.options,d=b.title||a.originalTitle||" ",f=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("
              ")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":f}).mousedown(function(i){a.moveToTop(false, -i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var e=(a.uiDialogTitlebar=c("
              ")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i); -return false}).appendTo(e);(a.uiDialogTitlebarCloseText=c("")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("").addClass("ui-dialog-title").attr("id",f).html(d).prependTo(e);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=b.beforeclose;e.find("*").add(e).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&& -g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&&a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog"); -b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,f=d.options;if(f.modal&&!a||!f.stack&&!f.modal)return d._trigger("focus",b);if(f.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ= -f.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;d.next().length&&d.appendTo("body");a._size();a._position(b.position);d.show(b.show); -a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(f){if(f.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),e=g.filter(":first");g=g.filter(":last");if(f.target===g[0]&&!f.shiftKey){e.focus(1);return false}else if(f.target===e[0]&&f.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._trigger("open");a._isOpen=true;return a}},_createButtons:function(a){var b=this,d=false, -f=c("
              ").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("
              ").addClass("ui-dialog-buttonset").appendTo(f);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(e,h){e=c('').text(e).click(function(){h.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&e.button()});f.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(e){return{position:e.position, -offset:e.offset}}var b=this,d=b.options,f=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(e,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",e,a(h))},drag:function(e,h){b._trigger("drag",e,a(h))},stop:function(e,h){d.position=[h.position.left-f.scrollLeft(),h.position.top-f.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g); -b._trigger("dragStop",e,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(e){return{originalPosition:e.originalPosition,originalSize:e.originalSize,position:e.position,size:e.size}}a=a===j?this.options.resizable:a;var d=this,f=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:d._minHeight(), -handles:a,start:function(e,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",e,b(h))},resize:function(e,h){d._trigger("resize",e,b(h))},stop:function(e,h){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();d._trigger("resizeStop",e,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight, -a.height)},_position:function(a){var b=[],d=[0,0],f;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,e){if(+b[g]===b[g]){d[g]=b[g];b[g]=e}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(f=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a); -f||this.uiDialog.hide()},_setOption:function(a,b){var d=this,f=d.uiDialog,g=f.is(":data(resizable)"),e=false;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);e=true;break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":f.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?f.addClass("ui-dialog-disabled"):f.removeClass("ui-dialog-disabled");break;case "draggable":b? -d._makeDraggable():f.draggable("destroy");break;case "height":e=true;break;case "maxHeight":g&&f.resizable("option","maxHeight",b);e=true;break;case "maxWidth":g&&f.resizable("option","maxWidth",b);e=true;break;case "minHeight":g&&f.resizable("option","minHeight",b);e=true;break;case "minWidth":g&&f.resizable("option","minWidth",b);e=true;break;case "position":d._position(b);break;case "resizable":g&&!b&&f.resizable("destroy");g&&typeof b==="string"&&f.resizable("option","handles",b);!g&&b!==false&& -d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||" "));break;case "width":e=true;break}c.Widget.prototype._setOption.apply(d,arguments);e&&d._size()},_size:function(){var a=this.options,b;this.element.css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();this.element.css(a.height==="auto"?{minHeight:Math.max(a.minHeight-b,0),height:"auto"}:{minHeight:0,height:Math.max(a.height- -b,0)}).show();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.4",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "), -create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){return c(d.target).zIndex()>=c.ui.dialog.overlay.maxZ})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("
              ").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(), -height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight); -b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/, -Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&& -(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this, -a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b=== -"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this, -function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b
              a"; -var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected, -parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent= -false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n= -s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true, -applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando]; -else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this, -a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b=== -w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i, -cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected= -c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed"); -a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g, -function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split("."); -k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a), -C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B=0){a.type= -e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&& -f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive; -if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data", -e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a, -"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a, -d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g, -e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift(); -t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D|| -g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()}, -CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m, -g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)}, -text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}}, -setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return hl[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h= -h[3];l=0;for(m=h.length;l=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m=== -"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g, -h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&& -q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML=""; -if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="

              ";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}(); -(function(){var g=s.createElement("div");g.innerHTML="
              ";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}: -function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f0)for(var j=d;j0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j= -{},i;if(f&&a.length){e=0;for(var o=a.length;e-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a=== -"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode", -d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")? -a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType=== -1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/"},F={option:[1,""],legend:[1,"
              ","
              "],thead:[1,"","
              "],tr:[2,"","
              "],td:[3,"","
              "],col:[2,"","
              "],area:[1,"",""],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div
              ","
              "];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d= -c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this}, -wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})}, -prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b, -this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild); -return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja, -""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]); -return this}else{e=0;for(var j=d.length;e0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["", -""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]===""&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e= -c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]? -c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja= -function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter= -Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a, -"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f= -a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b= -a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=//gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!== -"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("
              ").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this}, -serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), -function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href, -global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&& -e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)? -"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache=== -false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B= -false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since", -c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E|| -d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x); -g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status=== -1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b=== -"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional; -if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration=== -"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]|| -c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start; -this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now= -this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem, -e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b
              "; -a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b); -c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a, -d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top- -f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset": -"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in -e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window); diff --git a/h-source/admin/Public/Js/markitup/jquery.markitup.js b/h-source/admin/Public/Js/markitup/jquery.markitup.js deleted file mode 100644 index ee8f40f..0000000 --- a/h-source/admin/Public/Js/markitup/jquery.markitup.js +++ /dev/null @@ -1,559 +0,0 @@ -// ---------------------------------------------------------------------------- -// markItUp! Universal MarkUp Engine, JQuery plugin -// v 1.1.7 -// Dual licensed under the MIT and GPL licenses. -// ---------------------------------------------------------------------------- -// Copyright (C) 2007-2010 Jay Salvat -// http://markitup.jaysalvat.com/ -// ---------------------------------------------------------------------------- -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and associated documentation files (the "Software"), to deal -// in the Software without restriction, including without limitation the rights -// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -// copies of the Software, and to permit persons to whom the Software is -// furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Software. -// -// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -// THE SOFTWARE. -// ---------------------------------------------------------------------------- -(function($) { - $.fn.markItUp = function(settings, extraSettings) { - var options, ctrlKey, shiftKey, altKey; - ctrlKey = shiftKey = altKey = false; - - options = { id: '', - nameSpace: '', - root: '', - previewInWindow: '', // 'width=800, height=600, resizable=yes, scrollbars=yes' - previewAutoRefresh: true, - previewPosition: 'after', - previewTemplatePath: '~/templates/preview.html', - previewParserPath: '', - previewParserVar: 'data', - resizeHandle: true, - beforeInsert: '', - afterInsert: '', - onEnter: {}, - onShiftEnter: {}, - onCtrlEnter: {}, - onTab: {}, - markupSet: [ { /* set */ } ] - }; - $.extend(options, settings, extraSettings); - - // compute markItUp! path - if (!options.root) { - $('script').each(function(a, tag) { - miuScript = $(tag).get(0).src.match(/(.*)jquery\.markitup(\.pack)?\.js$/); - if (miuScript !== null) { - options.root = miuScript[1]; - } - }); - } - - return this.each(function() { - var $$, textarea, levels, scrollPosition, caretPosition, caretOffset, - clicked, hash, header, footer, previewWindow, template, iFrame, abort; - $$ = $(this); - textarea = this; - levels = []; - abort = false; - scrollPosition = caretPosition = 0; - caretOffset = -1; - - options.previewParserPath = localize(options.previewParserPath); - options.previewTemplatePath = localize(options.previewTemplatePath); - - // apply the computed path to ~/ - function localize(data, inText) { - if (inText) { - return data.replace(/("|')~\//g, "$1"+options.root); - } - return data.replace(/^~\//, options.root); - } - - // init and build editor - function init() { - id = ''; nameSpace = ''; - if (options.id) { - id = 'id="'+options.id+'"'; - } else if ($$.attr("id")) { - id = 'id="markItUp'+($$.attr("id").substr(0, 1).toUpperCase())+($$.attr("id").substr(1))+'"'; - - } - if (options.nameSpace) { - nameSpace = 'class="'+options.nameSpace+'"'; - } - $$.wrap('
              '); - $$.wrap('
              '); - $$.wrap('
              '); - $$.addClass("markItUpEditor"); - - // add the header before the textarea - header = $('
              ').insertBefore($$); - $(dropMenus(options.markupSet)).appendTo(header); - - // add the footer after the textarea - footer = $('
              ').insertAfter($$); - - // add the resize handle after textarea - if (options.resizeHandle === true && $.browser.safari !== true) { - resizeHandle = $('
              ') - .insertAfter($$) - .bind("mousedown", function(e) { - var h = $$.height(), y = e.clientY, mouseMove, mouseUp; - mouseMove = function(e) { - $$.css("height", Math.max(20, e.clientY+h-y)+"px"); - return false; - }; - mouseUp = function(e) { - $("html").unbind("mousemove", mouseMove).unbind("mouseup", mouseUp); - return false; - }; - $("html").bind("mousemove", mouseMove).bind("mouseup", mouseUp); - }); - footer.append(resizeHandle); - } - - // listen key events - $$.keydown(keyPressed).keyup(keyPressed); - - // bind an event to catch external calls - $$.bind("insertion", function(e, settings) { - if (settings.target !== false) { - get(); - } - if (textarea === $.markItUp.focused) { - markup(settings); - } - }); - - // remember the last focus - $$.focus(function() { - $.markItUp.focused = this; - }); - } - - // recursively build header with dropMenus from markupset - function dropMenus(markupSet) { - var ul = $('
                '), i = 0; - $('li:hover > ul', ul).css('display', 'block'); - $.each(markupSet, function() { - var button = this, t = '', title, li, j; - title = (button.key) ? (button.name||'')+' [Ctrl+'+button.key+']' : (button.name||''); - key = (button.key) ? 'accesskey="'+button.key+'"' : ''; - if (button.separator) { - li = $('
              • '+(button.separator||'')+'
              • ').appendTo(ul); - } else { - i++; - for (j = levels.length -1; j >= 0; j--) { - t += levels[j]+"-"; - } - li = $('
              • '+(button.name||'')+'
              • ') - .bind("contextmenu", function() { // prevent contextmenu on mac and allow ctrl+click - return false; - }).click(function() { - return false; - }).mousedown(function() { - if (button.call) { - eval(button.call)(); - } - setTimeout(function() { markup(button) },1); - return false; - }).hover(function() { - $('> ul', this).show(); - $(document).one('click', function() { // close dropmenu if click outside - $('ul ul', header).hide(); - } - ); - }, function() { - $('> ul', this).hide(); - } - ).appendTo(ul); - if (button.dropMenu) { - levels.push(i); - $(li).addClass('markItUpDropMenu').append(dropMenus(button.dropMenu)); - } - } - }); - levels.pop(); - return ul; - } - - // markItUp! markups - function magicMarkups(string) { - if (string) { - string = string.toString(); - string = string.replace(/\(\!\(([\s\S]*?)\)\!\)/g, - function(x, a) { - var b = a.split('|!|'); - if (altKey === true) { - return (b[1] !== undefined) ? b[1] : b[0]; - } else { - return (b[1] === undefined) ? "" : b[0]; - } - } - ); - // [![prompt]!], [![prompt:!:value]!] - string = string.replace(/\[\!\[([\s\S]*?)\]\!\]/g, - function(x, a) { - var b = a.split(':!:'); - if (abort === true) { - return false; - } - value = prompt(b[0], (b[1]) ? b[1] : ''); - if (value === null) { - abort = true; - } - return value; - } - ); - return string; - } - return ""; - } - - // prepare action - function prepare(action) { - if ($.isFunction(action)) { - action = action(hash); - } - return magicMarkups(action); - } - - // build block to insert - function build(string) { - openWith = prepare(clicked.openWith); - placeHolder = prepare(clicked.placeHolder); - replaceWith = prepare(clicked.replaceWith); - closeWith = prepare(clicked.closeWith); - if (replaceWith !== "") { - block = openWith + replaceWith + closeWith; - } else if (selection === '' && placeHolder !== '') { - block = openWith + placeHolder + closeWith; - } else { - block = openWith + (string||selection) + closeWith; - } - return { block:block, - openWith:openWith, - replaceWith:replaceWith, - placeHolder:placeHolder, - closeWith:closeWith - }; - } - - // define markup to insert - function markup(button) { - var len, j, n, i; - hash = clicked = button; - get(); - - $.extend(hash, { line:"", - root:options.root, - textarea:textarea, - selection:(selection||''), - caretPosition:caretPosition, - ctrlKey:ctrlKey, - shiftKey:shiftKey, - altKey:altKey - } - ); - // callbacks before insertion - prepare(options.beforeInsert); - prepare(clicked.beforeInsert); - if (ctrlKey === true && shiftKey === true) { - prepare(clicked.beforeMultiInsert); - } - $.extend(hash, { line:1 }); - - if (ctrlKey === true && shiftKey === true) { - lines = selection.split(/\r?\n/); - for (j = 0, n = lines.length, i = 0; i < n; i++) { - if ($.trim(lines[i]) !== '') { - $.extend(hash, { line:++j, selection:lines[i] } ); - lines[i] = build(lines[i]).block; - } else { - lines[i] = ""; - } - } - string = { block:lines.join('\n')}; - start = caretPosition; - len = string.block.length + (($.browser.opera) ? n : 0); - } else if (ctrlKey === true) { - string = build(selection); - start = caretPosition + string.openWith.length; - len = string.block.length - string.openWith.length - string.closeWith.length; - len -= fixIeBug(string.block); - } else if (shiftKey === true) { - string = build(selection); - start = caretPosition; - len = string.block.length; - len -= fixIeBug(string.block); - } else { - string = build(selection); - start = caretPosition + string.block.length ; - len = 0; - start -= fixIeBug(string.block); - } - if ((selection === '' && string.replaceWith === '')) { - caretOffset += fixOperaBug(string.block); - - start = caretPosition + string.openWith.length; - len = string.block.length - string.openWith.length - string.closeWith.length; - - caretOffset = $$.val().substring(caretPosition, $$.val().length).length; - caretOffset -= fixOperaBug($$.val().substring(0, caretPosition)); - } - $.extend(hash, { caretPosition:caretPosition, scrollPosition:scrollPosition } ); - - if (string.block !== selection && abort === false) { - insert(string.block); - set(start, len); - } else { - caretOffset = -1; - } - get(); - - $.extend(hash, { line:'', selection:selection }); - - // callbacks after insertion - if (ctrlKey === true && shiftKey === true) { - prepare(clicked.afterMultiInsert); - } - prepare(clicked.afterInsert); - prepare(options.afterInsert); - - // refresh preview if opened - if (previewWindow && options.previewAutoRefresh) { - refreshPreview(); - } - - // reinit keyevent - shiftKey = altKey = ctrlKey = abort = false; - } - - // Substract linefeed in Opera - function fixOperaBug(string) { - if ($.browser.opera) { - return string.length - string.replace(/\n*/g, '').length; - } - return 0; - } - // Substract linefeed in IE - function fixIeBug(string) { - if ($.browser.msie) { - return string.length - string.replace(/\r*/g, '').length; - } - return 0; - } - - // add markup - function insert(block) { - if (document.selection) { - var newSelection = document.selection.createRange(); - newSelection.text = block; - } else { - $$.val($$.val().substring(0, caretPosition) + block + $$.val().substring(caretPosition + selection.length, $$.val().length)); - } - } - - // set a selection - function set(start, len) { - if (textarea.createTextRange){ - // quick fix to make it work on Opera 9.5 - if ($.browser.opera && $.browser.version >= 9.5 && len == 0) { - return false; - } - range = textarea.createTextRange(); - range.collapse(true); - range.moveStart('character', start); - range.moveEnd('character', len); - range.select(); - } else if (textarea.setSelectionRange ){ - textarea.setSelectionRange(start, start + len); - } - textarea.scrollTop = scrollPosition; - textarea.focus(); - } - - // get the selection - function get() { - textarea.focus(); - - scrollPosition = textarea.scrollTop; - if (document.selection) { - selection = document.selection.createRange().text; - if ($.browser.msie) { // ie - var range = document.selection.createRange(), rangeCopy = range.duplicate(); - rangeCopy.moveToElementText(textarea); - caretPosition = -1; - while(rangeCopy.inRange(range)) { // fix most of the ie bugs with linefeeds... - rangeCopy.moveStart('character'); - caretPosition ++; - } - } else { // opera - caretPosition = textarea.selectionStart; - } - } else { // gecko & webkit - caretPosition = textarea.selectionStart; - selection = $$.val().substring(caretPosition, textarea.selectionEnd); - } - return selection; - } - - // open preview window - function preview() { - if (!previewWindow || previewWindow.closed) { - if (options.previewInWindow) { - previewWindow = window.open('', 'preview', options.previewInWindow); - } else { - iFrame = $(''); - if (options.previewPosition == 'after') { - iFrame.insertAfter(footer); - } else { - iFrame.insertBefore(header); - } - previewWindow = iFrame[iFrame.length - 1].contentWindow || frame[iFrame.length - 1]; - } - } else if (altKey === true) { - // Thx Stephen M. Redd for the IE8 fix - if (iFrame) { - iFrame.remove(); - } else { - previewWindow.close(); - } - previewWindow = iFrame = false; - } - if (!options.previewAutoRefresh) { - refreshPreview(); - } - } - - // refresh Preview window - function refreshPreview() { - renderPreview(); - } - - function renderPreview() { - var phtml; - if (options.previewParserPath !== '') { - $.ajax( { - type: 'POST', - url: options.previewParserPath, - data: options.previewParserVar+'='+encodeURIComponent($$.val()), - success: function(data) { - writeInPreview( localize(data, 1) ); - } - } ); - } else { - if (!template) { - $.ajax( { - url: options.previewTemplatePath, - success: function(data) { - writeInPreview( localize(data, 1).replace(//g, $$.val()) ); - } - } ); - } - } - return false; - } - - function writeInPreview(data) { - if (previewWindow.document) { - try { - sp = previewWindow.document.documentElement.scrollTop - } catch(e) { - sp = 0; - } - previewWindow.document.open(); - previewWindow.document.write(data); - previewWindow.document.close(); - previewWindow.document.documentElement.scrollTop = sp; - } - if (options.previewInWindow) { - previewWindow.focus(); - } - } - - // set keys pressed - function keyPressed(e) { - shiftKey = e.shiftKey; - altKey = e.altKey; - ctrlKey = (!(e.altKey && e.ctrlKey)) ? e.ctrlKey : false; - - if (e.type === 'keydown') { - if (ctrlKey === true) { - li = $("a[accesskey="+String.fromCharCode(e.keyCode)+"]", header).parent('li'); - if (li.length !== 0) { - ctrlKey = false; - setTimeout(function() { - li.triggerHandler('mousedown'); - },1); - return false; - } - } - if (e.keyCode === 13 || e.keyCode === 10) { // Enter key - if (ctrlKey === true) { // Enter + Ctrl - ctrlKey = false; - markup(options.onCtrlEnter); - return options.onCtrlEnter.keepDefault; - } else if (shiftKey === true) { // Enter + Shift - shiftKey = false; - markup(options.onShiftEnter); - return options.onShiftEnter.keepDefault; - } else { // only Enter - markup(options.onEnter); - return options.onEnter.keepDefault; - } - } - if (e.keyCode === 9) { // Tab key - if (shiftKey == true || ctrlKey == true || altKey == true) { // Thx Dr Floob. - return false; - } - if (caretOffset !== -1) { - get(); - caretOffset = $$.val().length - caretOffset; - set(caretOffset, 0); - caretOffset = -1; - return false; - } else { - markup(options.onTab); - return options.onTab.keepDefault; - } - } - } - } - - init(); - }); - }; - - $.fn.markItUpRemove = function() { - return this.each(function() { - var $$ = $(this).unbind().removeClass('markItUpEditor'); - $$.parent('div').parent('div.markItUp').parent('div').replaceWith($$); - } - ); - }; - - $.markItUp = function(settings) { - var options = { target:false }; - $.extend(options, settings); - if (options.target) { - return $(options.target).each(function() { - $(this).focus(); - $(this).trigger('insertion', [options]); - }); - } else { - $('textarea').trigger('insertion', [options]); - } - }; -})(jQuery); diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/bold.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/bold.png deleted file mode 100644 index 889ae80..0000000 Binary files a/h-source/admin/Public/Js/markitup/sets/bbcode/images/bold.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/clean.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/clean.png deleted file mode 100644 index 7e7cefb..0000000 Binary files a/h-source/admin/Public/Js/markitup/sets/bbcode/images/clean.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/code.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/code.png deleted file mode 100644 index 63fe6ce..0000000 Binary files a/h-source/admin/Public/Js/markitup/sets/bbcode/images/code.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/fonts.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/fonts.png deleted file mode 100644 index b7960db..0000000 Binary files a/h-source/admin/Public/Js/markitup/sets/bbcode/images/fonts.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/h1.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/h1.png deleted file mode 100644 index 9c122e9..0000000 Binary files a/h-source/admin/Public/Js/markitup/sets/bbcode/images/h1.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/h2.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/h2.png deleted file mode 100644 index fbd8765..0000000 Binary files a/h-source/admin/Public/Js/markitup/sets/bbcode/images/h2.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/h3.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/h3.png deleted file mode 100644 index c7836cf..0000000 Binary files a/h-source/admin/Public/Js/markitup/sets/bbcode/images/h3.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/italic.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/italic.png deleted file mode 100644 index 8482ac8..0000000 Binary files a/h-source/admin/Public/Js/markitup/sets/bbcode/images/italic.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/link.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/link.png deleted file mode 100644 index 25eacb7..0000000 Binary files a/h-source/admin/Public/Js/markitup/sets/bbcode/images/link.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/list-bullet.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/list-bullet.png deleted file mode 100644 index 4a8672b..0000000 Binary files a/h-source/admin/Public/Js/markitup/sets/bbcode/images/list-bullet.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/list-item.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/list-item.png deleted file mode 100644 index 8cb4d69..0000000 Binary files a/h-source/admin/Public/Js/markitup/sets/bbcode/images/list-item.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/list-numeric.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/list-numeric.png deleted file mode 100644 index 33b0b8d..0000000 Binary files a/h-source/admin/Public/Js/markitup/sets/bbcode/images/list-numeric.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/paragraph.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/paragraph.png deleted file mode 100644 index 95704fb..0000000 Binary files a/h-source/admin/Public/Js/markitup/sets/bbcode/images/paragraph.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/picture.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/picture.png deleted file mode 100644 index 4a158fe..0000000 Binary files a/h-source/admin/Public/Js/markitup/sets/bbcode/images/picture.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/preview.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/preview.png deleted file mode 100644 index a9925a0..0000000 Binary files a/h-source/admin/Public/Js/markitup/sets/bbcode/images/preview.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/quotes.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/quotes.png deleted file mode 100644 index e54ebeb..0000000 Binary files a/h-source/admin/Public/Js/markitup/sets/bbcode/images/quotes.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/stroke.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/stroke.png deleted file mode 100644 index 612058a..0000000 Binary files a/h-source/admin/Public/Js/markitup/sets/bbcode/images/stroke.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/images/underline.png b/h-source/admin/Public/Js/markitup/sets/bbcode/images/underline.png deleted file mode 100644 index 90d0df2..0000000 Binary files a/h-source/admin/Public/Js/markitup/sets/bbcode/images/underline.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/readme.txt b/h-source/admin/Public/Js/markitup/sets/bbcode/readme.txt deleted file mode 100644 index 745d5dd..0000000 --- a/h-source/admin/Public/Js/markitup/sets/bbcode/readme.txt +++ /dev/null @@ -1,11 +0,0 @@ -Markup language: -BBCode - -Description: -A basic BBCode markup set with Bold, Italic, Underline, Picture, Link, Size, List, Quotes, Code, Clean button, Preview button. - -Install: -- Download the zip file -- Unzip it in your markItUp! sets folder -- Modify your JS link to point at this set.js -- Modify your CSS link to point at this style.css \ No newline at end of file diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/set.js b/h-source/admin/Public/Js/markitup/sets/bbcode/set.js deleted file mode 100644 index 3d16ea5..0000000 --- a/h-source/admin/Public/Js/markitup/sets/bbcode/set.js +++ /dev/null @@ -1,32 +0,0 @@ -// ---------------------------------------------------------------------------- -// markItUp! -// ---------------------------------------------------------------------------- -// Copyright (C) 2008 Jay Salvat -// http://markitup.jaysalvat.com/ -// ---------------------------------------------------------------------------- -// BBCode tags example -// http://en.wikipedia.org/wiki/Bbcode -// ---------------------------------------------------------------------------- -// Feel free to add more tags -// ---------------------------------------------------------------------------- -mySettings = { - previewParserPath: '', // path to your BBCode parser - markupSet: [ - {name:'Heading 1', key:'1', openWith:'[h1]', closeWith:'[/h1]' }, - {name:'Heading 2', key:'2', openWith:'[h2]', closeWith:'[/h2]' }, - {name:'Heading 3', key:'3', openWith:'[h3]', closeWith:'[/h3]' }, - {name:'Paragraph', openWith:'[p]', closeWith:'[/p]' }, - {separator:'---------------' }, - {name:'Bold', key:'B', openWith:'[b]', closeWith:'[/b]'}, - {name:'Italic', key:'I', openWith:'[i]', closeWith:'[/i]'}, - {name:'Underline', key:'U', openWith:'[u]', closeWith:'[/u]'}, - {name:'Stroke through', key:'S', openWith:'[del]', closeWith:'[/del]' }, - {separator:'---------------' }, - {name:'Bulleted list', openWith:'[list]\n', closeWith:'\n[/list]'}, - {name:'Numeric list', openWith:'[enum]\n', closeWith:'\n[/enum]'}, - {name:'List item', openWith:'[*] ', closeWith:'[/*]'}, - {separator:'---------------' }, - {name:'Code', openWith:'[code]', closeWith:'[/code]'}, - {name:'Link', key: 'L', openWith:'[a]', closeWith:'[/a]',placeHolder:'http://the_url | the_text'}, - ] -} \ No newline at end of file diff --git a/h-source/admin/Public/Js/markitup/sets/bbcode/style.css b/h-source/admin/Public/Js/markitup/sets/bbcode/style.css deleted file mode 100644 index 4ab6031..0000000 --- a/h-source/admin/Public/Js/markitup/sets/bbcode/style.css +++ /dev/null @@ -1,72 +0,0 @@ -/* ------------------------------------------------------------------- -// markItUp! -// By Jay Salvat - http://markitup.jaysalvat.com/ -// ------------------------------------------------------------------*/ -.markItUp .markItUpButton1 a { - background-image:url(images/h1.png); -} -.markItUp .markItUpButton2 a { - background-image:url(images/h2.png); -} -.markItUp .markItUpButton3 a { - background-image:url(images/h3.png); -} -.markItUp .markItUpButton4 a { - background-image:url(images/paragraph.png); -} -.markItUp .markItUpButton5 a { - background-image:url(images/bold.png); -} -.markItUp .markItUpButton6 a { - background-image:url(images/italic.png); -} -.markItUp .markItUpButton7 a { - background-image:url(images/underline.png); -} -.markItUp .markItUpButton8 a { - background-image:url(images/stroke.png); -} -.markItUp .markItUpButton9 a { - background-image:url(images/list-bullet.png); -} -.markItUp .markItUpButton10 a { - background-image:url(images/list-numeric.png); -} -.markItUp .markItUpButton11 a { - background-image:url(images/list-item.png); -} -.markItUp .markItUpButton12 a { - background-image:url(images/code.png); -} -.markItUp .markItUpButton13 a { - background-image:url(images/link.png); -} -/*.markItUp .markItUpButton4 a { - background-image:url(images/stroke.png); -}*/ - -/*.markItUp .markItUpButton4 a { - background-image:url(images/picture.png); -}*/ -/*.markItUp .markItUpButton5 a { - background-image:url(images/link.png); -} - -.markItUp .markItUpButton6 a { - background-image:url(images/fonts.png); -} - - -.markItUp .markItUpButton10 a { - background-image:url(images/quotes.png); -} -.markItUp .markItUpButton11 a { - background-image:url(images/code.png); -} - -.markItUp .clean a { - background-image:url(images/clean.png); -} -.markItUp .preview a { - background-image:url(images/preview.png); -}*/ \ No newline at end of file diff --git a/h-source/admin/Public/Js/markitup/skins/simple/images/handle.png b/h-source/admin/Public/Js/markitup/skins/simple/images/handle.png deleted file mode 100644 index 3993b20..0000000 Binary files a/h-source/admin/Public/Js/markitup/skins/simple/images/handle.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/skins/simple/images/menu.png b/h-source/admin/Public/Js/markitup/skins/simple/images/menu.png deleted file mode 100644 index 44a07af..0000000 Binary files a/h-source/admin/Public/Js/markitup/skins/simple/images/menu.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/skins/simple/images/submenu.png b/h-source/admin/Public/Js/markitup/skins/simple/images/submenu.png deleted file mode 100644 index 03d1977..0000000 Binary files a/h-source/admin/Public/Js/markitup/skins/simple/images/submenu.png and /dev/null differ diff --git a/h-source/admin/Public/Js/markitup/skins/simple/style.css b/h-source/admin/Public/Js/markitup/skins/simple/style.css deleted file mode 100644 index 4ff830f..0000000 --- a/h-source/admin/Public/Js/markitup/skins/simple/style.css +++ /dev/null @@ -1,118 +0,0 @@ -/* ------------------------------------------------------------------- -// markItUp! Universal MarkUp Engine, JQuery plugin -// By Jay Salvat - http://markitup.jaysalvat.com/ -// ------------------------------------------------------------------*/ -.markItUp * { - margin:0px; padding:0px; - outline:none; -} -.markItUp a:link, -.markItUp a:visited { - color:#000; - text-decoration:none; -} -.markItUp { - width:700px; - margin:5px 0 5px 0; -} -.markItUpContainer { - font:11px Verdana, Arial, Helvetica, sans-serif; -} -.markItUpEditor { - font:12px 'Courier New', Courier, monospace; - padding:5px; - width:640px; - height:300px; - clear:both; display:block; - line-height:18px; - overflow:auto; -} -.markItUpPreviewFrame { - overflow:auto; - background-color:#FFF; - width:99.9%; - height:300px; - margin:5px 0; -} -.markItUpFooter { - width:100%; -} -.markItUpResizeHandle { - overflow:hidden; - width:22px; height:5px; - margin-left:auto; - margin-right:auto; - background-image:url(images/handle.png); - cursor:n-resize; -} -/***************************************************************************************/ -/* first row of buttons */ -.markItUpHeader ul li { - list-style:none; - float:left; - position:relative; -} -.markItUpHeader ul li:hover > ul{ - display:block; -} -.markItUpHeader ul .markItUpDropMenu { - background:transparent url(images/menu.png) no-repeat 115% 50%; - margin-right:5px; -} -.markItUpHeader ul .markItUpDropMenu li { - margin-right:0px; -} -/* next rows of buttons */ -.markItUpHeader ul ul { - display:none; - position:absolute; - top:18px; left:0px; - background:#FFF; - border:1px solid #000; -} -.markItUpHeader ul ul li { - float:none; - border-bottom:1px solid #000; -} -.markItUpHeader ul ul .markItUpDropMenu { - background:#FFF url(images/submenu.png) no-repeat 100% 50%; -} -.markItUpHeader ul .markItUpSeparator { - margin:0 10px; - width:1px; - height:16px; - overflow:hidden; - background-color:#CCC; -} -.markItUpHeader ul ul .markItUpSeparator { - width:auto; height:1px; - margin:0px; -} -/* next rows of buttons */ -.markItUpHeader ul ul ul { - position:absolute; - top:-1px; left:150px; -} -.markItUpHeader ul ul ul li { - float:none; -} -.markItUpHeader ul a { - display:block; - width:16px; height:16px; - text-indent:-10000px; - background-repeat:no-repeat; - padding:3px; - margin:0px; -} -.markItUpHeader ul ul a { - display:block; - padding-left:0px; - text-indent:0; - width:120px; - padding:5px 5px 5px 25px; - background-position:2px 50%; -} -.markItUpHeader ul ul a:hover { - color:#FFF; - background-color:#000; -} diff --git a/h-source/admin/Public/Js/stats.js b/h-source/admin/Public/Js/stats.js deleted file mode 100644 index 7d6be08..0000000 --- a/h-source/admin/Public/Js/stats.js +++ /dev/null @@ -1,35 +0,0 @@ - -/*************************************************************************** - phpTrafficA @soft.ZoneO.net - Copyright (C) 2004-2008 ZoneO-soft, Butchu (email: "butchu" with the domain "zoneo.net") - - This program is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public License - as published by the Free Software Foundation; either version 2 - of the License, or (at your option) any later version. - - More Info About The Licence At http://www.gnu.org/copyleft/gpl.html -****************************************************************************/ - -function encode64(inp){ -var key="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; -var chr1,chr2,chr3,enc3,enc4,i=0,out=""; -while(i127) chr1=88; -chr2=inp.charCodeAt(i++);if(chr2>127) chr2=88; -chr3=inp.charCodeAt(i++);if(chr3>127) chr3=88; -if(isNaN(chr3)) {enc4=64;chr3=0;} else enc4=chr3&63; -if(isNaN(chr2)) {enc3=64;chr2=0;} else enc3=((chr2<<2)|(chr3>>6))&63; -out+=key.charAt((chr1>>2)&63)+key.charAt(((chr1<<4)|(chr2>>4))&63)+key.charAt(enc3)+key.charAt(enc4); -} -return encodeURIComponent(out); -} - -function stats(sid){ -var referer=encode64(document.referrer); -var thispage=encode64(window.location.pathname+location.search); -var date=new Date(); -var time=date.getTime(); -var resolution= screen.width + "x" + screen.height; -document.writeln("\"\"\n"); -} diff --git a/h-source/admin/Public/index.html b/h-source/admin/Public/index.html deleted file mode 100644 index 8d1c8b6..0000000 --- a/h-source/admin/Public/index.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/h-source/admin/README.txt b/h-source/admin/README.txt deleted file mode 100644 index 4ff6db4..0000000 --- a/h-source/admin/README.txt +++ /dev/null @@ -1,62 +0,0 @@ - -== Introduction == - -h-admin is a web software that has to be used together with h-source. It is formed by a set of files used to administrate the h-source tables - - -== Installation and configuration == - -In order to use h-source you have to install h-source (you can't use h-admin if you have not installed h-source before). In order to install h-source read the README.txt file inside the h-source package - -In order to use h-admin you have to usa the same database already created for h-source. You have only to add some (5) new tables. - -The new tables that have to be created are written inside the file tables.sql (of the h-admin package). - -After you have created the new tables as indicated inside the tables.sql file, open the Config/Config.php file - -You have to set the following constants: - - DB: name of the database (the database just created for h-source) - USER: database user - PWD: database password - HOST: name of the mysql server (usually localhost) - - DOMAIN_NAME: the domain name of the website (use localhost or create a virtual host in your web server) - -Now you have to copy the extracted h-admin files inside the DocumentRoot of your server. You can choose to leave all the files inside the DocumentRoot or not, see the explanations in this page (http://www.easygiant.org/learn/index/6). - -You have now to assure that the allowOverride directive is active in the configuration file of your Apache server. You have to activate the allowOverride directive for the folder inside which you have saved the h-admin files (and the index.php file). If you have not activated the allowOverride directive, then your URL won't be interpreted by the mod_rewrite module (you won't be able to use h-admin). In a GNU/Linux system the apache configuration file is usually saved at /etc/apache2/apache2.conf. - -Direct your browser to the following URL: - - http://DOMAIN_NAME/ - -where DOMAIN_NAME is the domain name you have previously set (perhaps localhost). You should see the login page of the h-admin software. - -user: admin -password: admin - - -== Learn the EasyGiant PHP framework == - -Since h-admin is an application of the EasyGiant PHP framework you can use the EasyGiant features in order to modify the h-admin source code. Visit www.easygiant.org - - -// h-admin, a web software to build a community of people that want to share their hardware information. -// Copyright (C) 2010 Antonio Gallo (h-admin-copyright.txt) -// -// This file is part of h-admin -// -// h-admin is free software: you can redistribute it and/or modify -// it under the terms of the GNU General Public License as published by -// the Free Software Foundation, either version 3 of the License, or -// (at your option) any later version. -// -// h-admin is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with h-admin. If not, see . - diff --git a/h-source/admin/h-admin-copyright.txt b/h-source/admin/h-admin-copyright.txt deleted file mode 100644 index 06d8fc1..0000000 --- a/h-source/admin/h-admin-copyright.txt +++ /dev/null @@ -1,16 +0,0 @@ -The h-admin software is a PHP software written thanks to the EasyGiant framework (see COPYRIGHT.txt) -Copyright (C) 2010 Antonio Gallo - -h-admin is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -h-admin is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with h-admin. If not, see . - diff --git a/h-source/admin/index.php b/h-source/admin/index.php deleted file mode 100755 index dc616db..0000000 --- a/h-source/admin/index.php +++ /dev/null @@ -1,16 +0,0 @@ -. - -create table adminusers ( - id_user INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, - username VARCHAR(80) binary NOT NULL, - password CHAR(40) binary NOT NULL, - last_failure INT UNSIGNED NOT NULL, - has_confirmed INT UNSIGNED NOT NULL, - unique(username), - index(username, password) -)engine=innodb; - -create table admingroups ( - id_group INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, - name VARCHAR(30) binary NOT NULL, - unique(name) -)engine=innodb; - -create table adminusers_groups ( - id_user int(11) UNSIGNED not null, - id_group int(11) UNSIGNED not null, - index group_indx(id_group), - index user_indx(id_user), - foreign key group_fky(id_group) references admingroups (id_group), - foreign key user_fky(id_user) references adminusers (id_user), - unique (id_group,id_user) -)engine=innodb; - - -insert into adminusers (username,password) values ('admin',sha1('admin')); - - -CREATE TABLE adminsessions ( - uid CHAR(32) NOT NULL, - token CHAR(32) NOT NULL, - id_user INT UNSIGNED NOT NULL, - creation_date INT UNSIGNED NOT NULL, - user_agent CHAR(32) NOT NULL, - INDEX(uid) -)engine=innodb; - - -create table accesses ( - id int(12) not null auto_increment primary key, - ip char(20) not null,data char(10) not null, - ora char(8) not null, - username varchar(30) not null -); diff --git a/h-source/config.xml b/h-source/config.xml deleted file mode 100644 index 8f87304..0000000 --- a/h-source/config.xml +++ /dev/null @@ -1,681 +0,0 @@ - - - - - - TopLink - Help - - - - - - TopLink - Aiuto - - - - - - TopLink - Ayuda - - - - - - TopLink - Télécharger - - - - - - TopLink - Βοήθεια - - - - - - - - TopLink - FAQ - - - - - - TopLink - FAQ - - - - - - TopLink - FAQ - - - - - - TopLink - FAQ - - - - - - TopLink - FAQ - - - - - - - - - raw - If you insert a new printer to h-node, please try to verify if the printer tracks users (see here) and fill the entry named "does it adopt any techniques to track users?" -
                - - ]]> - - - - - raw - Se inserite una nuova stampante nel database di h-node per favore provate a controllare se traccia gli utenti (leggete qui) e riempite il campo denominato "adotta qualche tecnica per tracciare gli utenti?" -
                - - ]]> - - - - - raw - Si inserta una nueva impresora a h-node, por favor verifique si la impresora rastrea a los usuarios (vea aquí) y llene la entrada "¿adopta alguna técnica para rastrear a los usuarios?" -
                - - ]]> - - - - - raw - Si vous ajoutez une nouvelle imprimante à h-node, veuillez essayer de vérifier si l'imprimante surveille les utilisateurs (voir ici) et remplir l'entrée intitulée "utilise-t-elle des techniques pour surveiller les utilisateurs ?" -
                - - ]]> - - - - - - - - raw -
                discover_hardware
                - - ]]> -
                -
                -
                - - - raw - Support freedom
                - ]]> - - - raw - supported by
                -
                - -
                - - ]]> - - - raw - subscribe to our -
                - -
                - - ]]>
                - -
                - - - raw - client for h-node -
                Please help in the development of the client for h-node (h-client project). See here and here -
                - - ]]>
                - -
                - - - raw - related projects -
                Please help in the development of the IsMyHWOK software, a different h-node client -
                - - ]]>
                - -
                - - - raw - download the source code -
                - -
                - - ]]>
                - -
                - - - raw - - useful links: - - - - - ]]> - - - - - - raw - Support freedom - ]]> - - - raw - supportato da -
                - -
                - - ]]>
                -
                - - raw - iscriviti alla nostra -
                - -
                - - ]]>
                - -
                - - - raw - client per h-node -
                Puoi aiutare nello sviluppo del client per h-node (progetto h-client). Leggi qui e qui -
                - - ]]>
                - -
                - - - raw - progetti correlati -
                Puoi aiutare nello sviluppo del software IsMyHWOK, un diverso client per h-node -
                - - ]]>
                - -
                - - - raw - scarica il codice sorgente -
                - -
                - - ]]>
                - -
                - - - raw - - link utili: - - - - - ]]> - - -
                - - - raw - Support freedom - ]]> - - - raw - con el apoyo de -
                - -
                - - ]]>
                -
                - - raw - suscríbase a nuestra -
                - -
                - - ]]>
                - -
                - - - raw - cliente para h-node -
                Por favor ayude en el desarrollo del cliente de h-node (proyecto h-client). Vea aquí y aquí -
                - - ]]>
                - -
                - - - raw - proyectos relacionados -
                Por favor ayuda en el desarrollo del programa IsMyHWOK, un cliente diferente para h-node -
                - - ]]>
                - -
                - - - raw - descargue el código fuente -
                - -
                - - ]]>
                - -
                - - - raw - - link utili: - - - - - ]]> - - -
                - - - -
                - - - - raw - guidelines on how to compile a hardware device page ]]> - - - - - raw - guida su come compilare una pagina di hardware ]]> - - - - - - - raw - learn how to find it ]]> - - - - - raw - scopri come individuarlo ]]> - - - - - raw - aprenda como encontrarlo ]]> - - - - - - - raw - discover all the wiki tags ]]> - - - - - raw - scopri tutti i tag della wiki ]]> - - - - - raw - mostrar todas las etiquetas del wiki ]]> - - - - - raw - voir tous les tags wiki ]]> - - - - - raw - Wiki-Elemente ]]> - - - - - raw - Wiki-Elemente ]]> - - - -
                -
                - - - - - - raw - Beware - this device tracks you down! -
                - See more about it -

                ]]> -
                -
                -
                - - - raw - Fai attenzione questo device utilizza delle tecniche per tracciare gli utenti! -
                - più informazioni -

                ]]> -
                -
                -
                -
                -
                -
                - - - - raw - how to understand if, and how, it tracks users ]]> - - - - - raw - come capire se e come tiene traccia degli utenti ]]> - - - -
                - -
                - - - - -
                - - - - raw - learn how to find it ]]> - - - - - raw - scopri come individuarlo ]]> - - - - - raw - aprenda como encontrarlo ]]> - - - -
                -
                - -
                - - - - raw - learn how to fill this entry ]]> - - - - - raw - guida su come scegliere questo campo ]]> - - - -
                -
                -
                - diff --git a/h-source/dafare.txt b/h-source/dafare.txt deleted file mode 100755 index 48e42d1..0000000 --- a/h-source/dafare.txt +++ /dev/null @@ -1,12 +0,0 @@ -da fare: - -mettere coppie controller,action ->non mettere generic,history - generic,revision - - - - -togliere link in wiki? - -mettere le coppie che sono accessibili controller,action - -controllo username (ctype_alnum) in users e adminusers diff --git a/h-source/h-node-schema-dump.sql b/h-source/h-node-schema-dump.sql deleted file mode 100644 index 400b3ba..0000000 --- a/h-source/h-node-schema-dump.sql +++ /dev/null @@ -1,614 +0,0 @@ --- MySQL dump 10.13 Distrib 5.5.62, for debian-linux-gnu (x86_64) --- --- Host: localhost Database: h_node_website --- ------------------------------------------------------ --- Server version 5.5.62-0ubuntu0.14.04.1 - -/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; -/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; -/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; -/*!40101 SET NAMES utf8 */; -/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; -/*!40103 SET TIME_ZONE='+00:00' */; -/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; -/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; -/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; -/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; - --- --- Table structure for table `accesses` --- - -DROP TABLE IF EXISTS `accesses`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `accesses` ( - `id` int(12) NOT NULL AUTO_INCREMENT, - `ip` char(20) NOT NULL, - `data` char(10) NOT NULL, - `ora` char(8) NOT NULL, - `username` varchar(30) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM AUTO_INCREMENT=693 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `admingroups` --- - -DROP TABLE IF EXISTS `admingroups`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `admingroups` ( - `id_group` int(10) unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`id_group`), - UNIQUE KEY `name` (`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `adminsessions` --- - -DROP TABLE IF EXISTS `adminsessions`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `adminsessions` ( - `uid` char(32) NOT NULL, - `token` char(32) NOT NULL, - `id_user` int(10) unsigned NOT NULL, - `creation_date` int(10) unsigned NOT NULL, - `user_agent` char(32) NOT NULL, - KEY `uid` (`uid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `adminusers` --- - -DROP TABLE IF EXISTS `adminusers`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `adminusers` ( - `id_user` int(10) unsigned NOT NULL AUTO_INCREMENT, - `username` varchar(80) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `password` char(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `last_failure` int(10) unsigned NOT NULL, - `has_confirmed` int(10) unsigned NOT NULL, - PRIMARY KEY (`id_user`), - UNIQUE KEY `username` (`username`), - KEY `username_2` (`username`,`password`) -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `adminusers_groups` --- - -DROP TABLE IF EXISTS `adminusers_groups`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `adminusers_groups` ( - `id_user` int(11) unsigned NOT NULL, - `id_group` int(11) unsigned NOT NULL, - UNIQUE KEY `id_group` (`id_group`,`id_user`), - KEY `group_indx` (`id_group`), - KEY `user_indx` (`id_user`), - CONSTRAINT `adminusers_groups_ibfk_1` FOREIGN KEY (`id_group`) REFERENCES `admingroups` (`id_group`), - CONSTRAINT `adminusers_groups_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `adminusers` (`id_user`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `boxes` --- - -DROP TABLE IF EXISTS `boxes`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `boxes` ( - `id_box` int(11) NOT NULL AUTO_INCREMENT, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `title` varchar(150) NOT NULL, - `message` text NOT NULL, - PRIMARY KEY (`id_box`) -) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `deletion` --- - -DROP TABLE IF EXISTS `deletion`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `deletion` ( - `id_del` int(10) unsigned NOT NULL AUTO_INCREMENT, - `created_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `object` char(15) NOT NULL, - `message` text NOT NULL, - `id_hard` int(10) unsigned NOT NULL, - `id_duplicate` int(10) unsigned NOT NULL, - PRIMARY KEY (`id_del`) -) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `distros` --- - -DROP TABLE IF EXISTS `distros`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `distros` ( - `id_distro` int(10) unsigned NOT NULL AUTO_INCREMENT, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `clean_name` varchar(200) CHARACTER SET utf8 NOT NULL, - `full_name` varchar(200) CHARACTER SET utf8 NOT NULL, - `id_order` int(10) unsigned NOT NULL, - `active` tinyint(1) NOT NULL DEFAULT '1', - PRIMARY KEY (`id_distro`) -) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `hardware` --- - -DROP TABLE IF EXISTS `hardware`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `hardware` ( - `id_hard` int(10) unsigned NOT NULL AUTO_INCREMENT, - `type` varchar(50) NOT NULL, - `kernel` varchar(100) NOT NULL, - `vendor` varchar(50) NOT NULL, - `model` varchar(200) NOT NULL, - `created_by` int(11) NOT NULL, - `updated_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `update_date` datetime NOT NULL, - `compatibility` char(15) NOT NULL, - `description` text NOT NULL, - `distribution` varchar(300) NOT NULL, - `video_card_type` varchar(100) NOT NULL, - `video_card_works` varchar(30) NOT NULL, - `wifi_type` varchar(100) NOT NULL, - `wifi_works` varchar(30) NOT NULL, - `comm_year` char(15) NOT NULL, - `ask_for_del` char(4) NOT NULL DEFAULT 'no', - `deleted` char(4) NOT NULL DEFAULT 'no', - `pci_id` char(10) NOT NULL, - `subtype` char(25) NOT NULL DEFAULT 'not-specified', - `driver` varchar(50) NOT NULL, - `interface` char(15) NOT NULL DEFAULT 'not-specified', - `bios` char(20) NOT NULL DEFAULT 'not-specified', - `webcam_type` varchar(100) NOT NULL, - `webcam_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `sound_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `bluetooth_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `fingerprint_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `architecture` char(15) NOT NULL DEFAULT 'not-specified', - `other_names` text NOT NULL, - `approved` char(4) NOT NULL DEFAULT 'yes', - `cleared` char(3) NOT NULL DEFAULT 'no', - `ethernet_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `sd_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `can_free_systems_be_installed` varchar(30) NOT NULL DEFAULT 'not-specified', - `it_tracks_users` varchar(30) NOT NULL DEFAULT 'not-specified', - `prevent_wifi` char(20) NOT NULL DEFAULT 'not-specified', - PRIMARY KEY (`id_hard`) -) ENGINE=InnoDB AUTO_INCREMENT=2228 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `hardware_users` --- - -DROP TABLE IF EXISTS `hardware_users`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `hardware_users` ( - `id_user` int(11) unsigned NOT NULL, - `id_hard` int(11) unsigned NOT NULL, - UNIQUE KEY `id_user` (`id_user`,`id_hard`), - KEY `hard_indx` (`id_hard`), - KEY `user_indx` (`id_user`), - CONSTRAINT `hardware_users_ibfk_1` FOREIGN KEY (`id_hard`) REFERENCES `hardware` (`id_hard`), - CONSTRAINT `hardware_users_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `regusers` (`id_user`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `history` --- - -DROP TABLE IF EXISTS `history`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `history` ( - `id_history` int(11) NOT NULL AUTO_INCREMENT, - `created_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `type` char(15) NOT NULL, - `action` char(15) NOT NULL, - `id` int(10) unsigned NOT NULL, - `message` text NOT NULL, - `gr` char(15) NOT NULL, - PRIMARY KEY (`id_history`) -) ENGINE=MyISAM AUTO_INCREMENT=10015 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `issues` --- - -DROP TABLE IF EXISTS `issues`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `issues` ( - `id_issue` int(10) unsigned NOT NULL AUTO_INCREMENT, - `created_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `update_date` datetime NOT NULL, - `topic` char(35) NOT NULL, - `title` varchar(100) NOT NULL, - `message` text NOT NULL, - `priority` char(15) NOT NULL, - `status` char(15) NOT NULL, - `notice` text NOT NULL, - `deleted` char(4) NOT NULL DEFAULT 'no', - PRIMARY KEY (`id_issue`) -) ENGINE=InnoDB AUTO_INCREMENT=384 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `messages` --- - -DROP TABLE IF EXISTS `messages`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `messages` ( - `id_mes` int(11) NOT NULL AUTO_INCREMENT, - `created_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `message` text NOT NULL, - `id_issue` int(10) unsigned NOT NULL, - `deleted` char(4) NOT NULL DEFAULT 'no', - `has_read` char(4) NOT NULL DEFAULT 'no', - PRIMARY KEY (`id_mes`) -) ENGINE=MyISAM AUTO_INCREMENT=1049 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `news` --- - -DROP TABLE IF EXISTS `news`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `news` ( - `id_news` int(10) unsigned NOT NULL AUTO_INCREMENT, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `title` varchar(150) NOT NULL, - `message` text NOT NULL, - PRIMARY KEY (`id_news`) -) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `params` --- - -DROP TABLE IF EXISTS `params`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `params` ( - `id_par` int(10) unsigned NOT NULL AUTO_INCREMENT, - `updating` char(4) NOT NULL DEFAULT 'no', - `boxes_xml` text NOT NULL, - PRIMARY KEY (`id_par`) -) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `profile` --- - -DROP TABLE IF EXISTS `profile`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `profile` ( - `id_prof` int(10) unsigned NOT NULL AUTO_INCREMENT, - `created_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `update_date` datetime NOT NULL, - `real_name` varchar(100) NOT NULL, - `where_you_are` varchar(100) NOT NULL, - `birth_date` varchar(100) NOT NULL, - `fav_distro` varchar(100) NOT NULL, - `projects` text NOT NULL, - `publish_mail` char(4) NOT NULL DEFAULT 'no', - `description` text NOT NULL, - `website` varchar(100) NOT NULL, - `send_notification` char(4) NOT NULL DEFAULT 'yes', - PRIMARY KEY (`id_prof`) -) ENGINE=InnoDB AUTO_INCREMENT=4780 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `regaccesses` --- - -DROP TABLE IF EXISTS `regaccesses`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `regaccesses` ( - `id` int(12) NOT NULL AUTO_INCREMENT, - `ip` char(20) NOT NULL, - `data` char(10) NOT NULL, - `ora` char(8) NOT NULL, - `username` varchar(30) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM AUTO_INCREMENT=47196 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `reggroups` --- - -DROP TABLE IF EXISTS `reggroups`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `reggroups` ( - `id_group` int(10) unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`id_group`), - UNIQUE KEY `name` (`name`) -) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `regsessions` --- - -DROP TABLE IF EXISTS `regsessions`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `regsessions` ( - `uid` char(32) NOT NULL, - `token` char(32) NOT NULL, - `id_user` int(10) unsigned NOT NULL, - `creation_date` int(10) unsigned NOT NULL, - `user_agent` char(32) NOT NULL, - KEY `uid` (`uid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `regusers` --- - -DROP TABLE IF EXISTS `regusers`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `regusers` ( - `id_user` int(10) unsigned NOT NULL AUTO_INCREMENT, - `username` varchar(80) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `password` char(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `last_failure` int(10) unsigned NOT NULL, - `has_confirmed` int(10) unsigned NOT NULL, - `e_mail` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `confirmation_token` char(32) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `creation_time` int(10) unsigned NOT NULL, - `temp_field` char(32) NOT NULL, - `deleted` char(4) NOT NULL DEFAULT 'no', - `forgot_token` char(32) NOT NULL, - `forgot_time` int(10) unsigned NOT NULL, - `blocked` char(4) NOT NULL DEFAULT 'no', - PRIMARY KEY (`id_user`), - UNIQUE KEY `username` (`username`), - KEY `username_2` (`username`,`password`) -) ENGINE=InnoDB AUTO_INCREMENT=5863 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `regusers_groups` --- - -DROP TABLE IF EXISTS `regusers_groups`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `regusers_groups` ( - `id_user` int(11) unsigned NOT NULL, - `id_group` int(11) unsigned NOT NULL, - UNIQUE KEY `id_group` (`id_group`,`id_user`), - KEY `group_indx` (`id_group`), - KEY `user_indx` (`id_user`), - CONSTRAINT `regusers_groups_ibfk_1` FOREIGN KEY (`id_group`) REFERENCES `reggroups` (`id_group`), - CONSTRAINT `regusers_groups_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `regusers` (`id_user`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `revisions` --- - -DROP TABLE IF EXISTS `revisions`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `revisions` ( - `id_rev` int(10) unsigned NOT NULL AUTO_INCREMENT, - `type` varchar(50) NOT NULL, - `kernel` varchar(100) NOT NULL, - `vendor` varchar(50) NOT NULL, - `model` varchar(200) NOT NULL, - `created_by` int(11) NOT NULL, - `updated_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `update_date` datetime NOT NULL, - `compatibility` char(15) NOT NULL, - `description` text NOT NULL, - `distribution` varchar(300) NOT NULL, - `video_card_type` varchar(100) NOT NULL, - `video_card_works` varchar(30) NOT NULL, - `wifi_type` varchar(100) NOT NULL, - `wifi_works` varchar(30) NOT NULL, - `comm_year` char(15) NOT NULL, - `id_hard` int(10) unsigned NOT NULL, - `pci_id` char(10) NOT NULL, - `subtype` char(25) NOT NULL DEFAULT 'not-specified', - `driver` varchar(50) NOT NULL, - `interface` char(15) NOT NULL DEFAULT 'not-specified', - `bios` char(20) NOT NULL DEFAULT 'not-specified', - `webcam_type` varchar(100) NOT NULL, - `webcam_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `sound_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `bluetooth_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `fingerprint_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `architecture` char(15) NOT NULL DEFAULT 'not-specified', - `other_names` text NOT NULL, - `approved` char(4) NOT NULL DEFAULT 'yes', - `cleared` char(3) NOT NULL DEFAULT 'no', - `ethernet_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `sd_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `can_free_systems_be_installed` varchar(30) NOT NULL DEFAULT 'not-specified', - `it_tracks_users` varchar(30) NOT NULL DEFAULT 'not-specified', - `prevent_wifi` char(20) NOT NULL DEFAULT 'not-specified', - PRIMARY KEY (`id_rev`) -) ENGINE=InnoDB AUTO_INCREMENT=4166 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `talk` --- - -DROP TABLE IF EXISTS `talk`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `talk` ( - `id_talk` int(10) unsigned NOT NULL AUTO_INCREMENT, - `created_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `title` varchar(100) NOT NULL, - `message` text NOT NULL, - `id_hard` int(10) unsigned NOT NULL, - `deleted` char(4) NOT NULL DEFAULT 'no', - PRIMARY KEY (`id_talk`) -) ENGINE=InnoDB AUTO_INCREMENT=712 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `vendors` --- - -DROP TABLE IF EXISTS `vendors`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `vendors` ( - `id_vendor` int(10) unsigned NOT NULL AUTO_INCREMENT, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `update_date` datetime NOT NULL, - `vendorid` char(4) NOT NULL, - `clean_name` varchar(200) CHARACTER SET utf8 NOT NULL, - `full_name` varchar(200) CHARACTER SET utf8 NOT NULL, - `bus` enum('PCI','USB') DEFAULT NULL, - PRIMARY KEY (`id_vendor`), - UNIQUE KEY `bus` (`bus`,`vendorid`) -) ENGINE=InnoDB AUTO_INCREMENT=9846 DEFAULT CHARSET=latin1; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `wiki` --- - -DROP TABLE IF EXISTS `wiki`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `wiki` ( - `id_wiki` int(10) unsigned NOT NULL AUTO_INCREMENT, - `created_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `update_date` datetime NOT NULL, - `title` varchar(200) NOT NULL, - `title_clean` varchar(200) NOT NULL, - `page` text NOT NULL, - `deleted` char(3) NOT NULL DEFAULT 'no', - `blocked` char(3) NOT NULL DEFAULT 'no', - `is_main` char(3) NOT NULL DEFAULT 'no', - PRIMARY KEY (`id_wiki`) -) ENGINE=InnoDB AUTO_INCREMENT=205 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `wiki_revisions` --- - -DROP TABLE IF EXISTS `wiki_revisions`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `wiki_revisions` ( - `id_rev` int(10) unsigned NOT NULL AUTO_INCREMENT, - `created_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `update_date` datetime NOT NULL, - `title` varchar(200) NOT NULL, - `title_clean` varchar(200) NOT NULL, - `page` text NOT NULL, - `id_wiki` int(10) unsigned NOT NULL, - PRIMARY KEY (`id_rev`) -) ENGINE=InnoDB AUTO_INCREMENT=698 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `wiki_talk` --- - -DROP TABLE IF EXISTS `wiki_talk`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `wiki_talk` ( - `id_talk` int(10) unsigned NOT NULL AUTO_INCREMENT, - `created_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `title` varchar(100) NOT NULL, - `message` text NOT NULL, - `id_wiki` int(10) unsigned NOT NULL, - `deleted` char(4) NOT NULL DEFAULT 'no', - PRIMARY KEY (`id_talk`) -) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; - --- --- Table structure for table `wiki_users` --- - -DROP TABLE IF EXISTS `wiki_users`; -/*!40101 SET @saved_cs_client = @@character_set_client */; -/*!40101 SET character_set_client = utf8 */; -CREATE TABLE `wiki_users` ( - `id_user` int(11) unsigned NOT NULL, - `id_wiki` int(11) unsigned NOT NULL, - UNIQUE KEY `id_user` (`id_user`,`id_wiki`), - KEY `wiki_indx` (`id_wiki`), - KEY `user_indx` (`id_user`), - CONSTRAINT `wiki_users_ibfk_1` FOREIGN KEY (`id_wiki`) REFERENCES `wiki` (`id_wiki`), - CONSTRAINT `wiki_users_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `regusers` (`id_user`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; -/*!40101 SET character_set_client = @saved_cs_client */; -/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; - -/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; -/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; -/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; -/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; -/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; -/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; -/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; - --- Dump completed on 2021-08-01 20:15:05 diff --git a/h-source/h-source-copyright.txt b/h-source/h-source-copyright.txt deleted file mode 100755 index 26a08e8..0000000 --- a/h-source/h-source-copyright.txt +++ /dev/null @@ -1,16 +0,0 @@ -The h-source software is a PHP software written thanks to the EasyGiant framework (see COPYRIGHT.txt) -Copyright (C) 2010 Antonio Gallo - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - diff --git a/h-source/index.php b/h-source/index.php deleted file mode 100755 index d76b2ad..0000000 --- a/h-source/index.php +++ /dev/null @@ -1,16 +0,0 @@ - -Date: Tue, 12 Oct 2021 09:08:38 +1100 -Subject: [PATCH] Adding prominant notice that the site is staging. - -And directing visitors to the official site. ---- - h-source/Application/Include/params.php | 2 +- - h-source/Application/Views/Desktop/header.php | 1 + - h-source/Application/Views/Mobile/header.php | 4 +++- - h-source/config.xml | 9 +++++++++ - 4 files changed, 14 insertions(+), 2 deletions(-) - -diff --git a/h-source/Application/Include/params.php b/h-source/Application/Include/params.php -index 5ab28df..29cdc6c 100644 ---- a/h-source/Application/Include/params.php -+++ b/h-source/Application/Include/params.php -@@ -26,7 +26,7 @@ class Website - - static public $fromEmail = "noreply@h-node.org"; - -- static public $generalName = "h-node.org"; -+ static public $generalName = "h-node.org STAGING"; - - static public $projectName = "h-node"; - -diff --git a/h-source/Application/Views/Desktop/header.php b/h-source/Application/Views/Desktop/header.php -index d153840..2a20ef6 100644 ---- a/h-source/Application/Views/Desktop/header.php -+++ b/h-source/Application/Views/Desktop/header.php -@@ -105,6 +105,7 @@ $currPos = $querySanitized ? $this->controller."/".$this->action : 'home/index'; -
                - -
                -diff --git a/h-source/Application/Views/Mobile/header.php b/h-source/Application/Views/Mobile/header.php -index 446f820..ac66d27 100644 ---- a/h-source/Application/Views/Mobile/header.php -+++ b/h-source/Application/Views/Mobile/header.php -@@ -89,7 +89,9 @@ $currPos = $querySanitized ? $this->controller."/".$this->action : 'home/index'; -
                -
                -
                --
                -+
                -+ STAGING -+
                -
                -
                - -diff --git a/h-source/config.xml b/h-source/config.xml -index 8f87304..159eef5 100644 ---- a/h-source/config.xml -+++ b/h-source/config.xml -@@ -77,6 +77,15 @@ - - - -+ -+ raw -+ This is a staging instance of h-node. For the official site please visit h-node.org. -+
                -+ -+ ]]> -+ - - raw - h-source - -

                The h-node.com source code (h-source project) is hosted at Savannah. http://savannah.nongnu.org/projects/h-source/

                - -

                h-client

                - -

                The source code of the client for h-node.com (h-client project) is hosted at Savannah. http://savannah.nongnu.org/projects/h-client/

                - -

                h-admin

                - -

                h-admin is a set of tools in order to carry out some administrative actions upon the h-source mysql tables (for example change the group of a registered user)

                - -

                in order to use h-admin you have to have h-source already installed

                - -

                h-admin and h-source share the same database. You have only to create some new tables in order to use h-admin

                - -

                You can download the h-admin source code (GPLv3) here:

                - -

                download link

                diff --git a/h-source/static/en/cancelled.html b/h-source/static/en/cancelled.html deleted file mode 100755 index dcc9313..0000000 --- a/h-source/static/en/cancelled.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - donations - h-node.com - - - - - - - - - - - - - -
                - -
                - -
                - -
                -

                Your donation has been cancelled. Back to the home page

                -
                - -
                - - - diff --git a/h-source/static/en/donations.html b/h-source/static/en/donations.html deleted file mode 100755 index 03dd573..0000000 --- a/h-source/static/en/donations.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - donations - h-node.com - - - - - - - - - - - - - -
                - -
                - -
                - -
                - -

                -

                - - - - -
                -

                -
                - -
                - - - diff --git a/h-source/static/en/thanks.html b/h-source/static/en/thanks.html deleted file mode 100755 index 231b7af..0000000 --- a/h-source/static/en/thanks.html +++ /dev/null @@ -1,46 +0,0 @@ - - - - - donations - h-node.com - - - - - - - - - - - - - -
                - -
                - -
                - -
                -

                Thanks for your donation!

                -
                - -
                - - - diff --git a/h-source/static/licenses.html b/h-source/static/licenses.html deleted file mode 100644 index 3dc97e9..0000000 --- a/h-source/static/licenses.html +++ /dev/null @@ -1,64 +0,0 @@ - - - - JavaScript Web Labels - - - - -

                JavaScript license information

                - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
                Javascript functions used inside the h-node websiteGNU-GPL-3.0-or-laterfunctions.js
                jQueryGNU-GPL-2.0-or-laterjquery-1.7.1.js
                jQuery markItUpGNU-GPL-2.0-or-laterjquery.markitup.js
                jQuery markItUp configuration file (same license as the markitup plugin)GNU-GPL-2.0-or-laterset.js
                jQuery UIGNU-GPL-2.0-or-laterjquery-ui-1.8.21.custom.js
                jQuery mobileGNU-GPL-2.0-or-laterjquery.mobile-1.1.0.js
                - - - \ No newline at end of file diff --git a/h-source/tabelle.txt b/h-source/tabelle.txt deleted file mode 100755 index 528322b..0000000 --- a/h-source/tabelle.txt +++ /dev/null @@ -1,160 +0,0 @@ -create table hardware ( - id_hard INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, - type varchar(50) not null, - subtype char(15) not null, - kernel varchar(50) not null, - vendor varchar(50) not null, - model varchar(100) not null, - created_by int not null, - updated_by int not null, - creation_date timestamp default CURRENT_TIMESTAMP, - update_date datetime not null, - compatibility char(15) not null, - description text CHARACTER SET utf8 not null, - distribution varchar(300) CHARACTER SET utf8 not null, - video_card_type varchar(100) CHARACTER SET utf8 not null, - video_card_works varchar(30) CHARACTER SET utf8 not null, - wifi_type varchar(100) CHARACTER SET utf8 not null, - wifi_works varchar(30) CHARACTER SET utf8 not null, - comm_year char(15) not null, - ask_for_del char(4) not null default 'no', - deleted char(4) not null default 'no', - pci_id char(10) not null, - driver varchar(50) not null, - interface char(15) not null default 'not-specified' -)engine=innodb; - -create table revisions ( - id_rev INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, - type varchar(50) not null, - subtype char(15) not null, - kernel varchar(50) not null, - vendor varchar(50) not null, - model varchar(100) not null, - created_by int not null, - updated_by int not null, - creation_date timestamp default CURRENT_TIMESTAMP, - update_date datetime not null, - compatibility char(15) not null, - description text CHARACTER SET utf8 not null, - distribution varchar(300) CHARACTER SET utf8 not null, - video_card_type varchar(100) CHARACTER SET utf8 not null, - video_card_works varchar(30) CHARACTER SET utf8 not null, - wifi_type varchar(100) CHARACTER SET utf8 not null, - wifi_works varchar(30) CHARACTER SET utf8 not null, - comm_year char(15) not null, - pci_id char(10) not null, - driver varchar(50) not null, - interface char(15) not null default 'not-specified', - id_hard INT UNSIGNED NOT NULL -)engine=innodb; - -create table hardware_users ( - id_user int(11) UNSIGNED not null, - id_hard int(11) UNSIGNED not null, - index hard_indx(id_hard), - index user_indx(id_user), - foreign key hard_fky(id_hard) references hardware (id_hard), - foreign key user_fky(id_user) references regusers (id_user), - unique (id_user,id_hard) -)engine=innodb; - - -create table talk ( - id_talk INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, - created_by int not null, - creation_date timestamp default CURRENT_TIMESTAMP, - title varchar(100) CHARACTER SET utf8 not null, - message text CHARACTER SET utf8 not null, - id_hard INT UNSIGNED NOT NULL, - deleted char(4) not null default 'no' -)engine=innodb; - - -create table profile ( - id_prof INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, - created_by int not null, - creation_date timestamp default CURRENT_TIMESTAMP, - update_date datetime not null, - real_name varchar(100) CHARACTER SET utf8 not null, - where_you_are varchar(100) CHARACTER SET utf8 not null, - birth_date varchar(100) CHARACTER SET utf8 not null, - fav_distro varchar(100) CHARACTER SET utf8 not null, - projects text CHARACTER SET utf8 not null , - publish_mail char(4) not null default 'no', - description text CHARACTER SET utf8 not null, - website varchar(100) CHARACTER SET utf8 not null -)engine=innodb; - - -create table issues ( - id_issue INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, - created_by int not null, - creation_date timestamp default CURRENT_TIMESTAMP, - update_date datetime not null, - topic char(35) CHARACTER SET utf8 not null, - title varchar(100) CHARACTER SET utf8 not null, - message text CHARACTER SET utf8 not null, - priority char(15) CHARACTER SET utf8 not null, - status char(15) CHARACTER SET utf8 not null, - notice text CHARACTER SET utf8 not null, - deleted char(4) not null default 'no' -)engine=innodb; - - -create table deletion ( - id_del INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, - created_by int not null, - creation_date timestamp default CURRENT_TIMESTAMP, - object char(15) not null, - message text CHARACTER SET utf8 not null, - id_hard INT UNSIGNED NOT NULL, - id_duplicate INT UNSIGNED NOT NULL -)engine=innodb; - -create table params ( - id_par INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, - updating char(4) not null default 'no' -)engine=innodb; - -insert into params (updating) values ('no'); - - -create table news ( - id_news INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, - creation_date timestamp default CURRENT_TIMESTAMP, - title varchar(150) not null, - message text CHARACTER SET utf8 not null -)engine=innodb; - - -create table boxes ( - id_box int not null auto_increment primary key, - creation_date timestamp default CURRENT_TIMESTAMP, - title varchar(150) not null, - message text CHARACTER SET utf8 not null -); - -create table messages ( - id_mes int not null auto_increment primary key, - created_by int not null, - creation_date timestamp default CURRENT_TIMESTAMP, - message text CHARACTER SET utf8 not null, - id_issue INT UNSIGNED NOT NULL, - deleted char(4) not null default 'no', - has_read char(4) not null default 'no' -); - - - -create table history ( - id_history int not null auto_increment primary key, - created_by int not null, - creation_date timestamp default CURRENT_TIMESTAMP, - type char(10) not null, - action char(10) not null, - id INT UNSIGNED NOT NULL, - message text CHARACTER SET utf8 not null -); - -insert into reggroups (name) values ('moderator'); diff --git a/h-source/tables.sql b/h-source/tables.sql deleted file mode 100644 index 1382eb9..0000000 --- a/h-source/tables.sql +++ /dev/null @@ -1,616 +0,0 @@ --- h-source, a web software to build a community of people that want to share their hardware information. --- Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt) --- --- This file is part of h-source --- --- h-source is free software: you can redistribute it and/or modify --- it under the terms of the GNU General Public License as published by --- the Free Software Foundation, either version 3 of the License, or --- (at your option) any later version. --- --- h-source is distributed in the hope that it will be useful, --- but WITHOUT ANY WARRANTY; without even the implied warranty of --- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the --- GNU General Public License for more details. --- --- You should have received a copy of the GNU General Public License --- along with h-source. If not, see . - - -SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; - - --- -------------------------------------------------------- - --- --- Table structure for table `accesses` --- - -CREATE TABLE IF NOT EXISTS `accesses` ( - `id` int(12) NOT NULL AUTO_INCREMENT, - `ip` char(20) NOT NULL, - `data` char(10) NOT NULL, - `ora` char(8) NOT NULL, - `username` varchar(30) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `admingroups` --- - -CREATE TABLE IF NOT EXISTS `admingroups` ( - `id_group` int(10) unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`id_group`), - UNIQUE KEY `name` (`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `adminsessions` --- - -CREATE TABLE IF NOT EXISTS `adminsessions` ( - `uid` char(32) NOT NULL, - `token` char(32) NOT NULL, - `id_user` int(10) unsigned NOT NULL, - `creation_date` int(10) unsigned NOT NULL, - `user_agent` char(32) NOT NULL, - KEY `uid` (`uid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `adminusers` --- - -CREATE TABLE IF NOT EXISTS `adminusers` ( - `id_user` int(10) unsigned NOT NULL AUTO_INCREMENT, - `username` varchar(80) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `password` char(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `last_failure` int(10) unsigned NOT NULL, - `has_confirmed` int(10) unsigned NOT NULL, - PRIMARY KEY (`id_user`), - UNIQUE KEY `username` (`username`), - KEY `username_2` (`username`,`password`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `adminusers_groups` --- - -CREATE TABLE IF NOT EXISTS `adminusers_groups` ( - `id_user` int(11) unsigned NOT NULL, - `id_group` int(11) unsigned NOT NULL, - UNIQUE KEY `id_group` (`id_group`,`id_user`), - KEY `group_indx` (`id_group`), - KEY `user_indx` (`id_user`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `boxes` --- - -CREATE TABLE IF NOT EXISTS `boxes` ( - `id_box` int(11) NOT NULL AUTO_INCREMENT, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `title` varchar(150) NOT NULL, - `message` text NOT NULL, - PRIMARY KEY (`id_box`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `deletion` --- - -CREATE TABLE IF NOT EXISTS `deletion` ( - `id_del` int(10) unsigned NOT NULL AUTO_INCREMENT, - `created_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `object` char(15) NOT NULL, - `message` text NOT NULL, - `id_hard` int(10) unsigned NOT NULL, - `id_duplicate` int(10) unsigned NOT NULL, - PRIMARY KEY (`id_del`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `hardware` --- - -CREATE TABLE IF NOT EXISTS `hardware` ( - `id_hard` int(10) unsigned NOT NULL AUTO_INCREMENT, - `type` varchar(50) NOT NULL, - `kernel` varchar(100) NOT NULL, - `vendor` varchar(50) NOT NULL, - `model` varchar(200) NOT NULL, - `created_by` int(11) NOT NULL, - `updated_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `update_date` datetime NOT NULL, - `compatibility` char(15) NOT NULL, - `description` text NOT NULL, - `distribution` varchar(300) NOT NULL, - `video_card_type` varchar(100) NOT NULL, - `video_card_works` varchar(30) NOT NULL, - `wifi_type` varchar(100) NOT NULL, - `wifi_works` varchar(30) NOT NULL, - `comm_year` char(15) NOT NULL, - `ask_for_del` char(4) NOT NULL DEFAULT 'no', - `deleted` char(4) NOT NULL DEFAULT 'no', - `pci_id` char(10) NOT NULL, - `subtype` char(25) NOT NULL DEFAULT 'not-specified', - `driver` varchar(50) NOT NULL, - `interface` char(15) NOT NULL DEFAULT 'not-specified', - `bios` char(20) NOT NULL DEFAULT 'not-specified', - `webcam_type` varchar(100) NOT NULL, - `webcam_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `sound_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `bluetooth_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `fingerprint_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `architecture` char(15) NOT NULL DEFAULT 'not-specified', - `other_names` text NOT NULL, - `approved` char(4) NOT NULL DEFAULT 'yes', - `cleared` char(3) NOT NULL DEFAULT 'no', - `ethernet_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `sd_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `can_free_systems_be_installed` varchar(30) NOT NULL DEFAULT 'not-specified', - `it_tracks_users` varchar(30) NOT NULL DEFAULT 'not-specified', - `prevent_wifi` char(20) NOT NULL DEFAULT 'not-specified', - PRIMARY KEY (`id_hard`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `hardware_users` --- - -CREATE TABLE IF NOT EXISTS `hardware_users` ( - `id_user` int(11) unsigned NOT NULL, - `id_hard` int(11) unsigned NOT NULL, - UNIQUE KEY `id_user` (`id_user`,`id_hard`), - KEY `hard_indx` (`id_hard`), - KEY `user_indx` (`id_user`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `history` --- - -CREATE TABLE IF NOT EXISTS `history` ( - `id_history` int(11) NOT NULL AUTO_INCREMENT, - `created_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `type` char(15) NOT NULL, - `action` char(15) NOT NULL, - `id` int(10) unsigned NOT NULL, - `message` text NOT NULL, - `gr` char(15) NOT NULL, - PRIMARY KEY (`id_history`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8 ; - --- -------------------------------------------------------- - --- --- Table structure for table `issues` --- - -CREATE TABLE IF NOT EXISTS `issues` ( - `id_issue` int(10) unsigned NOT NULL AUTO_INCREMENT, - `created_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `update_date` datetime NOT NULL, - `topic` char(35) NOT NULL, - `title` varchar(100) NOT NULL, - `message` text NOT NULL, - `priority` char(15) NOT NULL, - `status` char(15) NOT NULL, - `notice` text NOT NULL, - `deleted` char(4) NOT NULL DEFAULT 'no', - PRIMARY KEY (`id_issue`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `messages` --- - -CREATE TABLE IF NOT EXISTS `messages` ( - `id_mes` int(11) NOT NULL AUTO_INCREMENT, - `created_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `message` text NOT NULL, - `id_issue` int(10) unsigned NOT NULL, - `deleted` char(4) NOT NULL DEFAULT 'no', - `has_read` char(4) NOT NULL DEFAULT 'no', - PRIMARY KEY (`id_mes`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `news` --- - -CREATE TABLE IF NOT EXISTS `news` ( - `id_news` int(10) unsigned NOT NULL AUTO_INCREMENT, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `title` varchar(150) NOT NULL, - `message` text NOT NULL, - PRIMARY KEY (`id_news`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `params` --- - -CREATE TABLE IF NOT EXISTS `params` ( - `id_par` int(10) unsigned NOT NULL AUTO_INCREMENT, - `updating` char(4) NOT NULL DEFAULT 'no', - `boxes_xml` text NOT NULL, - PRIMARY KEY (`id_par`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; - -insert into params (updating) values ('no'); - --- -------------------------------------------------------- - --- --- Table structure for table `profile` --- - -CREATE TABLE IF NOT EXISTS `profile` ( - `id_prof` int(10) unsigned NOT NULL AUTO_INCREMENT, - `created_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `update_date` datetime NOT NULL, - `real_name` varchar(100) NOT NULL, - `where_you_are` varchar(100) NOT NULL, - `birth_date` varchar(100) NOT NULL, - `fav_distro` varchar(100) NOT NULL, - `projects` text NOT NULL, - `publish_mail` char(4) NOT NULL DEFAULT 'no', - `description` text NOT NULL, - `website` varchar(100) NOT NULL, - `send_notification` char(4) NOT NULL DEFAULT 'yes', - PRIMARY KEY (`id_prof`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `regaccesses` --- - -CREATE TABLE IF NOT EXISTS `regaccesses` ( - `id` int(12) NOT NULL AUTO_INCREMENT, - `ip` char(20) NOT NULL, - `data` char(10) NOT NULL, - `ora` char(8) NOT NULL, - `username` varchar(30) NOT NULL, - PRIMARY KEY (`id`) -) ENGINE=MyISAM DEFAULT CHARSET=utf8 ; - --- -------------------------------------------------------- - --- --- Table structure for table `reggroups` --- - -CREATE TABLE IF NOT EXISTS `reggroups` ( - `id_group` int(10) unsigned NOT NULL AUTO_INCREMENT, - `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - PRIMARY KEY (`id_group`), - UNIQUE KEY `name` (`name`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; - --- -------------------------------------------------------- - --- --- Table structure for table `regsessions` --- - -CREATE TABLE IF NOT EXISTS `regsessions` ( - `uid` char(32) NOT NULL, - `token` char(32) NOT NULL, - `id_user` int(10) unsigned NOT NULL, - `creation_date` int(10) unsigned NOT NULL, - `user_agent` char(32) NOT NULL, - KEY `uid` (`uid`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `regusers` --- - -CREATE TABLE IF NOT EXISTS `regusers` ( - `id_user` int(10) unsigned NOT NULL AUTO_INCREMENT, - `username` varchar(80) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `password` char(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `last_failure` int(10) unsigned NOT NULL, - `has_confirmed` int(10) unsigned NOT NULL, - `e_mail` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, - `confirmation_token` char(32) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `creation_time` int(10) unsigned NOT NULL, - `temp_field` char(32) NOT NULL, - `deleted` char(4) NOT NULL DEFAULT 'no', - `forgot_token` char(32) NOT NULL, - `forgot_time` int(10) unsigned NOT NULL, - `blocked` char(4) NOT NULL DEFAULT 'no', - PRIMARY KEY (`id_user`), - UNIQUE KEY `username` (`username`), - KEY `username_2` (`username`,`password`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; - --- -------------------------------------------------------- - --- --- Table structure for table `regusers_groups` --- - -CREATE TABLE IF NOT EXISTS `regusers_groups` ( - `id_user` int(11) unsigned NOT NULL, - `id_group` int(11) unsigned NOT NULL, - UNIQUE KEY `id_group` (`id_group`,`id_user`), - KEY `group_indx` (`id_group`), - KEY `user_indx` (`id_user`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `revisions` --- - -CREATE TABLE IF NOT EXISTS `revisions` ( - `id_rev` int(10) unsigned NOT NULL AUTO_INCREMENT, - `type` varchar(50) NOT NULL, - `kernel` varchar(100) NOT NULL, - `vendor` varchar(50) NOT NULL, - `model` varchar(200) NOT NULL, - `created_by` int(11) NOT NULL, - `updated_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `update_date` datetime NOT NULL, - `compatibility` char(15) NOT NULL, - `description` text NOT NULL, - `distribution` varchar(300) NOT NULL, - `video_card_type` varchar(100) NOT NULL, - `video_card_works` varchar(30) NOT NULL, - `wifi_type` varchar(100) NOT NULL, - `wifi_works` varchar(30) NOT NULL, - `comm_year` char(15) NOT NULL, - `id_hard` int(10) unsigned NOT NULL, - `pci_id` char(10) NOT NULL, - `subtype` char(25) NOT NULL DEFAULT 'not-specified', - `driver` varchar(50) NOT NULL, - `interface` char(15) NOT NULL DEFAULT 'not-specified', - `bios` char(20) NOT NULL DEFAULT 'not-specified', - `webcam_type` varchar(100) NOT NULL, - `webcam_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `sound_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `bluetooth_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `fingerprint_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `architecture` char(15) NOT NULL DEFAULT 'not-specified', - `other_names` text NOT NULL, - `approved` char(4) NOT NULL DEFAULT 'yes', - `cleared` char(3) NOT NULL DEFAULT 'no', - `ethernet_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `sd_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', - `can_free_systems_be_installed` varchar(30) NOT NULL DEFAULT 'not-specified', - `it_tracks_users` varchar(30) NOT NULL DEFAULT 'not-specified', - `prevent_wifi` char(20) NOT NULL DEFAULT 'not-specified', - PRIMARY KEY (`id_rev`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `talk` --- - -CREATE TABLE IF NOT EXISTS `talk` ( - `id_talk` int(10) unsigned NOT NULL AUTO_INCREMENT, - `created_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `title` varchar(100) NOT NULL, - `message` text NOT NULL, - `id_hard` int(10) unsigned NOT NULL, - `deleted` char(4) NOT NULL DEFAULT 'no', - PRIMARY KEY (`id_talk`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `wiki` --- - -CREATE TABLE IF NOT EXISTS `wiki` ( - `id_wiki` int(10) unsigned NOT NULL AUTO_INCREMENT, - `created_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `update_date` datetime NOT NULL, - `title` varchar(200) NOT NULL, - `title_clean` varchar(200) NOT NULL, - `page` text NOT NULL, - `deleted` char(3) NOT NULL DEFAULT 'no', - `blocked` char(3) NOT NULL DEFAULT 'no', - `is_main` char(3) NOT NULL DEFAULT 'no', - PRIMARY KEY (`id_wiki`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `wiki_revisions` --- - -CREATE TABLE IF NOT EXISTS `wiki_revisions` ( - `id_rev` int(10) unsigned NOT NULL AUTO_INCREMENT, - `created_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `update_date` datetime NOT NULL, - `title` varchar(200) NOT NULL, - `title_clean` varchar(200) NOT NULL, - `page` text NOT NULL, - `id_wiki` int(10) unsigned NOT NULL, - PRIMARY KEY (`id_rev`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `wiki_talk` --- - -CREATE TABLE IF NOT EXISTS `wiki_talk` ( - `id_talk` int(10) unsigned NOT NULL AUTO_INCREMENT, - `created_by` int(11) NOT NULL, - `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, - `title` varchar(100) NOT NULL, - `message` text NOT NULL, - `id_wiki` int(10) unsigned NOT NULL, - `deleted` char(4) NOT NULL DEFAULT 'no', - PRIMARY KEY (`id_talk`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- -------------------------------------------------------- - --- --- Table structure for table `wiki_users` --- - -CREATE TABLE IF NOT EXISTS `wiki_users` ( - `id_user` int(11) unsigned NOT NULL, - `id_wiki` int(11) unsigned NOT NULL, - UNIQUE KEY `id_user` (`id_user`,`id_wiki`), - KEY `wiki_indx` (`id_wiki`), - KEY `user_indx` (`id_user`) -) ENGINE=InnoDB DEFAULT CHARSET=utf8; - --- --- Constraints for dumped tables --- - --- --- Constraints for table `adminusers_groups` --- -ALTER TABLE `adminusers_groups` - ADD CONSTRAINT `adminusers_groups_ibfk_1` FOREIGN KEY (`id_group`) REFERENCES `admingroups` (`id_group`), - ADD CONSTRAINT `adminusers_groups_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `adminusers` (`id_user`); - --- --- Constraints for table `hardware_users` --- -ALTER TABLE `hardware_users` - ADD CONSTRAINT `hardware_users_ibfk_1` FOREIGN KEY (`id_hard`) REFERENCES `hardware` (`id_hard`), - ADD CONSTRAINT `hardware_users_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `regusers` (`id_user`); - --- --- Constraints for table `regusers_groups` --- -ALTER TABLE `regusers_groups` - ADD CONSTRAINT `regusers_groups_ibfk_1` FOREIGN KEY (`id_group`) REFERENCES `reggroups` (`id_group`), - ADD CONSTRAINT `regusers_groups_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `regusers` (`id_user`); - --- --- Constraints for table `wiki_users` --- -ALTER TABLE `wiki_users` - ADD CONSTRAINT `wiki_users_ibfk_1` FOREIGN KEY (`id_wiki`) REFERENCES `wiki` (`id_wiki`), - ADD CONSTRAINT `wiki_users_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `regusers` (`id_user`); - - -create table vendors ( - id_vendor INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, - creation_date timestamp default CURRENT_TIMESTAMP, - update_date datetime NOT NULL, - vendorid CHAR(4) not null, - clean_name varchar(200) CHARACTER SET utf8 not null, - full_name varchar(200) CHARACTER SET utf8 not null, - bus ENUM('PCI', 'USB'), - unique(bus,vendorid) -)engine=innodb; - - -create table distros ( - id_distro INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, - creation_date timestamp default CURRENT_TIMESTAMP, - clean_name varchar(200) CHARACTER SET utf8 not null, - full_name varchar(200) CHARACTER SET utf8 not null, - id_order INT UNSIGNED NOT NULL, - active tinyint(1) NOT NULL DEFAULT 1 -)engine=innodb; - -insert into distros (clean_name, full_name, id_order, active) values ('blag_90001', 'BLAG 90001', 1, 0); -insert into distros (clean_name, full_name, id_order, active) values ('blag_120000', 'BLAG 120000', 2, 0); -insert into distros (clean_name, full_name, id_order, active) values ('blag_140000', 'BLAG 1400000', 3, 0); -insert into distros (clean_name, full_name, id_order, active) values ('debian', 'Debian GNU/Linux Testing/Unstable', 4, 1); -insert into distros (clean_name, full_name, id_order, active) values ('debian_6', 'Debian GNU/Linux 6 squeeze', 5, 0); -insert into distros (clean_name, full_name, id_order, active) values ('debian_7', 'Debian GNU/Linux 7 wheezy', 6, 0); -insert into distros (clean_name, full_name, id_order, active) values ('debian_8', 'Debian GNU/Linux 8 jessie', 7, 1); -insert into distros (clean_name, full_name, id_order, active) values ('debian_9', 'Debian GNU/Linux 9 stretch', 8, 1); -insert into distros (clean_name, full_name, id_order, active) values ('dragora_1_1', 'Dragora 1.1', 9, 0); -insert into distros (clean_name, full_name, id_order, active) values ('dragora_2_0', 'Dragora 2.0 Ardi', 10, 0); -insert into distros (clean_name, full_name, id_order, active) values ('dragora_2_2', 'Dragora 2.2 Rafaela', 11, 0); -insert into distros (clean_name, full_name, id_order, active) values ('dynebolic_2_5_2', 'Dyne:bolic 2.5.2 DHORUBA', 12, 0); -insert into distros (clean_name, full_name, id_order, active) values ('dynebolic_3_0_X', 'Dyne:III 3.0.X MUNIR', 13, 0); -insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_2_3', 'gNewSense 2.3 Deltah', 14, 0); -insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_3_0', 'gNewSense 3.0 Metad (beta)', 15, 0); -insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_3_0_parkes', 'gNewSense 3.0 Parkes', 16, 0); -insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_4_0', 'gNewSense 4.0 Ucclia', 17, 0); -insert into distros (clean_name, full_name, id_order, active) values ('guix_0_10', 'GuixSD 0.10', 18, 0); -insert into distros (clean_name, full_name, id_order, active) values ('guix', 'GuixSD', 19, 1); -insert into distros (clean_name, full_name, id_order, active) values ('musix_2_0', 'Musix GNU+Linux 2.0 R0', 20, 0); -insert into distros (clean_name, full_name, id_order, active) values ('musix_3_0_1', 'Musix GNU+Linux 3.0.1', 21, 0); -insert into distros (clean_name, full_name, id_order, active) values ('parabola', 'Parabola GNU/Linux', 22, 1); -insert into distros (clean_name, full_name, id_order, active) values ('pureos_8_0', 'PureOS 8.0 Prometheus', 23, 1); -insert into distros (clean_name, full_name, id_order, active) values ('trisquel_3_5', 'Trisquel 3.5 Awen', 24, 0); -insert into distros (clean_name, full_name, id_order, active) values ('trisquel_4_0', 'Trisquel 4.0 Taranis', 25, 0); -insert into distros (clean_name, full_name, id_order, active) values ('trisquel_4_5', 'Trisquel 4.5 Slaine', 26, 0); -insert into distros (clean_name, full_name, id_order, active) values ('trisquel_5_0', 'Trisquel 5.0 Dagda', 27, 0); -insert into distros (clean_name, full_name, id_order, active) values ('trisquel_5_5', 'Trisquel 5.5 Brigantia', 28, 0); -insert into distros (clean_name, full_name, id_order, active) values ('trisquel_6_0', 'Trisquel 6.0 Toutatis', 29, 0); -insert into distros (clean_name, full_name, id_order, active) values ('trisquel_7_0', 'Trisquel 7.0 Belenos', 30, 1); -insert into distros (clean_name, full_name, id_order, active) values ('trisquel_8_0', 'Trisquel 8.0 Flidas', 31, 1); -insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2009', 'UTUTO XS 2009', 32, 0); -insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2010', 'UTUTO XS 2010', 33, 0); -insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2012_04', 'UTUTO XS 2012.04', 34, 0); -insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_8', 'VENENUX 0.8', 35, 0); -insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_8_2', 'VENENUX-EC 0.8.2', 36, 0); -insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_9', 'VENENUX 0.9', 37, 0); -insert into distros (clean_name, full_name, id_order, active) values ('debian_testing', 'Debian GNU/Linux Testing', 38, 0); -insert into distros (clean_name, full_name, id_order, active) values ('debian_unstable', 'Debian GNU/Linux Unstable', 39, 0); - -insert into reggroups (name) values ('manager'); -insert into reggroups (name) values ('admin'); -insert into reggroups (name) values ('moderator'); - -insert into regusers (username,password) values ('admin',sha1('admin')); - -insert into regusers_groups (id_user, id_group) values (1,1); -insert into regusers_groups (id_user, id_group) values (1,2); -insert into regusers_groups (id_user, id_group) values (1,3); diff --git a/index.php b/index.php new file mode 100755 index 0000000..d76b2ad --- /dev/null +++ b/index.php @@ -0,0 +1,16 @@ + +Date: Tue, 12 Oct 2021 09:08:38 +1100 +Subject: [PATCH] Adding prominant notice that the site is staging. + +And directing visitors to the official site. +--- + h-source/Application/Include/params.php | 2 +- + h-source/Application/Views/Desktop/header.php | 1 + + h-source/Application/Views/Mobile/header.php | 4 +++- + h-source/config.xml | 9 +++++++++ + 4 files changed, 14 insertions(+), 2 deletions(-) + +diff --git a/h-source/Application/Include/params.php b/h-source/Application/Include/params.php +index 5ab28df..29cdc6c 100644 +--- a/h-source/Application/Include/params.php ++++ b/h-source/Application/Include/params.php +@@ -26,7 +26,7 @@ class Website + + static public $fromEmail = "noreply@h-node.org"; + +- static public $generalName = "h-node.org"; ++ static public $generalName = "h-node.org STAGING"; + + static public $projectName = "h-node"; + +diff --git a/h-source/Application/Views/Desktop/header.php b/h-source/Application/Views/Desktop/header.php +index d153840..2a20ef6 100644 +--- a/h-source/Application/Views/Desktop/header.php ++++ b/h-source/Application/Views/Desktop/header.php +@@ -105,6 +105,7 @@ $currPos = $querySanitized ? $this->controller."/".$this->action : 'home/index'; +
                + +
                +diff --git a/h-source/Application/Views/Mobile/header.php b/h-source/Application/Views/Mobile/header.php +index 446f820..ac66d27 100644 +--- a/h-source/Application/Views/Mobile/header.php ++++ b/h-source/Application/Views/Mobile/header.php +@@ -89,7 +89,9 @@ $currPos = $querySanitized ? $this->controller."/".$this->action : 'home/index'; +
                +
                +
                +-
                ++
                ++ STAGING ++
                +
                +
                + +diff --git a/h-source/config.xml b/h-source/config.xml +index 8f87304..159eef5 100644 +--- a/h-source/config.xml ++++ b/h-source/config.xml +@@ -77,6 +77,15 @@ + + + ++ ++ raw ++ This is a staging instance of h-node. For the official site please visit h-node.org. ++
                ++ ++ ]]> ++ + + raw + h-source + +

                The h-node.com source code (h-source project) is hosted at Savannah. http://savannah.nongnu.org/projects/h-source/

                + +

                h-client

                + +

                The source code of the client for h-node.com (h-client project) is hosted at Savannah. http://savannah.nongnu.org/projects/h-client/

                + +

                h-admin

                + +

                h-admin is a set of tools in order to carry out some administrative actions upon the h-source mysql tables (for example change the group of a registered user)

                + +

                in order to use h-admin you have to have h-source already installed

                + +

                h-admin and h-source share the same database. You have only to create some new tables in order to use h-admin

                + +

                You can download the h-admin source code (GPLv3) here:

                + +

                download link

                diff --git a/static/en/cancelled.html b/static/en/cancelled.html new file mode 100755 index 0000000..dcc9313 --- /dev/null +++ b/static/en/cancelled.html @@ -0,0 +1,46 @@ + + + + + donations - h-node.com + + + + + + + + + + + + + +
                + +
                + +
                + +
                +

                Your donation has been cancelled. Back to the home page

                +
                + +
                + + + diff --git a/static/en/donations.html b/static/en/donations.html new file mode 100755 index 0000000..03dd573 --- /dev/null +++ b/static/en/donations.html @@ -0,0 +1,55 @@ + + + + + donations - h-node.com + + + + + + + + + + + + + +
                + +
                + +
                + +
                + +

                +

                + + + + +
                +

                +
                + +
                + + + diff --git a/static/en/thanks.html b/static/en/thanks.html new file mode 100755 index 0000000..231b7af --- /dev/null +++ b/static/en/thanks.html @@ -0,0 +1,46 @@ + + + + + donations - h-node.com + + + + + + + + + + + + + +
                + +
                + +
                + +
                +

                Thanks for your donation!

                +
                + +
                + + + diff --git a/static/licenses.html b/static/licenses.html new file mode 100644 index 0000000..3dc97e9 --- /dev/null +++ b/static/licenses.html @@ -0,0 +1,64 @@ + + + + JavaScript Web Labels + + + + +

                JavaScript license information

                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
                Javascript functions used inside the h-node websiteGNU-GPL-3.0-or-laterfunctions.js
                jQueryGNU-GPL-2.0-or-laterjquery-1.7.1.js
                jQuery markItUpGNU-GPL-2.0-or-laterjquery.markitup.js
                jQuery markItUp configuration file (same license as the markitup plugin)GNU-GPL-2.0-or-laterset.js
                jQuery UIGNU-GPL-2.0-or-laterjquery-ui-1.8.21.custom.js
                jQuery mobileGNU-GPL-2.0-or-laterjquery.mobile-1.1.0.js
                + + + \ No newline at end of file diff --git a/tabelle.txt b/tabelle.txt new file mode 100755 index 0000000..528322b --- /dev/null +++ b/tabelle.txt @@ -0,0 +1,160 @@ +create table hardware ( + id_hard INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + type varchar(50) not null, + subtype char(15) not null, + kernel varchar(50) not null, + vendor varchar(50) not null, + model varchar(100) not null, + created_by int not null, + updated_by int not null, + creation_date timestamp default CURRENT_TIMESTAMP, + update_date datetime not null, + compatibility char(15) not null, + description text CHARACTER SET utf8 not null, + distribution varchar(300) CHARACTER SET utf8 not null, + video_card_type varchar(100) CHARACTER SET utf8 not null, + video_card_works varchar(30) CHARACTER SET utf8 not null, + wifi_type varchar(100) CHARACTER SET utf8 not null, + wifi_works varchar(30) CHARACTER SET utf8 not null, + comm_year char(15) not null, + ask_for_del char(4) not null default 'no', + deleted char(4) not null default 'no', + pci_id char(10) not null, + driver varchar(50) not null, + interface char(15) not null default 'not-specified' +)engine=innodb; + +create table revisions ( + id_rev INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + type varchar(50) not null, + subtype char(15) not null, + kernel varchar(50) not null, + vendor varchar(50) not null, + model varchar(100) not null, + created_by int not null, + updated_by int not null, + creation_date timestamp default CURRENT_TIMESTAMP, + update_date datetime not null, + compatibility char(15) not null, + description text CHARACTER SET utf8 not null, + distribution varchar(300) CHARACTER SET utf8 not null, + video_card_type varchar(100) CHARACTER SET utf8 not null, + video_card_works varchar(30) CHARACTER SET utf8 not null, + wifi_type varchar(100) CHARACTER SET utf8 not null, + wifi_works varchar(30) CHARACTER SET utf8 not null, + comm_year char(15) not null, + pci_id char(10) not null, + driver varchar(50) not null, + interface char(15) not null default 'not-specified', + id_hard INT UNSIGNED NOT NULL +)engine=innodb; + +create table hardware_users ( + id_user int(11) UNSIGNED not null, + id_hard int(11) UNSIGNED not null, + index hard_indx(id_hard), + index user_indx(id_user), + foreign key hard_fky(id_hard) references hardware (id_hard), + foreign key user_fky(id_user) references regusers (id_user), + unique (id_user,id_hard) +)engine=innodb; + + +create table talk ( + id_talk INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + created_by int not null, + creation_date timestamp default CURRENT_TIMESTAMP, + title varchar(100) CHARACTER SET utf8 not null, + message text CHARACTER SET utf8 not null, + id_hard INT UNSIGNED NOT NULL, + deleted char(4) not null default 'no' +)engine=innodb; + + +create table profile ( + id_prof INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + created_by int not null, + creation_date timestamp default CURRENT_TIMESTAMP, + update_date datetime not null, + real_name varchar(100) CHARACTER SET utf8 not null, + where_you_are varchar(100) CHARACTER SET utf8 not null, + birth_date varchar(100) CHARACTER SET utf8 not null, + fav_distro varchar(100) CHARACTER SET utf8 not null, + projects text CHARACTER SET utf8 not null , + publish_mail char(4) not null default 'no', + description text CHARACTER SET utf8 not null, + website varchar(100) CHARACTER SET utf8 not null +)engine=innodb; + + +create table issues ( + id_issue INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + created_by int not null, + creation_date timestamp default CURRENT_TIMESTAMP, + update_date datetime not null, + topic char(35) CHARACTER SET utf8 not null, + title varchar(100) CHARACTER SET utf8 not null, + message text CHARACTER SET utf8 not null, + priority char(15) CHARACTER SET utf8 not null, + status char(15) CHARACTER SET utf8 not null, + notice text CHARACTER SET utf8 not null, + deleted char(4) not null default 'no' +)engine=innodb; + + +create table deletion ( + id_del INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + created_by int not null, + creation_date timestamp default CURRENT_TIMESTAMP, + object char(15) not null, + message text CHARACTER SET utf8 not null, + id_hard INT UNSIGNED NOT NULL, + id_duplicate INT UNSIGNED NOT NULL +)engine=innodb; + +create table params ( + id_par INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + updating char(4) not null default 'no' +)engine=innodb; + +insert into params (updating) values ('no'); + + +create table news ( + id_news INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + creation_date timestamp default CURRENT_TIMESTAMP, + title varchar(150) not null, + message text CHARACTER SET utf8 not null +)engine=innodb; + + +create table boxes ( + id_box int not null auto_increment primary key, + creation_date timestamp default CURRENT_TIMESTAMP, + title varchar(150) not null, + message text CHARACTER SET utf8 not null +); + +create table messages ( + id_mes int not null auto_increment primary key, + created_by int not null, + creation_date timestamp default CURRENT_TIMESTAMP, + message text CHARACTER SET utf8 not null, + id_issue INT UNSIGNED NOT NULL, + deleted char(4) not null default 'no', + has_read char(4) not null default 'no' +); + + + +create table history ( + id_history int not null auto_increment primary key, + created_by int not null, + creation_date timestamp default CURRENT_TIMESTAMP, + type char(10) not null, + action char(10) not null, + id INT UNSIGNED NOT NULL, + message text CHARACTER SET utf8 not null +); + +insert into reggroups (name) values ('moderator'); diff --git a/tables.sql b/tables.sql new file mode 100644 index 0000000..1382eb9 --- /dev/null +++ b/tables.sql @@ -0,0 +1,616 @@ +-- h-source, a web software to build a community of people that want to share their hardware information. +-- Copyright (C) 2010 Antonio Gallo (h-source-copyright.txt) +-- +-- This file is part of h-source +-- +-- h-source is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- h-source is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with h-source. If not, see . + + +SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `accesses` +-- + +CREATE TABLE IF NOT EXISTS `accesses` ( + `id` int(12) NOT NULL AUTO_INCREMENT, + `ip` char(20) NOT NULL, + `data` char(10) NOT NULL, + `ora` char(8) NOT NULL, + `username` varchar(30) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `admingroups` +-- + +CREATE TABLE IF NOT EXISTS `admingroups` ( + `id_group` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`id_group`), + UNIQUE KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `adminsessions` +-- + +CREATE TABLE IF NOT EXISTS `adminsessions` ( + `uid` char(32) NOT NULL, + `token` char(32) NOT NULL, + `id_user` int(10) unsigned NOT NULL, + `creation_date` int(10) unsigned NOT NULL, + `user_agent` char(32) NOT NULL, + KEY `uid` (`uid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `adminusers` +-- + +CREATE TABLE IF NOT EXISTS `adminusers` ( + `id_user` int(10) unsigned NOT NULL AUTO_INCREMENT, + `username` varchar(80) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `password` char(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `last_failure` int(10) unsigned NOT NULL, + `has_confirmed` int(10) unsigned NOT NULL, + PRIMARY KEY (`id_user`), + UNIQUE KEY `username` (`username`), + KEY `username_2` (`username`,`password`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `adminusers_groups` +-- + +CREATE TABLE IF NOT EXISTS `adminusers_groups` ( + `id_user` int(11) unsigned NOT NULL, + `id_group` int(11) unsigned NOT NULL, + UNIQUE KEY `id_group` (`id_group`,`id_user`), + KEY `group_indx` (`id_group`), + KEY `user_indx` (`id_user`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `boxes` +-- + +CREATE TABLE IF NOT EXISTS `boxes` ( + `id_box` int(11) NOT NULL AUTO_INCREMENT, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `title` varchar(150) NOT NULL, + `message` text NOT NULL, + PRIMARY KEY (`id_box`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `deletion` +-- + +CREATE TABLE IF NOT EXISTS `deletion` ( + `id_del` int(10) unsigned NOT NULL AUTO_INCREMENT, + `created_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `object` char(15) NOT NULL, + `message` text NOT NULL, + `id_hard` int(10) unsigned NOT NULL, + `id_duplicate` int(10) unsigned NOT NULL, + PRIMARY KEY (`id_del`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `hardware` +-- + +CREATE TABLE IF NOT EXISTS `hardware` ( + `id_hard` int(10) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(50) NOT NULL, + `kernel` varchar(100) NOT NULL, + `vendor` varchar(50) NOT NULL, + `model` varchar(200) NOT NULL, + `created_by` int(11) NOT NULL, + `updated_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_date` datetime NOT NULL, + `compatibility` char(15) NOT NULL, + `description` text NOT NULL, + `distribution` varchar(300) NOT NULL, + `video_card_type` varchar(100) NOT NULL, + `video_card_works` varchar(30) NOT NULL, + `wifi_type` varchar(100) NOT NULL, + `wifi_works` varchar(30) NOT NULL, + `comm_year` char(15) NOT NULL, + `ask_for_del` char(4) NOT NULL DEFAULT 'no', + `deleted` char(4) NOT NULL DEFAULT 'no', + `pci_id` char(10) NOT NULL, + `subtype` char(25) NOT NULL DEFAULT 'not-specified', + `driver` varchar(50) NOT NULL, + `interface` char(15) NOT NULL DEFAULT 'not-specified', + `bios` char(20) NOT NULL DEFAULT 'not-specified', + `webcam_type` varchar(100) NOT NULL, + `webcam_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `sound_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `bluetooth_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `fingerprint_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `architecture` char(15) NOT NULL DEFAULT 'not-specified', + `other_names` text NOT NULL, + `approved` char(4) NOT NULL DEFAULT 'yes', + `cleared` char(3) NOT NULL DEFAULT 'no', + `ethernet_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `sd_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `can_free_systems_be_installed` varchar(30) NOT NULL DEFAULT 'not-specified', + `it_tracks_users` varchar(30) NOT NULL DEFAULT 'not-specified', + `prevent_wifi` char(20) NOT NULL DEFAULT 'not-specified', + PRIMARY KEY (`id_hard`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `hardware_users` +-- + +CREATE TABLE IF NOT EXISTS `hardware_users` ( + `id_user` int(11) unsigned NOT NULL, + `id_hard` int(11) unsigned NOT NULL, + UNIQUE KEY `id_user` (`id_user`,`id_hard`), + KEY `hard_indx` (`id_hard`), + KEY `user_indx` (`id_user`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `history` +-- + +CREATE TABLE IF NOT EXISTS `history` ( + `id_history` int(11) NOT NULL AUTO_INCREMENT, + `created_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `type` char(15) NOT NULL, + `action` char(15) NOT NULL, + `id` int(10) unsigned NOT NULL, + `message` text NOT NULL, + `gr` char(15) NOT NULL, + PRIMARY KEY (`id_history`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `issues` +-- + +CREATE TABLE IF NOT EXISTS `issues` ( + `id_issue` int(10) unsigned NOT NULL AUTO_INCREMENT, + `created_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_date` datetime NOT NULL, + `topic` char(35) NOT NULL, + `title` varchar(100) NOT NULL, + `message` text NOT NULL, + `priority` char(15) NOT NULL, + `status` char(15) NOT NULL, + `notice` text NOT NULL, + `deleted` char(4) NOT NULL DEFAULT 'no', + PRIMARY KEY (`id_issue`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `messages` +-- + +CREATE TABLE IF NOT EXISTS `messages` ( + `id_mes` int(11) NOT NULL AUTO_INCREMENT, + `created_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `message` text NOT NULL, + `id_issue` int(10) unsigned NOT NULL, + `deleted` char(4) NOT NULL DEFAULT 'no', + `has_read` char(4) NOT NULL DEFAULT 'no', + PRIMARY KEY (`id_mes`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `news` +-- + +CREATE TABLE IF NOT EXISTS `news` ( + `id_news` int(10) unsigned NOT NULL AUTO_INCREMENT, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `title` varchar(150) NOT NULL, + `message` text NOT NULL, + PRIMARY KEY (`id_news`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `params` +-- + +CREATE TABLE IF NOT EXISTS `params` ( + `id_par` int(10) unsigned NOT NULL AUTO_INCREMENT, + `updating` char(4) NOT NULL DEFAULT 'no', + `boxes_xml` text NOT NULL, + PRIMARY KEY (`id_par`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; + +insert into params (updating) values ('no'); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `profile` +-- + +CREATE TABLE IF NOT EXISTS `profile` ( + `id_prof` int(10) unsigned NOT NULL AUTO_INCREMENT, + `created_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_date` datetime NOT NULL, + `real_name` varchar(100) NOT NULL, + `where_you_are` varchar(100) NOT NULL, + `birth_date` varchar(100) NOT NULL, + `fav_distro` varchar(100) NOT NULL, + `projects` text NOT NULL, + `publish_mail` char(4) NOT NULL DEFAULT 'no', + `description` text NOT NULL, + `website` varchar(100) NOT NULL, + `send_notification` char(4) NOT NULL DEFAULT 'yes', + PRIMARY KEY (`id_prof`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `regaccesses` +-- + +CREATE TABLE IF NOT EXISTS `regaccesses` ( + `id` int(12) NOT NULL AUTO_INCREMENT, + `ip` char(20) NOT NULL, + `data` char(10) NOT NULL, + `ora` char(8) NOT NULL, + `username` varchar(30) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=utf8 ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `reggroups` +-- + +CREATE TABLE IF NOT EXISTS `reggroups` ( + `id_group` int(10) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + PRIMARY KEY (`id_group`), + UNIQUE KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `regsessions` +-- + +CREATE TABLE IF NOT EXISTS `regsessions` ( + `uid` char(32) NOT NULL, + `token` char(32) NOT NULL, + `id_user` int(10) unsigned NOT NULL, + `creation_date` int(10) unsigned NOT NULL, + `user_agent` char(32) NOT NULL, + KEY `uid` (`uid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `regusers` +-- + +CREATE TABLE IF NOT EXISTS `regusers` ( + `id_user` int(10) unsigned NOT NULL AUTO_INCREMENT, + `username` varchar(80) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `password` char(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `last_failure` int(10) unsigned NOT NULL, + `has_confirmed` int(10) unsigned NOT NULL, + `e_mail` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `confirmation_token` char(32) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `creation_time` int(10) unsigned NOT NULL, + `temp_field` char(32) NOT NULL, + `deleted` char(4) NOT NULL DEFAULT 'no', + `forgot_token` char(32) NOT NULL, + `forgot_time` int(10) unsigned NOT NULL, + `blocked` char(4) NOT NULL DEFAULT 'no', + PRIMARY KEY (`id_user`), + UNIQUE KEY `username` (`username`), + KEY `username_2` (`username`,`password`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 ; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `regusers_groups` +-- + +CREATE TABLE IF NOT EXISTS `regusers_groups` ( + `id_user` int(11) unsigned NOT NULL, + `id_group` int(11) unsigned NOT NULL, + UNIQUE KEY `id_group` (`id_group`,`id_user`), + KEY `group_indx` (`id_group`), + KEY `user_indx` (`id_user`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `revisions` +-- + +CREATE TABLE IF NOT EXISTS `revisions` ( + `id_rev` int(10) unsigned NOT NULL AUTO_INCREMENT, + `type` varchar(50) NOT NULL, + `kernel` varchar(100) NOT NULL, + `vendor` varchar(50) NOT NULL, + `model` varchar(200) NOT NULL, + `created_by` int(11) NOT NULL, + `updated_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_date` datetime NOT NULL, + `compatibility` char(15) NOT NULL, + `description` text NOT NULL, + `distribution` varchar(300) NOT NULL, + `video_card_type` varchar(100) NOT NULL, + `video_card_works` varchar(30) NOT NULL, + `wifi_type` varchar(100) NOT NULL, + `wifi_works` varchar(30) NOT NULL, + `comm_year` char(15) NOT NULL, + `id_hard` int(10) unsigned NOT NULL, + `pci_id` char(10) NOT NULL, + `subtype` char(25) NOT NULL DEFAULT 'not-specified', + `driver` varchar(50) NOT NULL, + `interface` char(15) NOT NULL DEFAULT 'not-specified', + `bios` char(20) NOT NULL DEFAULT 'not-specified', + `webcam_type` varchar(100) NOT NULL, + `webcam_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `sound_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `bluetooth_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `fingerprint_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `architecture` char(15) NOT NULL DEFAULT 'not-specified', + `other_names` text NOT NULL, + `approved` char(4) NOT NULL DEFAULT 'yes', + `cleared` char(3) NOT NULL DEFAULT 'no', + `ethernet_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `sd_card_works` varchar(30) NOT NULL DEFAULT 'not-specified', + `can_free_systems_be_installed` varchar(30) NOT NULL DEFAULT 'not-specified', + `it_tracks_users` varchar(30) NOT NULL DEFAULT 'not-specified', + `prevent_wifi` char(20) NOT NULL DEFAULT 'not-specified', + PRIMARY KEY (`id_rev`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `talk` +-- + +CREATE TABLE IF NOT EXISTS `talk` ( + `id_talk` int(10) unsigned NOT NULL AUTO_INCREMENT, + `created_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `title` varchar(100) NOT NULL, + `message` text NOT NULL, + `id_hard` int(10) unsigned NOT NULL, + `deleted` char(4) NOT NULL DEFAULT 'no', + PRIMARY KEY (`id_talk`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `wiki` +-- + +CREATE TABLE IF NOT EXISTS `wiki` ( + `id_wiki` int(10) unsigned NOT NULL AUTO_INCREMENT, + `created_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_date` datetime NOT NULL, + `title` varchar(200) NOT NULL, + `title_clean` varchar(200) NOT NULL, + `page` text NOT NULL, + `deleted` char(3) NOT NULL DEFAULT 'no', + `blocked` char(3) NOT NULL DEFAULT 'no', + `is_main` char(3) NOT NULL DEFAULT 'no', + PRIMARY KEY (`id_wiki`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `wiki_revisions` +-- + +CREATE TABLE IF NOT EXISTS `wiki_revisions` ( + `id_rev` int(10) unsigned NOT NULL AUTO_INCREMENT, + `created_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_date` datetime NOT NULL, + `title` varchar(200) NOT NULL, + `title_clean` varchar(200) NOT NULL, + `page` text NOT NULL, + `id_wiki` int(10) unsigned NOT NULL, + PRIMARY KEY (`id_rev`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `wiki_talk` +-- + +CREATE TABLE IF NOT EXISTS `wiki_talk` ( + `id_talk` int(10) unsigned NOT NULL AUTO_INCREMENT, + `created_by` int(11) NOT NULL, + `creation_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `title` varchar(100) NOT NULL, + `message` text NOT NULL, + `id_wiki` int(10) unsigned NOT NULL, + `deleted` char(4) NOT NULL DEFAULT 'no', + PRIMARY KEY (`id_talk`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `wiki_users` +-- + +CREATE TABLE IF NOT EXISTS `wiki_users` ( + `id_user` int(11) unsigned NOT NULL, + `id_wiki` int(11) unsigned NOT NULL, + UNIQUE KEY `id_user` (`id_user`,`id_wiki`), + KEY `wiki_indx` (`id_wiki`), + KEY `user_indx` (`id_user`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- +-- Constraints for dumped tables +-- + +-- +-- Constraints for table `adminusers_groups` +-- +ALTER TABLE `adminusers_groups` + ADD CONSTRAINT `adminusers_groups_ibfk_1` FOREIGN KEY (`id_group`) REFERENCES `admingroups` (`id_group`), + ADD CONSTRAINT `adminusers_groups_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `adminusers` (`id_user`); + +-- +-- Constraints for table `hardware_users` +-- +ALTER TABLE `hardware_users` + ADD CONSTRAINT `hardware_users_ibfk_1` FOREIGN KEY (`id_hard`) REFERENCES `hardware` (`id_hard`), + ADD CONSTRAINT `hardware_users_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `regusers` (`id_user`); + +-- +-- Constraints for table `regusers_groups` +-- +ALTER TABLE `regusers_groups` + ADD CONSTRAINT `regusers_groups_ibfk_1` FOREIGN KEY (`id_group`) REFERENCES `reggroups` (`id_group`), + ADD CONSTRAINT `regusers_groups_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `regusers` (`id_user`); + +-- +-- Constraints for table `wiki_users` +-- +ALTER TABLE `wiki_users` + ADD CONSTRAINT `wiki_users_ibfk_1` FOREIGN KEY (`id_wiki`) REFERENCES `wiki` (`id_wiki`), + ADD CONSTRAINT `wiki_users_ibfk_2` FOREIGN KEY (`id_user`) REFERENCES `regusers` (`id_user`); + + +create table vendors ( + id_vendor INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + creation_date timestamp default CURRENT_TIMESTAMP, + update_date datetime NOT NULL, + vendorid CHAR(4) not null, + clean_name varchar(200) CHARACTER SET utf8 not null, + full_name varchar(200) CHARACTER SET utf8 not null, + bus ENUM('PCI', 'USB'), + unique(bus,vendorid) +)engine=innodb; + + +create table distros ( + id_distro INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, + creation_date timestamp default CURRENT_TIMESTAMP, + clean_name varchar(200) CHARACTER SET utf8 not null, + full_name varchar(200) CHARACTER SET utf8 not null, + id_order INT UNSIGNED NOT NULL, + active tinyint(1) NOT NULL DEFAULT 1 +)engine=innodb; + +insert into distros (clean_name, full_name, id_order, active) values ('blag_90001', 'BLAG 90001', 1, 0); +insert into distros (clean_name, full_name, id_order, active) values ('blag_120000', 'BLAG 120000', 2, 0); +insert into distros (clean_name, full_name, id_order, active) values ('blag_140000', 'BLAG 1400000', 3, 0); +insert into distros (clean_name, full_name, id_order, active) values ('debian', 'Debian GNU/Linux Testing/Unstable', 4, 1); +insert into distros (clean_name, full_name, id_order, active) values ('debian_6', 'Debian GNU/Linux 6 squeeze', 5, 0); +insert into distros (clean_name, full_name, id_order, active) values ('debian_7', 'Debian GNU/Linux 7 wheezy', 6, 0); +insert into distros (clean_name, full_name, id_order, active) values ('debian_8', 'Debian GNU/Linux 8 jessie', 7, 1); +insert into distros (clean_name, full_name, id_order, active) values ('debian_9', 'Debian GNU/Linux 9 stretch', 8, 1); +insert into distros (clean_name, full_name, id_order, active) values ('dragora_1_1', 'Dragora 1.1', 9, 0); +insert into distros (clean_name, full_name, id_order, active) values ('dragora_2_0', 'Dragora 2.0 Ardi', 10, 0); +insert into distros (clean_name, full_name, id_order, active) values ('dragora_2_2', 'Dragora 2.2 Rafaela', 11, 0); +insert into distros (clean_name, full_name, id_order, active) values ('dynebolic_2_5_2', 'Dyne:bolic 2.5.2 DHORUBA', 12, 0); +insert into distros (clean_name, full_name, id_order, active) values ('dynebolic_3_0_X', 'Dyne:III 3.0.X MUNIR', 13, 0); +insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_2_3', 'gNewSense 2.3 Deltah', 14, 0); +insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_3_0', 'gNewSense 3.0 Metad (beta)', 15, 0); +insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_3_0_parkes', 'gNewSense 3.0 Parkes', 16, 0); +insert into distros (clean_name, full_name, id_order, active) values ('gnewsense_4_0', 'gNewSense 4.0 Ucclia', 17, 0); +insert into distros (clean_name, full_name, id_order, active) values ('guix_0_10', 'GuixSD 0.10', 18, 0); +insert into distros (clean_name, full_name, id_order, active) values ('guix', 'GuixSD', 19, 1); +insert into distros (clean_name, full_name, id_order, active) values ('musix_2_0', 'Musix GNU+Linux 2.0 R0', 20, 0); +insert into distros (clean_name, full_name, id_order, active) values ('musix_3_0_1', 'Musix GNU+Linux 3.0.1', 21, 0); +insert into distros (clean_name, full_name, id_order, active) values ('parabola', 'Parabola GNU/Linux', 22, 1); +insert into distros (clean_name, full_name, id_order, active) values ('pureos_8_0', 'PureOS 8.0 Prometheus', 23, 1); +insert into distros (clean_name, full_name, id_order, active) values ('trisquel_3_5', 'Trisquel 3.5 Awen', 24, 0); +insert into distros (clean_name, full_name, id_order, active) values ('trisquel_4_0', 'Trisquel 4.0 Taranis', 25, 0); +insert into distros (clean_name, full_name, id_order, active) values ('trisquel_4_5', 'Trisquel 4.5 Slaine', 26, 0); +insert into distros (clean_name, full_name, id_order, active) values ('trisquel_5_0', 'Trisquel 5.0 Dagda', 27, 0); +insert into distros (clean_name, full_name, id_order, active) values ('trisquel_5_5', 'Trisquel 5.5 Brigantia', 28, 0); +insert into distros (clean_name, full_name, id_order, active) values ('trisquel_6_0', 'Trisquel 6.0 Toutatis', 29, 0); +insert into distros (clean_name, full_name, id_order, active) values ('trisquel_7_0', 'Trisquel 7.0 Belenos', 30, 1); +insert into distros (clean_name, full_name, id_order, active) values ('trisquel_8_0', 'Trisquel 8.0 Flidas', 31, 1); +insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2009', 'UTUTO XS 2009', 32, 0); +insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2010', 'UTUTO XS 2010', 33, 0); +insert into distros (clean_name, full_name, id_order, active) values ('ututo_xs_2012_04', 'UTUTO XS 2012.04', 34, 0); +insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_8', 'VENENUX 0.8', 35, 0); +insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_8_2', 'VENENUX-EC 0.8.2', 36, 0); +insert into distros (clean_name, full_name, id_order, active) values ('venenux_0_9', 'VENENUX 0.9', 37, 0); +insert into distros (clean_name, full_name, id_order, active) values ('debian_testing', 'Debian GNU/Linux Testing', 38, 0); +insert into distros (clean_name, full_name, id_order, active) values ('debian_unstable', 'Debian GNU/Linux Unstable', 39, 0); + +insert into reggroups (name) values ('manager'); +insert into reggroups (name) values ('admin'); +insert into reggroups (name) values ('moderator'); + +insert into regusers (username,password) values ('admin',sha1('admin')); + +insert into regusers_groups (id_user, id_group) values (1,1); +insert into regusers_groups (id_user, id_group) values (1,2); +insert into regusers_groups (id_user, id_group) values (1,3); -- cgit v1.2.3